. /** * The event handler. * * @package local_webhooks * @copyright 2017 "Valentin Popov" * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace local_webhooks; defined("MOODLE_INTERNAL") || die(); require_once($CFG->libdir . "/filelib.php"); use curl; /** * Defines how to work with events. * * @copyright 2017 "Valentin Popov" * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class events { /** * External handler. * * @param object $event */ public static function handler($event) { $enable = get_config("local_webhooks", "enable"); if (boolval($enable)) { $data = $event->get_data(); self::transmitter($data); } } /** * Transmitter, processing event and services. * * @param array $data */ private static function transmitter($data) { global $DB; $callbacks = $DB->get_recordset("local_webhooks_service"); if ($callbacks->valid()) { foreach ($callbacks as $callback) { self::handler_callback($data, $callback); } } $callbacks->close(); } /** * Processes each callback. * * @param array $data * @param object $callback */ private static function handler_callback($data, $callback) { if ($callback->enable) { if (!empty($callback->events)) { $events = unserialize(gzuncompress(base64_decode($callback->events))); } if (!empty($events[$data["eventname"]])) { if (boolval($callback->token)) { $data["token"] = $callback->token; } self::send($data, $callback); } } } /** * Sending data to the node. * * @param array $data * @param object $callback */ private static function send($data, $callback) { $package = json_encode($data); $curl = new curl(); $curl->setHeader(array("Content-Type: application/$callback->type")); $curl->post($callback->url, $package); return $curl->getResponse(); } }