Compare commits

...
58 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
Valentin Popov e1734746c0 Change version 2017-10-26 18:57:01 +04:00
Valentin Popov 21ad3135c8 Bug fix 2017-10-26 18:28:34 +04:00
Valentin Popov f87b2c82c9 Maximum minimization of internal transfer 2017-10-26 18:25:48 +04:00
Valentin Popov c25f4bada6 Updating layers of external pages 2017-10-26 18:18:31 +04:00
Valentin Popov 4f34a6db0f Refactoring the class displaying the form of the editor 2017-10-26 17:41:16 +04:00
Valentin Popov a7e41f77d2 Refactoring the code to work with events 2017-10-26 17:34:34 +04:00
Valentin Popov 6c4e47b395 Bug fix 2017-10-26 17:31:08 +04:00
Valentin Popov 3816d4128c Minor corrections 2017-10-26 17:30:02 +04:00
Valentin Popov fdaa591882 Refactoring the editor code 2017-10-26 17:25:30 +04:00
Valentin Popov 6b5c96a383 Refactoring the configuration file code 2017-10-26 17:11:34 +04:00
Valentin Popov 8ed2352fbe Refactoring the service manager code 2017-10-26 17:09:15 +04:00
Valentin Popov f613301f24 Correcting the error if there is no value 2017-10-26 16:33:40 +04:00
Valentin Popov f51bb5714e Supplemented description 2017-10-26 11:35:49 +04:00
Valentin Popov 065426b026 Refactoring of data sending 2017-10-26 11:07:01 +04:00
Valentin Popov 3a24fc34ca Small improvements cURL 2017-10-26 10:38:35 +04:00
Valentin Popov a95df3c6b1 Set page layout 2017-10-26 10:15:47 +04:00
Valentin Popov 2744e4fb80 Change version 2017-10-26 09:49:40 +04:00
Valentin Popov 5179a7ec05 Header type processing 2017-10-26 09:48:08 +04:00
Valentin Popov 18a5d23d07 Correction of transmitted parameters 2017-10-26 09:44:44 +04:00
Valentin Popov f43b3f2fd3 Adding an additional field to the database 2017-10-26 09:37:10 +04:00
Valentin Popov ea30d3ca56 Adding the field 'Content type' 2017-10-26 09:35:56 +04:00
Valentin Popov e86542d8f7 Fix for errors with empty values 2017-10-26 09:21:52 +04:00
Valentin Popov dab55b9562 Change the variable 2017-10-26 09:20:32 +04:00
Valentin Popov c2cd361171 We save even more memory 2017-10-26 08:38:08 +04:00
Valentin Popov eaee6b7c81 Change version 2017-10-26 08:02:33 +04:00
Valentin Popov 282e3bcaf1 Add a token to the request 2017-10-26 08:01:16 +04:00
Valentin Popov c037edbc58 Added a field to the database for the security key 2017-10-26 07:51:42 +04:00
Valentin Popov 2c4c05acd6 The form for the security key has been added 2017-10-26 07:50:30 +04:00
Valentin Popov 39fa71faba Change version 2017-10-26 07:39:48 +04:00
Valentin PopovandGitHub 9ecf83b1d6 Merge pull request #2 from valentineus/list-events
List events
2017-10-26 07:35:52 +04:00
Valentin Popov 54d1d030ec Correcting the style of the code 2017-10-26 06:49:33 +04:00
Valentin Popov 8651e6a157 The event handler for sending 2017-10-26 06:45:53 +04:00
Valentin Popov 28632834af Additional field in the database 2017-10-26 06:27:50 +04:00
Valentin Popov a19031d444 Packer of the received data 2017-10-26 06:27:04 +04:00
Valentin Popov bae23caa87 The generator of the list of registered events 2017-10-26 06:25:48 +04:00
Valentin Popov 0d8cb8688d Displays the list of events 2017-10-25 12:09:23 +04:00
Valentin Popov 430c9fa09a Edit the title 2017-10-25 10:33:23 +04:00
13 changed files with 266 additions and 165 deletions
+15 -4
View File
@@ -2,12 +2,23 @@
[![GitHub Release](https://img.shields.io/github/release/valentineus/moodle-webhooks.svg)](https://github.com/valentineus/moodle-webhooks/releases) [![GitHub Release](https://img.shields.io/github/release/valentineus/moodle-webhooks.svg)](https://github.com/valentineus/moodle-webhooks/releases)
[![Build Status](https://travis-ci.org/valentineus/moodle-webhooks.svg?branch=master)](https://travis-ci.org/valentineus/moodle-webhooks) [![Build Status](https://travis-ci.org/valentineus/moodle-webhooks.svg?branch=master)](https://travis-ci.org/valentineus/moodle-webhooks)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/376ab669f2d3436884015554f686a915)](https://www.codacy.com/app/valentineus/moodle-webhooks) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/376ab669f2d3436884015554f686a915)](https://www.codacy.com/app/valentineus/moodle-webhooks)
[![Gitter Badge](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/valentineus/auth-link) [![Gitter Badge](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/valentineus/moodle-webhooks)
Webhooks allow applications to subscribe to Moodle events. Adding Webhooks to Moodle.
The Webhooks feature allows applications to receive real-time notification of changes to certain data.
**Attention!**: Using Webhooks, your application will be able to receive notifications of changes to selected topics and their fields.
This plugin is in active development. Because of this, you do not have to rely on continuous or even periodic requests to check for updates.
Notifications about Webhooks updates are sent as POST requests to the callback URL you specified.
Notifications can indicate the very fact of a field change or include a new value.
Features:
* Use any number of services for notification;
* Customizing each external service;
* Interception of all events in the Moodle system;
* Use a secret phrase to authenticate requests;
* [JSON](https://en.wikipedia.org/wiki/JSON) - Format of outgoing data;
## Installation ## Installation
-51
View File
@@ -1,51 +0,0 @@
<?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/>.
/**
* Create a class for sending data.
*
* @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();
class curl {
public function __construct() {
if (!function_exists("curl_init")) {
print_error("nocurl", "mnet");
}
}
public static function request($url, $data) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array(
"Content-Type: application/json",
"Content-Length: " . strlen($data))
);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
}
+52 -12
View File
@@ -28,6 +28,7 @@ defined("MOODLE_INTERNAL") || die();
require_once($CFG->libdir . "/formslib.php"); require_once($CFG->libdir . "/formslib.php");
use report_eventlist_list_generator;
use lang_string; use lang_string;
use moodleform; use moodleform;
@@ -45,37 +46,76 @@ class service_edit_form extends moodleform {
parent::__construct($baseurl); parent::__construct($baseurl);
} }
/**
* Preparing data before displaying.
*
* @param object $record
*/
public function set_data($record) {
if (!empty($record->events)) {
$record->events = unserialize(gzuncompress(base64_decode($record->events)));
}
return parent::set_data($record);
}
/** /**
* Defines the standard structure of the form. * Defines the standard structure of the form.
*/ */
protected function definition() { protected function definition() {
$mform =& $this->_form; $mform =& $this->_form;
$size = array("size" => 60);
/* Form heading */ /* Form heading */
$mform->addElement("header", "editserviceheader", $mform->addElement("header", "editserviceheader", new lang_string("service", "webservice"));
new lang_string("service", "webservice"));
/* Name of the service */ /* Name of the service */
$mform->addElement("text", "title", $mform->addElement("text", "title", new lang_string("name", "moodle"), $size);
new lang_string("name", "moodle"),
array("size" => 60));
$mform->setType("title", PARAM_NOTAGS);
$mform->addRule("title", null, "required"); $mform->addRule("title", null, "required");
$mform->setType("title", PARAM_NOTAGS);
/* Callback address */ /* Callback address */
$mform->addElement("text", "url", $mform->addElement("text", "url", new lang_string("url", "moodle"), $size);
new lang_string("url", "moodle"),
array("size" => 60));
$mform->setType("url", PARAM_URL);
$mform->addRule("url", null, "required"); $mform->addRule("url", null, "required");
$mform->setType("url", PARAM_URL);
/* Enabling the service */ /* Enabling the service */
$mform->addElement("checkbox", "enable", $mform->addElement("advcheckbox", "enable", new lang_string("enable", "moodle"));
new lang_string("enable", "moodle"));
$mform->setType("enable", PARAM_BOOL); $mform->setType("enable", PARAM_BOOL);
$mform->setDefault("enable", 1); $mform->setDefault("enable", 1);
$mform->setAdvanced("enable"); $mform->setAdvanced("enable");
/* Token */
$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 */
$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 */
$mform->addElement("header", "editserviceheaderevent", new lang_string("edulevel", "moodle"));
/* List of events */
$eventlist = report_eventlist_list_generator::get_all_events_list(true);
$events = array();
/* Formation of the list of elements */
foreach ($eventlist as $event) {
$events[$event["component"]][] =& $mform->createElement("checkbox", $event["eventname"], $event["eventname"]);
}
/* Displays groups of items */
foreach ($events as $key => $event) {
$mform->addGroup($event, "events", $key, "<br />", true);
}
/* Control Panel */ /* Control Panel */
$this->add_action_buttons(true); $this->add_action_buttons(true);
} }
+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));
}
}
+59 -14
View File
@@ -26,22 +26,24 @@ namespace local_webhooks;
defined("MOODLE_INTERNAL") || die(); defined("MOODLE_INTERNAL") || die();
require_once($CFG->libdir . "/filelib.php");
/** /**
* 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) {
$config = get_config("local_webhooks"); $enable = get_config("local_webhooks", "enable");
if (boolval($config->enable)) { if (boolval($enable)) {
$data = $event->get_data(); $data = $event->get_data();
self::transmitter($data); self::transmitter($data);
} }
@@ -59,13 +61,40 @@ class events {
if ($callbacks->valid()) { if ($callbacks->valid()) {
foreach ($callbacks as $callback) { foreach ($callbacks as $callback) {
self::send($data, $callback); self::handler_callback($data, $callback);
} }
} }
$callbacks->close(); $callbacks->close();
} }
/**
* Processes each callback.
*
* @param array $data
* @param object $callback
*/
private static function handler_callback($data, $callback) {
if (boolval($callback->enable)) {
$events = array();
if (!empty($callback->events)) {
$events = unserialize(gzuncompress(base64_decode($callback->events)));
}
if (!empty($events[$data["eventname"]])) {
if (!empty($callback->token)) {
$data["token"] = $callback->token;
}
if (!empty($callback->other)) {
$data["extra"] = $callback->other;
}
self::send($data, $callback);
}
}
}
/** /**
* Sending data to the node. * Sending data to the node.
* *
@@ -73,19 +102,35 @@ class events {
* @param object $callback * @param object $callback
*/ */
private static function send($data, $callback) { private static function send($data, $callback) {
if ($callback->enable) { $curl = new \curl();
$curl = new curl(); $curl->setHeader(array("Content-Type: application/$callback->type"));
$package = self::packup($data); $curl->post($callback->url, json_encode($data));
$curl::request($callback->url, $package); $response = $curl->getResponse();
} self::logger($callback, $response);
return $response;
} }
/** /**
* Packs the data for transmission. * Event logging.
* *
* @param array $data * @param array $response
* @param object $callback
*/ */
private static function packup($data) { private static function logger($callback, $response) {
return json_encode($data); $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
+6 -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="20171022" 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>
@@ -7,10 +7,14 @@
<FIELD NAME="enable" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false" /> <FIELD NAME="enable" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false" />
<FIELD NAME="title" TYPE="text" NOTNULL="true" SEQUENCE="false" /> <FIELD NAME="title" TYPE="text" NOTNULL="true" SEQUENCE="false" />
<FIELD NAME="url" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" /> <FIELD NAME="url" 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="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>
+16 -14
View File
@@ -23,14 +23,17 @@
*/ */
require_once(__DIR__ . "/../../config.php"); require_once(__DIR__ . "/../../config.php");
require_once(__DIR__ . "/classes/forms.php"); require_once(__DIR__ . "/classes/editform.php");
require_once($CFG->libdir . "/adminlib.php");
$idservice = optional_param("idservice", 0, PARAM_INT); admin_externalpage_setup("managelocalplugins");
$serviceid = optional_param("serviceid", 0, PARAM_INT);
require_login(); require_login();
/* Link generation */ /* Link generation */
$urlparameters = array("idservice" => $idservice); $urlparameters = array("serviceid" => $serviceid);
$managerservice = new moodle_url("/local/webhooks/managerservice.php", $urlparameters); $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); $PAGE->set_url($baseurl, $urlparameters);
@@ -52,25 +55,25 @@ if ($mform->is_cancelled()) {
} }
/* Getting the data */ /* Getting the data */
if ($idediting = boolval($idservice)) { if ($editing = boolval($serviceid)) {
$servicerecord = $DB->get_record("local_webhooks_service", array("id" => $idservice), "*", MUST_EXIST); $servicerecord = $DB->get_record("local_webhooks_service", array("id" => $serviceid), "*", MUST_EXIST);
$mform->set_data($servicerecord); $mform->set_data($servicerecord);
} }
/* Processing of received data */ /* Processing of received data */
if ($data = $mform->get_data()) { if ($data = $mform->get_data()) {
if (empty($data->enable)) { if (!empty($data->events)) {
$data->enable = 0; $data->events = base64_encode(gzcompress(serialize($data->events), 9));
} }
if ($idediting) { if ($editing) {
$data->id = $idservice; $data->id = $serviceid;
$DB->update_record("local_webhooks_service", $data); $DB->update_record("local_webhooks_service", $data);
redirect($managerservice, new lang_string("eventwebserviceserviceupdated", "webservice"));
} else { } else {
$DB->insert_record("local_webhooks_service", $data); $DB->insert_record("local_webhooks_service", $data);
redirect($managerservice, new lang_string("eventwebserviceservicecreated", "webservice"));
} }
redirect($managerservice);
} }
/* Page template */ /* Page template */
@@ -79,9 +82,8 @@ $PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage); $PAGE->set_title($titlepage);
/* The page title */ /* The page title */
$PAGE->navbar->add(new lang_string("local", "moodle")); $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("pluginname", "local_webhooks")); $PAGE->navbar->add(new lang_string("externalservices", "webservice"), $managerservice);
$PAGE->navbar->add(new lang_string("managerservice", "local_webhooks"), $managerservice);
$PAGE->navbar->add($titlepage); $PAGE->navbar->add($titlepage);
echo $OUTPUT->header(); echo $OUTPUT->header();
-1
View File
@@ -22,5 +22,4 @@
* @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
*/ */
$string["managerservice"] = "Service management manager";
$string["pluginname"] = "WebHooks"; $string["pluginname"] = "WebHooks";
-26
View File
@@ -1,26 +0,0 @@
<?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/>.
/**
* 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["managerservice"] = "Менеджер управления службами";
$string["pluginname"] = "WebHooks";
+43 -26
View File
@@ -24,8 +24,12 @@
require_once(__DIR__ . "/../../config.php"); require_once(__DIR__ . "/../../config.php");
require_once($CFG->libdir . "/tablelib.php"); require_once($CFG->libdir . "/tablelib.php");
require_once($CFG->libdir . "/adminlib.php");
$deleteservice = optional_param("deleteservice", 0, PARAM_INT); admin_externalpage_setup("managelocalplugins");
$hideshowid = optional_param("hideshowid", 0, PARAM_INT);
$deleteid = optional_param("deleteid", 0, PARAM_INT);
require_login(); require_login();
@@ -40,36 +44,42 @@ $context = context_system::instance();
$PAGE->set_context($context); $PAGE->set_context($context);
/* Delete the service */ /* Delete the service */
if ($deleteservice && confirm_sesskey()) { if (boolval($deleteid) && confirm_sesskey()) {
$DB->delete_records("local_webhooks_service", array("id" => $deleteservice)); $DB->delete_records("local_webhooks_service", array("id" => $deleteid));
redirect($PAGE->url, new lang_string("deleted", "moodle")); redirect($PAGE->url, new lang_string("eventwebserviceservicedeleted", "webservice"));
} }
/* Retrieving a list of services */ /* Retrieving a list of services */
$select = null; $callbacks = $DB->get_records_select("local_webhooks_service", null, null, $DB->sql_order_by_text("id"));
$callbacks = $DB->get_records_select("local_webhooks_service", $select, null, $DB->sql_order_by_text("id"));
/* Switching the status of the service */
if (boolval($hideshowid) && confirm_sesskey()) {
$callback = $callbacks[$hideshowid];
if (!empty($callback)) {
$callback->enable = !boolval($callback->enable);
$DB->update_record("local_webhooks_service", $callback);
redirect($PAGE->url, new lang_string("eventwebserviceserviceupdated", "webservice"));
}
}
/* Page template */ /* Page template */
$titlepage = new lang_string("managerservice", "local_webhooks"); $titlepage = new lang_string("externalservices", "webservice");
$PAGE->set_pagelayout("standard"); $PAGE->set_pagelayout("admin");
$PAGE->set_title($titlepage); $PAGE->set_title($titlepage);
$PAGE->set_heading($titlepage); $PAGE->set_heading($titlepage);
/* The page title */ /* The page title */
$PAGE->navbar->add(new lang_string("local", "moodle")); $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("pluginname", "local_webhooks"));
$PAGE->navbar->add($titlepage, $baseurl); $PAGE->navbar->add($titlepage, $baseurl);
echo $OUTPUT->header(); echo $OUTPUT->header();
/* Table declaration */ /* Table declaration */
$table = new flexible_table("callbacks-table"); $table = new flexible_table("webhooks-service-table");
/* Customize the table */ /* Customize the table */
$table->define_columns(array("title", "url", "actions")); $table->define_columns(array("title", "url", "actions"));
$table->define_headers(array( $table->define_headers(array(new lang_string("name", "moodle"), new lang_string("url", "moodle"), new lang_string("actions", "moodle")));
new lang_string("name", "moodle"),
new lang_string("url", "moodle"),
new lang_string("actions", "moodle")));
$table->define_baseurl($baseurl); $table->define_baseurl($baseurl);
$table->setup(); $table->setup();
@@ -78,20 +88,28 @@ foreach ($callbacks as $callback) {
$titlecallback = html_writer::div($callback->title, "title"); $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";
$hideshowstring = new lang_string("enable", "moodle");
if (boolval($callback->enable)) {
$hideshowicon = "t/hide";
$hideshowstring = new lang_string("disable", "moodle");
}
/* Link to enable / disable the service */
$hideshowlink = new moodle_url($managerservice, array("hideshowid" => $callback->id, "sesskey" => sesskey()));
$hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring));
/* Link for editing */ /* Link for editing */
$editlink = new moodle_url($editservice, $editlink = new moodle_url($editservice, array("serviceid" => $callback->id));
array("idservice" => $callback->id)); $edititem = $OUTPUT->action_icon($editlink, new pix_icon("t/edit", new lang_string("edit", "moodle")));
$edititem = $OUTPUT->action_icon($editlink,
new pix_icon("t/edit", get_string("edit")));
/* Link to remove */ /* Link to remove */
$deletelink = new moodle_url($managerservice, $deletelink = new moodle_url($managerservice, array("deleteid" => $callback->id, "sesskey" => sesskey()));
array("deleteservice" => $callback->id, "sesskey" => sesskey())); $deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon("t/delete", new lang_string("delete", "moodle")));
$deleteitem = $OUTPUT->action_icon($deletelink,
new pix_icon("t/delete", get_string("delete")));
/* Adding data to the table */ /* Adding data to the table */
$table->add_data(array($titlecallback, $urlcallback, $edititem . $deleteitem)); $table->add_data(array($titlecallback, $urlcallback, $hideshowitem . $edititem . $deleteitem));
} }
/* Display the table */ /* Display the table */
@@ -99,7 +117,6 @@ $table->print_html();
/* Add service button */ /* Add service button */
$addurl = new moodle_url("/local/webhooks/editservice.php"); $addurl = new moodle_url("/local/webhooks/editservice.php");
echo $OUTPUT->single_button($addurl, echo $OUTPUT->single_button($addurl, new lang_string("addaservice", "webservice"), "get");
new lang_string("addaservice", "webservice"), "get");
echo $OUTPUT->footer(); echo $OUTPUT->footer();
+5 -11
View File
@@ -26,20 +26,14 @@ defined("MOODLE_INTERNAL") || die();
$settings = null; $settings = null;
if ($hassiteconfig) { if ($hassiteconfig) {
$settings = new admin_settingpage("local_webhooks", $settings = new admin_settingpage("local_webhooks", new lang_string("pluginname", "local_webhooks"));
new lang_string("pluginname", "local_webhooks"));
$ADMIN->add("localplugins", $settings); $ADMIN->add("localplugins", $settings);
$settings->add(new admin_setting_configcheckbox( /* The switch of the interceptor of events */
"local_webhooks/enable", $settings->add(new admin_setting_configcheckbox("local_webhooks/enable", new lang_string("enable", "moodle"), new lang_string("enablews", "webservice"), false));
new lang_string("enable", "moodle"),
new lang_string("enablews", "webservice"),
false));
/* Link to the service manager */ /* Link to the service manager */
$linktext = new lang_string("managerservice", "local_webhooks"); $linktext = new lang_string("externalservices", "webservice");
$linkurl = new moodle_url("/local/webhooks/managerservice.php"); $linkurl = new moodle_url("/local/webhooks/managerservice.php");
$settings->add(new admin_setting_heading("local_webhooks_managerservice", null, $settings->add(new admin_setting_heading("local_webhooks_managerservice", null, html_writer::link($linkurl, $linktext)));
html_writer::link($linkurl, $linktext)));
} }
+4 -3
View File
@@ -23,8 +23,9 @@
*/ */
defined("MOODLE_INTERNAL") || die(); defined("MOODLE_INTERNAL") || die();
$plugin->release = "0.1.0 (Build: 2017102500)";
$plugin->version = 2017102500; $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_ALPHA; $plugin->maturity = MATURITY_STABLE;