diff options
author | Valentin Popov <info@valentineus.link> | 2019-05-06 03:46:09 +0300 |
---|---|---|
committer | Valentin Popov <info@valentineus.link> | 2019-05-06 03:46:09 +0300 |
commit | bde135499d1fe0ca67a1f50fea79848cbdb370ea (patch) | |
tree | e876c80280449cb7622ff2a2323ba35b88744be8 /classes/task/notify.php | |
parent | 4806fad728116cbd6b440eb285fcbcc867a62b84 (diff) | |
download | local_webhooks-bde135499d1fe0ca67a1f50fea79848cbdb370ea.tar.xz local_webhooks-bde135499d1fe0ca67a1f50fea79848cbdb370ea.zip |
Added a new class for processing events
Signed-off-by: Valentin Popov <info@valentineus.link>
Diffstat (limited to 'classes/task/notify.php')
-rw-r--r-- | classes/task/notify.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/classes/task/notify.php b/classes/task/notify.php new file mode 100644 index 0000000..faa68a9 --- /dev/null +++ b/classes/task/notify.php @@ -0,0 +1,90 @@ +<?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/>. + +namespace local_webhooks\task; + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/local/webhooks/classes/local/api.php'); + +use core\task\adhoc_task; +use curl; +use local_webhooks\local\api; +use local_webhooks\local\record; +use function defined; +use function is_object; +use function is_string; + +/** + * Class for processing events. + * + * @package local_webhooks\task + */ +final class notify extends adhoc_task { + /** + * Debug information. + * + * @var array + */ + public $debug; + + /** + * Process an event. + * + * @throws \dml_exception + */ + public function execute() { + $event = $this->get_custom_data(); + + if (!is_object($event) || !isset($event->eventname) || !is_string($event->eventname)) { + return; + } + + foreach (api::get_services_by_event($event->eventname) as $service) { + if (!is_object($service)) { + continue; + } + + if (!$service->status) { + continue; + } + + $this->post($service, array_merge((array) $event, [ + 'token' => $service->token, + ])); + } + } + + /** + * Send a request for the service. + * + * @param \local_webhooks\local\record $service + * @param array $data + */ + public function post(record $service, array $data) { + $curl = new curl(); + $curl->setHeader(['Content-Type: ' . $service->header]); + $curl->post($service->point, $data); + + if (defined('PHPUNIT_TEST') && PHPUNIT_TEST) { + $this->debug = array_merge($this->debug ?? [], [ + compact('data', 'service'), + ]); + } + } +}
\ No newline at end of file |