Compare commits

...
41 Commits
Author SHA1 Message Date
Valentin Popov d4d105c018 Change version 2017-11-18 08:35:16 +04:00
Valentin Popov 3ea8f29329 Adding event calls 2017-11-18 08:34:23 +04:00
Valentin Popov c1077bc9c1 Service deletion event 2017-11-18 08:33:04 +04:00
Valentin Popov bc02d0dce2 Service update event 2017-11-18 08:32:03 +04:00
Valentin Popov 93d788f046 Service creation event 2017-11-18 08:30:38 +04:00
Valentin Popov 29c12fa971 Renaming an event 2017-11-18 08:29:21 +04:00
Valentin Popov 1e8cbe7f09 Recovery event 2017-11-18 08:26:49 +04:00
Valentin Popov ad07800be9 Backup event 2017-11-18 08:25:05 +04:00
Valentin Popov f28b408b1e Added hostname to the request 2017-11-18 07:34:38 +04:00
Valentin Popov 91fd140bd4 Change version 2017-11-18 06:40:10 +04:00
Valentin Popov 463aeaf043 Correcting the page template 2017-11-18 06:37:58 +04:00
Valentin Popov 97140dccf7 Aesthetics in the code 2017-11-18 06:31:25 +04:00
Valentin Popov bf2cef3ea0 Recovery algorithm 2017-11-18 05:41:28 +04:00
Valentin Popov 7b56375c05 Form class loading a backup 2017-11-18 04:56:33 +04:00
Valentin Popov b61e5a08be Generate another backup file 2017-11-17 20:14:01 +04:00
Valentin Popov 4a470056a7 Template of the restore settings page 2017-11-17 19:58:45 +04:00
Valentin Popov 688448b350 Added backup function 2017-11-17 18:24:59 +04:00
Valentin Popov 35358ea7cc Updating pages for a new section 2017-11-15 10:49:36 +04:00
Valentin Popov 97296b795a Updated the event handler 2017-11-15 10:46:09 +04:00
Valentin Popov 0fcec2738d Update the settings file 2017-11-15 10:43:51 +04:00
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
15 changed files with 645 additions and 70 deletions
+47 -8
View File
@@ -15,7 +15,7 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Defines the form of editing the service.
* Defines forms.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
@@ -28,9 +28,9 @@ defined("MOODLE_INTERNAL") || die();
require_once($CFG->libdir . "/formslib.php");
use report_eventlist_list_generator;
use lang_string;
use moodleform;
use report_eventlist_list_generator;
/**
* Description editing form definition.
@@ -47,7 +47,7 @@ class service_edit_form extends moodleform {
}
/**
* Unpacks data for display.
* Preparing data before displaying.
*
* @param object $record
*/
@@ -64,17 +64,18 @@ class service_edit_form extends moodleform {
*/
protected function definition() {
$mform =& $this->_form;
$size = array("size" => 60);
/* Form heading */
$mform->addElement("header", "editserviceheader", new lang_string("service", "webservice"));
/* 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->setType("title", PARAM_NOTAGS);
/* 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->setType("url", PARAM_URL);
@@ -85,11 +86,17 @@ class service_edit_form extends moodleform {
$mform->setAdvanced("enable");
/* 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);
/* Additional information */
$mform->addElement("text", "other", new lang_string("sourceext", "plugin"), $size);
$mform->setType("other", PARAM_NOTAGS);
$mform->setAdvanced("other");
/* 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");
/* Form heading */
@@ -97,7 +104,7 @@ class service_edit_form extends moodleform {
/* List of events */
$eventlist = report_eventlist_list_generator::get_all_events_list(true);
$events = array();
$events = array();
/* Formation of the list of elements */
foreach ($eventlist as $event) {
@@ -112,4 +119,36 @@ class service_edit_form extends moodleform {
/* Control Panel */
$this->add_action_buttons(true);
}
}
/**
* Description of the form of restoration.
*
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class service_backup_form extends moodleform {
/**
* @param string $baseurl
*/
public function __construct($baseurl) {
parent::__construct($baseurl);
}
/**
* Defines the standard structure of the form.
*/
protected function definition() {
$mform =& $this->_form;
/* Form heading */
$mform->addElement("header", "editserviceheader", new lang_string("restore", "moodle"));
/* Download the file */
$mform->addElement("filepicker", "backupfile", new lang_string("file", "moodle"));
$mform->addRule("backupfile", null, "required");
/* Control Panel */
$this->add_action_buttons(true, new lang_string("restore", "moodle"));
}
}
+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 backup_performed extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "c";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("create", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return new \lang_string("backup", "moodle");
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/managerservice.php");
}
}
+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 backup_restored extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "u";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("update", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return new \lang_string("backupfinished", "moodle");
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/managerservice.php");
}
}
+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_answer extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "r";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* 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));
}
}
+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 service_added extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "c";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("create", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return new \lang_string("eventwebserviceservicecreated", "webservice");
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
}
}
+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 service_deleted extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "d";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("deleted", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return new \lang_string("eventwebserviceservicedeleted", "webservice");
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
}
}
+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 service_updated extends \core\event\base {
/**
* Init method.
*/
protected function init() {
$this->data["crud"] = "u";
$this->data["edulevel"] = self::LEVEL_OTHER;
$this->data["objecttable"] = "local_webhooks_service";
}
/**
* Return localised event name.
*/
public static function get_name() {
return new \lang_string("update", "moodle");
}
/**
* Returns description of what happened.
*/
public function get_description() {
return new \lang_string("eventwebserviceserviceupdated", "webservice");
}
/**
* Get URL related to the action.
*/
public function get_url() {
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
}
}
+45 -14
View File
@@ -28,27 +28,21 @@ defined("MOODLE_INTERNAL") || die();
require_once($CFG->libdir . "/filelib.php");
use curl;
/**
* 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 events {
class handler {
/**
* External handler.
*
* @param object $event
*/
public static function handler($event) {
$enable = get_config("local_webhooks", "enable");
if (boolval($enable)) {
$data = $event->get_data();
self::transmitter($data);
}
public static function events($event) {
$data = $event->get_data();
self::transmitter($data);
}
/**
@@ -77,16 +71,26 @@ class events {
* @param object $callback
*/
private static function handler_callback($data, $callback) {
if ($callback->enable) {
global $CFG;
if (boolval($callback->enable)) {
$events = array();
if (!empty($callback->events)) {
$events = unserialize(gzuncompress(base64_decode($callback->events)));
}
if (!empty($events[$data["eventname"]])) {
if (boolval($callback->token)) {
$urlparse = parse_url($CFG->wwwroot);
$data["host"] = $urlparse['host'];
if (!empty($callback->token)) {
$data["token"] = $callback->token;
}
if (!empty($callback->other)) {
$data["extra"] = $callback->other;
}
self::send($data, $callback);
}
}
@@ -99,9 +103,36 @@ class events {
* @param object $callback
*/
private static function send($data, $callback) {
$curl = new curl();
$curl = new \curl();
$curl->setHeader(array("Content-Type: application/$callback->type"));
$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_answer::create(
array(
"context" => \context_system::instance(0),
"objectid" => $callback->id,
"other" => array(
"status" => $status
)
)
);
$event->trigger();
}
}
+4 -4
View File
@@ -26,10 +26,10 @@ defined("MOODLE_INTERNAL") || die();
$observers = array(
array(
"eventname" => "*",
"callback" => "\local_webhooks\\events::handler",
"callback" => "\local_webhooks\\handler::events",
"eventname" => "*",
"includefile" => null,
"priority" => 200,
"internal" => true
"internal" => true,
"priority" => 200
)
);
+3 -2
View File
@@ -1,5 +1,5 @@
<?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>
<TABLE NAME="local_webhooks_service" COMMENT="A table for storing callback services.">
<FIELDS>
@@ -10,10 +10,11 @@
<FIELD NAME="type" 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="other" TYPE="text" NOTNULL="false" SEQUENCE="false" />
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" />
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
</XMLDB>
+24 -14
View File
@@ -23,19 +23,18 @@
*/
require_once(__DIR__ . "/../../config.php");
require_once(__DIR__ . "/classes/editform.php");
require_once($CFG->libdir . "/adminlib.php");
require_once(__DIR__ . "/classes/forms.php");
admin_externalpage_setup("managelocalplugins");
admin_externalpage_setup("local_webhooks");
/* Optional parameters */
$serviceid = optional_param("serviceid", 0, PARAM_INT);
require_login();
/* Link generation */
$urlparameters = array("serviceid" => $serviceid);
$urlparameters = array("serviceid" => $serviceid);
$managerservice = new moodle_url("/local/webhooks/managerservice.php", $urlparameters);
$baseurl = new moodle_url("/local/webhooks/editservice.php", $urlparameters);
$baseurl = new moodle_url("/local/webhooks/editservice.php", $urlparameters);
$PAGE->set_url($baseurl, $urlparameters);
/* Configure the context of the page */
@@ -43,7 +42,7 @@ $context = context_system::instance();
$PAGE->set_context($context);
/* Preparing a template for data */
$titlepage = new lang_string("externalservice", "webservice");
$titlepage = new lang_string("externalservice", "webservice");
$servicerecord = new stdClass;
/* Create an editing form */
@@ -55,23 +54,36 @@ if ($mform->is_cancelled()) {
}
/* Getting the data */
if ($idediting = boolval($serviceid)) {
if ($editing = boolval($serviceid)) {
$servicerecord = $DB->get_record("local_webhooks_service", array("id" => $serviceid), "*", MUST_EXIST);
$mform->set_data($servicerecord);
}
/* Processing of received data */
if ($data = $mform->get_data()) {
if (!empty($data->events)) {
$data->events = base64_encode(gzcompress(serialize($data->events), 9));
if (empty($data->events)) {
$data->events = array();
}
if (boolval($idediting)) {
/* Pack the list of events */
$data->events = base64_encode(gzcompress(serialize($data->events), 9));
if ($editing) {
$data->id = $serviceid;
$DB->update_record("local_webhooks_service", $data);
/* Run the event */
$event = \local_webhooks\event\service_updated::create(array("context" => $context, "objectid" => $data->id));
$event->trigger();
redirect($managerservice, new lang_string("eventwebserviceserviceupdated", "webservice"));
} else {
$DB->insert_record("local_webhooks_service", $data);
$servicenewid = $DB->insert_record("local_webhooks_service", $data);
/* Run the event */
$event = \local_webhooks\event\service_added::create(array("context" => $context, "objectid" => $servicenewid));
$event->trigger();
redirect($managerservice, new lang_string("eventwebserviceservicecreated", "webservice"));
}
}
@@ -82,8 +94,6 @@ $PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage);
/* The page title */
$PAGE->navbar->add(new lang_string("pluginname", "local_webhooks"), new moodle_url("/admin/settings.php", array("section" => "local_webhooks")));
$PAGE->navbar->add(new lang_string("externalservices", "webservice"), $managerservice);
$PAGE->navbar->add($titlepage);
echo $OUTPUT->header();
+45 -14
View File
@@ -26,16 +26,19 @@ require_once(__DIR__ . "/../../config.php");
require_once($CFG->libdir . "/tablelib.php");
require_once($CFG->libdir . "/adminlib.php");
admin_externalpage_setup("managelocalplugins");
admin_externalpage_setup("local_webhooks");
$hideshowid = optional_param("hideshowid", 0, PARAM_INT);
$deleteid = optional_param("deleteid", 0, PARAM_INT);
/* Optional parameters */
$backupservices = optional_param("getbackup", 0, PARAM_BOOL);
$deleteid = optional_param("deleteid", 0, PARAM_INT);
$hideshowid = optional_param("hideshowid", 0, PARAM_INT);
require_login();
/* Used references */
$editservice = "/local/webhooks/editservice.php";
$managerservice = "/local/webhooks/managerservice.php";
$restorebackup = "/local/webhooks/restorebackup.php";
/* Link generation */
$managerservice = "/local/webhooks/managerservice.php";
$editservice = "/local/webhooks/editservice.php";
$baseurl = new moodle_url($managerservice);
$PAGE->set_url($baseurl);
@@ -46,12 +49,29 @@ $PAGE->set_context($context);
/* Delete the service */
if (boolval($deleteid) && confirm_sesskey()) {
$DB->delete_records("local_webhooks_service", array("id" => $deleteid));
/* Run the event */
$event = \local_webhooks\event\service_deleted::create(array("context" => $context, "objectid" => $deleteid));
$event->trigger();
redirect($PAGE->url, new lang_string("eventwebserviceservicedeleted", "webservice"));
}
/* Retrieving a list of services */
$callbacks = $DB->get_records_select("local_webhooks_service", null, null, $DB->sql_order_by_text("id"));
/* Upload settings as a file */
if (boolval($backupservices)) {
$filecontent = base64_encode(gzcompress(serialize($callbacks), 9));
$filename = "webhooks_" . date("U") . ".backup";
/* Run the event */
$event = \local_webhooks\event\backup_performed::create(array("context" => $context, "objectid" => 0));
$event->trigger();
send_file($filecontent, $filename, 0, 0, true, true);
}
/* Switching the status of the service */
if (boolval($hideshowid) && confirm_sesskey()) {
$callback = $callbacks[$hideshowid];
@@ -59,19 +79,22 @@ if (boolval($hideshowid) && confirm_sesskey()) {
if (!empty($callback)) {
$callback->enable = !boolval($callback->enable);
$DB->update_record("local_webhooks_service", $callback);
/* Run the event */
$event = \local_webhooks\event\service_updated::create(array("context" => $context, "objectid" => $hideshowid));
$event->trigger();
redirect($PAGE->url, new lang_string("eventwebserviceserviceupdated", "webservice"));
}
}
/* Page template */
$titlepage = new lang_string("externalservices", "webservice");
$titlepage = new lang_string("pluginname", "local_webhooks");
$PAGE->set_pagelayout("admin");
$PAGE->set_title($titlepage);
$PAGE->set_heading($titlepage);
/* The page title */
$PAGE->navbar->add(new lang_string("pluginname", "local_webhooks"), new moodle_url("/admin/settings.php", array("section" => "local_webhooks")));
$PAGE->navbar->add($titlepage, $baseurl);
echo $OUTPUT->header();
/* Table declaration */
@@ -86,13 +109,13 @@ $table->setup();
foreach ($callbacks as $callback) {
/* Filling of information columns */
$titlecallback = html_writer::div($callback->title, "title");
$urlcallback = html_writer::div($callback->url, "url");
$urlcallback = html_writer::div($callback->url, "url");
/* Defining service status */
$hideshowicon = "t/show";
$hideshowicon = "t/show";
$hideshowstring = new lang_string("enable", "moodle");
if (boolval($callback->enable)) {
$hideshowicon = "t/hide";
$hideshowicon = "t/hide";
$hideshowstring = new lang_string("disable", "moodle");
}
@@ -116,7 +139,15 @@ foreach ($callbacks as $callback) {
$table->print_html();
/* Add service button */
$addurl = new moodle_url("/local/webhooks/editservice.php");
echo $OUTPUT->single_button($addurl, new lang_string("addaservice", "webservice"), "get");
$addserviceurl = new moodle_url($editservice);
echo $OUTPUT->single_button($addserviceurl, new lang_string("addaservice", "webservice"), "get");
/* Button to get a backup */
$backupurl = new moodle_url($managerservice, array("getbackup" => true));
echo $OUTPUT->single_button($backupurl, new lang_string("backup", "moodle"), "get");
/* Button for restoring settings */
$restorebackupurl = new moodle_url($restorebackup, array("sesskey" => sesskey()));
echo $OUTPUT->single_button($restorebackupurl, new lang_string("restore", "moodle"), "get");
echo $OUTPUT->footer();
+79
View File
@@ -0,0 +1,79 @@
<?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/>.
/**
* Restore settings page.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(__DIR__ . "/../../config.php");
require_once(__DIR__ . "/classes/editform.php");
require_once($CFG->libdir . "/adminlib.php");
admin_externalpage_setup("local_webhooks");
/* Link generation */
$managerservice = new moodle_url("/local/webhooks/managerservice.php");
$baseurl = new moodle_url("/local/webhooks/restorebackup.php");
$PAGE->set_url($baseurl);
/* Configure the context of the page */
$context = context_system::instance();
$PAGE->set_context($context);
/* Create an editing form */
$mform = new \local_webhooks\service_backup_form($PAGE->url);
/* Cancel processing */
if ($mform->is_cancelled()) {
redirect($managerservice);
}
/* Processing the received file */
$data = $mform->get_data();
if (boolval($data) && confirm_sesskey()) {
$content = $mform->get_file_content("backupfile");
$callbacks = unserialize(gzuncompress(base64_decode($content)));
$DB->delete_records("local_webhooks_service");
foreach ($callbacks as $callback) {
$DB->insert_record("local_webhooks_service", $callback);
}
/* Run the event */
$event = \local_webhooks\event\backup_restored::create(array("context" => $context, "objectid" => 0));
$event->trigger();
redirect($managerservice, new lang_string("restorefinished", "moodle"));
}
/* Page template */
$titlepage = new lang_string("backup", "moodle");
$PAGE->set_pagelayout("admin");
$PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage);
/* The page title */
$PAGE->navbar->add($titlepage);
echo $OUTPUT->header();
/* Displays the form */
$mform->display();
echo $OUTPUT->footer();
+4 -11
View File
@@ -24,16 +24,9 @@
defined("MOODLE_INTERNAL") || die();
$settings = null;
if ($hassiteconfig) {
$settings = new admin_settingpage("local_webhooks", new lang_string("pluginname", "local_webhooks"));
$ADMIN->add("localplugins", $settings);
/* The switch of the interceptor of events */
$settings->add(new admin_setting_configcheckbox("local_webhooks/enable", new lang_string("enable", "moodle"), new lang_string("enablews", "webservice"), false));
/* Link to the service manager */
$linktext = new lang_string("externalservices", "webservice");
$linkurl = new moodle_url("/local/webhooks/managerservice.php");
$settings->add(new admin_setting_heading("local_webhooks_managerservice", null, html_writer::link($linkurl, $linktext)));
$ADMIN->add("server", new admin_externalpage("local_webhooks",
new lang_string("pluginname", "local_webhooks"),
new moodle_url("/local/webhooks/managerservice.php")
));
}
+4 -3
View File
@@ -23,8 +23,9 @@
*/
defined("MOODLE_INTERNAL") || die();
$plugin->release = "0.5.0 (Build: 2017102630)";
$plugin->version = 2017102630;
$plugin->release = "2.1.0 (Build: 2017111810)";
$plugin->version = 2017111810;
$plugin->requires = 2016112900;
$plugin->component = "local_webhooks";
$plugin->maturity = MATURITY_RC;
$plugin->maturity = MATURITY_STABLE;