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.

167 lines
4.8 KiB

<?php
/**
* escola_modelo.php
*
* Implementa procedimentos para sincronização de informações de uma instalação
* da Escola Modelo com o servidor da EVL
*
**/
namespace block_escola_modelo\task;
global $CFG;
require_once($CFG->dirroot.'/config.php');
require_once($CFG->dirroot.'/blocks/escola_modelo/classes/util.php');
class escola_modelo extends \core\task\scheduled_task {
public function get_name() {
return get_string('escola_modelo', 'block_escola_modelo');
}
// Ponto de entrada da task
public function execute() {
global $DB;
// Momento do início do procedimento, para fins de gravação em
// tabelas de controle
$syncStartTime = $DB->get_record_sql('SELECT extract(epoch from now())::int8');
$this->sincronizaDadosEscola($syncStartTime);
$this->sincronizaCursos($syncStartTime);
//$this->sincronizaMatriculas($syncStartTime);
$this->sincronizaCertificados($syncStartTime);
}
/**
* Realiza procedimento de sincronização nos cursos criados e/ou atualizados
* que ainda não foram atualizados na EVL
*/
public function sincronizaDadosEscola($syncStartTime) {
global $DB, $CFG;
mtrace("Iniciando sincronização de dados da escola");
// Obtem todos os cursos pendentes de sincronização
$sqlDadosEscola = '
SELECT ?::varchar as sigla_escola,
?::varchar as url_escola,
c.fullname as nome_escola,
(? || \'/pluginfile.php/1/core_admin/logocompact/0x150/-1\' || logo.value)::varchar as url_logo_escola
FROM {course} c
JOIN (
SELECT value
FROM {config_plugins}
WHERE plugin = \'core_admin\'
AND name = \'logocompact\'
) logo
ON 1 = 1
WHERE c.id = 1
';
$dadosEscola = $DB->get_record_sql($sqlDadosEscola,array($CFG->emSigla, $CFG->emURL, $CFG->emURL));
// Atualiza cada um dos cursos pendentes
atualizaDadosEscola($dadosEscola);
mtrace("Fim da sincronização de dados da escola");
}
/**
* Realiza procedimento de sincronização nos cursos criados e/ou atualizados
* que ainda não foram atualizados na EVL
*/
public function sincronizaCursos($syncStartTime) {
global $DB;
mtrace("Iniciando sincronização de cursos");
// Obtem todos os cursos pendentes de sincronização
$sqlCourses = '
SELECT c.*
FROM {course} c
LEFT JOIN {ilb_sync_course} sc
ON c.id = sc.course_id
WHERE (sc.course_id is null
OR c.timemodified > sc.time_sync)
';
$listaCursos = $DB->get_records_sql($sqlCourses,array());
// Atualiza cada um dos cursos pendentes
foreach($listaCursos as $curso) {
atualizaCursoEVL($curso);
}
mtrace("Fim da sincronização de cursos");
}
// /**
// * Realiza procedimento de sincronização de matrículas de usuários a cursos,
// * as quais ainda não foram atualizadas na EVL
// */
// public function sincronizaMatriculas($syncStartTime) {
// global $DB;
// // Obtem todas as matrículas pendentes de sincronização
// $sqlEnrolments = '
// SELECT ue.*
// FROM mdl_user_enrolments ue
// LEFT JOIN mdl_ilb_sync_user_enrolments sue
// ON ue.id = sue.user_enrolment_id
// WHERE sue.user_enrolment_id is null
// OR ue.timemodified > sue.time_sync
// ';
// $listaMatriculas = $DB->get_records_sql($sqlEnrolments,array());
// // Atualiza cada um dos cursos pendentes
// foreach($listaMatriculas as $matricula) {
// atualizaMatriculaEVL($matricula);
// }
// }
/**
* Realiza procedimento de sincronização de certificados ainda não
* atualizados na EVL
*/
public function sincronizaCertificados($syncStartTime) {
global $DB;
mtrace("Iniciando sincronização de certificados");
// Identifica eventuais cursos não sincronizados
$sqlCertificates = '
SELECT c.id as courseid, u.username, ci.timecreated, gg.finalgrade, ci.code, cert.id
FROM (
SELECT ci.timecreated, sc.time_sync, ci.code, ci.certificateid, ci.userid
FROM {certificate_issues} ci
LEFT JOIN {ilb_sync_certificate} sc
ON ci.id = sc.certificate_id
WHERE sc.time_sync is null
OR ci.timecreated > sc.time_sync
) ci
JOIN mdl_certificate cert
ON cert.id = ci.certificateid
JOIN mdl_course c
ON c.id = cert.course
JOIN mdl_user u
ON u.id = ci.userid
LEFT JOIN mdl_grade_items gi
ON gi.courseid = c.id
AND gi.itemtype = \'course\'
LEFT JOIN mdl_grade_grades gg
ON gg.itemid = gi.id
AND gg.userid = ci.userid
';
$certificados = $DB->get_records_sql($sqlCertificates,array());
// Processa cada certificado, gerando chamada ao web service
foreach ($certificados as $certificado) {
atualizaCertificadoEVL($certificado);
}
mtrace("Fim da sincronização de certificados");
}
}
?>