. /** * Version details * * Verify certificate block * -------------------------- * Verify certificate based on the unique codes displayed on issued certificates. * Full details of the issued certificate is displayed including profile picture. * Mostly cosmetic changes to the original codes from Jean-Michel Védrine. * Original Autor & Copyright - Jean-Michel Védrine | 2014 * * @copyright 2015 onwards Manieer Chhettri | Marie Curie, UK | * @author Manieer Chhettri | Marie Curie, UK | | 2015 * @package block_verify_certificate * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once("../../config.php"); require_once($CFG->dirroot . '/mod/certificate/lib.php'); require_once($CFG->dirroot.'/mod/certificate/locallib.php'); require_once("$CFG->dirroot/completion/completion_completion.php"); require_once("$CFG->dirroot/enrol/locallib.php"); $id = required_param('certnumber', PARAM_ALPHANUM); // Certificate code to verify. $PAGE->set_pagelayout('standard'); $strverify = get_string('verifycertificate', 'block_verify_certificate'); $PAGE->set_url('/blocks/verify_certificate/index.php', array('certnumber' => $id)); $context = context_system::instance(); $PAGE->set_context($context); // Print the header. $PAGE->navbar->add($strverify); $PAGE->set_title($strverify); $PAGE->set_heading($strverify); $PAGE->requires->css('/blocks/verify_certificate/printstyle.css'); $PAGE->requires->css('/blocks/verify_certificate/styles.css'); echo $OUTPUT->header(); $ufields = user_picture::fields('u'); $sql = "SELECT ci.timecreated AS citimecreated, ci.code, ci.certificateid, ci.userid, $ufields, c.*, u.id AS id, u.* FROM {certificate_issues} ci INNER JOIN {user} u ON u.id = ci.userid INNER JOIN {certificate} c ON c.id = ci.certificateid WHERE ci.code = ?"; $certificates = $DB->get_records_sql($sql, array($id)); function getFormattedCPFFromUsername($userid) { global $DB; $user = $DB->get_record("user", array("id" => $userid)); return mask($user->username, '###.###.###-##'); } function mask($val, $mask) { if(validatecpf($val)) { $maskared = ''; $k = 0; for($i = 0; $i<=strlen($mask)-1; $i++){ if($mask[$i] == '#'){ if(isset($val[$k])) $maskared .= $val[$k++]; } else { if(isset($mask[$i])) $maskared .= $mask[$i]; } } return $maskared; } else { return ""; } } function validatecpf($cpf) { // Verifica se um numero foi informado. if (is_null($cpf)) { return false; } if (!is_numeric($cpf)) { return false; } //$cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT); // Verifica se o numero de digitos informados eh igual a 11. if (strlen($cpf) != 11) { return false; } else if ($cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999') { return false; } else { // Calcula os digitos verificadores para verificar se o CPF eh valido. $cpf = preg_replace('/[^0-9]/', '', (string) $cpf); // Valida tamanho if (strlen($cpf) != 11) return false; // Calcula e confere primeiro dígito verificador for ($i = 0, $j = 10, $soma = 0; $i < 9; $i++, $j--) $soma += $cpf{$i} * $j; $resto = $soma % 11; if ($cpf{9} != ($resto < 2 ? 0 : 11 - $resto)) return false; // Calcula e confere segundo dígito verificador for ($i = 0, $j = 11, $soma = 0; $i < 10; $i++, $j--) $soma += $cpf{$i} * $j; $resto = $soma % 11; $resultado = $cpf{10} == ($resto < 2 ? 0 : 11 - $resto); return $resultado; } } if (! $certificates) { echo $OUTPUT->box_start('generalbox boxaligncenter'); echo '

'; echo '

' . get_string('certificate', 'block_verify_certificate') . ' "' . $id . '" ' . '

'; echo '

'; echo '

' .get_string('notfound', 'block_verify_certificate').'
'; echo '
'; echo '
'; echo $OUTPUT->box_end(); } else { echo $OUTPUT->box_start('generalbox boxaligncenter'); echo ""; // Print Section. foreach ($certificates as $certdata) { echo '

' . get_string('certificate', 'block_verify_certificate') . ' "' . $certdata->code . '" ' . '

'; echo '
'; echo '
'; echo $OUTPUT->user_picture($certdata, array('size' => 150)); echo '
'; echo '
'; echo '

' . get_string('to', 'block_verify_certificate') . ': ' . fullname($certdata) . '
'; // Date format. $dateformat = get_string('strftimedate', 'langconfig'); $certdata->printdate = 1; $certrecord = new stdClass(); $certrecord->timecreated = $certdata->citimecreated; $certrecord->code = $certdata->code; $certrecord->userid = $certdata->userid; $certrecord->id = $certdata->id; $userid = $certrecord->userid; // Exibe CPF, se username for CPF #require_once("$CFG->dirroot/user/profile/lib.php"); #require_once("$CFG->dirroot/user/profile/field/cpf/field.class.php"); #$formfield = new profile_field_cpf('8', $certdata->userid); #$cpf = $formfield->display_data(); $cpf = getFormattedCPFFromUsername($userid); if ($cpf) { echo '

' . "CPF" . ': ' . $cpf . '

'; } // Exibe curso $course = $DB->get_record('course', array('id' => $certdata->course)); if ($course) { echo '

' . get_string('course', 'block_verify_certificate') . ': ' . $course->fullname . '
'; } // Curso sem tutoria: início é matrícula, final é timeend de course_completions // Curso com tutoria com turma: início e fim vem da matrícula da turma // Curso com tutoria sem turma: início e fim vem da configuração do curso // Demais cursos: início e fim vem da configuração do curso $enrol_manager = new course_enrolment_manager($PAGE, $course); $user_enrol = end($enrol_manager->get_user_enrolments($userid)); $enrol = $DB->get_record('enrol', array('id' => $user_enrol->enrolid)); if(substr( $course->idnumber, 0, 3 ) == 'ST-' ) { $cc = new completion_completion(array('userid'=>$certrecord->userid, 'course'=>$certdata->course)); $start_date = $user_enrol->timestart; $end_date = $cc->timecompleted; $type = 'ST'; } elseif(substr( $course->idnumber, 0, 3 ) == 'CT-') { /*$group = $DB->get_record('groups', array('courseid' => $course->id)); if( $group ) { $start_date = $enrol->enrolstartdate; $end_date = $enrol->enrolenddate; } else { $start_date = $course->startdate; $end_date = $course->enddate; }*/ $type = 'CT'; $start_date = $course->startdate; $end_date = $course->enddate; } else { $type = ''; $start_date = $course->startdate; $end_date = $course->enddate; } // Retrieving grade and date for each certificate. $grade = certificate_get_grade($certdata, $course, $userid, $valueonly = true); //$date = $start_date; //$certrecord->timecreated = $certdata->citimecreated; if (($type = 'ST' || $type = 'CT') && $start_date && $end_date) { echo "

PERÍODO: " . userdate($start_date, $dateformat) . " a " . userdate($end_date, $dateformat) . '

'; } else { echo "

DATA: " . userdate($certdata->citimecreated, $dateformat) . '

'; } if ($course && $certdata->printgrade > 0) { echo '

' . get_string('grade', 'block_verify_certificate') . ': ' . $grade . '

'; } if ($course->summary) { echo "

$course->summary

"; } echo '
'; echo ""; echo '

'; echo '

' . get_string('check', 'block_verify_certificate') . '

'; } echo $OUTPUT->box_end(); } echo $OUTPUT->footer();