. /** * 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 */ public static function get_service( $serviceId = 0 ) { global $DB; if ( !is_numeric( $serviceId ) || empty( $serviceId ) ) { 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 string $sort * @param int $limitFrom * @param int $limitNum * @return array */ public static function get_services( $conditions = array(), $sort = "", $limitFrom = 0, $limitNum = 0 ) { global $DB; $services = $DB->get_records( LW_TABLE_SERVICES, $conditions, $sort, "*", $limitFrom, $limitNum ); foreach ( $services as $key => $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; } /** * Create service data in the database. * * @param array $service * @return int */ public static function create_service( $service = array() ) { global $DB; if ( !is_array( $service ) || empty( $service ) ) { print_error( "unknowparamtype", "error", null, "service" ); } $serviceId = $DB->insert_record( LW_TABLE_SERVICES, $service, true, false ); if ( $serviceId && is_array( $service[ "events" ] ) && !empty( $service[ "events" ] ) ) { self::insert_events( $service[ "events" ], $serviceId ); } return (int) $serviceId; } /** * Delete the service data from the database. * * @param int $serviceId * @return bool */ public static function delete_service( $serviceId = 0 ) { global $DB; if ( !is_numeric( $serviceId ) || empty( $serviceId ) ) { print_error( "unknowparamtype", "error", null, "serviceId" ); } $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 */ public static function update_service( $service = array() ) { global $DB; if ( !is_array( $service ) || empty( $service ) || empty( $service[ "id" ] ) ) { print_error( "unknowparamtype", "error", null, "service" ); } $result = $DB->update_record( LW_TABLE_SERVICES, $service, false ); $DB->delete_records( LW_TABLE_EVENTS, array( "serviceid" => $service[ "id" ] ) ); if ( $result && is_array( $service[ "events" ] ) && !empty( $service[ "events" ] ) ) { self::insert_events( $service[ "events" ], $service[ "id" ] ); } return $result; } /** * Save the list of events to the database. * * @param array $events * @param int $serviceId */ private static function insert_events( $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 ); } }