Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
4e64c0bcd2 | |||
835f5516e8 | |||
833434c5ba | |||
8eda3bc6bb | |||
9cb5bd0760 | |||
2f04aeab6d | |||
849d7126d8 | |||
d8f3a9f3ed | |||
f9772b1fb9 | |||
3fa97bad31 |
17
.github/workflows/main.yml
vendored
17
.github/workflows/main.yml
vendored
@ -1,17 +0,0 @@
|
|||||||
name: Workflow
|
|
||||||
|
|
||||||
on: [push]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
mirror:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: yesolutions/mirror-action@master
|
|
||||||
with:
|
|
||||||
REMOTE: 'https://git.popov.link/moodle/local_webhooks.git'
|
|
||||||
GIT_USERNAME: ${{ secrets.GIT_USERNAME }}
|
|
||||||
GIT_PASSWORD: ${{ secrets.GIT_PASSWORD }}
|
|
74
.travis.yml
74
.travis.yml
@ -1,25 +1,38 @@
|
|||||||
language: php
|
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:
|
php:
|
||||||
- 5.6
|
- 7.0
|
||||||
|
- 7.1
|
||||||
- 7.2
|
- 7.2
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_32_STABLE
|
global:
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_33_STABLE
|
- MOODLE_BRANCH=MOODLE_35_STABLE
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_34_STABLE
|
matrix:
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_32_STABLE
|
- DB=mysqli
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
|
- DB=pgsql
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_34_STABLE
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
|
- phpenv config-rm xdebug.ini
|
||||||
|
- nvm install 8.9
|
||||||
|
- nvm use 8.9
|
||||||
- cd ../..
|
- cd ../..
|
||||||
- composer selfupdate
|
- 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"
|
- export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH"
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@ -30,31 +43,34 @@ script:
|
|||||||
- moodle-plugin-ci phpcpd
|
- moodle-plugin-ci phpcpd
|
||||||
- moodle-plugin-ci phpmd
|
- moodle-plugin-ci phpmd
|
||||||
- moodle-plugin-ci codechecker
|
- moodle-plugin-ci codechecker
|
||||||
- moodle-plugin-ci csslint
|
- moodle-plugin-ci validate
|
||||||
- moodle-plugin-ci shifter
|
- moodle-plugin-ci savepoints
|
||||||
- moodle-plugin-ci jshint
|
- moodle-plugin-ci mustache
|
||||||
|
- moodle-plugin-ci grunt
|
||||||
- moodle-plugin-ci phpunit
|
- moodle-plugin-ci phpunit
|
||||||
- moodle-plugin-ci behat
|
- moodle-plugin-ci behat
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
stage: deploy
|
- stage: test old
|
||||||
|
env: DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
|
||||||
|
php: 5.6
|
||||||
|
|
||||||
env:
|
- stage: deploy
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_34_STABLE
|
php: 7.2
|
||||||
|
|
||||||
php: 7.2
|
before_deploy:
|
||||||
|
- cd "$TRAVIS_REPO_SLUG"
|
||||||
|
- git stash --all
|
||||||
|
- /bin/sh build.sh
|
||||||
|
|
||||||
before_deploy:
|
deploy:
|
||||||
- cd $TRAVIS_REPO_SLUG
|
api_key: $GITHUB_PROJECT_TOKEN
|
||||||
- git stash --all
|
email: "info@valentineus.link"
|
||||||
- /bin/sh build.sh
|
file: "../build/*.zip"
|
||||||
|
file_glob: true
|
||||||
|
provider: releases
|
||||||
|
skip_cleanup: true
|
||||||
|
|
||||||
deploy:
|
on:
|
||||||
provider: releases
|
tags: true
|
||||||
skip_cleanup: true
|
|
||||||
file: "../local_webhooks.zip"
|
|
||||||
email: "info@valentineus.link"
|
|
||||||
api_key: $GITHUB_PROJECT_TOKEN
|
|
||||||
on:
|
|
||||||
tags: true
|
|
29
README.md
29
README.md
@ -1,5 +1,8 @@
|
|||||||
# Moodle WebHook's
|
# Moodle WebHook's
|
||||||
[](https://github.com/valentineus/moodle-webhooks/releases)
|
[](https://github.com/valentineus/moodle-webhooks/releases)
|
||||||
|
[](https://travis-ci.org/valentineus/moodle-webhooks)
|
||||||
|
[](https://www.codacy.com/app/valentineus/moodle-webhooks)
|
||||||
|
[](https://gitter.im/valentineus/moodle-webhooks)
|
||||||
|
|
||||||
Adding Webhooks to Moodle.
|
Adding Webhooks to Moodle.
|
||||||
The Webhooks feature allows applications to receive real-time notification of changes to certain data.
|
The Webhooks feature allows applications to receive real-time notification of changes to certain data.
|
||||||
@ -17,11 +20,27 @@ Features:
|
|||||||
* Use a secret phrase to authenticate requests;
|
* Use a secret phrase to authenticate requests;
|
||||||
* [JSON](https://en.wikipedia.org/wiki/JSON) - Format of outgoing data;
|
* [JSON](https://en.wikipedia.org/wiki/JSON) - Format of outgoing data;
|
||||||
|
|
||||||
## Documentation
|
## Installation
|
||||||
|
|
||||||
* [Install the plugin](docs/getting-started.md#installation).
|
Get the installation package in any of the available methods:
|
||||||
* [User guide](docs/getting-started.md#user-guide).
|
|
||||||
* [Request format](docs/getting-started.md#request-format).
|
* [GitHub Releases](https://github.com/valentineus/moodle-webhooks/releases).
|
||||||
|
* [Compilation from the source code](#build).
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Self-assembly package is as follows:
|
||||||
|
|
||||||
|
* Clone the repository:
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/valentineus/moodle-webhooks.git moodle-webhooks
|
||||||
|
```
|
||||||
|
|
||||||
|
* Run the build script:
|
||||||
|
```bash
|
||||||
|
cd ./moodle-webhooks
|
||||||
|
/bin/sh build.sh
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
@ -29,4 +48,4 @@ Features:
|
|||||||
|
|
||||||
[GNU GPLv3](LICENSE.txt).
|
[GNU GPLv3](LICENSE.txt).
|
||||||
Copyright (c)
|
Copyright (c)
|
||||||
[Valentin Popov](mailto:info@valentineus.link).
|
[Valentin Popov](mailto:info@valentineus.link).
|
29
build.sh
29
build.sh
@ -1,21 +1,32 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Author: Valentin Popov
|
# Author: Valentin Popov
|
||||||
# Email: info@valentineus.link
|
# Email: info@valentineus.link
|
||||||
# Date: 2017-10-19
|
# Date: 2018-06-19
|
||||||
# Usage: /bin/sh build.sh
|
# Usage: /bin/sh ./build.sh
|
||||||
# Description: Build the final package for installation in Moodle.
|
# Description: Build the final package for installation in Moodle.
|
||||||
|
|
||||||
# Updating the Environment
|
# Updating the Environment
|
||||||
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
export PATH="$PATH:/usr/local/scripts"
|
export PATH="$PATH:/usr/local/scripts"
|
||||||
|
|
||||||
# Build the package
|
# Current project
|
||||||
cd ..
|
PROJECT="local_webhooks"
|
||||||
mv "./moodle-webhooks" "./local_webhooks"
|
|
||||||
zip -9 -r "local_webhooks.zip" "local_webhooks" \
|
# Defining directories
|
||||||
-x "local_webhooks/.git*" \
|
DIRECTORY="$(pwd)"
|
||||||
-x "local_webhooks/.travis.yml" \
|
NAMEDIR="$(basename $DIRECTORY)"
|
||||||
-x "local_webhooks/build.sh"
|
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
|
# End of work
|
||||||
exit 0
|
exit 0
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,40 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 backup_performed extends \core\event\base {
|
class backup_performed extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "c";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("create", "moodle");
|
return new lang_string('create', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return new \lang_string("backup", "moodle");
|
return new lang_string('backup', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/index.php");
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,40 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 backup_restored extends \core\event\base {
|
class backup_restored extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "u";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("update", "moodle");
|
return new lang_string('update', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return new \lang_string("backupfinished", "moodle");
|
return new lang_string('backupfinished', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/index.php");
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,38 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 response_answer extends \core\event\base {
|
class response_answer extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "r";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("answer", "moodle");
|
return new lang_string('answer', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return $this->other["status"];
|
return $this->other['status'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,40 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 service_added extends \core\event\base {
|
class service_added extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "c";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("create", "moodle");
|
return new lang_string('create', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return new \lang_string("eventwebserviceservicecreated", "webservice");
|
return new lang_string('eventwebserviceservicecreated', 'webservice');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,40 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 service_deleted extends \core\event\base {
|
class service_deleted extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "d";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("deleted", "moodle");
|
return new lang_string('deleted', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return new \lang_string("eventwebserviceservicedeleted", "webservice");
|
return new lang_string('eventwebserviceservicedeleted', 'webservice');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/index.php");
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,65 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registration of the system of events.
|
|
||||||
*
|
|
||||||
* @package local_webhooks
|
|
||||||
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace local_webhooks\event;
|
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines how to work with events.
|
|
||||||
*
|
|
||||||
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
||||||
*/
|
|
||||||
class service_deletedall extends \core\event\base {
|
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "d";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return localised event name.
|
|
||||||
*/
|
|
||||||
public static function get_name() {
|
|
||||||
return new \lang_string("deleted", "moodle");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of what happened.
|
|
||||||
*/
|
|
||||||
public function get_description() {
|
|
||||||
return new \lang_string("deletecompletely", "moodle");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get URL related to the action.
|
|
||||||
*/
|
|
||||||
public function get_url() {
|
|
||||||
return new \moodle_url("/local/webhooks/index.php");
|
|
||||||
}
|
|
||||||
}
|
|
@ -24,7 +24,11 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
use core\event\base;
|
||||||
|
use lang_string;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@ -32,34 +36,40 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
* @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 service_updated extends \core\event\base {
|
class service_updated extends base {
|
||||||
/**
|
|
||||||
* Init method.
|
|
||||||
*/
|
|
||||||
protected function init() {
|
|
||||||
$this->data["crud"] = "u";
|
|
||||||
$this->data["edulevel"] = self::LEVEL_OTHER;
|
|
||||||
$this->data["objecttable"] = "local_webhooks_service";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return localised event name.
|
* Return localised event name.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function get_name() {
|
public static function get_name() {
|
||||||
return new \lang_string("update", "moodle");
|
return new lang_string('update', 'moodle');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns description of what happened.
|
* Returns description of what happened.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public function get_description() {
|
public function get_description() {
|
||||||
return new \lang_string("eventwebserviceserviceupdated", "webservice");
|
return new lang_string('eventwebserviceserviceupdated', 'webservice');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get URL related to the action.
|
* Get URL related to the action.
|
||||||
|
*
|
||||||
|
* @throws \moodle_exception
|
||||||
*/
|
*/
|
||||||
public function get_url() {
|
public function get_url() {
|
||||||
return new \moodle_url("/local/webhooks/editservice.php", array("serviceid" => $this->objectid));
|
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';
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,13 +24,20 @@
|
|||||||
|
|
||||||
namespace local_webhooks;
|
namespace local_webhooks;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
require_once(__DIR__ . "/../locallib.php");
|
global $CFG;
|
||||||
require_once(__DIR__ . "/../lib.php");
|
|
||||||
|
require_once(__DIR__ . '/../lib.php');
|
||||||
|
require_once(__DIR__ . '/../locallib.php');
|
||||||
|
|
||||||
|
require_once($CFG->libdir . '/filelib.php');
|
||||||
|
|
||||||
|
use curl;
|
||||||
|
use local_webhooks_events;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines event handlers.
|
* 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
|
||||||
@ -40,17 +47,61 @@ class handler {
|
|||||||
* External handler.
|
* External handler.
|
||||||
*
|
*
|
||||||
* @param object $event
|
* @param object $event
|
||||||
|
*
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
public static function events($event) {
|
public static function events($event) {
|
||||||
$data = $event->get_data();
|
$data = $event->get_data();
|
||||||
|
|
||||||
if (!is_array($recordlist = local_webhooks_cache_get($data["eventname"]))) {
|
if (!empty($callbacks = local_webhooks_get_list_records())) {
|
||||||
$recordlist = local_webhooks_search_services_by_event($data["eventname"], true);
|
foreach ($callbacks as $callback) {
|
||||||
local_webhooks_cache_set($data["eventname"], $recordlist);
|
self::handler_callback($data, $callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($recordlist as $record) {
|
|
||||||
local_webhooks_send_request($data, $record);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes each callback.
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param object $callback
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
|
*/
|
||||||
|
private static function handler_callback($data, $callback) {
|
||||||
|
global $CFG;
|
||||||
|
|
||||||
|
if ((bool) $callback->enable && !empty($callback->events[$data['eventname']])) {
|
||||||
|
$urlparse = parse_url($CFG->wwwroot);
|
||||||
|
|
||||||
|
$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 object $callback
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
|
*/
|
||||||
|
private static function send($data, $callback) {
|
||||||
|
$curl = new curl();
|
||||||
|
$curl->setHeader(array('Content-Type: application/' . $callback->type));
|
||||||
|
$curl->post($callback->url, json_encode($data));
|
||||||
|
|
||||||
|
$response = $curl->getResponse();
|
||||||
|
local_webhooks_events::response_answer($callback->id, $response);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,87 +22,9 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
require_once(__DIR__ . "/../lib.php");
|
require_once($CFG->libdir . '/formslib.php');
|
||||||
|
|
||||||
require_once($CFG->libdir . "/formslib.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
$size = array("size" => 60);
|
|
||||||
|
|
||||||
/* Form heading */
|
|
||||||
$mform->addElement("header", "editserviceheader", new lang_string("service", "webservice"));
|
|
||||||
|
|
||||||
/* Name of the service */
|
|
||||||
$mform->addElement("text", "title", new lang_string("name", "moodle"), $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 = 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 = local_webhooks_get_list_events();
|
|
||||||
$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 */
|
|
||||||
$this->add_action_buttons(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of the form of restoration.
|
* Description of the form of restoration.
|
||||||
@ -111,32 +33,95 @@ class service_edit_form extends moodleform {
|
|||||||
* @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 service_backup_form extends moodleform {
|
class service_backup_form extends moodleform {
|
||||||
/**
|
|
||||||
* @param string $baseurl
|
|
||||||
*/
|
|
||||||
public function __construct($baseurl) {
|
|
||||||
parent::__construct($baseurl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the standard structure of the form.
|
* Defines the standard structure of the form.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
protected function definition() {
|
protected function definition() {
|
||||||
$mform =& $this->_form;
|
$mform =& $this->_form;
|
||||||
|
|
||||||
/* Form heading */
|
/* Form heading */
|
||||||
$mform->addElement("header", "editserviceheader", new lang_string("restore", "moodle"));
|
$mform->addElement('header', 'editserviceheader', new lang_string('restore', 'moodle'));
|
||||||
|
|
||||||
/* Flag for deleting existing data */
|
|
||||||
$mform->addElement("advcheckbox", "deleterecords", new lang_string("deleteall", "moodle"));
|
|
||||||
$mform->setType("deleterecords", PARAM_BOOL);
|
|
||||||
$mform->setDefault("deleterecords", 1);
|
|
||||||
|
|
||||||
/* Download the file */
|
/* Download the file */
|
||||||
$mform->addElement("filepicker", "backupfile", new lang_string("file", "moodle"));
|
$mform->addElement('filepicker', 'backupfile', new lang_string('file', 'moodle'));
|
||||||
$mform->addRule("backupfile", null, "required");
|
$mform->addRule('backupfile', null, 'required');
|
||||||
|
|
||||||
/* Control Panel */
|
/* Control Panel */
|
||||||
$this->add_action_buttons(true, new lang_string("restore", "moodle"));
|
$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' ], $event[ 'eventname' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Displays groups of items */
|
||||||
|
foreach ($events as $key => $event) {
|
||||||
|
$mform->addGroup($event, 'events', $key, '<br />');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Control Panel */
|
||||||
|
$this->add_action_buttons();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,145 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes the plugin tables.
|
|
||||||
*
|
|
||||||
* @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 . "/tablelib.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes the main table of the plugin.
|
|
||||||
*
|
|
||||||
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
||||||
*/
|
|
||||||
class local_webhooks_table extends table_sql {
|
|
||||||
/**
|
|
||||||
* Manager address.
|
|
||||||
*
|
|
||||||
* @var string $manager
|
|
||||||
*/
|
|
||||||
protected static $manager = "/local/webhooks/index.php";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Editor's address.
|
|
||||||
*
|
|
||||||
* @var string $editor
|
|
||||||
*/
|
|
||||||
protected static $editor = "/local/webhooks/editservice.php";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor.
|
|
||||||
*
|
|
||||||
* @param string $uniqueid The unique identifier of the table.
|
|
||||||
*/
|
|
||||||
public function __construct($uniqueid) {
|
|
||||||
parent::__construct($uniqueid);
|
|
||||||
$this->define_table_columns();
|
|
||||||
$this->define_table_configs();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines the basic settings of the table.
|
|
||||||
*/
|
|
||||||
public function define_table_configs() {
|
|
||||||
$this->set_sql("*", "{local_webhooks_service}", "1");
|
|
||||||
$this->collapsible(false);
|
|
||||||
$this->is_downloadable(false);
|
|
||||||
$this->no_sorting("actions");
|
|
||||||
$this->pageable(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines the main columns and table headers.
|
|
||||||
*/
|
|
||||||
public function define_table_columns() {
|
|
||||||
$columns = array(
|
|
||||||
"title",
|
|
||||||
"url",
|
|
||||||
"events",
|
|
||||||
"actions"
|
|
||||||
);
|
|
||||||
|
|
||||||
$headers = array(
|
|
||||||
new lang_string("name", "moodle"),
|
|
||||||
new lang_string("url", "moodle"),
|
|
||||||
new lang_string("edulevel", "moodle"),
|
|
||||||
new lang_string("actions", "moodle")
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->define_columns($columns);
|
|
||||||
$this->define_headers($headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Specifies the display of a column with actions.
|
|
||||||
*
|
|
||||||
* @param object $row Data from the database.
|
|
||||||
* @return string Displayed data.
|
|
||||||
*/
|
|
||||||
public function col_actions($row) {
|
|
||||||
global $OUTPUT;
|
|
||||||
|
|
||||||
$hideshowicon = "t/show";
|
|
||||||
$hideshowstring = new lang_string("enable", "moodle");
|
|
||||||
if (boolval($row->enable)) {
|
|
||||||
$hideshowicon = "t/hide";
|
|
||||||
$hideshowstring = new lang_string("disable", "moodle");
|
|
||||||
}
|
|
||||||
|
|
||||||
$hideshowlink = new moodle_url(self::$manager, array("hideshowid" => $row->id, "sesskey" => sesskey()));
|
|
||||||
$hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring));
|
|
||||||
|
|
||||||
$editlink = new moodle_url(self::$editor, array("serviceid" => $row->id, "sesskey" => sesskey()));
|
|
||||||
$edititem = $OUTPUT->action_icon($editlink, new pix_icon("t/edit", new lang_string("edit", "moodle")));
|
|
||||||
|
|
||||||
$deletelink = new moodle_url(self::$manager, array("deleteid" => $row->id, "sesskey" => sesskey()));
|
|
||||||
$deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon("t/delete", new lang_string("delete", "moodle")));
|
|
||||||
|
|
||||||
$html = $hideshowitem . $edititem . $deleteitem;
|
|
||||||
return $html;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Specifies the display of a column with events.
|
|
||||||
*
|
|
||||||
* @param object $row Data from the database.
|
|
||||||
* @return string Displayed data.
|
|
||||||
*/
|
|
||||||
public function col_events($row) {
|
|
||||||
$eventlist = local_webhooks_deserialization_data($row->events);
|
|
||||||
return count($eventlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Specifies the display of the column with the service name.
|
|
||||||
*
|
|
||||||
* @param object $row Data from the database.
|
|
||||||
* @return string Displayed data.
|
|
||||||
*/
|
|
||||||
public function col_title($row) {
|
|
||||||
$link = new moodle_url(self::$editor, array("serviceid" => $row->id, "sesskey" => sesskey()));
|
|
||||||
$html = html_writer::link($link, $row->title);
|
|
||||||
return $html;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Definition of the plug-in cache.
|
|
||||||
*
|
|
||||||
* @package local_webhooks
|
|
||||||
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
||||||
*/
|
|
||||||
|
|
||||||
$definitions = array(
|
|
||||||
"webhooks_services" => array(
|
|
||||||
"mode" => cache_store::MODE_APPLICATION,
|
|
||||||
"requiredataguarantee" => true,
|
|
||||||
"staticacceleration" => true
|
|
||||||
)
|
|
||||||
);
|
|
@ -22,14 +22,14 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
$observers = array(
|
$observers = array(
|
||||||
array(
|
array(
|
||||||
"callback" => "\local_webhooks\\handler::events",
|
'callback' => '\local_webhooks\handler::events',
|
||||||
"eventname" => "*",
|
'eventname' => '*',
|
||||||
"includefile" => null,
|
'includefile' => null,
|
||||||
"internal" => true,
|
'internal' => true,
|
||||||
"priority" => 200
|
'priority' => 200,
|
||||||
)
|
),
|
||||||
);
|
);
|
@ -1,5 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<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">
|
<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>
|
<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>
|
||||||
|
115
db/services.php
115
db/services.php
@ -1,115 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file registers the plugin's external functions.
|
|
||||||
*
|
|
||||||
* @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();
|
|
||||||
|
|
||||||
$functions = array(
|
|
||||||
"local_webhooks_change_status" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "change_status",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Change the status of the service.",
|
|
||||||
"type" => "write"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_search_services_by_event" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "search_services_by_event",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Search for services that contain the specified event.",
|
|
||||||
"type" => "read"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_get_record" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "get_record",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Get the record from the database.",
|
|
||||||
"type" => "read"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_get_list_records" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "get_list_records",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Get all records from the database.",
|
|
||||||
"type" => "read"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_get_list_events" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "get_list_events",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Get a list of all system events.",
|
|
||||||
"type" => "read"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_create_record" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "create_record",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Create an entry in the database.",
|
|
||||||
"type" => "write"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_update_record" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "update_record",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Update the record in the database.",
|
|
||||||
"type" => "write"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_delete_record" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "delete_record",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Delete the record from the database.",
|
|
||||||
"type" => "write"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_delete_all_records" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "delete_all_records",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Delete all records from the database.",
|
|
||||||
"type" => "write"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_create_backup" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "create_backup",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Create a backup.",
|
|
||||||
"type" => "read"
|
|
||||||
),
|
|
||||||
|
|
||||||
"local_webhooks_restore_backup" => array(
|
|
||||||
"classname" => "local_webhooks_external",
|
|
||||||
"methodname" => "restore_backup",
|
|
||||||
"classpath" => "local/webhooks/externallib.php",
|
|
||||||
"description" => "Restore from a backup.",
|
|
||||||
"type" => "write"
|
|
||||||
)
|
|
||||||
);
|
|
@ -1,52 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keeps track of upgrades to the 'local_webhooks' plugin.
|
|
||||||
*
|
|
||||||
* @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__ . "/../lib.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to upgrade 'local_webhooks'.
|
|
||||||
*
|
|
||||||
* @param number $oldversion
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function xmldb_local_webhooks_upgrade($oldversion) {
|
|
||||||
global $CFG, $DB;
|
|
||||||
|
|
||||||
/* Update from version 3.0.0 */
|
|
||||||
if ($oldversion < 2017112600) {
|
|
||||||
$rs = $DB->get_recordset("local_webhooks_service", null, "id", "*", 0, 0);
|
|
||||||
foreach ($rs as $record) {
|
|
||||||
if (!empty($record->events)) {
|
|
||||||
$record->events = unserialize(gzuncompress(base64_decode($record->events)));
|
|
||||||
local_webhooks_update_record($record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$rs->close();
|
|
||||||
upgrade_plugin_savepoint(true, 2017112600, "local", "webhooks");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
@ -1,111 +0,0 @@
|
|||||||
# Getting Started
|
|
||||||
|
|
||||||
## Navigation
|
|
||||||
|
|
||||||
* [Installation](#installation)
|
|
||||||
* [Build](#build)
|
|
||||||
* [User guide](#user-guide)
|
|
||||||
* [Guide to the manager](#guide-to-the-manager)
|
|
||||||
* [Guide to the editor](#guide-to-the-editor)
|
|
||||||
* [Request format](#request-format)
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Get the installation package in any of the available methods:
|
|
||||||
|
|
||||||
* [GitHub Releases](https://github.com/valentineus/moodle-webhooks/releases).
|
|
||||||
* [Compilation from the source code](#build).
|
|
||||||
|
|
||||||
### Build
|
|
||||||
|
|
||||||
Self-assembly package is as follows:
|
|
||||||
|
|
||||||
* Clone the repository:
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/valentineus/moodle-webhooks.git moodle-webhooks
|
|
||||||
```
|
|
||||||
|
|
||||||
* Run the build script:
|
|
||||||
```bash
|
|
||||||
cd ./moodle-webhooks
|
|
||||||
/bin/sh build.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## User guide
|
|
||||||
|
|
||||||
After you install the plug-in, the Service Manager appears on the `Server` tab in the administration panel.
|
|
||||||
|
|
||||||
To open the page, go:
|
|
||||||
`Site administration` ->
|
|
||||||
`Server` ->
|
|
||||||
`WebHooks`.
|
|
||||||
|
|
||||||
### Guide to the manager
|
|
||||||
|
|
||||||
The main window looks like this:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
On the main page you can see the list of services and manage each service separately.
|
|
||||||
|
|
||||||
Column description
|
|
||||||
* "**Name**" shows the name of the service.
|
|
||||||
* "**URL**" indicates the address of the service to which notifications are received.
|
|
||||||
* "**Actions**" allows you to enable / disable the service, edit and delete.
|
|
||||||
|
|
||||||
Description of control buttons:
|
|
||||||
* "**Add service**" opens a page for creating a new service.
|
|
||||||
* "**Backup**" loads the backup file of the service list.
|
|
||||||
* "**Restore**" redirects the data recovery page from the backup.
|
|
||||||
|
|
||||||
### Guide to the editor
|
|
||||||
|
|
||||||
During the editing and creation of the service, this page opens:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Description of fields:
|
|
||||||
* "**Name**" stores an arbitrary name for the service.
|
|
||||||
* "**URL**" stores the address of the service to which notifications will be sent as a POST request.
|
|
||||||
* "**Token**" allows you to specify an individual key that will allow an external service to identify requests.
|
|
||||||
* "**Advanced**" stores a large string passed to the service.
|
|
||||||
This can be useful for some services or users.
|
|
||||||
* "**Content Type**" allows you to configure the type of outbound requests if there are compatibility issues.
|
|
||||||
|
|
||||||
The "**All events**" list contains a list of all events registered in the system.
|
|
||||||
The selected events will notify the service.
|
|
||||||
|
|
||||||
## Request format
|
|
||||||
|
|
||||||
Events come in
|
|
||||||
[JSON](https://en.wikipedia.org/wiki/JSON)
|
|
||||||
format.
|
|
||||||
|
|
||||||
An example of an observed course event:
|
|
||||||
|
|
||||||
```JSON
|
|
||||||
{
|
|
||||||
"eventname": "\\core\\event\\course_viewed",
|
|
||||||
"component": "core",
|
|
||||||
"action": "viewed",
|
|
||||||
"target": "course",
|
|
||||||
"objecttable": null,
|
|
||||||
"objectid": null,
|
|
||||||
"crud": "r",
|
|
||||||
"edulevel": 2,
|
|
||||||
"contextid": 2,
|
|
||||||
"contextlevel": 50,
|
|
||||||
"contextinstanceid": "1",
|
|
||||||
"userid": "2",
|
|
||||||
"courseid": "1",
|
|
||||||
"relateduserid": null,
|
|
||||||
"anonymous": 0,
|
|
||||||
"other": null,
|
|
||||||
"timecreated": 1512961456,
|
|
||||||
"host": "localhost",
|
|
||||||
"token": "",
|
|
||||||
"extra": ""
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
[Detailed description of the fields](https://docs.moodle.org/dev/Event_2#Properties).
|
|
Binary file not shown.
Before Width: | Height: | Size: 165 KiB |
Binary file not shown.
Before Width: | Height: | Size: 122 KiB |
@ -22,22 +22,22 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once(__DIR__ . "/../../config.php");
|
require_once(__DIR__ . '/../../config.php');
|
||||||
require_once(__DIR__ . "/classes/service_form.php");
|
require_once(__DIR__ . '/classes/service_form.php');
|
||||||
require_once(__DIR__ . "/lib.php");
|
require_once(__DIR__ . '/lib.php');
|
||||||
|
|
||||||
require_once($CFG->libdir . "/adminlib.php");
|
require_once($CFG->libdir . '/adminlib.php');
|
||||||
|
|
||||||
/* Optional parameters */
|
/* Optional parameters */
|
||||||
$serviceid = optional_param("serviceid", 0, PARAM_INT);
|
$serviceid = optional_param('serviceid', 0, PARAM_INT);
|
||||||
|
|
||||||
/* Link generation */
|
/* Link generation */
|
||||||
$urlparameters = array("serviceid" => $serviceid);
|
$urlparameters = array('serviceid' => $serviceid);
|
||||||
$baseurl = new moodle_url("/local/webhooks/editservice.php", $urlparameters);
|
$baseurl = new moodle_url('/local/webhooks/editservice.php', $urlparameters);
|
||||||
$managerservice = new moodle_url("/local/webhooks/index.php");
|
$managerservice = new moodle_url('/local/webhooks/index.php');
|
||||||
|
|
||||||
/* Configure the context of the page */
|
/* Configure the context of the page */
|
||||||
admin_externalpage_setup("local_webhooks", "", null, $baseurl, array());
|
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
|
|
||||||
/* Create an editing form */
|
/* Create an editing form */
|
||||||
@ -50,25 +50,50 @@ if ($mform->is_cancelled()) {
|
|||||||
|
|
||||||
/* Getting the data */
|
/* Getting the data */
|
||||||
$servicerecord = new stdClass();
|
$servicerecord = new stdClass();
|
||||||
if ($editing = boolval($serviceid)) {
|
if (($editing = (bool) $serviceid) === true) {
|
||||||
$servicerecord = local_webhooks_get_record($serviceid);
|
$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);
|
$mform->set_data($servicerecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Processing of received data */
|
/* Processing of received data */
|
||||||
if (($data = $mform->get_data()) && confirm_sesskey()) {
|
if (!empty($data = $mform->get_data())) {
|
||||||
if ($editing) {
|
if (is_array($data->events)) {
|
||||||
$data->id = $serviceid;
|
$events = array();
|
||||||
local_webhooks_update_record($data);
|
|
||||||
} else {
|
/* Deciphering event names */
|
||||||
local_webhooks_create_record($data);
|
foreach ($data->events as $eventname => $eventstatus) {
|
||||||
|
$eventname = (string) base64_decode($eventname);
|
||||||
|
$events[$eventname] = $eventstatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->events = $events;
|
||||||
}
|
}
|
||||||
|
|
||||||
redirect($managerservice, new lang_string("changessaved", "moodle"));
|
if ($editing) {
|
||||||
|
$data->id = $serviceid;
|
||||||
|
local_webhooks_update_record($data, false);
|
||||||
|
redirect($managerservice, new lang_string('eventwebserviceserviceupdated', 'webservice'));
|
||||||
|
} else {
|
||||||
|
local_webhooks_update_record($data);
|
||||||
|
redirect($managerservice, new lang_string('eventwebserviceservicecreated', 'webservice'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The page title */
|
/* The page title */
|
||||||
$titlepage = new lang_string("externalservice", "webservice");
|
$titlepage = new lang_string('externalservice', 'webservice');
|
||||||
$PAGE->navbar->add($titlepage);
|
$PAGE->navbar->add($titlepage);
|
||||||
$PAGE->set_heading($titlepage);
|
$PAGE->set_heading($titlepage);
|
||||||
$PAGE->set_title($titlepage);
|
$PAGE->set_title($titlepage);
|
||||||
@ -77,5 +102,4 @@ echo $OUTPUT->header();
|
|||||||
/* Displays the form */
|
/* Displays the form */
|
||||||
$mform->display();
|
$mform->display();
|
||||||
|
|
||||||
/* Footer */
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
643
externallib.php
643
externallib.php
@ -1,643 +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/>.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file defines the plugin's external functions.
|
|
||||||
*
|
|
||||||
* @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__ . "/lib.php");
|
|
||||||
|
|
||||||
require_once($CFG->libdir . "/externallib.php");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* External functions.
|
|
||||||
*
|
|
||||||
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
|
||||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
||||||
*/
|
|
||||||
class local_webhooks_external extends external_api {
|
|
||||||
/**
|
|
||||||
* Single template output parameters.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
private static function structure_record_parameters() {
|
|
||||||
return new external_single_structure(
|
|
||||||
array(
|
|
||||||
"id" => new external_value(PARAM_INT, "Service ID."),
|
|
||||||
"enable" => new external_value(PARAM_BOOL, "Enable or disable the service."),
|
|
||||||
"title" => new external_value(PARAM_TEXT, "Name of the service."),
|
|
||||||
"url" => new external_value(PARAM_URL, "Web address of the service."),
|
|
||||||
"type" => new external_value(PARAM_TEXT, "Used header type."),
|
|
||||||
"token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
|
|
||||||
"other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
|
|
||||||
"events" => new external_multiple_structure(
|
|
||||||
new external_single_structure(
|
|
||||||
array(
|
|
||||||
"name" => new external_value(PARAM_TEXT, "The name of the event."),
|
|
||||||
"value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
|
|
||||||
)
|
|
||||||
), "List of observed events.", VALUE_OPTIONAL
|
|
||||||
)
|
|
||||||
), "Information about the service."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Formation of the final list.
|
|
||||||
*
|
|
||||||
* @param array $listrecords
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private static function formation_list($listrecords) {
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
foreach ($listrecords as $index => $record) {
|
|
||||||
$result[$index] = (array) $record;
|
|
||||||
$result[$index]["events"] = self::formation_events($record->events);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Formation of the final list of events.
|
|
||||||
*
|
|
||||||
* @param array $listevents
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private static function formation_events($listevents) {
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
foreach ($listevents as $key => $value) {
|
|
||||||
$result[] = array("name" => $key, "value" => $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function change_status_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"serviceid" => new external_value(PARAM_INT, "Service ID.")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Change the status of the service.
|
|
||||||
*
|
|
||||||
* @param number $serviceid
|
|
||||||
* @return boolean
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function change_status($serviceid) {
|
|
||||||
$parameters = self::validate_parameters(self::change_status_parameters(), array("serviceid" => $serviceid));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
return local_webhooks_change_status($parameters["serviceid"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function change_status_returns() {
|
|
||||||
return new external_value(PARAM_BOOL, "Result of execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function search_services_by_event_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"eventname" => new external_value(PARAM_TEXT, "The name of the event."),
|
|
||||||
"active" => new external_value(PARAM_BOOL, "Filter show active or all services.")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search for services that contain the specified event.
|
|
||||||
*
|
|
||||||
* @param string $eventname
|
|
||||||
* @param boolean $active
|
|
||||||
* @return array
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function search_services_by_event($eventname, $active) {
|
|
||||||
$parameters = self::validate_parameters(self::search_services_by_event_parameters(), array("eventname" => $eventname, "active" => $active));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
if ($listrecords = local_webhooks_search_services_by_event($parameters["eventname"], $parameters["active"])) {
|
|
||||||
$result = self::formation_list($listrecords);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function search_services_by_event_returns() {
|
|
||||||
return new external_multiple_structure(
|
|
||||||
self::structure_record_parameters(), "List of services."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_record_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"serviceid" => new external_value(PARAM_INT, "Service ID.")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the record from the database.
|
|
||||||
*
|
|
||||||
* @param number $serviceid
|
|
||||||
* @return array
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_record($serviceid) {
|
|
||||||
$parameters = self::validate_parameters(self::get_record_parameters(), array("serviceid" => $serviceid));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
if ($record = local_webhooks_get_record($parameters["serviceid"])) {
|
|
||||||
$result = (array) $record;
|
|
||||||
$result["events"] = self::formation_events($record->events);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_record_returns() {
|
|
||||||
return self::structure_record_parameters();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_records_parameters() {
|
|
||||||
return new external_function_parameters(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all records from the database.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_records() {
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
if ($listrecords = local_webhooks_get_list_records()) {
|
|
||||||
$result = self::formation_list($listrecords);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_records_returns() {
|
|
||||||
return new external_multiple_structure(
|
|
||||||
self::structure_record_parameters(), "List of services."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_events_parameters() {
|
|
||||||
return new external_function_parameters(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all system events.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_events() {
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
if ($eventlist = local_webhooks_get_list_events()) {
|
|
||||||
foreach ($eventlist as $item) {
|
|
||||||
$result[] = $item["eventname"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function get_list_events_returns() {
|
|
||||||
return new external_multiple_structure(
|
|
||||||
new external_value(PARAM_TEXT, "The name of the event.")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_record_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"service" => new external_single_structure(
|
|
||||||
array(
|
|
||||||
"enable" => new external_value(PARAM_BOOL, "Enable or disable the service.", VALUE_OPTIONAL),
|
|
||||||
"title" => new external_value(PARAM_TEXT, "Name of the service."),
|
|
||||||
"url" => new external_value(PARAM_URL, "Web address of the service."),
|
|
||||||
"type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
|
|
||||||
"token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
|
|
||||||
"other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
|
|
||||||
"events" => new external_multiple_structure(
|
|
||||||
new external_single_structure(
|
|
||||||
array(
|
|
||||||
"name" => new external_value(PARAM_TEXT, "The name of the event."),
|
|
||||||
"value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
|
|
||||||
)
|
|
||||||
), "List of observed events.", VALUE_OPTIONAL
|
|
||||||
)
|
|
||||||
), "Information about the service."
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an entry in the database.
|
|
||||||
*
|
|
||||||
* @param array $service
|
|
||||||
* @return boolean
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_record($service) {
|
|
||||||
$parameters = self::validate_parameters(self::create_record_parameters(), array("service" => $service));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$record = new stdClass();
|
|
||||||
$record->other = $parameters["service"]["other"];
|
|
||||||
$record->title = $parameters["service"]["title"];
|
|
||||||
$record->token = $parameters["service"]["token"];
|
|
||||||
$record->url = $parameters["service"]["url"];
|
|
||||||
$record->events = array();
|
|
||||||
|
|
||||||
$record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : false;
|
|
||||||
$record->type = !empty($parameters["service"]["type"]) ? $parameters["service"]["type"] : "json";
|
|
||||||
|
|
||||||
foreach ($parameters["service"]["events"] as $value) {
|
|
||||||
$record->events[$value["name"]] = $value["value"];
|
|
||||||
}
|
|
||||||
|
|
||||||
return local_webhooks_create_record($record);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_record_returns() {
|
|
||||||
return new external_value(PARAM_BOOL, "Result of execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function update_record_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"service" => new external_single_structure(
|
|
||||||
array(
|
|
||||||
"id" => new external_value(PARAM_INT, "Service ID."),
|
|
||||||
"enable" => new external_value(PARAM_BOOL, "Enable or disable the service.", VALUE_OPTIONAL),
|
|
||||||
"title" => new external_value(PARAM_TEXT, "Name of the service.", VALUE_OPTIONAL),
|
|
||||||
"url" => new external_value(PARAM_URL, "Web address of the service.", VALUE_OPTIONAL),
|
|
||||||
"type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
|
|
||||||
"token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
|
|
||||||
"other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
|
|
||||||
"events" => new external_multiple_structure(
|
|
||||||
new external_single_structure(
|
|
||||||
array(
|
|
||||||
"name" => new external_value(PARAM_TEXT, "The name of the event."),
|
|
||||||
"value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
|
|
||||||
)
|
|
||||||
), "List of observed events.", VALUE_OPTIONAL
|
|
||||||
)
|
|
||||||
), "Information about the service."
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the record in the database.
|
|
||||||
*
|
|
||||||
* @param array $service
|
|
||||||
* @return boolean
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function update_record($service) {
|
|
||||||
$parameters = self::validate_parameters(self::update_record_parameters(), array("service" => $service));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$result = false;
|
|
||||||
|
|
||||||
if ($record = local_webhooks_get_record($parameters["service"]["id"])) {
|
|
||||||
$record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : $record->enable;
|
|
||||||
$record->other = !empty($parameters["service"]["other"]) ? $parameters["service"]["other"] : $record->other;
|
|
||||||
$record->title = !empty($parameters["service"]["title"]) ? $parameters["service"]["title"] : $record->title;
|
|
||||||
$record->token = !empty($parameters["service"]["token"]) ? $parameters["service"]["token"] : $record->token;
|
|
||||||
$record->type = !empty($parameters["service"]["type"]) ? $parameters["service"]["type"] : $record->type;
|
|
||||||
$record->url = !empty($parameters["service"]["url"]) ? $parameters["service"]["url"] : $record->url;
|
|
||||||
|
|
||||||
if (!empty($parameters["service"]["events"])) {
|
|
||||||
$record->events = array();
|
|
||||||
|
|
||||||
foreach ($parameters["service"]["events"] as $value) {
|
|
||||||
$record->events[$value["name"]] = $value["value"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = local_webhooks_update_record($record);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function update_record_returns() {
|
|
||||||
return new external_value(PARAM_BOOL, "Result of execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_record_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"serviceid" => new external_value(PARAM_INT, "Service ID.")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete the record from the database.
|
|
||||||
*
|
|
||||||
* @param number $serviceid
|
|
||||||
* @return boolean
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_record($serviceid) {
|
|
||||||
$parameters = self::validate_parameters(self::delete_record_parameters(), array("serviceid" => $serviceid));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
return local_webhooks_delete_record($parameters["serviceid"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_record_returns() {
|
|
||||||
return new external_value(PARAM_BOOL, "Result of execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_all_records_parameters() {
|
|
||||||
return new external_function_parameters(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete all records from the database.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_all_records() {
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
return local_webhooks_delete_all_records();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function delete_all_records_returns() {
|
|
||||||
return new external_value(PARAM_BOOL, "Result of execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_backup_parameters() {
|
|
||||||
return new external_function_parameters(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a backup.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_backup() {
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
return local_webhooks_create_backup();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function create_backup_returns() {
|
|
||||||
return new external_value(PARAM_RAW, "Backup copy.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method parameters.
|
|
||||||
*
|
|
||||||
* @return external_function_parameters
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function restore_backup_parameters() {
|
|
||||||
return new external_function_parameters(
|
|
||||||
array(
|
|
||||||
"options" => new external_single_structure(
|
|
||||||
array(
|
|
||||||
"backup" => new external_value(PARAM_RAW, "Backup copy."),
|
|
||||||
"deleterecords" => new external_value(PARAM_BOOL, "Delete or leave all records.", VALUE_OPTIONAL)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restore from a backup.
|
|
||||||
*
|
|
||||||
* @param array $options
|
|
||||||
* @since Moodle 2.9 Options available
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function restore_backup($options) {
|
|
||||||
$parameters = self::validate_parameters(self::restore_backup_parameters(), array("options" => $options));
|
|
||||||
|
|
||||||
$context = context_system::instance();
|
|
||||||
self::validate_context($context);
|
|
||||||
|
|
||||||
$deleterecords = !empty($parameters["options"]["deleterecords"]) ? $parameters["options"]["deleterecords"] : false;
|
|
||||||
local_webhooks_restore_backup($parameters["options"]["backup"], $deleterecords);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns description of method result value.
|
|
||||||
*
|
|
||||||
* @return external_description
|
|
||||||
* @since Moodle 2.2
|
|
||||||
*/
|
|
||||||
public static function restore_backup_returns() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
140
index.php
140
index.php
@ -22,79 +22,125 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once(__DIR__ . "/../../config.php");
|
require_once(__DIR__ . '/../../config.php');
|
||||||
require_once(__DIR__ . "/classes/webhooks_table.php");
|
require_once(__DIR__ . '/lib.php');
|
||||||
require_once(__DIR__ . "/lib.php");
|
|
||||||
|
|
||||||
require_once($CFG->libdir . "/adminlib.php");
|
require_once($CFG->libdir . '/adminlib.php');
|
||||||
|
require_once($CFG->libdir . '/tablelib.php');
|
||||||
|
|
||||||
/* Optional parameters */
|
/* Optional parameters */
|
||||||
$backupservices = optional_param("getbackup", 0, PARAM_BOOL);
|
$backupservices = optional_param('getbackup', 0, PARAM_BOOL);
|
||||||
$deleteall = optional_param("deleteall", 0, PARAM_INT);
|
$deleteid = optional_param('deleteid', 0, PARAM_INT);
|
||||||
$deleteid = optional_param("deleteid", 0, PARAM_INT);
|
$hideshowid = optional_param('hideshowid', 0, PARAM_INT);
|
||||||
$hideshowid = optional_param("hideshowid", 0, PARAM_INT);
|
|
||||||
|
|
||||||
/* Link generation */
|
/* Link generation */
|
||||||
$editservice = "/local/webhooks/editservice.php";
|
$editservice = '/local/webhooks/editservice.php';
|
||||||
$managerservice = "/local/webhooks/index.php";
|
$managerservice = '/local/webhooks/index.php';
|
||||||
$restorebackup = "/local/webhooks/restorebackup.php";
|
$restorebackup = '/local/webhooks/restorebackup.php';
|
||||||
$baseurl = new moodle_url($managerservice);
|
$baseurl = new moodle_url($managerservice);
|
||||||
|
|
||||||
/* Configure the context of the page */
|
/* Configure the context of the page */
|
||||||
admin_externalpage_setup("local_webhooks", "", null, $baseurl, array());
|
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
|
|
||||||
/* Delete the service */
|
/* Delete the service */
|
||||||
if (!empty($deleteid) && confirm_sesskey()) {
|
if ((bool) $deleteid) {
|
||||||
local_webhooks_delete_record($deleteid);
|
local_webhooks_remove_record($deleteid);
|
||||||
redirect($PAGE->url, new lang_string("deleted", "moodle"));
|
redirect($PAGE->url, new lang_string('eventwebserviceservicedeleted', 'webservice'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Switching the status of the service */
|
/* Retrieving a list of services */
|
||||||
if (!empty($hideshowid) && confirm_sesskey()) {
|
$callbacks = local_webhooks_get_list_records();
|
||||||
local_webhooks_change_status($hideshowid);
|
|
||||||
redirect($PAGE->url, new lang_string("changessaved", "moodle"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Deletes all data */
|
|
||||||
if (boolval($deleteall) && confirm_sesskey()) {
|
|
||||||
local_webhooks_delete_all_records();
|
|
||||||
redirect($PAGE->url, new lang_string("deleted", "moodle"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Upload settings as a file */
|
/* Upload settings as a file */
|
||||||
if (boolval($backupservices)) {
|
if ((bool) $backupservices) {
|
||||||
$filecontent = local_webhooks_create_backup();
|
$filecontent = local_webhooks_create_backup();
|
||||||
$filename = "webhooks_" . date("U") . ".backup";
|
$filename = 'webhooks_' . date('U') . '.backup';
|
||||||
send_file($filecontent, $filename, 0, 0, true, true);
|
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 */
|
/* The page title */
|
||||||
$titlepage = new lang_string("pluginname", "local_webhooks");
|
$titlepage = new lang_string('pluginname', 'local_webhooks');
|
||||||
$PAGE->set_heading($titlepage);
|
$PAGE->set_heading($titlepage);
|
||||||
$PAGE->set_title($titlepage);
|
$PAGE->set_title($titlepage);
|
||||||
echo $OUTPUT->header();
|
echo $OUTPUT->header();
|
||||||
|
|
||||||
/* Adds the add button */
|
/* Table declaration */
|
||||||
$addserviceurl = new moodle_url($editservice, array("sesskey" => sesskey()));
|
$table = new flexible_table('webhooks-service-table');
|
||||||
echo $OUTPUT->single_button($addserviceurl, new lang_string("add", "moodle"));
|
|
||||||
|
|
||||||
/* Adds a delete button */
|
/* Customize the table */
|
||||||
$deleteallurl = new moodle_url($managerservice, array("deleteall" => true, "sesskey" => sesskey()));
|
$table->define_columns(
|
||||||
echo $OUTPUT->single_button($deleteallurl, new lang_string("deleteall", "moodle"), "get");
|
array(
|
||||||
|
'title',
|
||||||
|
'url',
|
||||||
|
'actions',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
/* Adds a backup button */
|
$table->define_headers(
|
||||||
$backupurl = new moodle_url($managerservice, array("getbackup" => true));
|
array(
|
||||||
echo $OUTPUT->single_button($backupurl, new lang_string("backup", "moodle"), "get");
|
new lang_string('name', 'moodle'),
|
||||||
|
new lang_string('url', 'moodle'),
|
||||||
|
new lang_string('actions', 'moodle'),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
/* Adds a restore button */
|
|
||||||
$restorebackupurl = new moodle_url($restorebackup);
|
|
||||||
echo $OUTPUT->single_button($restorebackupurl, new lang_string("restore", "moodle"));
|
|
||||||
|
|
||||||
/* Displays the table */
|
|
||||||
$table = new local_webhooks_table("local-webhooks-table");
|
|
||||||
$table->define_baseurl($baseurl);
|
$table->define_baseurl($baseurl);
|
||||||
$table->out(25, true);
|
$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');
|
||||||
|
|
||||||
/* Footer */
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
@ -22,4 +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["pluginname"] = "WebHooks";
|
$string['pluginname'] = 'WebHooks';
|
249
lib.php
249
lib.php
@ -15,254 +15,169 @@
|
|||||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file contains the functions used by the plugin.
|
* Library code used by the service control interfaces.
|
||||||
*
|
*
|
||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
require_once(__DIR__ . "/locallib.php");
|
require_once(__DIR__ . '/locallib.php');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the status of the service.
|
* Getting a list of all services.
|
||||||
*
|
*
|
||||||
* @param number $serviceid
|
* @param int $limitfrom
|
||||||
* @return boolean
|
* @param int $limitnum
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_change_status($serviceid) {
|
function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$result = false;
|
$listservices = $DB->get_records('local_webhooks_service', null, 'id', '*', $limitfrom, $limitnum);
|
||||||
if ($record = local_webhooks_get_record($serviceid)) {
|
|
||||||
$record->enable = !boolval($record->enable);
|
|
||||||
$result = local_webhooks_update_record($record);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
foreach ($listservices as $servicerecord) {
|
||||||
}
|
if (!empty($servicerecord->events)) {
|
||||||
|
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
|
||||||
/**
|
|
||||||
* Search for services that contain the specified event.
|
|
||||||
*
|
|
||||||
* @param string $eventname
|
|
||||||
* @param boolean $active
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function local_webhooks_search_services_by_event($eventname, $active = false) {
|
|
||||||
$recordlist = local_webhooks_get_list_records();
|
|
||||||
$active = boolval($active);
|
|
||||||
$result = array();
|
|
||||||
|
|
||||||
foreach ($recordlist as $record) {
|
|
||||||
if (!empty($record->events[$eventname])) {
|
|
||||||
if ($active && boolval($record->enable)) {
|
|
||||||
$result[] = $record;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$active) {
|
|
||||||
$result[] = $record;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $listservices;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the record from the database.
|
* Getting information about the service.
|
||||||
|
*
|
||||||
|
* @param int $serviceid
|
||||||
*
|
*
|
||||||
* @param number $serviceid
|
|
||||||
* @return object
|
* @return object
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_get_record($serviceid) {
|
function local_webhooks_get_record($serviceid = 0) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$servicerecord = $DB->get_record("local_webhooks_service", array("id" => $serviceid), "*", MUST_EXIST);
|
$servicerecord = $DB->get_record('local_webhooks_service', array('id' => $serviceid), '*', MUST_EXIST);
|
||||||
|
|
||||||
if (!empty($servicerecord->events)) {
|
if (!empty($servicerecord->events)) {
|
||||||
$servicerecord->events = local_webhooks_deserialization_data($servicerecord->events);
|
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $servicerecord;
|
return $servicerecord;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all records from the database.
|
* Clear the database table.
|
||||||
*
|
*
|
||||||
* @param number $limitfrom
|
* @throws \dml_exception
|
||||||
* @param number $limitnum
|
|
||||||
* @return array
|
|
||||||
*/
|
*/
|
||||||
function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
|
function local_webhooks_remove_list_records() {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$listrecords = $DB->get_records("local_webhooks_service", null, "id", "*", $limitfrom, $limitnum);
|
$DB->delete_records('local_webhooks_service');
|
||||||
|
|
||||||
foreach ($listrecords as $servicerecord) {
|
|
||||||
if (!empty($servicerecord->events)) {
|
|
||||||
$servicerecord->events = local_webhooks_deserialization_data($servicerecord->events);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $listrecords;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of all system events.
|
* Delete the record.
|
||||||
*
|
*
|
||||||
* @return array
|
* @param int $serviceid
|
||||||
*/
|
|
||||||
function local_webhooks_get_list_events() {
|
|
||||||
return report_eventlist_list_generator::get_all_events_list(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an entry in the database.
|
|
||||||
*
|
*
|
||||||
* @param object $record
|
* @throws \dml_exception
|
||||||
* @return boolean
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_create_record($record) {
|
function local_webhooks_remove_record($serviceid = 0) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
if (!empty($record->events)) {
|
$DB->delete_records('local_webhooks_service', array('id' => $serviceid));
|
||||||
$record->events = local_webhooks_serialization_data($record->events);
|
local_webhooks_events::service_deleted($serviceid);
|
||||||
}
|
|
||||||
|
|
||||||
$result = $DB->insert_record("local_webhooks_service", $record, true, false);
|
|
||||||
|
|
||||||
/* Clear the plugin cache */
|
|
||||||
local_webhooks_cache_reset();
|
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::service_added($result);
|
|
||||||
|
|
||||||
return boolval($result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the record in the database.
|
* Update the record in the database.
|
||||||
*
|
*
|
||||||
* @param object $data
|
* @param object $data
|
||||||
|
* @param boolean $insert
|
||||||
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_update_record($record) {
|
function local_webhooks_update_record($data, $insert = true) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
if (empty($record->id)) {
|
if (empty($data->events)) {
|
||||||
print_error("missingparam", "error", null, "id");
|
$data->events = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$record->events = !empty($record->events) ? local_webhooks_serialization_data($record->events) : null;
|
$data->events = local_webhooks_archiving_data($data->events);
|
||||||
$result = $DB->update_record("local_webhooks_service", $record, false);
|
|
||||||
|
|
||||||
/* Clear the plugin cache */
|
if ((bool) $insert) {
|
||||||
local_webhooks_cache_reset();
|
$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);
|
||||||
|
}
|
||||||
|
|
||||||
/* Event notification */
|
return (bool) $result;
|
||||||
local_webhooks_events::service_updated($record->id);
|
|
||||||
|
|
||||||
return boolval($result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the record from the database.
|
* Make a backup copy of all the services.
|
||||||
*
|
|
||||||
* @param number $serviceid
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function local_webhooks_delete_record($serviceid) {
|
|
||||||
global $DB;
|
|
||||||
|
|
||||||
$result = $DB->delete_records("local_webhooks_service", array("id" => $serviceid));
|
|
||||||
|
|
||||||
/* Clear the plugin cache */
|
|
||||||
local_webhooks_cache_reset();
|
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::service_deleted($serviceid);
|
|
||||||
|
|
||||||
return boolval($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete all records from the database.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function local_webhooks_delete_all_records() {
|
|
||||||
global $DB;
|
|
||||||
|
|
||||||
$result = $DB->delete_records("local_webhooks_service", null);
|
|
||||||
|
|
||||||
/* Clear the plugin cache */
|
|
||||||
local_webhooks_cache_reset();
|
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::service_deletedall();
|
|
||||||
|
|
||||||
return boolval($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a backup.
|
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_create_backup() {
|
function local_webhooks_create_backup() {
|
||||||
$listrecords = local_webhooks_get_list_records();
|
$listservices = local_webhooks_get_list_records();
|
||||||
$result = local_webhooks_serialization_data($listrecords);
|
$listservices = local_webhooks_archiving_data($listservices);
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::backup_performed();
|
local_webhooks_events::backup_performed();
|
||||||
|
|
||||||
return $result;
|
return $listservices;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restore from a backup.
|
* Restore the data from the backup.
|
||||||
*
|
*
|
||||||
* @param string $data
|
* @param string $listservices
|
||||||
|
*
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_restore_backup($data, $deleterecords = false) {
|
function local_webhooks_restore_backup($listservices = '') {
|
||||||
$listrecords = local_webhooks_deserialization_data($data);
|
$listservices = local_webhooks_unarchive_data($listservices);
|
||||||
|
|
||||||
if (boolval($deleterecords)) {
|
local_webhooks_remove_list_records();
|
||||||
local_webhooks_delete_all_records();
|
|
||||||
|
foreach ($listservices as $servicerecord) {
|
||||||
|
local_webhooks_update_record($servicerecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($listrecords as $servicerecord) {
|
|
||||||
local_webhooks_create_record($servicerecord);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::backup_restored();
|
local_webhooks_events::backup_restored();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send the event remotely to the service.
|
* 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
|
||||||
*
|
*
|
||||||
* @param array $event
|
|
||||||
* @param object $callback
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function local_webhooks_send_request($event, $callback) {
|
function local_webhooks_unarchive_data($data = '') {
|
||||||
global $CFG;
|
return unserialize(gzuncompress(base64_decode($data)));
|
||||||
|
|
||||||
$event["host"] = parse_url($CFG->wwwroot)["host"];
|
|
||||||
$event["token"] = $callback->token;
|
|
||||||
$event["extra"] = $callback->other;
|
|
||||||
|
|
||||||
$curl = new curl();
|
|
||||||
$curl->setHeader(array("Content-Type: application/" . $callback->type));
|
|
||||||
$curl->post($callback->url, json_encode($event));
|
|
||||||
$response = $curl->getResponse();
|
|
||||||
|
|
||||||
/* Event notification */
|
|
||||||
local_webhooks_events::response_answer($callback->id, $response);
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
}
|
154
locallib.php
154
locallib.php
@ -22,71 +22,7 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
/**
|
|
||||||
* Get data from the cache by key.
|
|
||||||
*
|
|
||||||
* @param string $eventname
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function local_webhooks_cache_get($eventname) {
|
|
||||||
$cache = cache::make("local_webhooks", "webhooks_services");
|
|
||||||
return $cache->get($eventname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the data in the cache by key.
|
|
||||||
*
|
|
||||||
* @param string $eventname
|
|
||||||
* @param array $recordlist
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function local_webhooks_cache_set($eventname, $recordlist = array()) {
|
|
||||||
$cache = cache::make("local_webhooks", "webhooks_services");
|
|
||||||
return $cache->set($eventname, $recordlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete the data in the cache by key.
|
|
||||||
*
|
|
||||||
* @param string $eventname
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function local_webhooks_cache_delete($eventname) {
|
|
||||||
$cache = cache::make("local_webhooks", "webhooks_services");
|
|
||||||
return $cache->delete($eventname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cache of the plugin.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
function local_webhooks_cache_reset() {
|
|
||||||
$cache = cache::make("local_webhooks", "webhooks_services");
|
|
||||||
return $cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data serialization.
|
|
||||||
*
|
|
||||||
* @param array|object $data
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function local_webhooks_serialization_data($data) {
|
|
||||||
return serialize($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data deserialization.
|
|
||||||
*
|
|
||||||
* @param string $data
|
|
||||||
* @return array|object
|
|
||||||
*/
|
|
||||||
function local_webhooks_deserialization_data($data) {
|
|
||||||
return unserialize($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of functions of the call of events
|
* Description of functions of the call of events
|
||||||
@ -97,79 +33,121 @@ function local_webhooks_deserialization_data($data) {
|
|||||||
class local_webhooks_events {
|
class local_webhooks_events {
|
||||||
/**
|
/**
|
||||||
* Call the event when creating a backup.
|
* Call the event when creating a backup.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function backup_performed() {
|
public static function backup_performed() {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$event = local_webhooks\event\backup_performed::create(array("context" => $context, "objectid" => 0));
|
|
||||||
|
$event = local_webhooks\event\backup_performed::create(
|
||||||
|
array(
|
||||||
|
'context' => $context,
|
||||||
|
'objectid' => 0,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the event when restoring from a backup.
|
* Call the event when restoring from a backup.
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function backup_restored() {
|
public static function backup_restored() {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$event = local_webhooks\event\backup_restored::create(array("context" => $context, "objectid" => 0));
|
|
||||||
|
$event = local_webhooks\event\backup_restored::create(
|
||||||
|
array(
|
||||||
|
'context' => $context,
|
||||||
|
'objectid' => 0,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call event when the response is received from the service
|
* Call event when the response is received from the service
|
||||||
*
|
*
|
||||||
* @param number $objectid Service ID
|
* @param int $objectid Service ID
|
||||||
* @param array $response Server response
|
* @param array $response Server response
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function response_answer($objectid = 0, $response = array()) {
|
public static function response_answer($objectid = 0, array $response = array()) {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$status = "Error sending request";
|
|
||||||
|
|
||||||
if (!empty($response["HTTP/1.1"])) {
|
$status = 'Error sending request';
|
||||||
$status = $response["HTTP/1.1"];
|
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 = local_webhooks\event\response_answer::create(
|
||||||
|
array(
|
||||||
|
'context' => $context,
|
||||||
|
'objectid' => $objectid,
|
||||||
|
'other' => array('status' => $status),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the event when the service is added.
|
* Call the event when the service is added.
|
||||||
*
|
*
|
||||||
* @param number $objectid Service ID
|
* @param int $objectid Service ID
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function service_added($objectid = 0) {
|
public static function service_added($objectid = 0) {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$event = local_webhooks\event\service_added::create(array("context" => $context, "objectid" => $objectid));
|
|
||||||
|
$event = local_webhooks\event\service_added::create(
|
||||||
|
compact('context', 'objectid')
|
||||||
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the event when the service is deleted.
|
* Call the event when the service is deleted.
|
||||||
*
|
*
|
||||||
* @param number $objectid Service ID
|
* @param int $objectid Service ID
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function service_deleted($objectid = 0) {
|
public static function service_deleted($objectid = 0) {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$event = local_webhooks\event\service_deleted::create(array("context" => $context, "objectid" => $objectid));
|
|
||||||
$event->trigger();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
$event = local_webhooks\event\service_deleted::create(
|
||||||
* Call the event when all services are deleted.
|
compact('context', 'objectid')
|
||||||
*/
|
);
|
||||||
public static function service_deletedall() {
|
|
||||||
$context = context_system::instance();
|
|
||||||
$event = local_webhooks\event\service_deletedall::create(array("context" => $context, "objectid" => 0));
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call event when the service is updated.
|
* Call event when the service is updated.
|
||||||
*
|
*
|
||||||
* @param number $objectid Service ID
|
* @param int $objectid Service ID
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
public static function service_updated($objectid = 0) {
|
public static function service_updated($objectid = 0) {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
$event = local_webhooks\event\service_updated::create(array("context" => $context, "objectid" => $objectid));
|
|
||||||
|
$event = local_webhooks\event\service_updated::create(
|
||||||
|
compact('context', 'objectid')
|
||||||
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -22,18 +22,18 @@
|
|||||||
* @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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once(__DIR__ . "/../../config.php");
|
require_once(__DIR__ . '/../../config.php');
|
||||||
require_once(__DIR__ . "/classes/service_form.php");
|
require_once(__DIR__ . '/classes/service_form.php');
|
||||||
require_once(__DIR__ . "/lib.php");
|
require_once(__DIR__ . '/lib.php');
|
||||||
|
|
||||||
require_once($CFG->libdir . "/adminlib.php");
|
require_once($CFG->libdir . '/adminlib.php');
|
||||||
|
|
||||||
/* Link generation */
|
/* Link generation */
|
||||||
$baseurl = new moodle_url("/local/webhooks/restorebackup.php");
|
$baseurl = new moodle_url('/local/webhooks/restorebackup.php');
|
||||||
$managerservice = new moodle_url("/local/webhooks/index.php");
|
$managerservice = new moodle_url('/local/webhooks/index.php');
|
||||||
|
|
||||||
/* Configure the context of the page */
|
/* Configure the context of the page */
|
||||||
admin_externalpage_setup("local_webhooks", "", null, $baseurl, array());
|
admin_externalpage_setup('local_webhooks', '', null, $baseurl);
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
|
|
||||||
/* Create an editing form */
|
/* Create an editing form */
|
||||||
@ -45,14 +45,14 @@ if ($mform->is_cancelled()) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Processing the received file */
|
/* Processing the received file */
|
||||||
if (($data = $mform->get_data()) && confirm_sesskey()) {
|
if (!empty($data = $mform->get_data())) {
|
||||||
$content = $mform->get_file_content("backupfile");
|
$content = $mform->get_file_content('backupfile');
|
||||||
local_webhooks_restore_backup($content, $data->deleterecords);
|
local_webhooks_restore_backup($content);
|
||||||
redirect($managerservice, new lang_string("restorefinished", "moodle"));
|
redirect($managerservice, new lang_string('restorefinished', 'moodle'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The page title */
|
/* The page title */
|
||||||
$titlepage = new lang_string("backup", "moodle");
|
$titlepage = new lang_string('backup', 'moodle');
|
||||||
$PAGE->navbar->add($titlepage);
|
$PAGE->navbar->add($titlepage);
|
||||||
$PAGE->set_heading($titlepage);
|
$PAGE->set_heading($titlepage);
|
||||||
$PAGE->set_title($titlepage);
|
$PAGE->set_title($titlepage);
|
||||||
@ -61,5 +61,4 @@ echo $OUTPUT->header();
|
|||||||
/* Displays the form */
|
/* Displays the form */
|
||||||
$mform->display();
|
$mform->display();
|
||||||
|
|
||||||
/* Footer */
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
15
settings.php
15
settings.php
@ -22,11 +22,16 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
|
/* @var \admin_root $ADMIN */
|
||||||
|
|
||||||
if ($hassiteconfig) {
|
if ($hassiteconfig) {
|
||||||
$ADMIN->add("server", new admin_externalpage("local_webhooks",
|
$ADMIN->add(
|
||||||
new lang_string("pluginname", "local_webhooks"),
|
'server', new admin_externalpage(
|
||||||
new moodle_url("/local/webhooks/index.php")
|
'local_webhooks',
|
||||||
));
|
new lang_string('pluginname', 'local_webhooks'),
|
||||||
|
new moodle_url('/local/webhooks/index.php')
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
13
version.php
13
version.php
@ -22,11 +22,10 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
$plugin->release = "4.0.0-rc.2 (Build: 2018022500)";
|
$plugin->component = 'local_webhooks';
|
||||||
$plugin->version = 2018022500;
|
$plugin->maturity = MATURITY_STABLE;
|
||||||
$plugin->requires = 2016112900;
|
$plugin->release = '3.0.3 (Build: 2019021700)';
|
||||||
$plugin->component = "local_webhooks";
|
$plugin->requires = 2016112900;
|
||||||
$plugin->maturity = MATURITY_RC;
|
$plugin->version = 2018061920;
|
||||||
$plugin->dependencies = array("report_eventlist" => 2016120500);
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user