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');
include_once('../lib/httpful.phar');
include_once($CFG->dirroot . '/blocks/escola_modelo/lib/httpful.phar');
include_once('util.php');
class block_escola_modelo_observer {
@ -73,13 +73,14 @@ class block_escola_modelo_observer {
}
// 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;
$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,
// 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

158
classes/util.php

@ -4,33 +4,65 @@
*/
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.
* Pelas regras estabelecidas, um curso é público se a categoria raiz em que ele
* estiver for uma categoria pública.
* Pelas regras estabelecidas, um curso é público se foi marcado como público
* em campo customizado
*/
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));
// Um curso é público se estiver marcado como público em campo personalizado
$publico = (obtemCampoCustomizadoCurso($course->id, CURSO_CUSTOMFIELD_PUBLICO) == '1');
return $publico;
}
return categoriaPublica($root_category);
function evlHabilitada() {
$config = get_config('block_escola_modelo');
return ($config->config_habilitar_evl == 1);
}
/**
* 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);
// TODO mover para outro local, usado também em certificado
function obtemCampoCustomizadoCurso($idCurso, $nomeCampo) {
global $DB;
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) {
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(
"name" => $curso->fullname,
"url" => "",
"description" => $curso->summary,
"logo" => "",
"ead_id" => $curso->id,
"visible" => $visivel,
"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 . " " );
if( evlHabilitada() ) {
// 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(
"name" => $curso->fullname,
"url" => "",
"description" => $curso->summary,
"logo" => "",
"ead_id" => $curso->id,
"visible" => $visivel,
"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 . " " );
}
}
}

4
db/events.php

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

9
lang/en/block_escola_modelo.php

@ -2,8 +2,17 @@
$string['pluginname'] = '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_descricao'] = 'Sigla da Escola Modelo na EVL';
$string['config_apikey_titulo'] = 'Chave de API';
$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();
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',
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);
// API Key desta instalação
$setting = new admin_setting_configtext('block_escola_modelo/config_apikey',
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);
*/
}

2
version.php

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