Refactoring the code of the event handler

This commit is contained in:
Valentin Popov 2017-11-23 18:54:31 +04:00
parent 4bf6f61131
commit f8b85a270c

View File

@ -53,15 +53,11 @@ class handler {
private static function transmitter($data) { private static function transmitter($data) {
global $DB; global $DB;
$callbacks = $DB->get_recordset("local_webhooks_service"); if ($callbacks = local_webhooks_get_list_records()) {
if ($callbacks->valid()) {
foreach ($callbacks as $callback) { foreach ($callbacks as $callback) {
self::handler_callback($data, $callback); self::handler_callback($data, $callback);
} }
} }
$callbacks->close();
} }
/** /**
@ -74,13 +70,8 @@ class handler {
global $CFG; global $CFG;
if (boolval($callback->enable)) { if (boolval($callback->enable)) {
$events = array();
if (!empty($callback->events)) {
$events = unserialize(gzuncompress(base64_decode($callback->events)));
}
if (!empty($events[$data["eventname"]])) { if (!empty($events[$data["eventname"]])) {
$urlparse = parse_url($CFG->wwwroot); $urlparse = parse_url($CFG->wwwroot);
$data["host"] = $urlparse['host']; $data["host"] = $urlparse['host'];
if (!empty($callback->token)) { if (!empty($callback->token)) {
@ -106,33 +97,8 @@ class handler {
$curl = new \curl(); $curl = new \curl();
$curl->setHeader(array("Content-Type: application/$callback->type")); $curl->setHeader(array("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();
self::logger($callback, $response);
return $response; return $response;
} }
/**
* Event logging.
*
* @param array $response
* @param object $callback
*/
private static function logger($callback, $response) {
$status = "Error sending request";
if (!empty($response["HTTP/1.1"])) {
$status = $response["HTTP/1.1"];
}
$event = \local_webhooks\event\response_answer::create(
array(
"context" => \context_system::instance(0),
"objectid" => $callback->id,
"other" => array(
"status" => $status
)
)
);
$event->trigger();
}
} }