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

<?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();