Merge pull request #1 from valentineus/multiple-choice-url
Multiple choice url
This commit is contained in:
commit
7862e885ed
@ -24,19 +24,68 @@
|
|||||||
|
|
||||||
namespace local_webhooks;
|
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 {
|
class events {
|
||||||
|
/**
|
||||||
|
* External handler.
|
||||||
|
*
|
||||||
|
* @param object $event
|
||||||
|
*/
|
||||||
public static function handler($event) {
|
public static function handler($event) {
|
||||||
$enabled = boolval(get_config('local_webhooks', 'enabled'));
|
$config = get_config("local_webhooks");
|
||||||
$url = get_config('local_webhooks', 'url');
|
|
||||||
|
|
||||||
if ($enabled && !empty($url)) {
|
if (boolval($config->enable)) {
|
||||||
$data = $event->get_data();
|
$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 = 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);
|
||||||
|
}
|
||||||
}
|
}
|
81
classes/forms.php
Normal file
81
classes/forms.php
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
16
db/install.xml
Normal file
16
db/install.xml
Normal file
@ -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>
|
91
editservice.php
Normal file
91
editservice.php
Normal file
@ -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();
|
@ -15,16 +15,12 @@
|
|||||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
// 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
|
* @package local_webhooks
|
||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$string['local_webhooksdescription'] = '';
|
$string["managerservice"] = "Service management manager";
|
||||||
$string['pluginname'] = 'WebHook\'s';
|
$string["pluginname"] = "WebHooks";
|
||||||
$string['enabled'] = 'Enabled';
|
|
||||||
$string['enabled_help'] = 'Enable event tracking.';
|
|
||||||
$string['url'] = 'URL';
|
|
||||||
$string['url_help'] = 'Web address of the remote service.';
|
|
@ -15,16 +15,12 @@
|
|||||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
// 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
|
* @package local_webhooks
|
||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$string['local_webhooksdescription'] = '';
|
$string["managerservice"] = "Менеджер управления службами";
|
||||||
$string['pluginname'] = 'WebHook\'s';
|
$string["pluginname"] = "WebHooks";
|
||||||
$string['enabled'] = 'Включить';
|
|
||||||
$string['enabled_help'] = 'Включить отслеживание событий.';
|
|
||||||
$string['url'] = 'URL';
|
|
||||||
$string['url_help'] = 'Веб-адрес удалённой службы.';
|
|
105
managerservice.php
Normal file
105
managerservice.php
Normal file
@ -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();
|
23
settings.php
23
settings.php
@ -22,15 +22,24 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined("MOODLE_INTERNAL") || die();
|
||||||
|
|
||||||
|
$settings = null;
|
||||||
if ($hassiteconfig) {
|
if ($hassiteconfig) {
|
||||||
$settings = new admin_settingpage('local_webhooks', get_string('pluginname', 'local_webhooks'));
|
$settings = new admin_settingpage("local_webhooks",
|
||||||
$ADMIN->add('localplugins', $settings);
|
new lang_string("pluginname", "local_webhooks"));
|
||||||
|
|
||||||
$settings->add(new admin_setting_configcheckbox('local_webhooks/enabled', get_string('enabled', 'local_webhooks'),
|
$ADMIN->add("localplugins", $settings);
|
||||||
get_string('enabled_help', 'local_webhooks'), false));
|
|
||||||
|
|
||||||
$settings->add(new admin_setting_configtext('local_webhooks/url', get_string('url', 'local_webhooks'),
|
$settings->add(new admin_setting_configcheckbox(
|
||||||
get_string('url_help', 'local_webhooks'), 'http://example.com/endpoint', PARAM_URL, 40));
|
"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)));
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user