Compare commits

...
21 Commits
Author SHA1 Message Date
Valentin Popov e1372c6d34 Change version 2017-10-29 12:57:39 +04:00
Valentin Popov 098514660f Edit translation 2017-10-29 12:56:45 +04:00
Valentin Popov 07970f36e3 Processor additional field 2017-10-29 11:32:50 +04:00
Valentin Popov 1e81988bf5 Change version 2017-10-29 11:26:26 +04:00
Valentin Popov 217c79d867 Additional field in the database 2017-10-29 11:25:23 +04:00
Valentin Popov 4c63223050 Adding an additional field 2017-10-29 11:24:15 +04:00
Valentin Popov 41a1acc36b Bug Fix 2017-10-27 12:59:21 +04:00
Valentin Popov 9e1c2cca4e Additional check of variables 2017-10-27 12:51:58 +04:00
Valentin Popov 74c106aa87 Change version 2017-10-27 12:45:25 +04:00
Valentin Popov 700833b532 Simplification of the class 2017-10-27 12:41:48 +04:00
Valentin Popov 31ecf15e95 Filtering for possible errors 2017-10-27 12:41:15 +04:00
Valentin Popov 8afc94b51c Renaming a variable 2017-10-27 12:28:20 +04:00
Valentin Popov 2885dddccc Edit translation 2017-10-27 12:25:07 +04:00
Valentin Popov 0e4b7bc4d9 Event registration is added 2017-10-27 12:22:55 +04:00
Valentin Popov d6d13338e3 Grinding of the final class 2017-10-27 12:16:21 +04:00
Valentin Popov 43ee70c01e Deleting an additional table 2017-10-27 12:11:25 +04:00
Valentin Popov 6dfe28dab5 The described class for simple journaling 2017-10-27 12:10:16 +04:00
Valentin Popov 04e60b112b Additional table 2017-10-27 11:28:10 +04:00
Valentin Popov 9e4c2dcbae Rename a class 2017-10-27 10:57:40 +04:00
Valentin Popov 1160a52753 Rename the handler class 2017-10-27 08:51:27 +04:00
Valentin Popov af6ac9fb22 A small correction of logic 2017-10-27 08:04:23 +04:00
7 changed files with 125 additions and 22 deletions
+12 -5
View File
@@ -47,7 +47,7 @@ class service_edit_form extends moodleform {
} }
/** /**
* Unpacks data for display. * Preparing data before displaying.
* *
* @param object $record * @param object $record
*/ */
@@ -64,17 +64,18 @@ class service_edit_form extends moodleform {
*/ */
protected function definition() { protected function definition() {
$mform =& $this->_form; $mform =& $this->_form;
$size = array("size" => 60);
/* Form heading */ /* Form heading */
$mform->addElement("header", "editserviceheader", new lang_string("service", "webservice")); $mform->addElement("header", "editserviceheader", new lang_string("service", "webservice"));
/* Name of the service */ /* Name of the service */
$mform->addElement("text", "title", new lang_string("name", "moodle"), array("size" => 60)); $mform->addElement("text", "title", new lang_string("name", "moodle"), $size);
$mform->addRule("title", null, "required"); $mform->addRule("title", null, "required");
$mform->setType("title", PARAM_NOTAGS); $mform->setType("title", PARAM_NOTAGS);
/* Callback address */ /* Callback address */
$mform->addElement("text", "url", new lang_string("url", "moodle"), array("size" => 60)); $mform->addElement("text", "url", new lang_string("url", "moodle"), $size);
$mform->addRule("url", null, "required"); $mform->addRule("url", null, "required");
$mform->setType("url", PARAM_URL); $mform->setType("url", PARAM_URL);
@@ -85,11 +86,17 @@ class service_edit_form extends moodleform {
$mform->setAdvanced("enable"); $mform->setAdvanced("enable");
/* Token */ /* Token */
$mform->addElement("text", "token", new lang_string("token", "webservice"), array("size" => 60)); $mform->addElement("text", "token", new lang_string("token", "webservice"), $size);
$mform->setType("token", PARAM_NOTAGS); $mform->setType("token", PARAM_NOTAGS);
/* Additional information */
$mform->addElement("text", "other", new lang_string("sourceext", "plugin"), $size);
$mform->setType("other", PARAM_NOTAGS);
$mform->setAdvanced("other");
/* Content type */ /* Content type */
$mform->addElement("select", "type", "Content type", array("json" => "application/json", "x-www-form-urlencoded" => "application/x-www-form-urlencoded")); $contenttype = array("json" => "application/json", "x-www-form-urlencoded" => "application/x-www-form-urlencoded");
$mform->addElement("select", "type", "Content type", $contenttype);
$mform->setAdvanced("type"); $mform->setAdvanced("type");
/* Form heading */ /* Form heading */
+65
View File
@@ -0,0 +1,65 @@
<?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/>.
/**
* Registration of the system of events.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace local_webhooks\event;
defined("MOODLE_INTERNAL") || die();
/**
* Defines how to work with events.
*
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class response_get extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "u";
$this->data["objecttable"] = "local_webhooks_service";
$this->data["edulevel"] = self::LEVEL_OTHER;
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("answer", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return $this->other["status"];
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
}
}
+37 -8
View File
@@ -28,21 +28,19 @@ defined("MOODLE_INTERNAL") || die();
require_once($CFG->libdir . "/filelib.php"); require_once($CFG->libdir . "/filelib.php");
use curl;
/** /**
* Defines how to work with events. * Defines how to work with events.
* *
* @copyright 2017 "Valentin Popov" <info@valentineus.link> * @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/ */
class events { class handler {
/** /**
* External handler. * External handler.
* *
* @param object $event * @param object $event
*/ */
public static function handler($event) { public static function events($event) {
$enable = get_config("local_webhooks", "enable"); $enable = get_config("local_webhooks", "enable");
if (boolval($enable)) { if (boolval($enable)) {
@@ -77,16 +75,21 @@ class events {
* @param object $callback * @param object $callback
*/ */
private static function handler_callback($data, $callback) { private static function handler_callback($data, $callback) {
if ($callback->enable) { if (boolval($callback->enable)) {
$events = array();
if (!empty($callback->events)) { if (!empty($callback->events)) {
$events = unserialize(gzuncompress(base64_decode($callback->events))); $events = unserialize(gzuncompress(base64_decode($callback->events)));
} }
if (!empty($events[$data["eventname"]])) { if (!empty($events[$data["eventname"]])) {
if (boolval($callback->token)) { if (!empty($callback->token)) {
$data["token"] = $callback->token; $data["token"] = $callback->token;
} }
if (!empty($callback->other)) {
$data["extra"] = $callback->other;
}
self::send($data, $callback); self::send($data, $callback);
} }
} }
@@ -99,9 +102,35 @@ class events {
* @param object $callback * @param object $callback
*/ */
private static function send($data, $callback) { private static function send($data, $callback) {
$curl = new curl(); $curl = new \curl();
$curl->setHeader(array("Content-Type: application/$callback->type")); $curl->setHeader(array("Content-Type: application/$callback->type"));
$curl->post($callback->url, json_encode($data)); $curl->post($callback->url, json_encode($data));
return $curl->getResponse(); $response = $curl->getResponse();
self::logger($callback, $response);
return $response;
}
/**
* Event logging.
*
* @param array $response
* @param object $callback
*/
private static function logger($callback, $response) {
$status = "Error sending request";
if (!empty($response["HTTP/1.1"])) {
$status = $response["HTTP/1.1"];
}
$event = \local_webhooks\event\response_get::create(
array(
"context" => \context_system::instance(0),
"objectid" => $callback->id,
"other" => array(
"status" => $status
)
));
$event->trigger();
} }
} }
+1 -1
View File
@@ -27,7 +27,7 @@ defined("MOODLE_INTERNAL") || die();
$observers = array( $observers = array(
array( array(
"eventname" => "*", "eventname" => "*",
"callback" => "\local_webhooks\\events::handler", "callback" => "\local_webhooks\\handler::events",
"includefile" => null, "includefile" => null,
"priority" => 200, "priority" => 200,
"internal" => true "internal" => true
+3 -2
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="blocks/local_webhooks/db" VERSION="20171026" COMMENT="XMLDB file for Moodle" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"> <XMLDB PATH="blocks/local_webhooks/db" VERSION="20171029" COMMENT="XMLDB file for Moodle" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd">
<TABLES> <TABLES>
<TABLE NAME="local_webhooks_service" COMMENT="A table for storing callback services."> <TABLE NAME="local_webhooks_service" COMMENT="A table for storing callback services.">
<FIELDS> <FIELDS>
@@ -10,10 +10,11 @@
<FIELD NAME="type" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" /> <FIELD NAME="type" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" />
<FIELD NAME="token" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" /> <FIELD NAME="token" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" />
<FIELD NAME="events" TYPE="text" NOTNULL="false" SEQUENCE="false" /> <FIELD NAME="events" TYPE="text" NOTNULL="false" SEQUENCE="false" />
<FIELD NAME="other" TYPE="text" NOTNULL="false" SEQUENCE="false" />
</FIELDS> </FIELDS>
<KEYS> <KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" /> <KEY NAME="primary" TYPE="primary" FIELDS="id" />
</KEYS> </KEYS>
</TABLE> </TABLE>
</TABLES> </TABLES>
</XMLDB> </XMLDB>
+3 -3
View File
@@ -23,8 +23,8 @@
*/ */
require_once(__DIR__ . "/../../config.php"); require_once(__DIR__ . "/../../config.php");
require_once(__DIR__ . "/classes/editform.php");
require_once($CFG->libdir . "/adminlib.php"); require_once($CFG->libdir . "/adminlib.php");
require_once(__DIR__ . "/classes/forms.php");
admin_externalpage_setup("managelocalplugins"); admin_externalpage_setup("managelocalplugins");
@@ -55,7 +55,7 @@ if ($mform->is_cancelled()) {
} }
/* Getting the data */ /* Getting the data */
if ($idediting = boolval($serviceid)) { if ($editing = boolval($serviceid)) {
$servicerecord = $DB->get_record("local_webhooks_service", array("id" => $serviceid), "*", MUST_EXIST); $servicerecord = $DB->get_record("local_webhooks_service", array("id" => $serviceid), "*", MUST_EXIST);
$mform->set_data($servicerecord); $mform->set_data($servicerecord);
} }
@@ -66,7 +66,7 @@ if ($data = $mform->get_data()) {
$data->events = base64_encode(gzcompress(serialize($data->events), 9)); $data->events = base64_encode(gzcompress(serialize($data->events), 9));
} }
if (boolval($idediting)) { if ($editing) {
$data->id = $serviceid; $data->id = $serviceid;
$DB->update_record("local_webhooks_service", $data); $DB->update_record("local_webhooks_service", $data);
redirect($managerservice, new lang_string("eventwebserviceserviceupdated", "webservice")); redirect($managerservice, new lang_string("eventwebserviceserviceupdated", "webservice"));
+4 -3
View File
@@ -23,8 +23,9 @@
*/ */
defined("MOODLE_INTERNAL") || die(); defined("MOODLE_INTERNAL") || die();
$plugin->release = "0.5.0 (Build: 2017102630)";
$plugin->version = 2017102630; $plugin->release = "1.1.1 (Build: 2017102910)";
$plugin->version = 2017102910;
$plugin->requires = 2016112900; $plugin->requires = 2016112900;
$plugin->component = "local_webhooks"; $plugin->component = "local_webhooks";
$plugin->maturity = MATURITY_RC; $plugin->maturity = MATURITY_STABLE;