. /** * This file contains the functions used by the plugin. * * @copyright 2018 'Valentin Popov' * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @package local_webhooks */ defined('MOODLE_INTERNAL') || die(); define('LW_TABLE_SERVICES', 'local_webhooks_service'); define('LW_TABLE_EVENTS', 'local_webhooks_events'); /** * Class local_webhooks_api * * @copyright 2018 'Valentin Popov' * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @package local_webhooks */ class local_webhooks_api { /** * Get information about the service. * * @param int $serviceId * * @return object * @throws \dml_exception * @throws \moodle_exception */ public static function get_service($serviceId = 0) { global $DB; if (!is_numeric($serviceId) || $serviceId === 0) { print_error('unknowparamtype', 'error', null, 'serviceId'); } $service = $DB->get_record(LW_TABLE_SERVICES, array('id' => $serviceId), '*', MUST_EXIST); $events = $DB->get_records(LW_TABLE_EVENTS, array('serviceid' => $serviceId), '', '*', 0, 0); $service->events = array(); foreach ($events as $event) { $service->events[] = $event->name; } return $service; } /** * Get a list of services. * By default, the entire list of services is given. * * @param array $conditions * @param int $limitFrom * @param int $limitNum * * @return array * @throws \dml_exception */ public static function get_services(array $conditions = array(), $limitFrom = 0, $limitNum = 0) { global $DB; $services = $DB->get_records(LW_TABLE_SERVICES, $conditions, '', '*', $limitFrom, $limitNum); foreach ($services as $service) { $events = $DB->get_records(LW_TABLE_EVENTS, array('serviceid' => $service->id), '', '*', 0, 0); $service->events = array(); foreach ($events as $event) { $service->events[] = $event->name; } } return $services; } /** * Get the list of services subscribed to the event. * * @param string $eventName * * @return array * @throws \dml_exception * @throws \moodle_exception */ public static function get_services_by_event($eventName = '') { global $DB; if (!is_string($eventName) || $eventName === '') { print_error('unknowparamtype', 'error', null, 'eventName'); } $events = $DB->get_records(LW_TABLE_EVENTS, array('name' => $eventName), '', '*', 0, 0); $services = array(); foreach ($events as $event) { $services[] = self::get_service($event->serviceid); } return $services; } /** * Create service data in the database. * * @param array $service * * @return int * @throws \dml_exception * @throws \moodle_exception */ public static function create_service(array $service = array()) { global $DB; if (!is_array($service) || count($service) === 0) { print_error('unknowparamtype', 'error', null, 'service'); } $serviceId = $DB->insert_record(LW_TABLE_SERVICES, (object) $service, true, false); if ($serviceId && !empty($service['events']) && is_array($service['events'])) { self::insert_events($service['events'], $serviceId); } // TODO: Mark the log return (int) $serviceId; } /** * Delete the service data from the database. * * @param int $serviceId * * @return bool * @throws \dml_exception * @throws \moodle_exception */ public static function delete_service($serviceId = 0) { global $DB; if (!is_numeric($serviceId) || $serviceId === 0) { print_error('unknowparamtype', 'error', null, 'serviceId'); } // TODO: Mark the log $DB->delete_records(LW_TABLE_EVENTS, array('serviceid' => $serviceId)); return $DB->delete_records(LW_TABLE_SERVICES, array('id' => $serviceId)); } /** * Update the service data in the database. * * @param array $service * * @return bool * @throws \dml_exception * @throws \moodle_exception */ public static function update_service(array $service = array()) { global $DB; if (!is_array($service) || count($service) === 0 || !isset($service['id'])) { print_error('unknowparamtype', 'error', null, 'service'); } // TODO: Add transactions for operations $result = $DB->update_record(LW_TABLE_SERVICES, (object) $service, false); $DB->delete_records(LW_TABLE_EVENTS, array('serviceid' => $service['id'])); if ($result && is_array($service['events']) && count($service) !== 0) { self::insert_events($service['events'], $service['id']); } // TODO: Mark the log return $result; } /** * Save the list of events to the database. * * @param array $events * @param int $serviceId * * @throws \coding_exception * @throws \dml_exception */ protected static function insert_events(array $events = array(), $serviceId = 0) { global $DB; $conditions = array(); foreach ($events as $eventName) { $conditions[] = array('name' => $eventName, 'serviceid' => $serviceId); } $DB->insert_records(LW_TABLE_EVENTS, $conditions); } }