edusoho二次开发增加手动发放证书功能 实现后期补发证书 php twig代码披露

edusoho二次开发增加手动发放证书功能 实现后期补发证书 php twig代码披露

1、增加了数据库

ALTER TABLE `course_member` ADD `zhengshuimgData` DATE NULL COMMENT '发证日期' AFTER `codesn`;

修改了的文件:
/src/AppBundle/Controller/Course/StudentManageController.php
/app/Resources/views/course-manage/student/tr-v2.html.twig
/src/AppBundle/Resources/config/routing.yml
/app/Resources/views/course-manage/student/send-zhengshuimg-modal.html.twig
/web/static-dist/app/js/course-manage/student-send-zhengshuimg/index.js
/src/AppBundle/Controller/My/CourseController.php
/src/Biz/Course/Service/Impl/MemberServiceImpl.php
/src/Biz/Course/Dao/Impl/CourseMemberDaoImpl.php
/src/AppBundle/Controller/TaskController.php

2、在对应的课程中 找到对应的学员进行手动给他们发放证书,以及调整发放证书的时间日期

在这里插入图片描述

在这里插入图片描述

3、在用户的个人中心里面可以看到生成好的证书界面:

在这里插入图片描述

4、生成证书的函数代码:

public function myzhengshuAction(Request $request)
{
    $currentUser = $this->getUser();
    // $profile2 = $this->getUserService()->getUserProfile($currentUser['id']);   
    $members = $this->getCourseMemberService()->searchMembers(array('userId' => $currentUser['id'], 'role' => 'student'), array('createdTime' => 'desc'), 0, PHP_INT_MAX);
    
    $members = ArrayToolkit::index($members, 'courseId');

    
    // 获取已完成未生成证书列表
    $list = $this->getCourseMemberService()->getFinishedNotZhengshuimg($limit=50, $currentUser['id']);
    if($list){
        $url = 'http://'.$_SERVER['HTTP_HOST'];
        require dirname(__DIR__) . '/phpqrcode.php';
        foreach ($list as $key => $item){
            try{
                $nowTime = $item['finishedtime']; //isset($item['finishedTime']) && $item['finishedTime'] ? strtotime($item['finishedTime']) : time();

                $y = date("Y", $nowTime);
                $m = date("m", $nowTime);
                $d = date("d", $nowTime);
                $im = @imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].$item['zhengshu']);   
                $font = $_SERVER['DOCUMENT_ROOT']."/assets/fonts/font.ttf"; 
                $aaab = "/files/zhengshu/".$item['user_id']."/";
                $aaab .= $item['user_id'].'-'.$item['defaultCourseId'].$y.$m.$d.'.png';
                $datas = 'http://'.$_SERVER["HTTP_HOST"].$aaab; 
                $errorCorrectionLevel = 'L';  
                $matrixPointSize = 4; 
                $QR = 'qrcode.png';//已经生成的原始二维码图
                \QRcode::png($datas,$QR,$errorCorrectionLevel, $matrixPointSize, 2);
                $QR2 = imagecreatefromstring(file_get_contents($QR));
                
                $black = imagecolorallocate($im, 0, 0, 0);
                $username = $item['nickname']; //要写到图上的文字
                $truename = $item['truename']; //要写到图上的中文名
                $idcard = $item['idcard']; //要写到图上的身份证
                
                $classname = $item['title'];
                $type = "网络培训";
                $bullshit = "合格";
                
                $code = "ZJH330401".$y.$m.$d.($item['id']<1000?sprintf('%04s', $item['id']):$item['id']);
                imagettftext($im, 16, 0, 175, 162, $black, $font, $code);
                imagettftext($im, 16, 0, 210, 290, $black, $font, $truename);
                imagettftext($im, 16, 0, 435, 290, $black, $font, $idcard);
                imagettftext($im, 16, 0, 800, 290, $black, $font, $y);
                imagettftext($im, 16, 0, 150, 350, $black, $font, $m);
                imagettftext($im, 16, 0, 650, 350, $black, $font, $classname);
                imagettftext($im, 16, 0, 380, 400, $black, $font, $type);
                imagettftext($im, 16, 0, 565, 400, $black, $font, $bullshit);
                imagettftext($im, 16, 0, 815, 400, $black, $font, "");
                
                imagettftext($im, 16, 0, 607, 570, $black, $font, $y);
                imagettftext($im, 16, 0, 690, 570, $black, $font, $m);
                imagettftext($im, 16, 0, 737, 570, $black, $font, $d);
                
                $path=$_SERVER['DOCUMENT_ROOT']."/files/zhengshu/".$item['user_id']."/";
                if (!is_dir($path)){
                    $res=mkdir($path,0777,true);
                }
                
                
                $saveurl = "/files/zhengshu/".$item['user_id']."/";
                $zsimg = $path.$item['user_id'].'-'.$item['defaultCourseId'].$y.$m.$d.'.png';
                $sd22 = imagepng($QR2,$zsimg);
                
                $sdddddd = imagepng($im,$path.$item['user_id'].'-'.$item['defaultCourseId'].$y.$m.$d.'.png');
                imagecopymerge($im, $QR2,130,500,0,0, imagesx($QR2), imagesy($QR2), 100);
                
                imagepng($im,$path.$item['user_id'].'-'.$item['defaultCourseId'].$y.$m.$d.'.png');
                $saveurl .= $item['user_id'].'-'.$item['defaultCourseId'].$y.$m.$d.'.png';
                
                $this->getCourseMemberService()->updateMembers(array('id'=>$item['id']),array('zhengshuimg'=>$saveurl, 'zhengshuimgData'=>date('Y-m-d', $nowTime),'autoname'=>$classname,'codesn'=>$code));
            }catch(\Exception $e){
                var_dump($e->getMessage());
            }
        }
    }
    

    $imgs = $this->getCourseMemberService()->selectZhengshuById2($currentUser['id'],false);
    return $this->render(
        'my/learning/course/zhengshu.html.twig',
        array(
            'imgs' => $imgs,
            'members' => $members,
        )
    );
}

