Browse Source

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

master
Matheus Garcia 6 years ago
parent
commit
d3663c34e5
  1. 9
      classes/observer.php
  2. 158
      classes/util.php
  3. 4
      db/events.php
  4. 9
      lang/en/block_escola_modelo.php
  5. 25
      settings.php
  6. 2
      version.php

9
classes/observer.php

@ -2,7 +2,7 @@
require_once($CFG->dirroot.'/config.php'); require_once($CFG->dirroot.'/config.php');
include_once('../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 {
@ -73,13 +73,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

158
classes/util.php

@ -4,33 +4,65 @@
*/ */
require_once($CFG->dirroot.'/config.php'); require_once($CFG->dirroot.'/config.php');
include_once('../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) {
$idnumber=$category->idnumber;
$isPublic=(strcasecmp(substr($idnumber,0,4), 'PUB_') == 0);
return $isPublic; $sql = "
SELECT d.value, f.configdata::json->>'options' as options
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
";
$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];
}
} }
/** /**
@ -57,53 +89,53 @@ 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); if( evlHabilitada() ) {
// Detecta status, caso ele não tenha sido especificado
// Detecta status, caso ele não tenha sido especificado $visivel = $visivel ?? cursoPublico($curso);
$visivel = $visivel ?? cursoPublico($curso);
// Hack: enquanto não há campos personalizados no curso, a carga horária
// Hack: enquanto não há campos personalizados no curso, a carga horária // precisa ser obtida a partir do idnumber
// precisa ser obtida a partir do idnumber $idnumber = $curso->idnumber;
$idnumber = $curso->idnumber; $ch = 0;
$ch = 0; if(preg_match("/\_CH([0-9]+)/", $idnumber, $x)) {
if(preg_match("/\_CH([0-9]+)/", $idnumber, $x)) { $ch = $x[1];
$ch = $x[1]; }
}
$school = $DB->get_record('course',array('id'=>'1'));
$school = $DB->get_record('course',array('id'=>'1'));
$uri = $CFG->emURLWS . '/api/v1/cursos/registrar/';
$uri = $CFG->emURLWS . '/api/v1/cursos/registrar/';
$obj = new StdClass();
$obj = new StdClass();
$camposCurso = array(
$camposCurso = array( "name" => $curso->fullname,
"name" => $curso->fullname, "url" => "",
"url" => "", "description" => $curso->summary,
"description" => $curso->summary, "logo" => "",
"logo" => "", "ead_id" => $curso->id,
"ead_id" => $curso->id, "visible" => $visivel,
"visible" => $visivel, "conteudista" => "",
"conteudista" => "", "certificador" => $CFG->emSigla,
"certificador" => $CFG->emSigla, "carga_horaria" => $ch
"carga_horaria" => $ch );
);
// Monta o JSON que será enviado ao Web Service
// Monta o JSON que será enviado ao Web Service $obj->school = $CFG->emSigla;
$obj->school = $CFG->emSigla; $obj->course = $camposCurso;
$obj->course = $camposCurso; $obj->key = $CFG->emApplicationToken;
$obj->key = $CFG->emApplicationToken; $json = json_encode($obj);
$json = json_encode($obj);
$response = \Httpful\Request::post($uri)
$response = \Httpful\Request::post($uri) ->sendsJson()
->sendsJson() ->body($json)
->body($json) ->send();
->send();
// Se o registro foi criado no servidor, registra em tabela de controle
// Se o registro foi criado no servidor, registra em tabela de controle if(!$response->hasErrors()) {
if(!$response->hasErrors()) { registraSincronizacaoCurso($curso);
registraSincronizacaoCurso($curso); } else {
} else { mtrace("Erro sincronizando ". $curso->fullname . ": " . $response->code . " " );
mtrace("Erro sincronizando ". $curso->fullname . ": " . $response->code . " " ); }
} }
} }

4
db/events.php

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

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);
*/
} }

2
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