Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a81530d0d7 | ||
|
|
0d4bf6a208 | ||
|
|
91111b66d3 | ||
|
|
d35ce9b445 | ||
|
|
482d15db8f | ||
|
|
9d70f553bb | ||
|
|
b77e2a2cdb | ||
|
|
f89cdba127 | ||
|
|
1acd3ef21d | ||
|
|
3f74278add | ||
|
|
4e64c0bcd2 | ||
|
|
835f5516e8 | ||
|
|
833434c5ba | ||
|
|
8eda3bc6bb | ||
|
|
9cb5bd0760 | ||
|
|
2f04aeab6d | ||
|
|
849d7126d8 | ||
|
|
d8f3a9f3ed | ||
|
|
f9772b1fb9 | ||
|
|
3fa97bad31 |
@@ -0,0 +1,38 @@
|
|||||||
|
FROM composer:2.10.2@sha256:4d71c3c2109c61d5415544264b59ad4087e4c5b7244481723664138fd36d5040 AS composer
|
||||||
|
|
||||||
|
FROM node:22.23.2-bookworm-slim@sha256:d649c27dae7ba0137b3cef5dd75baa422c08dc3d9e3fc0c23dfb172dc3cc6436 AS node
|
||||||
|
|
||||||
|
FROM moodlehq/moodle-php-apache:8.4@sha256:07cac70e0ed3f96f334ffeece92075b98adfbe4110312a3a9308b95eab8e2080
|
||||||
|
|
||||||
|
ARG MOODLE_PLUGIN_CI_COMMIT=9276f968746960275b12190b4ef8e47b1e6af674
|
||||||
|
ARG MOODLE_PLUGIN_CI_LOCK_SHA256=e5c8ce77b90f43a057ee717c52e856bf81d43387834dab36083a1c1b17a24be4
|
||||||
|
|
||||||
|
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
|
||||||
|
COPY --from=node /usr/local/bin/node /usr/local/bin/node
|
||||||
|
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
|
||||||
|
|
||||||
|
RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
|
||||||
|
&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
|
||||||
|
&& apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends postgresql-client \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& locale-gen en_AU.UTF-8 \
|
||||||
|
&& git init /opt/moodle-plugin-ci \
|
||||||
|
&& git -C /opt/moodle-plugin-ci remote add origin https://github.com/moodlehq/moodle-plugin-ci.git \
|
||||||
|
&& git -C /opt/moodle-plugin-ci fetch --depth 1 origin "${MOODLE_PLUGIN_CI_COMMIT}" \
|
||||||
|
&& git -C /opt/moodle-plugin-ci checkout --detach FETCH_HEAD \
|
||||||
|
&& test "$(git -C /opt/moodle-plugin-ci rev-parse HEAD)" = "${MOODLE_PLUGIN_CI_COMMIT}" \
|
||||||
|
&& echo "${MOODLE_PLUGIN_CI_LOCK_SHA256} /opt/moodle-plugin-ci/composer.lock" | sha256sum --check \
|
||||||
|
&& COMPOSER_ALLOW_SUPERUSER=1 composer install \
|
||||||
|
--working-dir=/opt/moodle-plugin-ci \
|
||||||
|
--no-dev \
|
||||||
|
--no-interaction \
|
||||||
|
--prefer-dist \
|
||||||
|
--classmap-authoritative \
|
||||||
|
&& ln -s /opt/moodle-plugin-ci/bin/moodle-plugin-ci /usr/local/bin/moodle-plugin-ci
|
||||||
|
|
||||||
|
COPY . /plugin
|
||||||
|
|
||||||
|
ENV LANG=en_AU.UTF-8
|
||||||
|
|
||||||
|
WORKDIR /workspace
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
.git
|
||||||
|
.github
|
||||||
|
.gitea
|
||||||
|
.docker
|
||||||
|
.dockerignore
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
compose.yaml
|
||||||
|
node_modules
|
||||||
|
vendor
|
||||||
|
*.log
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
name: Moodle Plugin CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
COMPOSE_PROJECT_NAME: local_webhooks_${{ gitea.run_id }}_${{ gitea.run_attempt }}
|
||||||
|
steps:
|
||||||
|
- name: Check out repository
|
||||||
|
uses: https://github.com/actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
|
- name: Build test image
|
||||||
|
run: docker compose build --pull ci
|
||||||
|
|
||||||
|
- name: Test plugin
|
||||||
|
run: docker compose up --abort-on-container-exit --exit-code-from ci
|
||||||
|
|
||||||
|
- name: Clean up
|
||||||
|
if: always()
|
||||||
|
run: docker compose down --volumes --remove-orphans
|
||||||
-70
@@ -1,70 +0,0 @@
|
|||||||
language: php
|
|
||||||
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
os: "linux"
|
|
||||||
|
|
||||||
php:
|
|
||||||
- 5.6
|
|
||||||
- 7.1
|
|
||||||
|
|
||||||
env:
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_26_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_27_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_28_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_29_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_30_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_31_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_32_STABLE
|
|
||||||
- DB=pgsql MOODLE_BRANCH=MOODLE_33_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_26_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_27_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_28_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_29_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_30_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_31_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_32_STABLE
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- cd ../..
|
|
||||||
- composer selfupdate
|
|
||||||
- composer create-project -n --no-dev moodlerooms/moodle-plugin-ci ci ^1
|
|
||||||
- export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH"
|
|
||||||
|
|
||||||
install:
|
|
||||||
- moodle-plugin-ci install
|
|
||||||
|
|
||||||
script:
|
|
||||||
- moodle-plugin-ci phplint
|
|
||||||
- moodle-plugin-ci phpcpd
|
|
||||||
- moodle-plugin-ci phpmd
|
|
||||||
- moodle-plugin-ci codechecker
|
|
||||||
- moodle-plugin-ci csslint
|
|
||||||
- moodle-plugin-ci shifter
|
|
||||||
- moodle-plugin-ci jshint
|
|
||||||
- moodle-plugin-ci phpunit
|
|
||||||
- moodle-plugin-ci behat
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
stage: deploy
|
|
||||||
|
|
||||||
env:
|
|
||||||
- DB=mysqli MOODLE_BRANCH=MOODLE_33_STABLE
|
|
||||||
|
|
||||||
php: 7.1
|
|
||||||
|
|
||||||
before_deploy:
|
|
||||||
- cd $TRAVIS_REPO_SLUG
|
|
||||||
- git stash --all
|
|
||||||
- /bin/sh build.sh
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: releases
|
|
||||||
skip_cleanup: true
|
|
||||||
file: "../local_webhooks.zip"
|
|
||||||
email: "info@valentineus.link"
|
|
||||||
api_key: $GITHUB_PROJECT_TOKEN
|
|
||||||
on:
|
|
||||||
tags: true
|
|
||||||
@@ -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,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('create', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 get_string('backup', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('update', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 get_string('backupfinished', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('answer', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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', ['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,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('create', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 get_string('eventwebserviceservicecreated', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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', ['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,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('deleted', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 get_string('eventwebserviceservicedeleted', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
|
|
||||||
namespace local_webhooks\event;
|
namespace local_webhooks\event;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
use core\event\base;
|
||||||
|
use moodle_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -32,34 +33,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 get_string('update', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 get_string('eventwebserviceserviceupdated', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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', ['serviceid' => $this->objectid]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Init method.
|
||||||
|
*/
|
||||||
|
protected function init() {
|
||||||
|
$this->data['crud'] = 'u';
|
||||||
|
$this->data['edulevel'] = self::LEVEL_OTHER;
|
||||||
|
$this->data['objecttable'] = 'local_webhooks_service';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+31
-17
@@ -24,12 +24,17 @@
|
|||||||
|
|
||||||
namespace local_webhooks;
|
namespace local_webhooks;
|
||||||
|
|
||||||
defined("MOODLE_INTERNAL") || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
require_once(__DIR__ . "/../lib.php");
|
global $CFG;
|
||||||
require_once(__DIR__ . "/../locallib.php");
|
|
||||||
|
|
||||||
require_once($CFG->libdir . "/filelib.php");
|
require_once(__DIR__ . '/../lib.php');
|
||||||
|
require_once(__DIR__ . '/../locallib.php');
|
||||||
|
|
||||||
|
require_once($CFG->libdir . '/filelib.php');
|
||||||
|
|
||||||
|
use curl;
|
||||||
|
use local_webhooks_events;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines how to work with events.
|
* Defines how to work with events.
|
||||||
@@ -42,11 +47,14 @@ 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 ($callbacks = local_webhooks_get_list_records()) {
|
if (!empty($callbacks = local_webhooks_get_list_records())) {
|
||||||
foreach ($callbacks as $callback) {
|
foreach ($callbacks as $callback) {
|
||||||
self::handler_callback($data, $callback);
|
self::handler_callback($data, $callback);
|
||||||
}
|
}
|
||||||
@@ -58,20 +66,21 @@ class handler {
|
|||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param object $callback
|
* @param object $callback
|
||||||
|
*
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
private static function handler_callback($data, $callback) {
|
private static function handler_callback($data, $callback) {
|
||||||
global $CFG;
|
global $CFG;
|
||||||
|
|
||||||
if (boolval($callback->enable)) {
|
if ((bool) $callback->enable && !empty($callback->events[$data['eventname']])) {
|
||||||
if (!empty($callback->events[$data["eventname"]])) {
|
$urlparse = parse_url($CFG->wwwroot);
|
||||||
$urlparse = parse_url($CFG->wwwroot);
|
|
||||||
|
|
||||||
$data["host"] = $urlparse['host'];
|
$data['host'] = $urlparse['host'];
|
||||||
$data["token"] = $callback->token;
|
$data['token'] = $callback->token;
|
||||||
$data["extra"] = $callback->other;
|
$data['extra'] = $callback->other;
|
||||||
|
|
||||||
self::send($data, $callback);
|
self::send($data, $callback);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,14 +89,19 @@ class handler {
|
|||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param object $callback
|
* @param object $callback
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws \coding_exception
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
private static function send($data, $callback) {
|
private static function send($data, $callback) {
|
||||||
$curl = new \curl();
|
$curl = new curl();
|
||||||
$curl->setHeader(array("Content-Type: application/" . $callback->type));
|
$curl->setHeader(['Content-Type: application/' . $callback->type]);
|
||||||
$curl->post($callback->url, json_encode($data));
|
$curl->post($callback->url, json_encode($data));
|
||||||
|
|
||||||
$response = $curl->getResponse();
|
$response = $curl->getResponse();
|
||||||
\local_webhooks_events::response_answer($callback->id, $response);
|
local_webhooks_events::response_answer($callback->id, $response);
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?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/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Privacy Subsystem implementation for local_webhooks.
|
||||||
|
*
|
||||||
|
* @package local_webhooks
|
||||||
|
* @copyright 2020 Dmitrii Metelkin <dmitriim@catalyst-net.au>
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace local_webhooks\privacy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declares that the plugin does not store personal data.
|
||||||
|
*/
|
||||||
|
class provider implements
|
||||||
|
// This plugin does not store any personal user data.
|
||||||
|
\core_privacy\local\metadata\null_provider {
|
||||||
|
/**
|
||||||
|
* Get the language string identifier with the component's language
|
||||||
|
* file to explain why this plugin stores no data.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function get_reason(): string {
|
||||||
|
return 'privacy:metadata';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
// This file is part of Moodle - http://moodle.org/
|
||||||
|
//
|
||||||
|
// Moodle is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Moodle is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the service editing form.
|
||||||
|
*
|
||||||
|
* @package local_webhooks
|
||||||
|
* @copyright 2017 "Valentin Popov" <info@valentineus.link>
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
require_once($CFG->libdir . '/formslib.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description 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', 'local_webhooks'));
|
||||||
|
|
||||||
|
/* Name of the service */
|
||||||
|
$mform->addElement('text', 'title', new lang_string('name', 'local_webhooks'), $size);
|
||||||
|
$mform->addRule('title', null, 'required');
|
||||||
|
$mform->setType('title', PARAM_NOTAGS);
|
||||||
|
|
||||||
|
/* Callback address */
|
||||||
|
$mform->addElement('text', 'url', new lang_string('url', 'local_webhooks'), $size);
|
||||||
|
$mform->addRule('url', null, 'required');
|
||||||
|
$mform->setType('url', PARAM_URL);
|
||||||
|
|
||||||
|
/* Enabling the service */
|
||||||
|
$mform->addElement('advcheckbox', 'enable', new lang_string('enable', 'local_webhooks'));
|
||||||
|
$mform->setType('enable', PARAM_BOOL);
|
||||||
|
$mform->setDefault('enable', 1);
|
||||||
|
$mform->setAdvanced('enable');
|
||||||
|
|
||||||
|
/* Token */
|
||||||
|
$mform->addElement('text', 'token', new lang_string('token', 'local_webhooks'), $size);
|
||||||
|
$mform->setType('token', PARAM_NOTAGS);
|
||||||
|
|
||||||
|
/* Additional information */
|
||||||
|
$mform->addElement('text', 'other', new lang_string('sourceext', 'local_webhooks'), $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', new lang_string('contenttype', 'local_webhooks'), $contenttype);
|
||||||
|
$mform->setAdvanced('type');
|
||||||
|
|
||||||
|
/* Form heading */
|
||||||
|
$mform->addElement('header', 'editserviceheaderevent', new lang_string('edulevel', 'local_webhooks'));
|
||||||
|
|
||||||
|
/* List of events */
|
||||||
|
$events = [];
|
||||||
|
|
||||||
|
/* Formation of the list of elements */
|
||||||
|
foreach (local_webhooks_get_event_choices() as $component => $choices) {
|
||||||
|
foreach ($choices as $key => $eventname) {
|
||||||
|
$events[$component][] =& $mform->createElement('checkbox', $key, $eventname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Displays groups of items */
|
||||||
|
foreach ($events as $key => $event) {
|
||||||
|
$mform->addGroup($event, 'events', $key, '<br />');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Control Panel */
|
||||||
|
$this->add_action_buttons();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,85 +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($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 = report_eventlist_list_generator::get_all_events_list(true);
|
|
||||||
$events = array();
|
|
||||||
|
|
||||||
/* Formation of the list of elements */
|
|
||||||
foreach ($eventlist as $event) {
|
|
||||||
$events[$event["component"]][] =& $mform->createElement("checkbox", $event["eventname"], $event["eventname"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Displays groups of items */
|
|
||||||
foreach ($events as $key => $event) {
|
|
||||||
$mform->addGroup($event, "events", $key, "<br />", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Control Panel */
|
|
||||||
$this->add_action_buttons(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of the form of restoration.
|
* Description of the form of restoration.
|
||||||
@@ -109,27 +33,22 @@ 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', 'local_webhooks'));
|
||||||
|
|
||||||
/* Download the file */
|
/* Download the file */
|
||||||
$mform->addElement("filepicker", "backupfile", new lang_string("file", "moodle"));
|
$mform->addElement('filepicker', 'backupfile', new lang_string('file', 'local_webhooks'));
|
||||||
$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', 'local_webhooks'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16.13-alpine3.22@sha256:caf536ebd910e85473a9f5e2fd1aea360c965c4a911c8555ac1f61b2102006cb
|
||||||
|
environment:
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 2s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
tmpfs:
|
||||||
|
- /var/lib/postgresql/data
|
||||||
|
|
||||||
|
ci:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: .docker/ci/Dockerfile
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
DB: pgsql
|
||||||
|
DB_HOST: postgres
|
||||||
|
DB_USER: postgres
|
||||||
|
MOODLE_BRANCH: v5.2.2
|
||||||
|
NPM_CONFIG_FETCH_RETRIES: 5
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- -lc
|
||||||
|
- |
|
||||||
|
set -euo pipefail
|
||||||
|
php --version
|
||||||
|
composer --version
|
||||||
|
node --version
|
||||||
|
moodle-plugin-ci --version
|
||||||
|
moodle-plugin-ci install --plugin /plugin --branch v5.2.2 --db-host postgres
|
||||||
|
test "$$(git -C /workspace/moodle rev-parse HEAD)" = "acfa383c13dd46c83ca82894a8e95fac273fda33"
|
||||||
|
moodle-plugin-ci phplint
|
||||||
|
moodle-plugin-ci phpcs --max-warnings 0
|
||||||
|
moodle-plugin-ci phpdoc --max-warnings 0
|
||||||
|
moodle-plugin-ci validate
|
||||||
|
moodle-plugin-ci savepoints
|
||||||
|
moodle-plugin-ci phpunit --fail-on-warning
|
||||||
+10
-10
@@ -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(
|
[
|
||||||
"callback" => "\local_webhooks\\handler::events",
|
'callback' => '\local_webhooks\handler::events',
|
||||||
"eventname" => "*",
|
'eventname' => '*',
|
||||||
"includefile" => null,
|
'includefile' => null,
|
||||||
"internal" => true,
|
'internal' => true,
|
||||||
"priority" => 200
|
'priority' => 200,
|
||||||
)
|
],
|
||||||
);
|
];
|
||||||
|
|||||||
+3
-1
@@ -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>
|
||||||
|
|||||||
+41
-16
@@ -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_edit_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 = ['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 = [];
|
||||||
|
|
||||||
|
/* 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()) {
|
if (!empty($data = $mform->get_data())) {
|
||||||
|
if (is_array($data->events)) {
|
||||||
|
$events = [];
|
||||||
|
|
||||||
|
/* Deciphering event names */
|
||||||
|
foreach ($data->events as $eventname => $eventstatus) {
|
||||||
|
$eventname = (string) base64_decode($eventname);
|
||||||
|
$events[$eventname] = $eventstatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->events = $events;
|
||||||
|
}
|
||||||
|
|
||||||
if ($editing) {
|
if ($editing) {
|
||||||
$data->id = $serviceid;
|
$data->id = $serviceid;
|
||||||
local_webhooks_update_record($data, false);
|
local_webhooks_update_record($data, false);
|
||||||
redirect($managerservice, new lang_string("eventwebserviceserviceupdated", "webservice"));
|
redirect($managerservice, new lang_string('eventwebserviceserviceupdated', 'local_webhooks'));
|
||||||
} else {
|
} else {
|
||||||
local_webhooks_update_record($data, true);
|
local_webhooks_update_record($data);
|
||||||
redirect($managerservice, new lang_string("eventwebserviceservicecreated", "webservice"));
|
redirect($managerservice, new lang_string('eventwebserviceservicecreated', 'local_webhooks'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The page title */
|
/* The page title */
|
||||||
$titlepage = new lang_string("externalservice", "webservice");
|
$titlepage = new lang_string('externalservice', 'local_webhooks');
|
||||||
$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,4 +102,4 @@ echo $OUTPUT->header();
|
|||||||
/* Displays the form */
|
/* Displays the form */
|
||||||
$mform->display();
|
$mform->display();
|
||||||
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
||||||
|
|||||||
@@ -22,96 +22,110 @@
|
|||||||
* @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__ . "/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");
|
require_once($CFG->libdir . '/tablelib.php');
|
||||||
|
|
||||||
/* Optional parameters */
|
/* Optional parameters */
|
||||||
$backupservices = optional_param("getbackup", 0, PARAM_BOOL);
|
$backupservices = optional_param('getbackup', 0, PARAM_BOOL);
|
||||||
$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 (boolval($deleteid)) {
|
if ((bool) $deleteid) {
|
||||||
local_webhooks_remove_record($deleteid);
|
local_webhooks_remove_record($deleteid);
|
||||||
redirect($PAGE->url, new lang_string("eventwebserviceservicedeleted", "webservice"));
|
redirect($PAGE->url, new lang_string('eventwebserviceservicedeleted', 'local_webhooks'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieving a list of services */
|
/* Retrieving a list of services */
|
||||||
$callbacks = local_webhooks_get_list_records();
|
$callbacks = local_webhooks_get_list_records();
|
||||||
|
|
||||||
/* 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 */
|
/* Switching the status of the service */
|
||||||
if (boolval($hideshowid)) {
|
if ((bool) $hideshowid) {
|
||||||
$callback = $callbacks[$hideshowid];
|
$callback = $callbacks[$hideshowid];
|
||||||
|
|
||||||
if (!empty($callback)) {
|
if (!empty($callback)) {
|
||||||
$callback->enable = !boolval($callback->enable);
|
$callback->enable = !(bool) $callback->enable;
|
||||||
local_webhooks_update_record($callback, false);
|
local_webhooks_update_record($callback, false);
|
||||||
redirect($PAGE->url, new lang_string("eventwebserviceserviceupdated", "webservice"));
|
redirect($PAGE->url, new lang_string('eventwebserviceserviceupdated', 'local_webhooks'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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();
|
||||||
|
|
||||||
/* Table declaration */
|
/* Table declaration */
|
||||||
$table = new flexible_table("webhooks-service-table");
|
$table = new flexible_table('webhooks-service-table');
|
||||||
|
|
||||||
/* Customize the table */
|
/* Customize the table */
|
||||||
$table->define_columns(array("title", "url", "actions"));
|
$table->define_columns(
|
||||||
$table->define_headers(array(new lang_string("name", "moodle"), new lang_string("url", "moodle"), new lang_string("actions", "moodle")));
|
[
|
||||||
|
'title',
|
||||||
|
'url',
|
||||||
|
'actions',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$table->define_headers(
|
||||||
|
[
|
||||||
|
new lang_string('name', 'local_webhooks'),
|
||||||
|
new lang_string('url', 'local_webhooks'),
|
||||||
|
new lang_string('actions', 'local_webhooks'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
$table->define_baseurl($baseurl);
|
$table->define_baseurl($baseurl);
|
||||||
$table->setup();
|
$table->setup();
|
||||||
|
|
||||||
foreach ($callbacks as $callback) {
|
foreach ($callbacks as $callback) {
|
||||||
/* Filling of information columns */
|
/* Filling of information columns */
|
||||||
$titlecallback = html_writer::div($callback->title, "title");
|
$titlecallback = html_writer::div($callback->title, 'title');
|
||||||
$urlcallback = html_writer::div($callback->url, "url");
|
$urlcallback = html_writer::div($callback->url, 'url');
|
||||||
|
|
||||||
/* Defining service status */
|
/* Defining service status */
|
||||||
$hideshowicon = "t/show";
|
$hideshowicon = 't/show';
|
||||||
$hideshowstring = new lang_string("enable", "moodle");
|
$hideshowstring = new lang_string('enable', 'local_webhooks');
|
||||||
if (boolval($callback->enable)) {
|
if ((bool) $callback->enable) {
|
||||||
$hideshowicon = "t/hide";
|
$hideshowicon = 't/hide';
|
||||||
$hideshowstring = new lang_string("disable", "moodle");
|
$hideshowstring = new lang_string('disable', 'local_webhooks');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Link to enable / disable the service */
|
/* Link to enable / disable the service */
|
||||||
$hideshowlink = new moodle_url($managerservice, array("hideshowid" => $callback->id));
|
$hideshowlink = new moodle_url($managerservice, ['hideshowid' => $callback->id]);
|
||||||
$hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring));
|
$hideshowitem = $OUTPUT->action_icon($hideshowlink, new pix_icon($hideshowicon, $hideshowstring));
|
||||||
|
|
||||||
/* Link for editing */
|
/* Link for editing */
|
||||||
$editlink = new moodle_url($editservice, array("serviceid" => $callback->id));
|
$editlink = new moodle_url($editservice, ['serviceid' => $callback->id]);
|
||||||
$edititem = $OUTPUT->action_icon($editlink, new pix_icon("t/edit", new lang_string("edit", "moodle")));
|
$edititem = $OUTPUT->action_icon($editlink, new pix_icon('t/edit', new lang_string('edit', 'local_webhooks')));
|
||||||
|
|
||||||
/* Link to remove */
|
/* Link to remove */
|
||||||
$deletelink = new moodle_url($managerservice, array("deleteid" => $callback->id));
|
$deletelink = new moodle_url($managerservice, ['deleteid' => $callback->id]);
|
||||||
$deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon("t/delete", new lang_string("delete", "moodle")));
|
$deleteitem = $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', new lang_string('delete', 'local_webhooks')));
|
||||||
|
|
||||||
/* Adding data to the table */
|
/* Adding data to the table */
|
||||||
$table->add_data(array($titlecallback, $urlcallback, $hideshowitem . $edititem . $deleteitem));
|
$table->add_data([$titlecallback, $urlcallback, $hideshowitem . $edititem . $deleteitem]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display the table */
|
/* Display the table */
|
||||||
@@ -119,14 +133,14 @@ $table->print_html();
|
|||||||
|
|
||||||
/* Add service button */
|
/* Add service button */
|
||||||
$addserviceurl = new moodle_url($editservice);
|
$addserviceurl = new moodle_url($editservice);
|
||||||
echo $OUTPUT->single_button($addserviceurl, new lang_string("addaservice", "webservice"), "get");
|
echo $OUTPUT->single_button($addserviceurl, new lang_string('addaservice', 'local_webhooks'), 'get');
|
||||||
|
|
||||||
/* Button to get a backup */
|
/* Button to get a backup */
|
||||||
$backupurl = new moodle_url($managerservice, array("getbackup" => true));
|
$backupurl = new moodle_url($managerservice, ['getbackup' => true]);
|
||||||
echo $OUTPUT->single_button($backupurl, new lang_string("backup", "moodle"), "get");
|
echo $OUTPUT->single_button($backupurl, new lang_string('backup', 'local_webhooks'), 'get');
|
||||||
|
|
||||||
/* Button for restoring settings */
|
/* Button for restoring settings */
|
||||||
$restorebackupurl = new moodle_url($restorebackup);
|
$restorebackupurl = new moodle_url($restorebackup);
|
||||||
echo $OUTPUT->single_button($restorebackupurl, new lang_string("restore", "moodle"), "get");
|
echo $OUTPUT->single_button($restorebackupurl, new lang_string('restore', 'local_webhooks'), 'get');
|
||||||
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
||||||
|
|||||||
@@ -22,4 +22,32 @@
|
|||||||
* @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['actions'] = 'Actions';
|
||||||
|
$string['addaservice'] = 'Add service';
|
||||||
|
$string['answer'] = 'Answer';
|
||||||
|
$string['backup'] = 'Backup';
|
||||||
|
$string['backupfinished'] = 'Backup completed successfully';
|
||||||
|
$string['contenttype'] = 'Content type';
|
||||||
|
$string['create'] = 'Create';
|
||||||
|
$string['delete'] = 'Delete';
|
||||||
|
$string['deleted'] = 'Deleted';
|
||||||
|
$string['disable'] = 'Disable';
|
||||||
|
$string['edit'] = 'Edit';
|
||||||
|
$string['edulevel'] = 'All events';
|
||||||
|
$string['enable'] = 'Enable';
|
||||||
|
$string['errorsendingrequest'] = 'Error sending request';
|
||||||
|
$string['eventwebserviceservicecreated'] = 'Web service created';
|
||||||
|
$string['eventwebserviceservicedeleted'] = 'Web service deleted';
|
||||||
|
$string['eventwebserviceserviceupdated'] = 'Web service updated';
|
||||||
|
$string['externalservice'] = 'External service';
|
||||||
|
$string['file'] = 'File';
|
||||||
|
$string['name'] = 'Name';
|
||||||
|
$string['pluginname'] = 'WebHooks';
|
||||||
|
$string['privacy:metadata'] = 'WebHooks does not store any personal data.';
|
||||||
|
$string['restore'] = 'Restore';
|
||||||
|
$string['restorefinished'] = 'Restore completed successfully';
|
||||||
|
$string['service'] = 'Service';
|
||||||
|
$string['sourceext'] = 'Additional';
|
||||||
|
$string['token'] = 'Token';
|
||||||
|
$string['update'] = 'Update';
|
||||||
|
$string['url'] = 'URL';
|
||||||
|
|||||||
@@ -22,21 +22,65 @@
|
|||||||
* @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');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns available event classes grouped by component.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function local_webhooks_get_event_choices() {
|
||||||
|
global $CFG;
|
||||||
|
|
||||||
|
$choices = [];
|
||||||
|
$debug = $CFG->debug;
|
||||||
|
|
||||||
|
// Deprecated core events emit debugging while loading; mirror the core tool_monitor workaround.
|
||||||
|
try {
|
||||||
|
$CFG->debug = DEBUG_NONE;
|
||||||
|
$classes = core_component::get_component_classes_in_namespace(null, 'event');
|
||||||
|
} finally {
|
||||||
|
$CFG->debug = $debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($classes);
|
||||||
|
foreach (array_keys($classes) as $classname) {
|
||||||
|
if (
|
||||||
|
$classname === \core\event\unknown_logged::class
|
||||||
|
|| !is_subclass_of($classname, \core\event\base::class)
|
||||||
|
|| $classname::is_deprecated()
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$reflection = new ReflectionClass($classname);
|
||||||
|
if ($reflection->isAbstract()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$eventname = '\\' . ltrim($classname, '\\');
|
||||||
|
$component = core_component::get_component_from_classname($classname);
|
||||||
|
$choices[$component][base64_encode($eventname)] = $eventname;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $choices;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getting a list of all services.
|
* Getting a list of all services.
|
||||||
*
|
*
|
||||||
* @param number $limitfrom
|
* @param int $limitfrom
|
||||||
* @param number $limitnum
|
* @param int $limitnum
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
|
function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$listservices = $DB->get_records("local_webhooks_service", null, "id", "*", $limitfrom, $limitnum);
|
$listservices = $DB->get_records('local_webhooks_service', null, 'id', '*', $limitfrom, $limitnum);
|
||||||
|
|
||||||
foreach ($listservices as $servicerecord) {
|
foreach ($listservices as $servicerecord) {
|
||||||
if (!empty($servicerecord->events)) {
|
if (!empty($servicerecord->events)) {
|
||||||
@@ -50,13 +94,15 @@ function local_webhooks_get_list_records($limitfrom = 0, $limitnum = 0) {
|
|||||||
/**
|
/**
|
||||||
* Getting information about the service.
|
* Getting information about the service.
|
||||||
*
|
*
|
||||||
* @param number $serviceid
|
* @param int $serviceid
|
||||||
|
*
|
||||||
* @return object
|
* @return object
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_get_record($serviceid = 0) {
|
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', ['id' => $serviceid], '*', MUST_EXIST);
|
||||||
|
|
||||||
if (!empty($servicerecord->events)) {
|
if (!empty($servicerecord->events)) {
|
||||||
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
|
$servicerecord->events = local_webhooks_unarchive_data($servicerecord->events);
|
||||||
@@ -67,22 +113,27 @@ function local_webhooks_get_record($serviceid = 0) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the database table.
|
* Clear the database table.
|
||||||
|
*
|
||||||
|
* @throws \dml_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_remove_list_records() {
|
function local_webhooks_remove_list_records() {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$DB->delete_records("local_webhooks_service", null);
|
$DB->delete_records('local_webhooks_service');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the record.
|
* Delete the record.
|
||||||
*
|
*
|
||||||
* @param number $serviceid
|
* @param int $serviceid
|
||||||
|
*
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_remove_record($serviceid = 0) {
|
function local_webhooks_remove_record($serviceid = 0) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
$DB->delete_records("local_webhooks_service", array("id" => $serviceid));
|
$DB->delete_records('local_webhooks_service', ['id' => $serviceid]);
|
||||||
local_webhooks_events::service_deleted($serviceid);
|
local_webhooks_events::service_deleted($serviceid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,52 +142,61 @@ function local_webhooks_remove_record($serviceid = 0) {
|
|||||||
*
|
*
|
||||||
* @param object $data
|
* @param object $data
|
||||||
* @param boolean $insert
|
* @param boolean $insert
|
||||||
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_update_record($data, $insert = true) {
|
function local_webhooks_update_record($data, $insert = true) {
|
||||||
global $DB;
|
global $DB;
|
||||||
|
|
||||||
if (empty($data->events)) {
|
if (empty($data->events)) {
|
||||||
$data->events = array();
|
$data->events = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data->events = local_webhooks_archiving_data($data->events);
|
$data->events = local_webhooks_archiving_data($data->events);
|
||||||
|
|
||||||
if (boolval($insert)) {
|
if ((bool) $insert) {
|
||||||
$result = $DB->insert_record("local_webhooks_service", $data, true, false);
|
$result = $DB->insert_record('local_webhooks_service', $data);
|
||||||
local_webhooks_events::service_added($result);
|
local_webhooks_events::service_added($result);
|
||||||
} else {
|
} else {
|
||||||
$result = $DB->update_record("local_webhooks_service", $data, false);
|
$result = $DB->update_record('local_webhooks_service', $data);
|
||||||
local_webhooks_events::service_updated($data->id);
|
local_webhooks_events::service_updated($data->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return boolval($result);
|
return (bool) $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a backup copy of all the services.
|
* Make a backup copy of all the services.
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_create_backup() {
|
function local_webhooks_create_backup() {
|
||||||
$listservices = local_webhooks_get_list_records();
|
$listservices = local_webhooks_get_list_records();
|
||||||
$listservices = local_webhooks_archiving_data($listservices);
|
$listservices = local_webhooks_archiving_data($listservices);
|
||||||
local_webhooks_events::backup_performed();
|
local_webhooks_events::backup_performed();
|
||||||
|
|
||||||
return $listservices;
|
return $listservices;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restore the data from the backup.
|
* Restore the data from the backup.
|
||||||
*
|
*
|
||||||
* @param string $data
|
* @param string $listservices
|
||||||
|
*
|
||||||
|
* @throws \dml_exception
|
||||||
|
* @throws \coding_exception
|
||||||
*/
|
*/
|
||||||
function local_webhooks_restore_backup($listservices = "") {
|
function local_webhooks_restore_backup($listservices = '') {
|
||||||
$listservices = local_webhooks_unarchive_data($listservices);
|
$listservices = local_webhooks_unarchive_data($listservices);
|
||||||
|
|
||||||
local_webhooks_remove_list_records();
|
local_webhooks_remove_list_records();
|
||||||
|
|
||||||
foreach ($listservices as $servicerecord) {
|
foreach ($listservices as $servicerecord) {
|
||||||
local_webhooks_update_record($servicerecord, true);
|
local_webhooks_update_record($servicerecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
local_webhooks_events::backup_restored();
|
local_webhooks_events::backup_restored();
|
||||||
@@ -145,21 +205,21 @@ function local_webhooks_restore_backup($listservices = "") {
|
|||||||
/**
|
/**
|
||||||
* Compress an array into a string.
|
* Compress an array into a string.
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function local_webhooks_archiving_data($data = array()) {
|
function local_webhooks_archiving_data(array $data = []) {
|
||||||
$result = base64_encode(gzcompress(serialize($data), 3));
|
return base64_encode(gzcompress(serialize($data), 3));
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an array from a compressed string.
|
* Gets an array from a compressed string.
|
||||||
*
|
*
|
||||||
* @param string $data
|
* @param string $data
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function local_webhooks_unarchive_data($data = "") {
|
function local_webhooks_unarchive_data($data = '') {
|
||||||
$result = unserialize(gzuncompress(base64_decode($data)));
|
return unserialize(gzuncompress(base64_decode($data)));
|
||||||
return $result;
|
}
|
||||||
}
|
|
||||||
|
|||||||
+44
-37
@@ -22,8 +22,6 @@
|
|||||||
* @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();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of functions of the call of events
|
* Description of functions of the call of events
|
||||||
*
|
*
|
||||||
@@ -33,15 +31,18 @@ defined("MOODLE_INTERNAL") || die();
|
|||||||
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(
|
$event = local_webhooks\event\backup_performed::create(
|
||||||
array(
|
[
|
||||||
"context" => $context,
|
'context' => $context,
|
||||||
"objectid" => 0
|
'objectid' => 0,
|
||||||
)
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
@@ -49,15 +50,18 @@ class local_webhooks_events {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 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(
|
$event = local_webhooks\event\backup_restored::create(
|
||||||
array(
|
[
|
||||||
"context" => $context,
|
'context' => $context,
|
||||||
"objectid" => 0
|
'objectid' => 0,
|
||||||
)
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
@@ -66,23 +70,26 @@ class local_webhooks_events {
|
|||||||
/**
|
/**
|
||||||
* 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 = []) {
|
||||||
$context = context_system::instance();
|
$context = context_system::instance();
|
||||||
|
|
||||||
$status = "Error sending request";
|
$status = get_string('errorsendingrequest', 'local_webhooks');
|
||||||
if (!empty($response["HTTP/1.1"])) {
|
if (!empty($response['HTTP/1.1'])) {
|
||||||
$status = $response["HTTP/1.1"];
|
$status = $response['HTTP/1.1'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$event = local_webhooks\event\response_answer::create(
|
$event = local_webhooks\event\response_answer::create(
|
||||||
array(
|
[
|
||||||
"context" => $context,
|
'context' => $context,
|
||||||
"objectid" => $objectid,
|
'objectid' => $objectid,
|
||||||
"other" => array("status" => $status)
|
'other' => ['status' => $status],
|
||||||
)
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
@@ -91,16 +98,16 @@ class local_webhooks_events {
|
|||||||
/**
|
/**
|
||||||
* 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(
|
$event = local_webhooks\event\service_added::create(
|
||||||
array(
|
compact('context', 'objectid')
|
||||||
"context" => $context,
|
|
||||||
"objectid" => $objectid
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
@@ -109,16 +116,16 @@ class local_webhooks_events {
|
|||||||
/**
|
/**
|
||||||
* 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(
|
$event = local_webhooks\event\service_deleted::create(
|
||||||
array(
|
compact('context', 'objectid')
|
||||||
"context" => $context,
|
|
||||||
"objectid" => $objectid
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
@@ -127,18 +134,18 @@ class local_webhooks_events {
|
|||||||
/**
|
/**
|
||||||
* 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(
|
$event = local_webhooks\event\service_updated::create(
|
||||||
array(
|
compact('context', 'objectid')
|
||||||
"context" => $context,
|
|
||||||
"objectid" => $objectid
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$event->trigger();
|
$event->trigger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-12
@@ -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()) {
|
if (!empty($data = $mform->get_data())) {
|
||||||
$content = $mform->get_file_content("backupfile");
|
$content = $mform->get_file_content('backupfile');
|
||||||
local_webhooks_restore_backup($content);
|
local_webhooks_restore_backup($content);
|
||||||
redirect($managerservice, new lang_string("restorefinished", "moodle"));
|
redirect($managerservice, new lang_string('restorefinished', 'local_webhooks'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The page title */
|
/* The page title */
|
||||||
$titlepage = new lang_string("backup", "moodle");
|
$titlepage = new lang_string('backup', 'local_webhooks');
|
||||||
$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,4 +61,4 @@ echo $OUTPUT->header();
|
|||||||
/* Displays the form */
|
/* Displays the form */
|
||||||
$mform->display();
|
$mform->display();
|
||||||
|
|
||||||
echo $OUTPUT->footer();
|
echo $OUTPUT->footer();
|
||||||
|
|||||||
+10
-6
@@ -22,11 +22,15 @@
|
|||||||
* @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();
|
||||||
|
|
||||||
if ($hassiteconfig) {
|
if ($hassiteconfig) {
|
||||||
$ADMIN->add("server", new admin_externalpage("local_webhooks",
|
$ADMIN->add(
|
||||||
new lang_string("pluginname", "local_webhooks"),
|
'server',
|
||||||
new moodle_url("/local/webhooks/index.php")
|
new admin_externalpage(
|
||||||
));
|
'local_webhooks',
|
||||||
}
|
new lang_string('pluginname', 'local_webhooks'),
|
||||||
|
new moodle_url('/local/webhooks/index.php')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
<?php
|
||||||
|
// This file is part of Moodle - http://moodle.org/
|
||||||
|
//
|
||||||
|
// Moodle is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Moodle is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime autonomy tests.
|
||||||
|
*
|
||||||
|
* @package local_webhooks
|
||||||
|
* @copyright 2026 "Valentin Popov" <info@valentineus.link>
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace local_webhooks;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime autonomy tests.
|
||||||
|
*/
|
||||||
|
#[\PHPUnit\Framework\Attributes\CoversFunction('local_webhooks_get_event_choices')]
|
||||||
|
final class autonomy_test extends \advanced_testcase {
|
||||||
|
/**
|
||||||
|
* Event choices keep their storage format and custom event names are strings.
|
||||||
|
*/
|
||||||
|
public function test_event_contracts(): void {
|
||||||
|
global $CFG;
|
||||||
|
|
||||||
|
require_once($CFG->dirroot . '/local/webhooks/lib.php');
|
||||||
|
require_once($CFG->dirroot . '/local/webhooks/classes/service_edit_form.php');
|
||||||
|
|
||||||
|
$debugsettings = [$CFG->debug, $CFG->debugdisplay, $CFG->debugdeveloper];
|
||||||
|
$choices = \local_webhooks_get_event_choices();
|
||||||
|
$this->assertNotEmpty($choices);
|
||||||
|
$this->assertSame($debugsettings, [$CFG->debug, $CFG->debugdisplay, $CFG->debugdeveloper]);
|
||||||
|
|
||||||
|
foreach ($choices as $component => $events) {
|
||||||
|
foreach ($events as $key => $eventname) {
|
||||||
|
$classname = ltrim($eventname, '\\');
|
||||||
|
|
||||||
|
$this->assertSame(base64_encode($eventname), $key);
|
||||||
|
$this->assertSame($component, \core_component::get_component_from_classname($classname));
|
||||||
|
$this->assertTrue(is_subclass_of($classname, \core\event\base::class));
|
||||||
|
$this->assertFalse((new \ReflectionClass($classname))->isAbstract());
|
||||||
|
$this->assertFalse($classname::is_deprecated());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$coreevent = '\\' . \core\event\user_created::class;
|
||||||
|
$localevent = '\\' . \local_webhooks\event\service_added::class;
|
||||||
|
$unknown = '\\' . \core\event\unknown_logged::class;
|
||||||
|
$deprecated = '\\' . \core\event\role_capabilities_updated::class;
|
||||||
|
|
||||||
|
$this->assertSame($coreevent, $choices['core'][base64_encode($coreevent)]);
|
||||||
|
$this->assertSame($localevent, $choices['local_webhooks'][base64_encode($localevent)]);
|
||||||
|
$this->assertArrayNotHasKey(base64_encode($unknown), $choices['core']);
|
||||||
|
$this->assertArrayNotHasKey(base64_encode($deprecated), $choices['core']);
|
||||||
|
|
||||||
|
$events = [
|
||||||
|
\local_webhooks\event\backup_performed::class => 'create',
|
||||||
|
\local_webhooks\event\backup_restored::class => 'update',
|
||||||
|
\local_webhooks\event\response_answer::class => 'answer',
|
||||||
|
\local_webhooks\event\service_added::class => 'create',
|
||||||
|
\local_webhooks\event\service_deleted::class => 'deleted',
|
||||||
|
\local_webhooks\event\service_updated::class => 'update',
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($events as $event => $stringkey) {
|
||||||
|
$name = $event::get_name();
|
||||||
|
$this->assertIsString($name);
|
||||||
|
$this->assertNotSame('', trim($name));
|
||||||
|
$this->assertSame(get_string($stringkey, 'local_webhooks'), $name);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertFalse(class_exists('report_eventlist_list_generator', false));
|
||||||
|
$form = new \service_edit_form(new \moodle_url('/local/webhooks/editservice.php'));
|
||||||
|
$html = $form->render();
|
||||||
|
$this->assertStringContainsString($coreevent, $html);
|
||||||
|
$this->assertStringContainsString($localevent, $html);
|
||||||
|
$this->assertFalse(class_exists('report_eventlist_list_generator', false));
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-6
@@ -22,10 +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 = "3.0.0 (Build: 2017112600)";
|
$plugin->component = 'local_webhooks';
|
||||||
$plugin->version = 2017112600;
|
$plugin->maturity = MATURITY_STABLE;
|
||||||
$plugin->requires = 2016112900;
|
$plugin->release = '3.0.5 (Build: 2020051600)';
|
||||||
$plugin->component = "local_webhooks";
|
$plugin->requires = 2019052000;
|
||||||
$plugin->maturity = MATURITY_STABLE;
|
$plugin->version = 2020051600;
|
||||||
|
|||||||
Reference in New Issue
Block a user