Browse Source

Parametrização para integração com EVL, correção de bugs e outros ajustes

master
mgbf 6 years ago
committed by Matheus456
parent
commit
af9f20110f
  1. 9
      classes/observer.php
  2. 157
      classes/util.php
  3. 2
      db/events.php
  4. 9
      lang/en/block_escola_modelo.php
  5. 25
      settings.php
  6. 4
      version.php

9
classes/observer.php

@ -2,7 +2,7 @@
require_once($CFG->dirroot.'/config.php'); require_once($CFG->dirroot.'/config.php');
include_once($CFG->dirroot.'/blocks/escola_modelo/lib/httpful.phar'); include_once($CFG->dirroot . '/blocks/escola_modelo/lib/httpful.phar');
include_once('util.php'); include_once('util.php');
class block_escola_modelo_observer { class block_escola_modelo_observer {
@ -77,13 +77,14 @@ class block_escola_modelo_observer {
} }
// EVENTOS RELACIONADOS A CERTIFICADOS // EVENTOS RELACIONADOS A CERTIFICADOS
public static function certificates_created(\core\event\base $event) { public static function certificate_created(\mod_certificate\event\certificate_created $event) {
global $DB, $CFG; global $DB, $CFG;
$categoria = $DB->get_record($event->objecttable,array('id'=>$event->objectid)); //$categoria = $DB->get_record($event->objecttable,array('id'=>$event->objectid));
// A forma mais segura de fazê-lo é modificar timemodified de todos os cursos, // A forma mais segura de fazê-lo é modificar timemodified de todos os cursos,
// de modo que na próxima sincronização eles tenham seu status modificado // de modo que na próxima sincronização eles tenham seu status modificado
atualizaCategoriaEVL($categoria); //atualizaCategoriaEVL($categoria);
mtrace('Criando certificado para ' . $event->objectid . ' e other ' . $event->other);
} }
// TODO: verificar se é necessário tratar remoção de categoria // TODO: verificar se é necessário tratar remoção de categoria

157
classes/util.php

@ -4,34 +4,66 @@
*/ */
require_once($CFG->dirroot.'/config.php'); require_once($CFG->dirroot.'/config.php');
include_once($CFG->dirroot.'/blocks/escola_modelo/lib/httpful.phar'); include_once($CFG->dirroot . '/blocks/escola_modelo/lib/httpful.phar');
include_once($CFG->dirroot . '/course/externallib.php');
define("CURSO_CUSTOMFIELD_PUBLICO", "publico");
define("CURSO_CUSTOMFIELD_AREATEMATICA", "areatematica");
define("CURSO_CUSTOMFIELD_CARGAHORARIA", "cargahoraria");
define("CURSO_CUSTOMFIELD_SENADOR", "senador");
define("CURSO_CUSTOMFIELD_MUNICIPIO", "municipio");
define("CURSO_CUSTOMFIELD_TIPOOFICINA", "tipooficina");
define("CURSO_CUSTOMFIELD_INSTRUTOR", "instrutor");
define("CURSO_CUSTOMFIELD_MONITOR", "monitor");
/** /**
* Verifica se um curso é público, conforme critérios da EVL. * 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 * Pelas regras estabelecidas, um curso é público se foi marcado como público
* estiver for uma categoria pública. * em campo customizado
*/ */
function cursoPublico($course) { function cursoPublico($course) {
global $DB; global $DB;
$category = $DB->get_record('course_categories', array('id'=>$course->category)); // Um curso é público se estiver marcado como público em campo personalizado
$path = explode('/',$category->path); $publico = (obtemCampoCustomizadoCurso($course->id, CURSO_CUSTOMFIELD_PUBLICO) == '1');
$root_category_id = $path[1]; return $publico;
$root_category = $DB->get_record('course_categories',array('id'=>$root_category_id)); }
return categoriaPublica($root_category); function evlHabilitada() {
$config = get_config('block_escola_modelo');
return ($config->config_habilitar_evl == 1);
} }
/** // TODO mover para outro local, usado também em certificado
* Verifica se uma categoria é pública, conforme critérios da EVL function obtemCampoCustomizadoCurso($idCurso, $nomeCampo) {
* Pelas regras estabelecidas, uma categoria é pública se possuir idnumber iniciado por PUB_ global $DB;
*/
function categoriaPublica($category) { $sql = "
$idnumber=$category->idnumber; SELECT d.value, f.configdata::json->>'options' as options
$isPublic=(strcasecmp(substr($idnumber,0,4), 'PUB_') == 0); FROM mdl_course c
JOIN mdl_context ctx
ON c.id = ?
AND ctx.contextlevel = 50
AND ctx.instanceid = c.id
JOIN mdl_customfield_field f
ON f.shortname = ?
JOIN mdl_customfield_data d
ON d.fieldid = f.id
AND d.contextid = ctx.id
";
return $isPublic; $valueArray = $DB->get_record_sql($sql, [$idCurso, $nomeCampo]);
} $value = $valueArray->value;
$options = $valueArray->options;
if($options == null) {
return $value;
} else {
$optionsArray = preg_split("/\s*\n\s*/", trim($options));
return $optionsArray[$value-1];
}
}
/** /**
* Registra um determinado curso na EVL, com o status informado * Registra um determinado curso na EVL, com o status informado
@ -56,51 +88,54 @@ function categoriaPublica($category) {
*/ */
function atualizaCursoEVL($curso, $visivel = null) { function atualizaCursoEVL($curso, $visivel = null) {
global $DB, $CFG, $USER; global $DB, $CFG, $USER;
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 = $CFG->emURLWS . '/api/v1/cursos/registrar/';
$obj = new StdClass();
$camposCurso = array( if( evlHabilitada() ) {
"name" => $curso->fullname, // Detecta status, caso ele não tenha sido especificado
"url" => "", $visivel = $visivel ?? cursoPublico($curso);
"description" => $curso->summary,
"logo" => "", // Hack: enquanto não há campos personalizados no curso, a carga horária
"ead_id" => $curso->id, // precisa ser obtida a partir do idnumber
"visible" => $visivel, $idnumber = $curso->idnumber;
"conteudista" => "", $ch = 0;
"certificador" => $CFG->emSigla, if(preg_match("/\_CH([0-9]+)/", $idnumber, $x)) {
"carga_horaria" => $ch $ch = $x[1];
); }
// Monta o JSON que será enviado ao Web Service
$obj->school = $CFG->emSigla; $school = $DB->get_record('course',array('id'=>'1'));
$obj->course = $camposCurso;
$obj->key = $CFG->emApplicationToken; // Precisa passar a chave do usuário $uri = $CFG->emURLWS . '/api/v1/cursos/registrar/';
$json = json_encode($obj);
$response = \Httpful\Request::post($uri) $obj = new StdClass();
->sendsJson()
->body($json) $camposCurso = array(
->send(); "name" => $curso->fullname,
"url" => "",
// Se o registro foi criado no servidor, registra em tabela de controle "description" => $curso->summary,
if(!$response->hasErrors()) { "logo" => "",
registraSincronizacaoCurso($curso); "ead_id" => $curso->id,
} else { "visible" => $visivel,
mtrace("Erro sincronizando ". $curso->fullname . ": " . $response->code . " " ); "conteudista" => "",
"certificador" => $CFG->emSigla,
"carga_horaria" => $ch
);
// Monta o JSON que será enviado ao Web Service
$obj->school = $CFG->emSigla;
$obj->course = $camposCurso;
$obj->key = $CFG->emApplicationToken;
$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 . " " );
}
} }
} }

