You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
9.7 KiB
255 lines
9.7 KiB
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* 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 | <manieer@gmail.com>
|
|
* @author Manieer Chhettri | Marie Curie, UK | <manieer@gmail.com> | 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 '<div id="block_verify_certificate"><br>';
|
|
echo '<p class="notVerified">' . get_string('certificate', 'block_verify_certificate')
|
|
. ' "' . $id . '" ' . '</p>';
|
|
echo '<div class="wrapper-box"><br>';
|
|
echo '<div class="left"><br>' .get_string('notfound', 'block_verify_certificate').'</div>';
|
|
echo '<div class="right"><img src="pix/certnotverified.png" border="0" align="center"></div>';
|
|
echo '</div></div>';
|
|
echo $OUTPUT->box_end();
|
|
} else {
|
|
echo $OUTPUT->box_start('generalbox boxaligncenter');
|
|
echo "<a title=\""; print_string('printerfriendly', 'certificate');
|
|
echo "\" href=\"#\" onclick=\"window.print ()\"><div class=\"printicon\">";
|
|
echo "<img src=\"pix/printicon.png\" height=\"40\" width=\"40\" border=\"0\" align=\"right\"></img></a></div>";
|
|
|
|
// Print Section.
|
|
foreach ($certificates as $certdata) {
|
|
echo '<p class = "verified">' . get_string('certificate', 'block_verify_certificate')
|
|
. ' "' . $certdata->code . '" ' . '</font></b></p>';
|
|
echo '<table width ="100%" cellpadding="5px"><tr><td>';
|
|
echo '<div class="userprofilebox clearfix"><div class="profilepicture">';
|
|
echo $OUTPUT->user_picture($certdata, array('size' => 150));
|
|
echo '</div>';
|
|
echo '</td><td>';
|
|
echo '<p><b>' . get_string('to', 'block_verify_certificate') . ': </b>' . fullname($certdata) . '<br />';
|
|
// 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 '<p><b>' . "CPF" . ': </b>' . $cpf . '<br /></p>';
|
|
}
|
|
|
|
// Exibe curso
|
|
$course = $DB->get_record('course', array('id' => $certdata->course));
|
|
if ($course) {
|
|
$nome_acao = certificate_obtemCampoCustomizadoCurso($course->id, 'nome_acao_certificado');
|
|
if(empty(trim($nome_acao))) {
|
|
$nome_acao = mb_strtoupper($course->fullname, 'UTF-8');
|
|
}
|
|
echo '<p><b>' . get_string('course', 'block_verify_certificate') . ': </b>' . $nome_acao . '<br />';
|
|
}
|
|
|
|
// 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
|
|
|
|
$periodo_certificado = certificate_obtemCampoCustomizadoCurso($course->id, 'periodo_certificado');
|
|
if(empty(trim($periodo_certificado))) {
|
|
$periodo_certificado = 'Matrícula até conclusão';
|
|
}
|
|
|
|
$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-' || $periodo_certificado == 'Matrícula até conclusão') {
|
|
$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-' || $periodo_certificado == 'Duração do curso') {
|
|
$type = 'CT';
|
|
$start_date = $course->startdate;
|
|
$end_date = $course->enddate;
|
|
} else {
|
|
$type = '';
|
|
if($periodo_certificado == 'Sem período') {
|
|
$start_date = null;
|
|
$end_date = $course->enddate;
|
|
} else {
|
|
$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 "<p><b>PERÍODO: </b>" . userdate($start_date, $dateformat) . " a " . userdate($end_date, $dateformat) . '<br /></p>';
|
|
} elseif ($end_date) {
|
|
echo "<p><b>DATA: </b>" . userdate($end_date, $dateformat) . '<br /></p>';
|
|
} else {
|
|
echo "<p><b>DATA: </b>" . userdate($certdata->citimecreated, $dateformat) . '<br /></p>';
|
|
}
|
|
|
|
if ($course && $certdata->printgrade > 0) {
|
|
echo '<p><b>' . get_string('grade', 'block_verify_certificate') . ': </b>' . $grade . '<br /></p>';
|
|
}
|
|
if ($course->summary) {
|
|
echo "<br /><p>$course->summary</p>";
|
|
}
|
|
echo '</td><td>';
|
|
echo "<img src=\"pix/certverified.png\" border=\"0\" align=\"center\"></img>";
|
|
echo '</td></tr></table></br>';
|
|
echo '<p><b>' . get_string('check', 'block_verify_certificate') . '</b></p>';
|
|
}
|
|
echo $OUTPUT->box_end();
|
|
}
|
|
echo $OUTPUT->footer();
|
|
|