5、前端页面代码twig

{% extends 'bootstrap-modal-layout.html.twig' %}

{% block title %}
  发证书
{% endblock %}

{% do script(['libs/jquery-validation.js','app/js/course-manage/student-send-zhengshuimg/index.js?v=0.1.15'])%}
{% do script(['libs/bootstrap-datetimepicker.js', 'libs/perfect-scrollbar.js', 'app/js/course-manage/student-send-zhengshuimg/index2.js?v=0.1.15']) %}
{% set modalSize = 'large' %}
{% block body %}
<form id="student-send-zhengshuimg-form" method="post" action="{{ path('course_set_manage_course_students_send_zhengshuimg', {courseSetId: course.courseSetId, courseId:course.id, userId:user.id}) }}" data-user="{{ default.user_name|default('site.default.student'|trans) }}">
  <div class="form-group">
    <div class="controls">
        请选择发证日期
    	<input type="text" class="form-control course-mangae-info__input mlm" id="buyExpiryTime" name="buyExpiryTime" value="">
    </div>
  </div>
  <input type="hidden" name="_csrf_token" value="{{ csrf_token('site') }}">
</form>
{% endblock %}
{% block footer %}
  <button type="button" class="btn btn-primary pull-right js-student-send-zhengshuimg-save-btn">{{'form.btn.save'|trans}}</button>
  <button type="button" class="btn btn-link pull-right" data-dismiss="modal">{{'form.btn.cancel'|trans}}</button>
{% endblock %}

6、路由routing.yml

course_set_manage_course_students_send_zhengshuimg:
  path:  /course_set/{courseSetId}/manage/course/{courseId}/student/{userId}/send_zhengshuimg
  defaults: { _controller: AppBundle:Course/StudentManage:sendZhengshuimg }

course_task_create_zhengshuimg:
  path:  /course/task/create_zhengshuimg
  defaults: { _controller: AppBundle:Task:createZhengshuimg }

my_zhengshu_member_center:
    path:  /my/courses/myzhengshu
    defaults: { _controller: AppBundle:My/Course:myzhengshu }

7、部分js代码

webpackJsonp(
["app/js/course-manage/student-send-zhengshuimg/index"],
{
	"4e7105ae891c998fcdfl":function(e,a,r){
		"use strict";
		var s=$("#student-send-zhengshuimg-form").parents(".modal"),
		t=$("#student-send-zhengshuimg-form"),
		n=t.validate({
			rules:{
				remark:{
					required:!1,
					maxlength:80
				}
			},
			messages:{
				remark:{
					maxlength:Translator.trans("course_manage.student_remark_validate_error_hint")
				}
			}
		});
		$(".js-student-send-zhengshuimg-save-btn").click(function(e){
			n.form()&&(
				$(e.currentTarget).button("loadding"),
				$.post(t.attr("action"),t.serialize(),function(e){
					s.modal("hide");
					var a=t.data("user");
					console.log(11111,e)
					if(e.success){
					    cd.message({
    						type:"success",
    						message:e.message||'发证成功',
    						delay:1e3
    					}).on("close",function(){
    						window.location.reload()
    					})
					}else{
					    cd.message({
    						type:"danger",
    						message:e.message||'发证失败'
    					})
					}
				}, 'json').error(function(){
					var e=t.data("user");
					cd.message({
						type:"danger",
						message:Translator.trans("course_manage.student_remark_failed_hint",{username:e})
					})
				})
			)
		})
	}
},["4e7105ae891c998fcdfl"]);

8、定时任务执行命令:/course/task/create_zhengshuimg

9、二次开发、技术交流的可以 扫一扫

在这里插入图片描述

  • 43
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值