summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/events.php61
-rw-r--r--classes/forms.php81
-rw-r--r--db/install.xml16
-rw-r--r--editservice.php91
-rw-r--r--lang/en/local_webhooks.php10
-rw-r--r--lang/ru/local_webhooks.php10
-rw-r--r--managerservice.php105
-rw-r--r--settings.php23
8 files changed, 370 insertions, 27 deletions
diff --git a/classes/events.php b/classes/events.php
index bf77d4d..5dfb0cf 100644
--- a/classes/events.php
+++ b/classes/events.php
@@ -24,19 +24,68 @@
namespace local_webhooks;
-defined('MOODLE_INTERNAL') || die();
+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 events {
+ /**
+ * External handler.
+ *
+ * @param object $event
+ */
public static function handler($event) {
- $enabled = boolval(get_config('local_webhooks', 'enabled'));
- $url = get_config('local_webhooks', 'url');
+ $config = get_config("local_webhooks");
- if ($enabled && !empty($url)) {
+ if (boolval($config->enable)) {
$data = $event->get_data();
- $json = json_encode($data);
+ self::transmitter($data);
+ }
+ }
+
+ /**
+ * Transmitter, processing event and services.
+ *
+ * @param array $data
+ */
+ private static function transmitter($data) {
+ global $DB;
+ $callbacks = $DB->get_recordset("local_webhooks_service");
+
+ if ($callbacks->valid()) {
+ foreach ($callbacks as $callback) {
+ self::send($data, $callback);
+ }
+ }
+
+ $callbacks->close();
+ }
+
+ /**
+ * Sending data to the node.
+ *
+ * @param array $data
+ * @param object $callback
+ */
+ private static function send($data, $callback) {
+ if ($callback->enable) {
$curl = new curl();
- $curl::request($url, $json);
+ $package = self::packup($data);
+ $curl::request($callback->url, $package);
}
}
+
+ /**
+ * Packs the data for transmission.
+ *
+ * @param array $data
+ */
+ private static function packup($data) {
+ return json_encode($data);
+ }
} \ No newline at end of file
diff --git a/classes/forms.php b/classes/forms.php
new file mode 100644
index 0000000..c232a7b
--- /dev/null
+++ b/classes/forms.php
@@ -0,0 +1,81 @@
+<?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/>.
+
+/**
+ * Defines the form of editing the service.
+ *
+ * @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;
+
+defined("MOODLE_INTERNAL") || die();
+
+require_once($CFG->libdir . "/formslib.php");
+use lang_string;
+use moodleform;
+
+/**
+ * Description editing form definition.
+ *
+ * @copyright 2017 "Valentin Popov" <info@valentineus.link>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class service_edit_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("service", "webservice"));
+
+ /* Name of the service */
+ $mform->addElement("text", "title",
+ new lang_string("name", "moodle"),
+ array("size" => 60));
+ $mform->setType("title", PARAM_NOTAGS);
+ $mform->addRule("title", null, "required");
+
+ /* Callback address */
+ $mform->addElement("text", "url",
+ new lang_string("url", "moodle"),
+ array("size" => 60));
+ $mform->setType("url", PARAM_URL);
+ $mform->addRule("url", null, "required");
+
+ /* Enabling the service */
+ $mform->addElement("checkbox", "enable",
+ new lang_string("enable", "moodle"));
+ $mform->setType("enable", PARAM_BOOL);
+ $mform->setDefault("enable", 1);
+ $mform->setAdvanced("enable");
+
+ /* Control Panel */
+ $this->add_action_buttons(true);
+ }
+} \ No newline at end of file
diff --git a/db/install.xml b/db/install.xml
new file mode 100644
index 0000000..b152933
--- /dev/null
+++ b/db/install.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<XMLDB PATH="blocks/local_webhooks/db" VERSION="20171022" 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>
+ <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true" />
+ <FIELD NAME="enable" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false" />
+ <FIELD NAME="title" TYPE="text" NOTNULL="true" SEQUENCE="false" />
+ <FIELD NAME="url" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" />
+ </FIELDS>
+ <KEYS>
+ <KEY NAME="primary" TYPE="primary" FIELDS="id" />
+ </KEYS>
+ </TABLE>
+ </TABLES>
+</XMLDB>
diff --git a/editservice.php b/editservice.php
new file mode 100644
index 0000000..5c6d1f6
--- /dev/null
+++ b/editservice.php
@@ -0,0 +1,91 @@
+<?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/>.
+
+/**
+ * Service editor.
+ *
+ * @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/forms.php");
+
+$idservice = optional_param("idservice", 0, PARAM_INT);
+
+require_login();
+
+/* Link generation */
+$urlparameters = array("idservice" => $idservice);
+$managerservice = new moodle_url("/local/webhooks/managerservice.php", $urlparameters);
+$baseurl = new moodle_url("/local/webhooks/editservice.php", $urlparameters);
+$PAGE->set_url($baseurl, $urlparameters);
+
+/* Configure the context of the page */
+$context = context_system::instance();
+$PAGE->set_context($context);
+
+/* Preparing a template for data */
+$titlepage = new lang_string("externalservice", "webservice");
+$servicerecord = new stdClass;
+
+/* Create an editing form */
+$mform = new \local_webhooks\service_edit_form($PAGE->url);
+
+/* Cancel processing */
+if ($mform->is_cancelled()) {
+ redirect($managerservice);
+}
+
+/* Getting the data */
+if ($idediting = boolval($idservice)) {
+ $servicerecord = $DB->get_record("local_webhooks_service", array("id" => $idservice), "*", MUST_EXIST);
+ $mform->set_data($servicerecord);
+}
+
+/* Processing of received data */
+if ($data = $mform->get_data()) {
+ if (empty($data->enable)) {
+ $data->enable = 0;
+ }
+
+ if ($idediting) {
+ $data->id = $idservice;
+ $DB->update_record("local_webhooks_service", $data);
+ } else {
+ $DB->insert_record("local_webhooks_service", $data);
+ }
+
+ redirect($managerservice);
+}
+
+/* Page template */
+$PAGE->set_pagelayout("admin");
+$PAGE->set_heading($titlepage);
+$PAGE->set_title($titlepage);
+
+/* The page title */
+$PAGE->navbar->add(new lang_string("local", "moodle"));
+$PAGE->navbar->add(new lang_string("pluginname", "local_webhooks"));
+$PAGE->navbar->add(new lang_string("managerservice", "local_webhooks"), $managerservice);
+$PAGE->navbar->add($titlepage);
+echo $OUTPUT->header();
+
+/* Displays the form */
+$mform->display();
+
+echo $OUTPUT->footer(); \ No newline at end of file
diff --git a/lang/en/local_webhooks.php b/lang/en/local_webhooks.php
index 05def67..041233f 100644
--- a/lang/en/local_webhooks.php
+++ b/lang/en/local_webhooks.php
@@ -15,16 +15,12 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Strings for component 'local_webhooks', language 'en'.
+ * Strings for component "local_webhooks", language "en".
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-$string['local_webhooksdescription'] = '';
-$string['pluginname'] = 'WebHook\'s';
-$string['enabled'] = 'Enabled';
-$string['enabled_help'] = 'Enable event tracking.';
-$string['url'] = 'URL';
-$string['url_help'] = 'Web address of the remote service.'; \ No newline at end of file
+$string["managerservice"] = "Service management manager";
+$string["pluginname"] = "WebHooks"; \ No newline at end of file
diff --git a/lang/ru/local_webhooks.php b/lang/ru/local_webhooks.php
index 4883214..73db595 100644
--- a/lang/ru/local_webhooks.php
+++ b/lang/ru/local_webhooks.php
@@ -15,16 +15,12 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
- * Strings for component 'local_webhooks', language 'ru'.
+ * Strings for component "local_webhooks", language "ru".
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-$string['local_webhooksdescription'] = '';
-$string['pluginname'] = 'WebHook\'s';
-$string['enabled'] = 'Включить';
-$string['enabled_help'] = 'Включить отслеживание событий.';
-$string['url'] = 'URL';
-$string['url_help'] = 'Веб-адрес удалённой службы.'; \ No newline at end of file
+$string["managerservice"] = "Менеджер управления службами";
+$string["pluginname"] = "WebHooks"; \ No newline at end of file
diff --git a/managerservice.php b/managerservice.php
new file mode 100644
index 0000000..c7c6749
--- /dev/null
+++ b/managerservice.php
@@ -0,0 +1,105 @@
+<?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/>.
+
+/**
+ * Service Management Manager.
+ *
+ * @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($CFG->libdir . "/tablelib.php");
+
+$deleteservice = optional_param("deleteservice", 0, PARAM_INT);
+
+require_login();
+
+/* Link generation */
+$managerservice = "/local/webhooks/managerservice.php";
+$editservice = "/local/webhooks/editservice.php";
+$baseurl = new moodle_url($managerservice);
+$PAGE->set_url($baseurl);
+
+/* Configure the context of the page */
+$context = context_system::instance();
+$PAGE->set_context($context);
+
+/* Delete the service */
+if ($deleteservice && confirm_sesskey()) {
+ $DB->delete_records("local_webhooks_service", array("id" => $deleteservice));
+ redirect($PAGE->url, new lang_string("deleted", "moodle"));
+}
+
+/* Retrieving a list of services */
+$select = null;
+$callbacks = $DB->get_records_select("local_webhooks_service", $select, null, $DB->sql_order_by_text("id"));
+
+/* Page template */
+$titlepage = new lang_string("managerservice", "local_webhooks");
+$PAGE->set_pagelayout("standard");
+$PAGE->set_title($titlepage);
+$PAGE->set_heading($titlepage);
+
+/* The page title */
+$PAGE->navbar->add(new lang_string("local", "moodle"));
+$PAGE->navbar->add(new lang_string("pluginname", "local_webhooks"));
+$PAGE->navbar->add($titlepage, $baseurl);
+echo $OUTPUT->header();
+
+/* Table declaration */
+$table = new flexible_table("callbacks-table");
+
+/* Customize the table */
+$table->define_columns(array("title", "url", "actions"));
+$table->define_headers(array(
+ new lang_string("name", "moodle"),
+ new lang_string("url", "moodle"),
+ new lang_string("actions", "moodle")));
+$table->define_baseurl($baseurl);
+$table->setup();
+
+foreach ($callbacks as $callback) {
+ /* Filling of information columns */
+ $titlecallback = html_writer::div($callback->title, "title");
+ $urlcallback = html_writer::div($callback->url, "url");
+
+ /* Link for editing */
+ $editlink = new moodle_url($editservice,
+ array("idservice" => $callback->id));
+ $edititem = $OUTPUT->action_icon($editlink,
+ new pix_icon("t/edit", get_string("edit")));
+
+ /* Link to remove */
+ $deletelink = new moodle_url($managerservice,
+ array("deleteservice" => $callback->id, "sesskey" => sesskey()));
+ $deleteitem = $OUTPUT->action_icon($deletelink,
+ new pix_icon("t/delete", get_string("delete")));
+
+ /* Adding data to the table */
+ $table->add_data(array($titlecallback, $urlcallback, $edititem . $deleteitem));
+}
+
+/* Display the table */
+$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");
+
+echo $OUTPUT->footer(); \ No newline at end of file
diff --git a/settings.php b/settings.php
index 0e9727f..c2235c2 100644
--- a/settings.php
+++ b/settings.php
@@ -22,15 +22,24 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-defined('MOODLE_INTERNAL') || die();
+defined("MOODLE_INTERNAL") || die();
+$settings = null;
if ($hassiteconfig) {
- $settings = new admin_settingpage('local_webhooks', get_string('pluginname', 'local_webhooks'));
- $ADMIN->add('localplugins', $settings);
+ $settings = new admin_settingpage("local_webhooks",
+ new lang_string("pluginname", "local_webhooks"));
- $settings->add(new admin_setting_configcheckbox('local_webhooks/enabled', get_string('enabled', 'local_webhooks'),
- get_string('enabled_help', 'local_webhooks'), false));
+ $ADMIN->add("localplugins", $settings);
- $settings->add(new admin_setting_configtext('local_webhooks/url', get_string('url', 'local_webhooks'),
- get_string('url_help', 'local_webhooks'), 'http://example.com/endpoint', PARAM_URL, 40));
+ $settings->add(new admin_setting_configcheckbox(
+ "local_webhooks/enabled",
+ new lang_string("enable", "moodle"),
+ new lang_string("enablews", "webservice"),
+ false));
+
+ /* Link to the service manager */
+ $linktext = new lang_string("managerservice", "local_webhooks");
+ $linkurl = new moodle_url("/local/webhooks/managerservice.php");
+ $settings->add(new admin_setting_heading("local_webhooks_managerservice", null,
+ html_writer::link($linkurl, $linktext)));
} \ No newline at end of file