Compare commits

...
98 Commits
Author SHA1 Message Date
Valentin Popov 482d15db8f Bump version
Signed-off-by: Valentin Popov <info@valentineus.link>
2020-05-16 01:59:03 +04:00
Valentin PopovandGitHub 9d70f553bb Merge pull request #19 from catalyst/requires-v3.0.0-stable
Set minimum required version to Moodle 3.7.0
2020-05-16 00:57:28 +04:00
Valentin PopovandGitHub b77e2a2cdb Merge pull request #18 from catalyst/issue15-v3.0.0-stable
Add null privacy provider to fix #15
2020-05-16 00:56:45 +04:00
Dmitrii Metelkin f89cdba127 Set minimum required version to Moodle 3.7.0 2020-04-22 09:21:33 +10:00
Dmitrii Metelkin 1acd3ef21d Add null privacy provider to fix #15 2020-04-22 09:16:57 +10:00
Valentin Popov 3f74278add Bump 3.0.4 version
Signed-off-by: Valentin Popov <info@valentineus.link>
2020-04-14 13:32:14 +04:00
Valentin Popov 4e64c0bcd2 Version fix
Signed-off-by: Valentin Popov <info@valentineus.link>
2019-02-17 03:38:45 +04:00
Valentin Popov 835f5516e8 Correction problem tag display
Signed-off-by: Valentin Popov <info@valentineus.link>
2019-02-17 03:36:52 +04:00
Valentin Popov 833434c5ba Formatting code
Signed-off-by: Valentin Popov <info@valentineus.link>
2019-02-17 03:34:52 +04:00
Valentin Popov 8eda3bc6bb Version update
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-11-02 02:51:29 +04:00
Valentin Popov 9cb5bd0760 Bug fixes
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-11-02 02:38:31 +04:00
Valentin Popov 2f04aeab6d Correction of possible problems
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-11-02 02:06:47 +04:00
Valentin Popov 849d7126d8 Correction of work with event names
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-11-02 02:03:17 +04:00
Valentin Popov d8f3a9f3ed Formatting code and eliminating possible errors
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-11-02 01:07:14 +04:00
Valentin Popov f9772b1fb9 Fix check MOODLE_INTERNAL
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-06-19 22:22:45 +04:00
Valentin Popov 3fa97bad31 Fix error install.xml
Signed-off-by: Valentin Popov <info@valentineus.link>
2018-06-19 19:49:00 +04:00
Valentin Popov bdaf1d35b2 Change version 2017-11-26 11:20:22 +04:00
Valentin Popov 7cfdf29600 Local class for calling events 2017-11-26 11:15:50 +04:00
Valentin Popov bec8dcdc08 Update event registration classes 2017-11-23 22:00:36 +04:00
Valentin Popov 2ae949bbc3 Adding a logging system 2017-11-23 21:55:40 +04:00
Valentin Popov de3c3a6553 Correcting errors, adding a logging system 2017-11-23 21:54:50 +04:00
Valentin Popov 05512c5440 Repeated refactoring of the event handler 2017-11-23 19:29:36 +04:00
Valentin Popov 91754489b0 Renaming a file 2017-11-23 18:57:22 +04:00
Valentin Popov f8b85a270c Refactoring the code of the event handler 2017-11-23 18:54:31 +04:00
Valentin Popov 4bf6f61131 External backup function 2017-11-23 18:44:30 +04:00
Valentin Popov 3da34ec7f1 Fix the link 2017-11-23 18:12:42 +04:00
Valentin Popov 4f342659d4 Updating external functions 2017-11-23 18:11:33 +04:00
Valentin Popov 0bc809ba07 Refactoring the backup recovery code 2017-11-23 18:09:56 +04:00
Valentin Popov 03d22ef096 Refactoring the code for creating forms 2017-11-23 17:58:29 +04:00
Valentin Popov 1c87dae035 Refactoring the service manager code 2017-11-23 17:56:59 +04:00
Valentin Popov 5639dc7b0f Refactoring the code of the service editor 2017-11-23 17:37:41 +04:00
Valentin Popov 1ad4527c1d External code of the library 2017-11-23 17:24:40 +04:00
Valentin Popov 57cac60ab3 Code refactoring 2017-11-22 13:59:02 +04:00
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
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
25 changed files with 1348 additions and 448 deletions
+45 -39
View File
@@ -1,35 +1,38 @@
language: php
sudo: true
sudo: false
addons:
firefox: "latest-esr"
postgresql: "9.6"
apt:
packages:
- "oracle-java8-installer"
- "oracle-java8-set-default"
os: "linux"
cache:
directories:
- "$HOME/.composer/cache"
- "$HOME/.npm"
php:
- 5.6
- 7.0
- 7.1
- 7.2
env:
- DB=pgsql MOODLE_BRANCH=MOODLE_26_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_27_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_28_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_29_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_30_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_31_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_32_STABLE
- DB=pgsql MOODLE_BRANCH=MOODLE_33_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_26_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_27_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_28_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_29_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_30_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_31_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_32_STABLE
- DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
global:
- MOODLE_BRANCH=MOODLE_35_STABLE
matrix:
- DB=mysqli
- DB=pgsql
before_install:
- phpenv config-rm xdebug.ini
- nvm install 8.9
- nvm use 8.9
- cd ../..
- composer selfupdate
- composer create-project -n --no-dev moodlerooms/moodle-plugin-ci ci ^1
- composer create-project -n --no-dev --prefer-dist moodlerooms/moodle-plugin-ci ci ^2
- export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH"
install:
@@ -40,31 +43,34 @@ script:
- moodle-plugin-ci phpcpd
- moodle-plugin-ci phpmd
- moodle-plugin-ci codechecker
- moodle-plugin-ci csslint
- moodle-plugin-ci shifter
- moodle-plugin-ci jshint
- moodle-plugin-ci validate
- moodle-plugin-ci savepoints
- moodle-plugin-ci mustache
- moodle-plugin-ci grunt
- moodle-plugin-ci phpunit
- moodle-plugin-ci behat
jobs:
include:
stage: deploy
- stage: test old
env: DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
php: 5.6
env:
- DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
- stage: deploy
php: 7.2
php: 7.1
before_deploy:
- cd "$TRAVIS_REPO_SLUG"
- git stash --all
- /bin/sh build.sh
before_deploy:
- cd $TRAVIS_REPO_SLUG
- git stash --all
- /bin/sh build.sh
deploy:
api_key: $GITHUB_PROJECT_TOKEN
email: "info@valentineus.link"
file: "../build/*.zip"
file_glob: true
provider: releases
skip_cleanup: true
deploy:
provider: releases
skip_cleanup: true
file: "../local_webhooks.zip"
email: "info@valentineus.link"
api_key: $GITHUB_PROJECT_TOKEN
on:
tags: true
on:
tags: true
+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)
[![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)
[![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!**:
This plugin is in active development.
Using Webhooks, your application will be able to receive notifications of changes to selected topics and their fields.
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
+20 -9
View File
@@ -1,21 +1,32 @@
#!/bin/sh
# Author: Valentin Popov
# Email: info@valentineus.link
# Date: 2017-10-19
# Usage: /bin/sh build.sh
# Date: 2018-06-19
# Usage: /bin/sh ./build.sh
# Description: Build the final package for installation in Moodle.
# Updating the Environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
export PATH="$PATH:/usr/local/scripts"
# Build the package
cd ..
mv "./moodle-webhooks" "./local_webhooks"
zip -9 -r "local_webhooks.zip" "local_webhooks" \
-x "local_webhooks/.git*" \
-x "local_webhooks/.travis.yml" \
-x "local_webhooks/build.sh"
# Current project
PROJECT="local_webhooks"
# Defining directories
DIRECTORY="$(pwd)"
NAMEDIR="$(basename $DIRECTORY)"
TMPDIR="$(mktemp --directory)"
# Creating a Temporary Directory
cp --recursive --verbose "../$NAMEDIR" "$TMPDIR/$PROJECT"
mkdir --parents --verbose "$DIRECTORY/build"
cd "$TMPDIR"
# Creating an archive
zip -9 -r "$DIRECTORY/build/$PROJECT.zip" "$PROJECT" \
-x "$PROJECT/.git*" \
-x "$PROJECT/.travis.yml" \
-x "$PROJECT/build*"
# End of work
exit 0
-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;
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
public static function get_name() {
return new lang_string('create', 'moodle');
}
/**
* Returns description of what happened.
*
* @throws \coding_exception
*/
public function get_description() {
return new lang_string('backup', 'moodle');
}
/**
* Get URL related to the action.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/index.php');
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
public static function get_name() {
return new lang_string('update', 'moodle');
}
/**
* Returns description of what happened.
*
* @throws \coding_exception
*/
public function get_description() {
return new lang_string('backupfinished', 'moodle');
}
/**
* Get URL related to the action.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/index.php');
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
+73
View File
@@ -0,0 +1,73 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
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.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/editservice.php', array('serviceid' => $this->objectid));
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'r';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
public static function get_name() {
return new lang_string('create', 'moodle');
}
/**
* Returns description of what happened.
*
* @throws \coding_exception
*/
public function get_description() {
return new lang_string('eventwebserviceservicecreated', 'webservice');
}
/**
* Get URL related to the action.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/editservice.php', array('serviceid' => $this->objectid));
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'c';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
public static function get_name() {
return new lang_string('deleted', 'moodle');
}
/**
* Returns description of what happened.
*
* @throws \coding_exception
*/
public function get_description() {
return new lang_string('eventwebserviceservicedeleted', 'webservice');
}
/**
* Get URL related to the action.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/index.php');
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'd';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
+75
View File
@@ -0,0 +1,75 @@
<?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();
use core\event\base;
use lang_string;
use moodle_url;
/**
* 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 base {
/**
* Return localised event name.
*
* @throws \coding_exception
*/
public static function get_name() {
return new lang_string('update', 'moodle');
}
/**
* Returns description of what happened.
*
* @throws \coding_exception
*/
public function get_description() {
return new lang_string('eventwebserviceserviceupdated', 'webservice');
}
/**
* Get URL related to the action.
*
* @throws \moodle_exception
*/
public function get_url() {
return new moodle_url('/local/webhooks/editservice.php', array('serviceid' => $this->objectid));
}
/**
* Init method.
*/
protected function init() {
$this->data['crud'] = 'u';
$this->data['edulevel'] = self::LEVEL_OTHER;
$this->data['objecttable'] = 'local_webhooks_service';
}
}
-118
View File
@@ -1,118 +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/>.
/**
* 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 report_eventlist_list_generator;
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);
}
/**
* Unpacks data for display.
*
* @param object $record
*/
public function set_data($record) {
$record->events = unserialize(gzuncompress(base64_decode($record->events)));
return parent::set_data($record);
}
/**
* 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");
/* Token */
$mform->addElement("text", "token",
new lang_string("token", "webservice"),
array("size" => 60));
$mform->setType("token", PARAM_NOTAGS);
/* 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("advcheckbox", $event["eventname"], $event["eventname"]);
}
/* Displays groups of items */
foreach ($events as $key => $event) {
$mform->addGroup($event, "events", $key, "<br />", true);
}
/* Control Panel */
$this->add_action_buttons(true);
}
}
+40 -43
View File
@@ -24,7 +24,17 @@
namespace local_webhooks;
defined("MOODLE_INTERNAL") || die();
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once(__DIR__ . '/../lib.php');
require_once(__DIR__ . '/../locallib.php');
require_once($CFG->libdir . '/filelib.php');
use curl;
use local_webhooks_events;
/**
* Defines how to work with events.
@@ -32,79 +42,66 @@ defined("MOODLE_INTERNAL") || die();
* @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) {
$config = get_config("local_webhooks");
if (boolval($config->enable)) {
$data = $event->get_data();
self::transmitter($data);
}
}
/**
* Transmitter, processing event and services.
*
* @param array $data
* @throws \dml_exception
* @throws \coding_exception
*/
private static function transmitter($data) {
global $DB;
public static function events($event) {
$data = $event->get_data();
$callbacks = $DB->get_recordset("local_webhooks_service");
if ($callbacks->valid()) {
if (!empty($callbacks = local_webhooks_get_list_records())) {
foreach ($callbacks as $callback) {
self::handler_callback($data, $callback);
}
}
$callbacks->close();
}
/**
* Processes each callback.
*
* @param array $data
* @param array $data
* @param object $callback
*
* @throws \coding_exception
* @throws \dml_exception
*/
private static function handler_callback($data, $callback) {
if ($callback->enable) {
$events = unserialize(gzuncompress(base64_decode($callback->events)));
global $CFG;
if (boolval($events[$data["eventname"]])) {
/* Adding to the data token */
if (boolval($callback->token)) {
$data["token"] = $callback->token;
}
if ((bool) $callback->enable && !empty($callback->events[$data['eventname']])) {
$urlparse = parse_url($CFG->wwwroot);
self::send($data, $callback);
}
$data['host'] = $urlparse['host'];
$data['token'] = $callback->token;
$data['extra'] = $callback->other;
self::send($data, $callback);
}
}
/**
* Sending data to the node.
*
* @param array $data
* @param array $data
* @param object $callback
*
* @return array
* @throws \coding_exception
* @throws \dml_exception
*/
private static function send($data, $callback) {
$curl = new curl();
$package = self::packup($data);
$curl::request($callback->url, $package);
}
$curl->setHeader(array('Content-Type: application/' . $callback->type));
$curl->post($callback->url, json_encode($data));
/**
* Packs the data for transmission.
*
* @param array $data
*/
private static function packup($data) {
return json_encode($data);
$response = $curl->getResponse();
local_webhooks_events::response_answer($callback->id, $response);
return $response;
}
}
@@ -15,12 +15,28 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Strings for component "local_webhooks", language "ru".
* Privacy Subsystem implementation for local_webhooks.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @package local_webhooks
* @copyright 2020 Dmitrii Metelkin <dmitriim@catalyst-net.au>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$string["managerservice"] = "Менеджер управления службами";
$string["pluginname"] = "WebHooks";
namespace local_webhooks\privacy;
defined('MOODLE_INTERNAL') || die();
class provider implements
// This plugin does not store any personal user data.
\core_privacy\local\metadata\null_provider {
/**
* Get the language string identifier with the component's language
* file to explain why this plugin stores no data.
*
* @return string
*/
public static function get_reason() : string {
return 'privacy:metadata';
}
}
+131
View File
@@ -0,0 +1,131 @@
<?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 forms.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once($CFG->libdir . '/formslib.php');
/**
* 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 {
/**
* Defines the standard structure of the form.
*
* @throws \coding_exception
*/
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'));
}
}
/**
* 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 {
/**
* Defines the standard structure of the form.
*
* @throws \coding_exception
*/
protected function definition() {
$mform =& $this->_form;
$size = ['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'), $size);
$mform->addRule('title', null, 'required');
$mform->setType('title', PARAM_NOTAGS);
/* Callback address */
$mform->addElement('text', 'url', new lang_string('url', 'moodle'), $size);
$mform->addRule('url', null, 'required');
$mform->setType('url', PARAM_URL);
/* Enabling the service */
$mform->addElement('advcheckbox', 'enable', new lang_string('enable', 'moodle'));
$mform->setType('enable', PARAM_BOOL);
$mform->setDefault('enable', 1);
$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 = [
'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();
$events = [];
/* Formation of the list of elements */
foreach ($eventlist as $event) {
/* Escaping event names */
$eventname = base64_encode($event['eventname']);
$events[$event['component']][] =& $mform->createElement('checkbox', $eventname, $event['eventname']);
}
/* Displays groups of items */
foreach ($events as $key => $event) {
$mform->addGroup($event, 'events', $key, '<br />');
}
/* Control Panel */
$this->add_action_buttons();
}
}
+7 -7
View File
@@ -22,14 +22,14 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined("MOODLE_INTERNAL") || die();
defined('MOODLE_INTERNAL') || die();
$observers = array(
array(
"eventname" => "*",
"callback" => "\local_webhooks\\events::handler",
"includefile" => null,
"priority" => 200,
"internal" => true
)
'callback' => '\local_webhooks\handler::events',
'eventname' => '*',
'includefile' => null,
'internal' => true,
'priority' => 200,
),
);
+7 -3
View File
@@ -1,5 +1,7 @@
<?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="local/webhooks/db" VERSION="2018061900" 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>
@@ -7,12 +9,14 @@
<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" />
<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="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>
+48 -37
View File
@@ -15,36 +15,33 @@
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Service editor.
* Page for 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
*/
require_once(__DIR__ . "/../../config.php");
require_once(__DIR__ . "/classes/forms.php");
require_once(__DIR__ . '/../../config.php');
require_once(__DIR__ . '/classes/service_form.php');
require_once(__DIR__ . '/lib.php');
$idservice = optional_param("idservice", 0, PARAM_INT);
require_once($CFG->libdir . '/adminlib.php');
require_login();
/* Optional parameters */
$serviceid = optional_param('serviceid', 0, PARAM_INT);
/* 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);
$urlparameters = array('serviceid' => $serviceid);
$baseurl = new moodle_url('/local/webhooks/editservice.php', $urlparameters);
$managerservice = new moodle_url('/local/webhooks/index.php');
/* Configure the context of the page */
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
$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);
$mform = new service_edit_form($PAGE->url);
/* Cancel processing */
if ($mform->is_cancelled()) {
@@ -52,40 +49,54 @@ if ($mform->is_cancelled()) {
}
/* Getting the data */
if ($idediting = boolval($idservice)) {
$servicerecord = $DB->get_record("local_webhooks_service", array("id" => $idservice), "*", MUST_EXIST);
$servicerecord = new stdClass();
if (($editing = (bool) $serviceid) === true) {
$servicerecord = local_webhooks_get_record($serviceid);
if (is_array($servicerecord->events)) {
$events = array();
/* Escaping event names */
foreach ($servicerecord->events as $eventname => $eventstatus) {
$eventname = base64_encode($eventname);
$events[$eventname] = $eventstatus;
}
$servicerecord->events = $events;
}
$mform->set_data($servicerecord);
}
/* Processing of received data */
if ($data = $mform->get_data()) {
if (empty($data->enable)) {
$data->enable = 0;
if (!empty($data = $mform->get_data())) {
if (is_array($data->events)) {
$events = array();
/* Deciphering event names */
foreach ($data->events as $eventname => $eventstatus) {
$eventname = (string) base64_decode($eventname);
$events[$eventname] = $eventstatus;
}
$data->events = $events;
}
/* Packing of data */
$data->events = base64_encode(gzcompress(serialize($data->events), 9));
if ($idediting) {
$data->id = $idservice;
$DB->update_record("local_webhooks_service", $data);
if ($editing) {
$data->id = $serviceid;
local_webhooks_update_record($data, false);
redirect($managerservice, new lang_string('eventwebserviceserviceupdated', 'webservice'));
} else {
$DB->insert_record("local_webhooks_service", $data);
local_webhooks_update_record($data);
redirect($managerservice, new lang_string('eventwebserviceservicecreated', 'webservice'));
}
redirect($managerservice);
}
/* Page template */
$PAGE->set_pagelayout("admin");
/* The page title */
$titlepage = new lang_string('externalservice', 'webservice');
$PAGE->navbar->add($titlepage);
$PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage);
/* The page title */
$PAGE->navbar->add(new lang_string("localplugins", "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 */
+146
View File
@@ -0,0 +1,146 @@
<?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(__DIR__ . '/lib.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/tablelib.php');
/* Optional parameters */
$backupservices = optional_param('getbackup', 0, PARAM_BOOL);
$deleteid = optional_param('deleteid', 0, PARAM_INT);
$hideshowid = optional_param('hideshowid', 0, PARAM_INT);
/* Link generation */
$editservice = '/local/webhooks/editservice.php';
$managerservice = '/local/webhooks/index.php';
$restorebackup = '/local/webhooks/restorebackup.php';
$baseurl = new moodle_url($managerservice);
/* Configure the context of the page */
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
$context = context_system::instance();
/* Delete the service */
if ((bool) $deleteid) {
local_webhooks_remove_record($deleteid);
redirect($PAGE->url, new lang_string('eventwebserviceservicedeleted', 'webservice'));
}
/* Retrieving a list of services */
$callbacks = local_webhooks_get_list_records();
/* Upload settings as a file */
if ((bool) $backupservices) {
$filecontent = local_webhooks_create_backup();
$filename = 'webhooks_' . date('U') . '.backup';
send_file($filecontent, $filename, 0, 0, true, true);
}
/* Switching the status of the service */
if ((bool) $hideshowid) {
$callback = $callbacks[$hideshowid];
if (!empty($callback)) {
$callback->enable = !(bool) $callback->enable;
local_webhooks_update_record($callback, false);
redirect($PAGE->url, new lang_string('eventwebserviceserviceupdated', 'webservice'));
}
}
/* The page title */
$titlepage = new lang_string('pluginname', 'local_webhooks');
$PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage);
echo $OUTPUT->header();
/* Table declaration */
$table = new flexible_table('webhooks-service-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');
/* Defining service status */
$hideshowicon = 't/show';
$hideshowstring = new lang_string('enable', 'moodle');
if ((bool) $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));
$hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring));
/* Link for editing */
$editlink = new moodle_url($editservice, array('serviceid' => $callback->id));
$edititem = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', new lang_string('edit', 'moodle')));
/* Link to remove */
$deletelink = new moodle_url($managerservice, array('deleteid' => $callback->id));
$deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', new lang_string('delete', 'moodle')));
/* Adding data to the table */
$table->add_data(array($titlecallback, $urlcallback, $hideshowitem . $edititem . $deleteitem));
}
/* Display the table */
$table->print_html();
/* Add service button */
$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);
echo $OUTPUT->single_button($restorebackupurl, new lang_string('restore', 'moodle'), 'get');
echo $OUTPUT->footer();
+2 -2
View File
@@ -22,5 +22,5 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
$string["managerservice"] = "Service management manager";
$string["pluginname"] = "WebHooks";
$string['pluginname'] = 'WebHooks';
$string['privacy:metadata'] = 'WebHooks does not store any personal data.';
+183
View File
@@ -0,0 +1,183 @@
<?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/>.
/**
* Library code used by the service control interfaces.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/locallib.php');
/**
* Getting a list of all services.
*
* @param int $limitfrom
* @param int $limitnum
*
* @return array
* @throws \dml_exception
*/
function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
global $DB;
$listservices = $DB->get_records('local_webhooks_service', null, 'id', '*', $limitfrom, $limitnum);
foreach ($listservices as $servicerecord) {
if (!empty($servicerecord->events)) {
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
}
}
return $listservices;
}
/**
* Getting information about the service.
*
* @param int $serviceid
*
* @return object
* @throws \dml_exception
*/
function local_webhooks_get_record($serviceid = 0) {
global $DB;
$servicerecord = $DB->get_record('local_webhooks_service', array('id' => $serviceid), '*', MUST_EXIST);
if (!empty($servicerecord->events)) {
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
}
return $servicerecord;
}
/**
* Clear the database table.
*
* @throws \dml_exception
*/
function local_webhooks_remove_list_records() {
global $DB;
$DB->delete_records('local_webhooks_service');
}
/**
* Delete the record.
*
* @param int $serviceid
*
* @throws \dml_exception
* @throws \coding_exception
*/
function local_webhooks_remove_record($serviceid = 0) {
global $DB;
$DB->delete_records('local_webhooks_service', array('id' => $serviceid));
local_webhooks_events::service_deleted($serviceid);
}
/**
* Update the record in the database.
*
* @param object $data
* @param boolean $insert
*
* @return boolean
* @throws \dml_exception
* @throws \coding_exception
*/
function local_webhooks_update_record($data, $insert = true) {
global $DB;
if (empty($data->events)) {
$data->events = array();
}
$data->events = local_webhooks_archiving_data($data->events);
if ((bool) $insert) {
$result = $DB->insert_record('local_webhooks_service', $data);
local_webhooks_events::service_added($result);
} else {
$result = $DB->update_record('local_webhooks_service', $data);
local_webhooks_events::service_updated($data->id);
}
return (bool) $result;
}
/**
* Make a backup copy of all the services.
*
* @return string
* @throws \dml_exception
* @throws \coding_exception
*/
function local_webhooks_create_backup() {
$listservices = local_webhooks_get_list_records();
$listservices = local_webhooks_archiving_data($listservices);
local_webhooks_events::backup_performed();
return $listservices;
}
/**
* Restore the data from the backup.
*
* @param string $listservices
*
* @throws \dml_exception
* @throws \coding_exception
*/
function local_webhooks_restore_backup($listservices = '') {
$listservices = local_webhooks_unarchive_data($listservices);
local_webhooks_remove_list_records();
foreach ($listservices as $servicerecord) {
local_webhooks_update_record($servicerecord);
}
local_webhooks_events::backup_restored();
}
/**
* Compress an array into a string.
*
* @param array $data
*
* @return string
*/
function local_webhooks_archiving_data(array $data = array()) {
return base64_encode(gzcompress(serialize($data), 3));
}
/**
* Gets an array from a compressed string.
*
* @param string $data
*
* @return array
*/
function local_webhooks_unarchive_data($data = '') {
return unserialize(gzuncompress(base64_decode($data)));
}
+153
View File
@@ -0,0 +1,153 @@
<?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/>.
/**
* Classes of modules.
*
* @package local_webhooks
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Description of functions of the call of events
*
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class local_webhooks_events {
/**
* Call the event when creating a backup.
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function backup_performed() {
$context = context_system::instance();
$event = local_webhooks\event\backup_performed::create(
array(
'context' => $context,
'objectid' => 0,
)
);
$event->trigger();
}
/**
* Call the event when restoring from a backup.
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function backup_restored() {
$context = context_system::instance();
$event = local_webhooks\event\backup_restored::create(
array(
'context' => $context,
'objectid' => 0,
)
);
$event->trigger();
}
/**
* Call event when the response is received from the service
*
* @param int $objectid Service ID
* @param array $response Server response
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function response_answer($objectid = 0, array $response = array()) {
$context = context_system::instance();
$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,
'objectid' => $objectid,
'other' => array('status' => $status),
)
);
$event->trigger();
}
/**
* Call the event when the service is added.
*
* @param int $objectid Service ID
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function service_added($objectid = 0) {
$context = context_system::instance();
$event = local_webhooks\event\service_added::create(
compact('context', 'objectid')
);
$event->trigger();
}
/**
* Call the event when the service is deleted.
*
* @param int $objectid Service ID
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function service_deleted($objectid = 0) {
$context = context_system::instance();
$event = local_webhooks\event\service_deleted::create(
compact('context', 'objectid')
);
$event->trigger();
}
/**
* Call event when the service is updated.
*
* @param int $objectid Service ID
*
* @throws \coding_exception
* @throws \dml_exception
*/
public static function service_updated($objectid = 0) {
$context = context_system::instance();
$event = local_webhooks\event\service_updated::create(
compact('context', 'objectid')
);
$event->trigger();
}
}
-105
View File
@@ -1,105 +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/>.
/**
* 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("localplugins", "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();
+64
View File
@@ -0,0 +1,64 @@
<?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 the 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/service_form.php');
require_once(__DIR__ . '/lib.php');
require_once($CFG->libdir . '/adminlib.php');
/* Link generation */
$baseurl = new moodle_url('/local/webhooks/restorebackup.php');
$managerservice = new moodle_url('/local/webhooks/index.php');
/* Configure the context of the page */
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
$context = context_system::instance();
/* Create an editing form */
$mform = new service_backup_form($PAGE->url);
/* Cancel processing */
if ($mform->is_cancelled()) {
redirect($managerservice);
}
/* Processing the received file */
if (!empty($data = $mform->get_data())) {
$content = $mform->get_file_content('backupfile');
local_webhooks_restore_backup($content);
redirect($managerservice, new lang_string('restorefinished', 'moodle'));
}
/* The page title */
$titlepage = new lang_string('backup', 'moodle');
$PAGE->navbar->add($titlepage);
$PAGE->set_heading($titlepage);
$PAGE->set_title($titlepage);
echo $OUTPUT->header();
/* Displays the form */
$mform->display();
echo $OUTPUT->footer();
+10 -18
View File
@@ -22,24 +22,16 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined("MOODLE_INTERNAL") || die();
defined('MOODLE_INTERNAL') || die();
/* @var \admin_root $ADMIN */
$settings = null;
if ($hassiteconfig) {
$settings = new admin_settingpage("local_webhooks",
new lang_string("pluginname", "local_webhooks"));
$ADMIN->add("localplugins", $settings);
$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("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)));
$ADMIN->add(
'server', new admin_externalpage(
'local_webhooks',
new lang_string('pluginname', 'local_webhooks'),
new moodle_url('/local/webhooks/index.php')
)
);
}
+7 -6
View File
@@ -22,9 +22,10 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined("MOODLE_INTERNAL") || die();
$plugin->release = "0.3.0 (Build: 2017102610)";
$plugin->version = 2017102610;
$plugin->requires = 2016112900;
$plugin->component = "local_webhooks";
$plugin->maturity = MATURITY_BETA;
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'local_webhooks';
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '3.0.5 (Build: 2020051600)';
$plugin->requires = 2019052000;
$plugin->version = 2020051600;