Jose Filipi
2 years ago
commit
f356a7cd6c
12 changed files with 922 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||||
|
# moodle_mod-sga |
||||
|
Plugin para integração entre o Saberes e o Sistema Acadêmico do ILB |
@ -0,0 +1,42 @@ |
|||||
|
<?php |
||||
|
// This client for local_wstemplate is free software: you can redistribute it and/or modify |
||||
|
// it under the terms of the GNU General Public License as published by |
||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||
|
// (at your option) any later version. |
||||
|
// |
||||
|
|
||||
|
/** |
||||
|
* XMLRPC client for Moodle 2 - local_wsilb |
||||
|
* |
||||
|
* This script does not depend of any Moodle code, |
||||
|
* and it can be called from a browser. |
||||
|
* |
||||
|
* @authorr Jerome Mouneyrac |
||||
|
*/ |
||||
|
|
||||
|
/// MOODLE ADMINISTRATION SETUP STEPS |
||||
|
// 1- Install the plugin |
||||
|
// 2- Enable web service advance feature (Admin > Advanced features) |
||||
|
// 3- Enable XMLRPC protocol (Admin > Plugins > Web services > Manage protocols) |
||||
|
// 4- Create a token for a specific user and for the service 'My service' (Admin > Plugins > Web services > Manage tokens) |
||||
|
// 5- Run this script directly from your browser: you should see 'Hello, FIRSTNAME' |
||||
|
|
||||
|
|
||||
|
/// SETUP - NEED TO BE CHANGED |
||||
|
$token = '2c4c550b3710b648dd7743d446884211'; |
||||
|
$domainname = 'http://localhost/saberes'; |
||||
|
|
||||
|
/// FUNCTION NAME |
||||
|
$functionname = 'mod_sga_get_notas_curso'; |
||||
|
|
||||
|
/// PARAMETERS |
||||
|
$codCurso = 123; |
||||
|
|
||||
|
///// XML-RPC CALL |
||||
|
header('Content-Type: text/plain'); |
||||
|
$serverurl = $domainname . '/webservice/xmlrpc/server.php'. '?wstoken=' . $token; |
||||
|
require_once('./curl.php'); |
||||
|
$curl = new curl; |
||||
|
$post = xmlrpc_encode_request($functionname, array($codCurso)); |
||||
|
$resp = xmlrpc_decode($curl->post($serverurl, $post)); |
||||
|
print_r($resp); |
@ -0,0 +1,622 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* cURL class |
||||
|
* |
||||
|
* This is a wrapper class for curl, it is quite easy to use: |
||||
|
* <code> |
||||
|
* $c = new curl; |
||||
|
* // enable cache |
||||
|
* $c = new curl(array('cache'=>true)); |
||||
|
* // enable cookie |
||||
|
* $c = new curl(array('cookie'=>true)); |
||||
|
* // enable proxy |
||||
|
* $c = new curl(array('proxy'=>true)); |
||||
|
* |
||||
|
* // HTTP GET Method |
||||
|
* $html = $c->get('http://example.com'); |
||||
|
* // HTTP POST Method |
||||
|
* $html = $c->post('http://example.com/', array('q'=>'words', 'name'=>'moodle')); |
||||
|
* // HTTP PUT Method |
||||
|
* $html = $c->put('http://example.com/', array('file'=>'/var/www/test.txt'); |
||||
|
* </code> |
||||
|
* |
||||
|
* @author Dongsheng Cai <dongsheng@moodle.com> - https://github.com/dongsheng/cURL |
||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License |
||||
|
*/ |
||||
|
|
||||
|
class curl { |
||||
|
/** @var bool */ |
||||
|
public $cache = false; |
||||
|
public $proxy = false; |
||||
|
/** @var array */ |
||||
|
public $response = array(); |
||||
|
public $header = array(); |
||||
|
/** @var string */ |
||||
|
public $info; |
||||
|
public $error; |
||||
|
|
||||
|
/** @var array */ |
||||
|
private $options; |
||||
|
/** @var string */ |
||||
|
private $proxy_host = ''; |
||||
|
private $proxy_auth = ''; |
||||
|
private $proxy_type = ''; |
||||
|
/** @var bool */ |
||||
|
private $debug = false; |
||||
|
private $cookie = false; |
||||
|
|
||||
|
/** |
||||
|
* @param array $options |
||||
|
*/ |
||||
|
public function __construct($options = array()){ |
||||
|
if (!function_exists('curl_init')) { |
||||
|
$this->error = 'cURL module must be enabled!'; |
||||
|
trigger_error($this->error, E_USER_ERROR); |
||||
|
return false; |
||||
|
} |
||||
|
// the options of curl should be init here. |
||||
|
$this->resetopt(); |
||||
|
if (!empty($options['debug'])) { |
||||
|
$this->debug = true; |
||||
|
} |
||||
|
if(!empty($options['cookie'])) { |
||||
|
if($options['cookie'] === true) { |
||||
|
$this->cookie = 'curl_cookie.txt'; |
||||
|
} else { |
||||
|
$this->cookie = $options['cookie']; |
||||
|
} |
||||
|
} |
||||
|
if (!empty($options['cache'])) { |
||||
|
if (class_exists('curl_cache')) { |
||||
|
$this->cache = new curl_cache(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
/** |
||||
|
* Resets the CURL options that have already been set |
||||
|
*/ |
||||
|
public function resetopt(){ |
||||
|
$this->options = array(); |
||||
|
$this->options['CURLOPT_USERAGENT'] = 'MoodleBot/1.0'; |
||||
|
// True to include the header in the output |
||||
|
$this->options['CURLOPT_HEADER'] = 0; |
||||
|
// True to Exclude the body from the output |
||||
|
$this->options['CURLOPT_NOBODY'] = 0; |
||||
|
// TRUE to follow any "Location: " header that the server |
||||
|
// sends as part of the HTTP header (note this is recursive, |
||||
|
// PHP will follow as many "Location: " headers that it is sent, |
||||
|
// unless CURLOPT_MAXREDIRS is set). |
||||
|
//$this->options['CURLOPT_FOLLOWLOCATION'] = 1; |
||||
|
$this->options['CURLOPT_MAXREDIRS'] = 10; |
||||
|
$this->options['CURLOPT_ENCODING'] = ''; |
||||
|
// TRUE to return the transfer as a string of the return |
||||
|
// value of curl_exec() instead of outputting it out directly. |
||||
|
$this->options['CURLOPT_RETURNTRANSFER'] = 1; |
||||
|
$this->options['CURLOPT_BINARYTRANSFER'] = 0; |
||||
|
$this->options['CURLOPT_SSL_VERIFYPEER'] = 0; |
||||
|
$this->options['CURLOPT_SSL_VERIFYHOST'] = 2; |
||||
|
$this->options['CURLOPT_CONNECTTIMEOUT'] = 30; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Reset Cookie |
||||
|
*/ |
||||
|
public function resetcookie() { |
||||
|
if (!empty($this->cookie)) { |
||||
|
if (is_file($this->cookie)) { |
||||
|
$fp = fopen($this->cookie, 'w'); |
||||
|
if (!empty($fp)) { |
||||
|
fwrite($fp, ''); |
||||
|
fclose($fp); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Set curl options |
||||
|
* |
||||
|
* @param array $options If array is null, this function will |
||||
|
* reset the options to default value. |
||||
|
* |
||||
|
*/ |
||||
|
public function setopt($options = array()) { |
||||
|
if (is_array($options)) { |
||||
|
foreach($options as $name => $val){ |
||||
|
if (stripos($name, 'CURLOPT_') === false) { |
||||
|
$name = strtoupper('CURLOPT_'.$name); |
||||
|
} |
||||
|
$this->options[$name] = $val; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
/** |
||||
|
* Reset http method |
||||
|
* |
||||
|
*/ |
||||
|
public function cleanopt(){ |
||||
|
unset($this->options['CURLOPT_HTTPGET']); |
||||
|
unset($this->options['CURLOPT_POST']); |
||||
|
unset($this->options['CURLOPT_POSTFIELDS']); |
||||
|
unset($this->options['CURLOPT_PUT']); |
||||
|
unset($this->options['CURLOPT_INFILE']); |
||||
|
unset($this->options['CURLOPT_INFILESIZE']); |
||||
|
unset($this->options['CURLOPT_CUSTOMREQUEST']); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Set HTTP Request Header |
||||
|
* |
||||
|
* @param array $headers |
||||
|
* |
||||
|
*/ |
||||
|
public function setHeader($header) { |
||||
|
if (is_array($header)){ |
||||
|
foreach ($header as $v) { |
||||
|
$this->setHeader($v); |
||||
|
} |
||||
|
} else { |
||||
|
$this->header[] = $header; |
||||
|
} |
||||
|
} |
||||
|
/** |
||||
|
* Set HTTP Response Header |
||||
|
* |
||||
|
*/ |
||||
|
public function getResponse(){ |
||||
|
return $this->response; |
||||
|
} |
||||
|
/** |
||||
|
* private callback function |
||||
|
* Formatting HTTP Response Header |
||||
|
* |
||||
|
* @param mixed $ch Apparently not used |
||||
|
* @param string $header |
||||
|
* @return int The strlen of the header |
||||
|
*/ |
||||
|
private function formatHeader($ch, $header) |
||||
|
{ |
||||
|
$this->count++; |
||||
|
if (strlen($header) > 2) { |
||||
|
list($key, $value) = explode(" ", rtrim($header, "\r\n"), 2); |
||||
|
$key = rtrim($key, ':'); |
||||
|
if (!empty($this->response[$key])) { |
||||
|
if (is_array($this->response[$key])){ |
||||
|
$this->response[$key][] = $value; |
||||
|
} else { |
||||
|
$tmp = $this->response[$key]; |
||||
|
$this->response[$key] = array(); |
||||
|
$this->response[$key][] = $tmp; |
||||
|
$this->response[$key][] = $value; |
||||
|
|
||||
|
} |
||||
|
} else { |
||||
|
$this->response[$key] = $value; |
||||
|
} |
||||
|
} |
||||
|
return strlen($header); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Set options for individual curl instance |
||||
|
* |
||||
|
* @param object $curl A curl handle |
||||
|
* @param array $options |
||||
|
* @return object The curl handle |
||||
|
*/ |
||||
|
private function apply_opt($curl, $options) { |
||||
|
// Clean up |
||||
|
$this->cleanopt(); |
||||
|
// set cookie |
||||
|
if (!empty($this->cookie) || !empty($options['cookie'])) { |
||||
|
$this->setopt(array('cookiejar'=>$this->cookie, |
||||
|
'cookiefile'=>$this->cookie |
||||
|
)); |
||||
|
} |
||||
|
|
||||
|
// set proxy |
||||
|
if (!empty($this->proxy) || !empty($options['proxy'])) { |
||||
|
$this->setopt($this->proxy); |
||||
|
} |
||||
|
$this->setopt($options); |
||||
|
// reset before set options |
||||
|
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this,'formatHeader')); |
||||
|
// set headers |
||||
|
if (empty($this->header)){ |
||||
|
$this->setHeader(array( |
||||
|
'User-Agent: MoodleBot/1.0', |
||||
|
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', |
||||
|
'Connection: keep-alive' |
||||
|
)); |
||||
|
} |
||||
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->header); |
||||
|
|
||||
|
if ($this->debug){ |
||||
|
echo '<h1>Options</h1>'; |
||||
|
var_dump($this->options); |
||||
|
echo '<h1>Header</h1>'; |
||||
|
var_dump($this->header); |
||||
|
} |
||||
|
|
||||
|
// set options |
||||
|
foreach($this->options as $name => $val) { |
||||
|
if (is_string($name)) { |
||||
|
$name = constant(strtoupper($name)); |
||||
|
} |
||||
|
curl_setopt($curl, $name, $val); |
||||
|
} |
||||
|
return $curl; |
||||
|
} |
||||
|
/** |
||||
|
* Download multiple files in parallel |
||||
|
* |
||||
|
* Calls {@link multi()} with specific download headers |
||||
|
* |
||||
|
* <code> |
||||
|
* $c = new curl; |
||||
|
* $c->download(array( |
||||
|
* array('url'=>'http://localhost/', 'file'=>fopen('a', 'wb')), |
||||
|
* array('url'=>'http://localhost/20/', 'file'=>fopen('b', 'wb')) |
||||
|
* )); |
||||
|
* </code> |
||||
|
* |
||||
|
* @param array $requests An array of files to request |
||||
|
* @param array $options An array of options to set |
||||
|
* @return array An array of results |
||||
|
*/ |
||||
|
public function download($requests, $options = array()) { |
||||
|
$options['CURLOPT_BINARYTRANSFER'] = 1; |
||||
|
$options['RETURNTRANSFER'] = false; |
||||
|
return $this->multi($requests, $options); |
||||
|
} |
||||
|
/* |
||||
|
* Mulit HTTP Requests |
||||
|
* This function could run multi-requests in parallel. |
||||
|
* |
||||
|
* @param array $requests An array of files to request |
||||
|
* @param array $options An array of options to set |
||||
|
* @return array An array of results |
||||
|
*/ |
||||
|
protected function multi($requests, $options = array()) { |
||||
|
$count = count($requests); |
||||
|
$handles = array(); |
||||
|
$results = array(); |
||||
|
$main = curl_multi_init(); |
||||
|
for ($i = 0; $i < $count; $i++) { |
||||
|
$url = $requests[$i]; |
||||
|
foreach($url as $n=>$v){ |
||||
|
$options[$n] = $url[$n]; |
||||
|
} |
||||
|
$handles[$i] = curl_init($url['url']); |
||||
|
$this->apply_opt($handles[$i], $options); |
||||
|
curl_multi_add_handle($main, $handles[$i]); |
||||
|
} |
||||
|
$running = 0; |
||||
|
do { |
||||
|
curl_multi_exec($main, $running); |
||||
|
} while($running > 0); |
||||
|
for ($i = 0; $i < $count; $i++) { |
||||
|
if (!empty($options['CURLOPT_RETURNTRANSFER'])) { |
||||
|
$results[] = true; |
||||
|
} else { |
||||
|
$results[] = curl_multi_getcontent($handles[$i]); |
||||
|
} |
||||
|
curl_multi_remove_handle($main, $handles[$i]); |
||||
|
} |
||||
|
curl_multi_close($main); |
||||
|
return $results; |
||||
|
} |
||||
|
/** |
||||
|
* Single HTTP Request |
||||
|
* |
||||
|
* @param string $url The URL to request |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
protected function request($url, $options = array()){ |
||||
|
// create curl instance |
||||
|
$curl = curl_init($url); |
||||
|
$options['url'] = $url; |
||||
|
$this->apply_opt($curl, $options); |
||||
|
if ($this->cache && $ret = $this->cache->get($this->options)) { |
||||
|
return $ret; |
||||
|
} else { |
||||
|
$ret = curl_exec($curl); |
||||
|
if ($this->cache) { |
||||
|
$this->cache->set($this->options, $ret); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$this->info = curl_getinfo($curl); |
||||
|
$this->error = curl_error($curl); |
||||
|
|
||||
|
if ($this->debug){ |
||||
|
echo '<h1>Return Data</h1>'; |
||||
|
var_dump($ret); |
||||
|
echo '<h1>Info</h1>'; |
||||
|
var_dump($this->info); |
||||
|
echo '<h1>Error</h1>'; |
||||
|
var_dump($this->error); |
||||
|
} |
||||
|
|
||||
|
curl_close($curl); |
||||
|
|
||||
|
if (empty($this->error)){ |
||||
|
return $ret; |
||||
|
} else { |
||||
|
return $this->error; |
||||
|
// exception is not ajax friendly |
||||
|
//throw new moodle_exception($this->error, 'curl'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* HTTP HEAD method |
||||
|
* |
||||
|
* @see request() |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function head($url, $options = array()){ |
||||
|
$options['CURLOPT_HTTPGET'] = 0; |
||||
|
$options['CURLOPT_HEADER'] = 1; |
||||
|
$options['CURLOPT_NOBODY'] = 1; |
||||
|
return $this->request($url, $options); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Recursive function formating an array in POST parameter |
||||
|
* @param array $arraydata - the array that we are going to format and add into &$data array |
||||
|
* @param string $currentdata - a row of the final postdata array at instant T |
||||
|
* when finish, it's assign to $data under this format: name[keyname][][]...[]='value' |
||||
|
* @param array $data - the final data array containing all POST parameters : 1 row = 1 parameter |
||||
|
*/ |
||||
|
function format_array_postdata_for_curlcall($arraydata, $currentdata, &$data) { |
||||
|
foreach ($arraydata as $k=>$v) { |
||||
|
$newcurrentdata = $currentdata; |
||||
|
if (is_object($v)) { |
||||
|
$v = (array) $v; |
||||
|
} |
||||
|
if (is_array($v)) { //the value is an array, call the function recursively |
||||
|
$newcurrentdata = $newcurrentdata.'['.urlencode($k).']'; |
||||
|
$this->format_array_postdata_for_curlcall($v, $newcurrentdata, $data); |
||||
|
} else { //add the POST parameter to the $data array |
||||
|
$data[] = $newcurrentdata.'['.urlencode($k).']='.urlencode($v); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Transform a PHP array into POST parameter |
||||
|
* (see the recursive function format_array_postdata_for_curlcall) |
||||
|
* @param array $postdata |
||||
|
* @return array containing all POST parameters (1 row = 1 POST parameter) |
||||
|
*/ |
||||
|
function format_postdata_for_curlcall($postdata) { |
||||
|
if (is_object($postdata)) { |
||||
|
$postdata = (array) $postdata; |
||||
|
} |
||||
|
$data = array(); |
||||
|
foreach ($postdata as $k=>$v) { |
||||
|
if (is_object($v)) { |
||||
|
$v = (array) $v; |
||||
|
} |
||||
|
if (is_array($v)) { |
||||
|
$currentdata = urlencode($k); |
||||
|
$this->format_array_postdata_for_curlcall($v, $currentdata, $data); |
||||
|
} else { |
||||
|
$data[] = urlencode($k).'='.urlencode($v); |
||||
|
} |
||||
|
} |
||||
|
$convertedpostdata = implode('&', $data); |
||||
|
return $convertedpostdata; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* HTTP POST method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array|string $params |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function post($url, $params = '', $options = array()){ |
||||
|
$options['CURLOPT_POST'] = 1; |
||||
|
if (is_array($params)) { |
||||
|
$params = $this->format_postdata_for_curlcall($params); |
||||
|
} |
||||
|
$options['CURLOPT_POSTFIELDS'] = $params; |
||||
|
return $this->request($url, $options); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* HTTP GET method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $params |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function get($url, $params = array(), $options = array()){ |
||||
|
$options['CURLOPT_HTTPGET'] = 1; |
||||
|
|
||||
|
if (!empty($params)){ |
||||
|
$url .= (stripos($url, '?') !== false) ? '&' : '?'; |
||||
|
$url .= http_build_query($params, '', '&'); |
||||
|
} |
||||
|
return $this->request($url, $options); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* HTTP PUT method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $params |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function put($url, $params = array(), $options = array()){ |
||||
|
$file = $params['file']; |
||||
|
if (!is_file($file)){ |
||||
|
return null; |
||||
|
} |
||||
|
$fp = fopen($file, 'r'); |
||||
|
$size = filesize($file); |
||||
|
$options['CURLOPT_PUT'] = 1; |
||||
|
$options['CURLOPT_INFILESIZE'] = $size; |
||||
|
$options['CURLOPT_INFILE'] = $fp; |
||||
|
if (!isset($this->options['CURLOPT_USERPWD'])){ |
||||
|
$this->setopt(array('CURLOPT_USERPWD'=>'anonymous: noreply@moodle.org')); |
||||
|
} |
||||
|
$ret = $this->request($url, $options); |
||||
|
fclose($fp); |
||||
|
return $ret; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* HTTP DELETE method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $params |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function delete($url, $param = array(), $options = array()){ |
||||
|
$options['CURLOPT_CUSTOMREQUEST'] = 'DELETE'; |
||||
|
if (!isset($options['CURLOPT_USERPWD'])) { |
||||
|
$options['CURLOPT_USERPWD'] = 'anonymous: noreply@moodle.org'; |
||||
|
} |
||||
|
$ret = $this->request($url, $options); |
||||
|
return $ret; |
||||
|
} |
||||
|
/** |
||||
|
* HTTP TRACE method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function trace($url, $options = array()){ |
||||
|
$options['CURLOPT_CUSTOMREQUEST'] = 'TRACE'; |
||||
|
$ret = $this->request($url, $options); |
||||
|
return $ret; |
||||
|
} |
||||
|
/** |
||||
|
* HTTP OPTIONS method |
||||
|
* |
||||
|
* @param string $url |
||||
|
* @param array $options |
||||
|
* @return bool |
||||
|
*/ |
||||
|
public function options($url, $options = array()){ |
||||
|
$options['CURLOPT_CUSTOMREQUEST'] = 'OPTIONS'; |
||||
|
$ret = $this->request($url, $options); |
||||
|
return $ret; |
||||
|
} |
||||
|
public function get_info() { |
||||
|
return $this->info; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* This class is used by cURL class, use case: |
||||
|
* |
||||
|
* <code> |
||||
|
* |
||||
|
* $c = new curl(array('cache'=>true), 'module_cache'=>'repository'); |
||||
|
* $ret = $c->get('http://www.google.com'); |
||||
|
* </code> |
||||
|
* |
||||
|
* @package core |
||||
|
* @subpackage file |
||||
|
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} |
||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later |
||||
|
*/ |
||||
|
class curl_cache { |
||||
|
/** @var string */ |
||||
|
public $dir = ''; |
||||
|
/** |
||||
|
* |
||||
|
* @param string @module which module is using curl_cache |
||||
|
* |
||||
|
*/ |
||||
|
function __construct() { |
||||
|
$this->dir = '/tmp/'; |
||||
|
if (!file_exists($this->dir)) { |
||||
|
mkdir($this->dir, 0700, true); |
||||
|
} |
||||
|
$this->ttl = 1200; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Get cached value |
||||
|
* |
||||
|
* @param mixed $param |
||||
|
* @return bool|string |
||||
|
*/ |
||||
|
public function get($param){ |
||||
|
$this->cleanup($this->ttl); |
||||
|
$filename = 'u_'.md5(serialize($param)); |
||||
|
if(file_exists($this->dir.$filename)) { |
||||
|
$lasttime = filemtime($this->dir.$filename); |
||||
|
if(time()-$lasttime > $this->ttl) |
||||
|
{ |
||||
|
return false; |
||||
|
} else { |
||||
|
$fp = fopen($this->dir.$filename, 'r'); |
||||
|
$size = filesize($this->dir.$filename); |
||||
|
$content = fread($fp, $size); |
||||
|
return unserialize($content); |
||||
|
} |
||||
|
} |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Set cache value |
||||
|
* |
||||
|
* @param mixed $param |
||||
|
* @param mixed $val |
||||
|
*/ |
||||
|
public function set($param, $val){ |
||||
|
$filename = 'u_'.md5(serialize($param)); |
||||
|
$fp = fopen($this->dir.$filename, 'w'); |
||||
|
fwrite($fp, serialize($val)); |
||||
|
fclose($fp); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Remove cache files |
||||
|
* |
||||
|
* @param int $expire The number os seconds before expiry |
||||
|
*/ |
||||
|
public function cleanup($expire){ |
||||
|
if($dir = opendir($this->dir)){ |
||||
|
while (false !== ($file = readdir($dir))) { |
||||
|
if(!is_dir($file) && $file != '.' && $file != '..') { |
||||
|
$lasttime = @filemtime($this->dir.$file); |
||||
|
if(time() - $lasttime > $expire){ |
||||
|
@unlink($this->dir.$file); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
/** |
||||
|
* delete current user's cache file |
||||
|
* |
||||
|
*/ |
||||
|
public function refresh(){ |
||||
|
if($dir = opendir($this->dir)){ |
||||
|
while (false !== ($file = readdir($dir))) { |
||||
|
if(!is_dir($file) && $file != '.' && $file != '..') { |
||||
|
if(strpos($file, 'u_')!==false){ |
||||
|
@unlink($this->dir.$file); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
<?php |
||||
|
// This file is part of Moodle - http://moodle.org/ |
||||
|
// |
||||
|
// Moodle is free software: you can redistribute it and/or modify |
||||
|
// it under the terms of the GNU General Public License as published by |
||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||
|
// (at your option) any later version. |
||||
|
// |
||||
|
// Moodle is distributed in the hope that it will be useful, |
||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
// GNU General Public License for more details. |
||||
|
// |
||||
|
// You should have received a copy of the GNU General Public License |
||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
/** |
||||
|
*/ |
||||
|
|
||||
|
defined('MOODLE_INTERNAL') || die(); |
||||
|
|
||||
|
$capabilities = array( |
||||
|
|
||||
|
|
||||
|
); |
@ -0,0 +1,17 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<XMLDB PATH="mod/sga/db" VERSION="20210619" COMMENT="XMLDB file for Moodle mod/sga" |
||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd" |
||||
|
> |
||||
|
<TABLES> |
||||
|
<TABLE NAME="sga" COMMENT="Informações do SGA"> |
||||
|
<FIELDS> |
||||
|
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/> |
||||
|
<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/> |
||||
|
</FIELDS> |
||||
|
<KEYS> |
||||
|
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for sga"/> |
||||
|
</KEYS> |
||||
|
</TABLE> |
||||
|
</TABLES> |
||||
|
</XMLDB> |
@ -0,0 +1,41 @@ |
|||||
|
<?php |
||||
|
|
||||
|
// Moodle is free software: you can redistribute it and/or modify |
||||
|
// it under the terms of the GNU General Public License as published by |
||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||
|
// (at your option) any later version. |
||||
|
// |
||||
|
// Moodle is distributed in the hope that it will be useful, |
||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
// GNU General Public License for more details. |
||||
|
// |
||||
|
// You should have received a copy of the GNU General Public License |
||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
/** |
||||
|
* External functions and service definitions. |
||||
|
*/ |
||||
|
|
||||
|
// We define the services to install as pre-build services. A pre-build service is not editable by administrator. |
||||
|
$services = array( |
||||
|
'SGA Service' => array( |
||||
|
'functions' => array ( |
||||
|
'mod_sga_get_notas_curso' |
||||
|
), |
||||
|
'restrictedusers' => 0, |
||||
|
'enabled'=>1, |
||||
|
) |
||||
|
); |
||||
|
|
||||
|
// We defined the web service functions to install. |
||||
|
$functions = array( |
||||
|
'mod_sga_get_notas_curso' => array( |
||||
|
'classname' => 'mod_sga_external', |
||||
|
'methodname' => 'get_notas_curso', |
||||
|
'classpath' => 'mod/sga/externallib.php', |
||||
|
'description' => 'Retorna notas para alunos matriculados em determinado curso', |
||||
|
'type' => 'read', |
||||
|
), |
||||
|
); |
||||
|
|
@ -0,0 +1,77 @@ |
|||||
|
<?php |
||||
|
|
||||
|
// Moodle is free software: you can redistribute it and/or modify |
||||
|
// it under the terms of the GNU General Public License as published by |
||||
|
// the Free Software Foundation, either version 3 of the License, or |
||||
|
// (at your option) any later version. |
||||
|
// |
||||
|
// Moodle is distributed in the hope that it will be useful, |
||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
// GNU General Public License for more details. |
||||
|
// |
||||
|
// You should have received a copy of the GNU General Public License |
||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
require_once($CFG->libdir . "/externallib.php"); |
||||
|
|
||||
|
class mod_sga_external extends external_api { |
||||
|
|
||||
|
public static function get_notas_curso() { |
||||
|
global $USER; |
||||
|
|
||||
|
// TODO: obter as notas do aluno no curso |
||||
|
// e retornar como JSON |
||||
|
// ver exemplo https://github.com/interlegis/moodle-local_wsilb/blob/main/externallib.php |
||||
|
|
||||
|
|
||||
|
$nota1 = array( |
||||
|
"aluno" => '05272886674', |
||||
|
"nota" => "9", |
||||
|
); |
||||
|
|
||||
|
$nota2 = array( |
||||
|
"aluno" => '13504211628', |
||||
|
"nota" => '8' |
||||
|
); |
||||
|
|
||||
|
$notas= array($nota1, $nota2); |
||||
|
|
||||
|
$obj = new StdClass(); |
||||
|
$obj->curso = 123; |
||||
|
$obj->notas = $notas; |
||||
|
|
||||
|
$json = json_encode($obj); |
||||
|
|
||||
|
return $json; |
||||
|
' |
||||
|
{ |
||||
|
"curso":123, |
||||
|
"notas":[ |
||||
|
{ |
||||
|
"aluno":"05272886674", |
||||
|
"nota":9 |
||||
|
}, |
||||
|
{ |
||||
|
"aluno":"13504211628", |
||||
|
"nota":8 |
||||
|
} |
||||
|
] |
||||
|
}'; |
||||
|
} |
||||
|
|
||||
|
public static function get_notas_curso_parameters() { |
||||
|
return new external_function_parameters( |
||||
|
array(PARAM_INT, 'Código do curso') |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
public static function get_notas_curso_returns() { |
||||
|
return new external_value(PARAM_TEXT, 'JSON com notas dos alunos no curso especificado'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,7 @@ |
|||||
|
<?php |
||||
|
|
||||
|
$string['pluginname'] = 'Integração com o SGA'; |
||||
|
$string['modulename'] = 'Integração com o SGA'; |
||||
|
$string['pagetitle'] = 'Validação de documentos'; |
||||
|
|
||||
|
|
@ -0,0 +1,6 @@ |
|||||
|
<?php |
||||
|
|
||||
|
$string['pluginname'] = 'Integração com o SGA'; |
||||
|
$string['modulename'] = 'Integração com o SGA'; |
||||
|
|
||||
|
|
@ -0,0 +1,7 @@ |
|||||
|
<?php |
||||
|
|
||||
|
$string['pluginname'] = 'Integração com o SGA'; |
||||
|
$string['modulename'] = 'Integração com o SGA'; |
||||
|
$string['pagetitle'] = 'Validação de documentos'; |
||||
|
|
||||
|
|
@ -0,0 +1,72 @@ |
|||||
|
<?php |
||||
|
|
||||
|
require('../../config.php'); |
||||
|
|
||||
|
// FIXME |
||||
|
$code = required_param('code', PARAM_TEXT); // código do documento que se deseja validar |
||||
|
|
||||
|
// AKFS_LAJJDS_MDLJR |
||||
|
|
||||
|
$conn = oci_connect($CFG->sgadbhost, $CFG->sgadbpass, $CFG->sgadbhost); |
||||
|
if (!$conn) { |
||||
|
$e = oci_error(); |
||||
|
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); |
||||
|
} |
||||
|
|
||||
|
// Prepare the statement |
||||
|
//$stid = oci_parse($conn, 'SELECT * FROM tbl_curso'); |
||||
|
// FIXME substituir call_protocolo por validaDocumento('ABCD') |
||||
|
$stid = oci_parse($conn, "begin :ret := valida_documento('ABCD'); end;"); |
||||
|
if (!$stid) { |
||||
|
$e = oci_error($conn); |
||||
|
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); |
||||
|
} |
||||
|
|
||||
|
oci_bind_by_name($stid, ':ret', $r, 200); |
||||
|
|
||||
|
// Perform the logic of the query |
||||
|
if (!oci_execute($stid)) { |
||||
|
$e = oci_error($stid); |
||||
|
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// // Fetch the results of the query |
||||
|
// print "<table border='1'>\n"; |
||||
|
// while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { |
||||
|
// print "<tr>\n"; |
||||
|
// print " <td>" . $row[1] . "</td>\n"; |
||||
|
// //foreach ($row as $item) { |
||||
|
// // print " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\n"; |
||||
|
// //} |
||||
|
// print "</tr>\n"; |
||||
|
// } |
||||
|
// print "</table>\n"; |
||||
|
|
||||
|
oci_free_statement($stid); |
||||
|
oci_close($conn); |
||||
|
|
||||
|
|
||||
|
// Resultado pode ser inválido (mostrar mensagem de erro de validação) |
||||
|
// ou válido (mostrar dados do documento vindo da function) |
||||
|
|
||||
|
$PAGE->set_pagelayout('incourse'); // FIXME trocar para outro tipo de layout |
||||
|
|
||||
|
// $strname = get_string('name'); |
||||
|
// $strintro = get_string('moduleintro'); |
||||
|
// $strlastmodified = get_string('lastmodified'); |
||||
|
|
||||
|
$PAGE->set_url('/mod/sga/validador.php', array('code' => $code)); |
||||
|
$PAGE->set_title(get_string('pagetitle')); |
||||
|
$PAGE->set_heading(get_string('pagetitle')); |
||||
|
//$PAGE->navbar->add($strpalestras); |
||||
|
|
||||
|
echo $OUTPUT->header(); |
||||
|
|
||||
|
$saida = '<b>Aluno</b>' . "Fulano" . '<br><b>Curso</b>: ' . 'Direito Legislativo'; |
||||
|
|
||||
|
echo html_writer::div($saida); |
||||
|
|
||||
|
echo html_writer::div("Result is: ".$r); |
||||
|
|
||||
|
echo $OUTPUT->footer(); |
@ -0,0 +1,4 @@ |
|||||
|
<?php |
||||
|
$plugin->version = 2021092805; |
||||
|
$plugin->requires = 2017110800; |
||||
|
$plugin->component = 'mod_sga'; |
Loading…
Reference in new issue