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.
317 lines
9.2 KiB
317 lines
9.2 KiB
<?php
|
|
/**
|
|
* Funções utilitárias para plugin da Escola Modelo
|
|
*/
|
|
|
|
require_once($CFG->dirroot.'/config.php');
|
|
include('httpful.phar');
|
|
|
|
/**
|
|
* Verifica se um curso é público, conforme critérios da EVL.
|
|
* Pelas regras estabelecidas, um curso é público se a categoria raiz em que ele
|
|
* estiver for uma categoria pública.
|
|
*/
|
|
function cursoPublico($course) {
|
|
global $DB;
|
|
|
|
$category = $DB->get_record('course_categories', array('id'=>$course->category));
|
|
$path = explode('/',$category->path);
|
|
$root_category_id = $path[1];
|
|
$root_category = $DB->get_record('course_categories',array('id'=>$root_category_id));
|
|
|
|
return categoriaPublica($root_category);
|
|
}
|
|
|
|
/**
|
|
* Verifica se uma categoria é pública, conforme critérios da EVL
|
|
* Pelas regras estabelecidas, uma categoria é pública se possuir idnumber iniciado por PUB_
|
|
*/
|
|
function categoriaPublica($category) {
|
|
$idnumber=$category->idnumber;
|
|
$isPublic=(strcasecmp(substr($idnumber,0,4), 'PUB_') == 0);
|
|
|
|
return $isPublic;
|
|
}
|
|
|
|
/**
|
|
* Registra um determinado curso na EVL, com o status informado
|
|
*
|
|
* Formato do JSON:
|
|
* {
|
|
* "school": "Iniciais da escola",
|
|
* "course":
|
|
* {
|
|
* "name": "nome do curso",
|
|
* "url": "url do curso",
|
|
* "description": "descrição do curso",
|
|
* "logo":"endereco da logo",
|
|
* "ead_id": "id do curso no moodle",
|
|
* "visible": Visibilidade do curso(Público ou privado, de acordo com a categoria do moodle),
|
|
* "conteudista": "",
|
|
* "certificador": "",
|
|
* "carga_horaria": ""
|
|
* },
|
|
* "key": "k4B5YcbKa619ohu3wxk2xXbmtoxFuQqrwcKEOTAnZi7iy4tl9z"
|
|
* }
|
|
*/
|
|
function atualizaCursoEVL($curso, $visivel = null) {
|
|
global $DB;
|
|
|
|
mtrace("curso " . $curso->id);
|
|
|
|
// Detecta status, caso ele não tenha sido especificado
|
|
$visivel = $visivel ?? cursoPublico($curso);
|
|
|
|
// Hack: enquanto não há campos personalizados no curso, a carga horária
|
|
// precisa ser obtida a partir do idnumber
|
|
$idnumber = $curso->idnumber;
|
|
$ch = 0;
|
|
if(preg_match("/\_CH([0-9]+)/", $idnumber, $x)) {
|
|
$ch = $x[1];
|
|
}
|
|
|
|
$school = $DB->get_record('course',array('id'=>'1'));
|
|
|
|
$uri = 'https://escolamodelows.interlegis.leg.br/api/v1/cursos/registrar/';
|
|
|
|
$obj = new StdClass();
|
|
|
|
$camposCurso = array(
|
|
"name" => $curso->fullname,
|
|
"url" => "",
|
|
"description" => $curso->summary,
|
|
"logo" => "",
|
|
"ead_id" => $curso->id,
|
|
"visible" => $visivel,
|
|
"conteudista" => "", //$school->shortname,
|
|
"certificador" => $school->shortname,
|
|
"carga_horaria" => $ch
|
|
);
|
|
|
|
// Monta o JSON que será enviado ao Web Service
|
|
$obj->school = $school->shortname; // sigla da escola
|
|
$obj->course = $camposCurso;
|
|
$obj->key = "k4B5YcbKa619ohu3wxk2xXbmtoxFuQqrwcKEOTAnZi7iy4tl9z";
|
|
$json = json_encode($obj);
|
|
|
|
$response = \Httpful\Request::post($uri)
|
|
->sendsJson()
|
|
->body($json)
|
|
->send();
|
|
|
|
// Se o registro foi criado no servidor, registra em tabela de controle
|
|
if(!$response->hasErrors()) {
|
|
registraSincronizacaoCurso($curso);
|
|
} else {
|
|
mtrace("Erro sincronizando ". $curso->fullname . ": " . $response->code . " " );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Insere ou atualiza registro da última sincronização de determinado curso
|
|
*/
|
|
function registraSincronizacaoCurso($curso) {
|
|
global $DB;
|
|
|
|
$qry = '
|
|
INSERT INTO {ilb_sync_course} (course_id, time_sync)
|
|
VALUES (?,?)
|
|
ON CONFLICT (course_id) DO UPDATE
|
|
SET time_sync = ?';
|
|
$params = array($curso->id, $curso->timemodified, $curso->timemodified);
|
|
|
|
return $DB->execute($qry, $params);
|
|
}
|
|
|
|
/**
|
|
* Identifica e atualiza registro de todos os cursos da categoria especificada
|
|
* (excluindo subcategorias)
|
|
*/
|
|
function atualizaCategoriaEVL($categoria) {
|
|
global $DB;
|
|
|
|
$visivel = categoriaPublica($categoria);
|
|
|
|
$cursos = $DB->get_records('course', array('category'=>$categoria->id));
|
|
|
|
foreach ($cursos as $curso) {
|
|
atualizaCursoEVL($curso, $visivel);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Matrículas
|
|
//
|
|
|
|
// Retirado pois supõe-se que matrículas serão feitas apenas na EVL
|
|
// function atualizaMatriculaEVL($matricula) {
|
|
// global $DB;
|
|
|
|
// // Detecta status, caso ele não tenha sido especificado
|
|
// $visivel = true; //$visivel ?? cursoPublico($curso);
|
|
|
|
// // Hack: enquanto não há campos personalizados no curso, a carga horária
|
|
// // precisa ser obtida a partir do idnumber
|
|
// $idnumber = $curso->idnumber;
|
|
// $ch = 0;
|
|
// if(preg_match("/\_CH([0-9]+)/", $idnumber, $x)) {
|
|
// $ch = $x[1];
|
|
// }
|
|
|
|
// $school = $DB->get_record('course',array('id'=>'1'));
|
|
|
|
// $uri = 'https://escolamodelows.interlegis.leg.br/api/v1/cursos/registrar/';
|
|
|
|
// $obj = new StdClass();
|
|
|
|
// $camposCurso = array(
|
|
// "name" => $curso->fullname,
|
|
// "url" => "",
|
|
// "description" => $curso->summary,
|
|
// "logo" => "",
|
|
// "ead_id" => $curso->id,
|
|
// "visible" => $visivel,
|
|
// "conteudista" => "", //$school->shortname,
|
|
// "certificador" => $school->shortname,
|
|
// "carga_horaria" => $ch
|
|
// );
|
|
|
|
// // Monta o JSON que será enviado ao Web Service
|
|
// $obj->school = $school->shortname; // sigla da escola
|
|
// $obj->course = $camposCurso;
|
|
// $obj->key = "k4B5YcbKa619ohu3wxk2xXbmtoxFuQqrwcKEOTAnZi7iy4tl9z";
|
|
|
|
// $json = json_encode($obj);
|
|
|
|
// $response = \Httpful\Request::post($uri)
|
|
// ->sendsJson()
|
|
// ->body($json)
|
|
// ->send();
|
|
|
|
// // Se o registro foi criado no servidor, registra em tabela de controle
|
|
// if(!$response->hasErrors()) {
|
|
// registraSincronizacaoMatriculaUsuario($matricula);
|
|
// } else {
|
|
// mtrace("Erro sincronizando ". $matricula->fullname . ": " . $response->code . " " );
|
|
// }
|
|
// }
|
|
|
|
// /**
|
|
// * Insere ou atualiza registro da última sincronização de determinada matricula
|
|
// */
|
|
// function registraSincronizacaoMatriculaUsuario($userEnrolment) {
|
|
// global $DB;
|
|
|
|
// $qry = '
|
|
// INSERT INTO {ilb_sync_user_enrolments} (user_enrolment_id, time_sync)
|
|
// VALUES (?,?)
|
|
// ON CONFLICT (user_enrolment_id) DO UPDATE
|
|
// SET time_sync = ?';
|
|
// $params = array($userEnrolment->id, $userEnrolment->timemodified, $userEnrolment->timemodified);
|
|
|
|
// return $DB->execute($qry, $params);
|
|
// }
|
|
|
|
//
|
|
// CERTIFICADOS
|
|
//
|
|
|
|
function atualizaCertificadoEVL($certificado) {
|
|
global $DB, $CFG;
|
|
|
|
mtrace("certificado " . $certificado->code);
|
|
|
|
$school = $DB->get_record('course',array('id'=>'1'));
|
|
|
|
$uri = 'https://escolamodelows.interlegis.leg.br/api/v1/certificados/adicionar/';
|
|
|
|
$obj = new StdClass();
|
|
|
|
$certArray = array();
|
|
|
|
// Gravação de certificado para envio ao Web Service da EVL
|
|
$certItem = array(
|
|
'course' => $certificado->courseid,
|
|
'student' => $certificado->username,
|
|
'date' => $certificado->timecreated,
|
|
'grade' => $certificado->finalgrade,
|
|
'code' => $certificado->code,
|
|
);
|
|
array_push($certArray, $certItem);
|
|
|
|
$mainArray = array(
|
|
'school' => $CFG->emSigla,
|
|
'certificates' => $certArray,
|
|
'key' => "k4B5YcbKa619ohu3wxk2xXbmtoxFuQqrwcKEOTAnZi7iy4tl9z"
|
|
);
|
|
$json = json_encode($mainArray);
|
|
|
|
$response = \Httpful\Request::post($uri)
|
|
->sendsJson()
|
|
->body($json)
|
|
->send();
|
|
|
|
// Se o registro foi criado no servidor, registra em tabela de controle
|
|
if(!$response->hasErrors()) {
|
|
registraSincronizacaoCertificado($certificado);
|
|
} else {
|
|
mtrace("Erro sincronizando certificado " . $certificado->code . ": " . $response->code . " " );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Insere ou atualiza registro da última sincronização de determinado certificado
|
|
*/
|
|
function registraSincronizacaoCertificado($certificado) {
|
|
global $DB;
|
|
|
|
$qry = '
|
|
INSERT INTO {ilb_sync_certificate} (certificate_id, time_sync)
|
|
VALUES (?,?)
|
|
ON CONFLICT (certificate_id) DO UPDATE
|
|
SET time_sync = ?';
|
|
$params = array($certificado->id, $certificado->timecreated, $certificado->timecreated);
|
|
|
|
return $DB->execute($qry, $params);
|
|
}
|
|
|
|
//
|
|
// DADOS DA ESCOLA
|
|
//
|
|
|
|
function atualizaDadosEscola($dadosEscola) {
|
|
global $DB;
|
|
|
|
$school = $DB->get_record('course',array('id'=>'1'));
|
|
|
|
$uri = 'https://escolamodelows.interlegis.leg.br/api/v1/escolas/atualizar/';
|
|
|
|
$obj = new StdClass();
|
|
|
|
// Gravação de certificado para envio ao Web Service da EVL
|
|
$schoolArray = array(
|
|
'name' => $dadosEscola->nome_escola,
|
|
'url' => $dadosEscola->url_escola,
|
|
'logo' => $dadosEscola->url_logo_escola,
|
|
'initials' => $dadosEscola->sigla_escola
|
|
);
|
|
|
|
$mainArray = array(
|
|
'initials_school' => $dadosEscola->sigla_escola,
|
|
'school' => $schoolArray,
|
|
'key' => "k4B5YcbKa619ohu3wxk2xXbmtoxFuQqrwcKEOTAnZi7iy4tl9z"
|
|
);
|
|
$json = json_encode($mainArray);
|
|
|
|
$response = \Httpful\Request::patch($uri)
|
|
->sendsJson()
|
|
->body($json)
|
|
->send();
|
|
|
|
// Se o registro foi criado no servidor, registra em tabela de controle
|
|
if($response->hasErrors()) {
|
|
mtrace("Erro sincronizando dados da escola " . $dadosEscola->sigla_escola);
|
|
}
|
|
}
|
|
|
|
|
|
|