2
db/events.php

@ -23,7 +23,7 @@ $observers = array(
array( array(
'eventname' => 'mod_certificate\event\certificate_created', 'eventname' => 'mod_certificate\event\certificate_created',
'callback' => 'block_escola_modelo_observer::certificate_created' 'callback' => 'block_escola_modelo_observer::certificate_created'
), )
// ), // ),
// // Eventos de matrícula a cursos // // Eventos de matrícula a cursos
// array( // array(

9
lang/en/block_escola_modelo.php

@ -2,8 +2,17 @@
$string['pluginname'] = 'Escola Modelo'; $string['pluginname'] = 'Escola Modelo';
$string['escola_modelo'] = 'Bloco para Escola Modelo'; $string['escola_modelo'] = 'Bloco para Escola Modelo';
$string['config_habilitar_evl_titulo'] = 'Habilitar EVL';
$string['config_habilitar_evl_descricao'] = 'Indica se esta instalação está integrada a Escola Virtual do Legislativo';
$string['config_sigla_evl_titulo'] = 'Sigla da Escola Modelo'; $string['config_sigla_evl_titulo'] = 'Sigla da Escola Modelo';
$string['config_sigla_evl_descricao'] = 'Sigla da Escola Modelo na EVL'; $string['config_sigla_evl_descricao'] = 'Sigla da Escola Modelo na EVL';
$string['config_apikey_titulo'] = 'Chave de API'; $string['config_apikey_titulo'] = 'Chave de API';
$string['config_apikey_descricao'] = 'Chave de API para interação com EVL'; $string['config_apikey_descricao'] = 'Chave de API para interação com EVL';
$string['config_url_portal_evl_titulo'] = 'Portal da EVL';
$string['config_url_portal_evl_descricao'] = 'URL do Portal da EVL';
$string['config_url_ws_evl_titulo'] = 'Web Services da EVL';
$string['config_url_ws_evl_descricao'] = 'URL Raiz do Servidor de Web Services da EVL';

25
settings.php

@ -27,15 +27,32 @@
defined('MOODLE_INTERNAL') || die(); defined('MOODLE_INTERNAL') || die();
if ($ADMIN->fulltree) { if ($ADMIN->fulltree) {
/* // Sigla da Escola na EVL $setting = new admin_setting_configcheckbox('block_escola_modelo/config_habilitar_evl',
get_string('config_habilitar_evl_titulo', 'block_escola_modelo'),
get_string('config_habilitar_evl_descricao', 'block_escola_modelo'), 1);
$settings->add($setting);
// Sigla da Escola na EVL
$setting = new admin_setting_configtext('block_escola_modelo/config_sigla_evl', $setting = new admin_setting_configtext('block_escola_modelo/config_sigla_evl',
get_string('config_sigla_evl_titulo', 'block_escola_modelo'), get_string('config_sigla_evl_titulo', 'block_escola_modelo'),
get_string('config_sigla_evl_descricao', 'block_escola_modelo'), '', PARAM_ALPHA, 3); get_string('config_sigla_evl_descricao', 'block_escola_modelo'), '', PARAM_TEXT, 3);
$settings->add($setting); $settings->add($setting);
// API Key desta instalação
$setting = new admin_setting_configtext('block_escola_modelo/config_apikey', $setting = new admin_setting_configtext('block_escola_modelo/config_apikey',
get_string('config_apikey_titulo', 'block_escola_modelo'), get_string('config_apikey_titulo', 'block_escola_modelo'),
get_string('config_apikey_descricao', 'block_escola_modelo'), '', PARAM_ALPHA, 50); get_string('config_apikey_descricao', 'block_escola_modelo'), '', PARAM_TEXT, 50);
$settings->add($setting);
// URL do Portal da EVL
$setting = new admin_setting_configtext('block_escola_modelo/config_url_portal_evl',
get_string('config_url_portal_evl_titulo', 'block_escola_modelo'),
get_string('config_url_portal_evl_descricao', 'block_escola_modelo'), '', PARAM_TEXT, 100);
$settings->add($setting);
// URL do servidor de Web Services da EVL
$setting = new admin_setting_configtext('block_escola_modelo/config_url_ws_evl',
get_string('config_url_ws_evl_titulo', 'block_escola_modelo'),
get_string('config_url_ws_evl_descricao', 'block_escola_modelo'), '', PARAM_TEXT, 100);
$settings->add($setting); $settings->add($setting);
*/
} }

4
version.php

@ -1,5 +1,5 @@
<?php <?php
$plugin->version = 2019012102; $plugin->version = 2019060701;
$plugin->requires = 2017110800; $plugin->requires = 2017110800;
$plugin->component = 'block_escola_modelo'; $plugin->component = 'block_escola_modelo';

Loading…
Cancel
Save