General refactoring of the web services code

This commit is contained in:
Valentin Popov 2018-02-25 01:19:19 +04:00
parent 685d9ee15e
commit 90897b0e7d
Signed by: Valentin Popov
GPG Key ID: 269A00ACA90A8EA3

View File

@ -35,24 +35,47 @@ require_once($CFG->libdir . "/externallib.php");
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/ */
class local_webhooks_external extends external_api { class local_webhooks_external extends external_api {
/**
* Single template output parameters.
*
* @return external_description
* @since Moodle 2.9 Options available
* @since Moodle 2.2
*/
private static function structure_record_parameters() {
return new external_single_structure(
array(
"id" => new external_value(PARAM_INT, "Service ID."),
"enable" => new external_value(PARAM_BOOL, "Enable or disable the service."),
"title" => new external_value(PARAM_TEXT, "Name of the service."),
"url" => new external_value(PARAM_URL, "Web address of the service."),
"type" => new external_value(PARAM_TEXT, "Used header type."),
"token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure(
new external_single_structure(
array(
"name" => new external_value(PARAM_TEXT, "The name of the event."),
"value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
)
), "List of observed events.", VALUE_OPTIONAL
)
), "Information about the service."
);
}
/** /**
* Formation of the final list. * Formation of the final list.
* *
* @param array $listrecords * @param array $listrecords
* @return array * @return array
*/ */
private static function formation_list($listrecords) { private static function formation_list($listrecords) {
$result = array(); $result = array();
foreach ($listrecords as $index => $record) { foreach ($listrecords as $index => $record) {
$result[$index] = (array) $record;
$result[$index]["events"] = self::formation_events($record->events); $result[$index]["events"] = self::formation_events($record->events);
$result[$index]["enable"] = $record->enable;
$result[$index]["id"] = $record->id;
$result[$index]["other"] = $record->other;
$result[$index]["title"] = $record->title;
$result[$index]["token"] = $record->token;
$result[$index]["type"] = $record->type;
$result[$index]["url"] = $record->url;
} }
return $result; return $result;
@ -84,7 +107,7 @@ class local_webhooks_external extends external_api {
public static function change_status_parameters() { public static function change_status_parameters() {
return new external_function_parameters( return new external_function_parameters(
array( array(
"serviceid" => new external_value(PARAM_INT, "Service identifier.") "serviceid" => new external_value(PARAM_INT, "Service ID.")
) )
); );
} }
@ -97,7 +120,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function change_status($serviceid = 0) { public static function change_status($serviceid) {
$parameters = self::validate_parameters(self::change_status_parameters(), array("serviceid" => $serviceid)); $parameters = self::validate_parameters(self::change_status_parameters(), array("serviceid" => $serviceid));
$context = context_system::instance(); $context = context_system::instance();
@ -113,7 +136,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function change_status_returns() { public static function change_status_returns() {
return new external_value(PARAM_BOOL, "The result of the operation."); return new external_value(PARAM_BOOL, "Result of execution.");
} }
/** /**
@ -127,7 +150,7 @@ class local_webhooks_external extends external_api {
return new external_function_parameters( return new external_function_parameters(
array( array(
"eventname" => new external_value(PARAM_TEXT, "The name of the event."), "eventname" => new external_value(PARAM_TEXT, "The name of the event."),
"active" => new external_value(PARAM_BOOL, "Service status filter switch.") "active" => new external_value(PARAM_BOOL, "Filter show active or all services.")
) )
); );
} }
@ -141,13 +164,14 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function search_services_by_event($eventname = "", $active = false) { public static function search_services_by_event($eventname, $active) {
$parameters = self::validate_parameters(self::search_services_by_event_parameters(), array("eventname" => $eventname, "active" => $active)); $parameters = self::validate_parameters(self::search_services_by_event_parameters(), array("eventname" => $eventname, "active" => $active));
$context = context_system::instance(); $context = context_system::instance();
self::validate_context($context); self::validate_context($context);
$result = array(); $result = array();
if ($listrecords = local_webhooks_search_services_by_event($parameters["eventname"], $parameters["active"])) { if ($listrecords = local_webhooks_search_services_by_event($parameters["eventname"], $parameters["active"])) {
$result = self::formation_list($listrecords); $result = self::formation_list($listrecords);
} }
@ -163,25 +187,7 @@ class local_webhooks_external extends external_api {
*/ */
public static function search_services_by_event_returns() { public static function search_services_by_event_returns() {
return new external_multiple_structure( return new external_multiple_structure(
new external_single_structure( self::structure_record_parameters(), "List of services."
array(
"id" => new external_value(PARAM_INT, "Service identifier."),
"enable" => new external_value(PARAM_INT, "Service status."),
"title" => new external_value(PARAM_TEXT, "Name of the service."),
"url" => new external_value(PARAM_URL, "URL address."),
"type" => new external_value(PARAM_TEXT, "Header type."),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure(
new external_single_structure(
array(
"name" => new external_value(PARAM_TEXT, "Event name."),
"value" => new external_value(PARAM_INT, "Observation status.")
)
), "Observed events.", VALUE_OPTIONAL
)
), "Record about the service."
), "List of services."
); );
} }
@ -195,7 +201,7 @@ class local_webhooks_external extends external_api {
public static function get_record_parameters() { public static function get_record_parameters() {
return new external_function_parameters( return new external_function_parameters(
array( array(
"serviceid" => new external_value(PARAM_INT, "Service identifier.") "serviceid" => new external_value(PARAM_INT, "Service ID.")
) )
); );
} }
@ -208,25 +214,20 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function get_record($serviceid = 0) { public static function get_record($serviceid) {
$parameters = self::validate_parameters(self::get_record_parameters(), array("serviceid" => $serviceid)); $parameters = self::validate_parameters(self::get_record_parameters(), array("serviceid" => $serviceid));
$context = context_system::instance(); $context = context_system::instance();
self::validate_context($context); self::validate_context($context);
$service = array(); $result = array();
if ($record = local_webhooks_get_record($parameters["serviceid"])) { if ($record = local_webhooks_get_record($parameters["serviceid"])) {
$service["events"] = self::formation_events($record->events); $result = (array) $record;
$service["enable"] = $record->enable; $result["events"] = self::formation_events($record->events);
$service["id"] = $record->id;
$service["other"] = $record->other;
$service["title"] = $record->title;
$service["token"] = $record->token;
$service["type"] = $record->type;
$service["url"] = $record->url;
} }
return $service; return $result;
} }
/** /**
@ -236,25 +237,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function get_record_returns() { public static function get_record_returns() {
return new external_single_structure( return self::structure_record_parameters();
array(
"id" => new external_value(PARAM_INT, "Service identifier."),
"enable" => new external_value(PARAM_INT, "Service status."),
"title" => new external_value(PARAM_TEXT, "Name of the service."),
"url" => new external_value(PARAM_URL, "URL address."),
"type" => new external_value(PARAM_TEXT, "Header type."),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure(
new external_single_structure(
array(
"name" => new external_value(PARAM_TEXT, "Event name."),
"value" => new external_value(PARAM_INT, "Observation status.")
)
), "Observed events.", VALUE_OPTIONAL
)
), "Record about the service."
);
} }
/** /**
@ -280,6 +263,7 @@ class local_webhooks_external extends external_api {
self::validate_context($context); self::validate_context($context);
$result = array(); $result = array();
if ($listrecords = local_webhooks_get_list_records()) { if ($listrecords = local_webhooks_get_list_records()) {
$result = self::formation_list($listrecords); $result = self::formation_list($listrecords);
} }
@ -295,25 +279,7 @@ class local_webhooks_external extends external_api {
*/ */
public static function get_list_records_returns() { public static function get_list_records_returns() {
return new external_multiple_structure( return new external_multiple_structure(
new external_single_structure( self::structure_record_parameters(), "List of services."
array(
"id" => new external_value(PARAM_INT, "Service identifier."),
"enable" => new external_value(PARAM_INT, "Service status."),
"title" => new external_value(PARAM_TEXT, "Name of the service."),
"url" => new external_value(PARAM_URL, "URL address."),
"type" => new external_value(PARAM_TEXT, "Header type."),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure(
new external_single_structure(
array(
"name" => new external_value(PARAM_TEXT, "Event name."),
"value" => new external_value(PARAM_INT, "Observation status.")
)
), "Observed events.", VALUE_OPTIONAL
)
), "Record about the service."
), "List of services."
); );
} }
@ -340,6 +306,7 @@ class local_webhooks_external extends external_api {
self::validate_context($context); self::validate_context($context);
$result = array(); $result = array();
if ($eventlist = local_webhooks_get_list_events()) { if ($eventlist = local_webhooks_get_list_events()) {
foreach ($eventlist as $item) { foreach ($eventlist as $item) {
$result[] = $item["eventname"]; $result[] = $item["eventname"];
@ -357,7 +324,7 @@ class local_webhooks_external extends external_api {
*/ */
public static function get_list_events_returns() { public static function get_list_events_returns() {
return new external_multiple_structure( return new external_multiple_structure(
new external_value(PARAM_TEXT, "Event name.") new external_value(PARAM_TEXT, "The name of the event.")
); );
} }
@ -373,21 +340,21 @@ class local_webhooks_external extends external_api {
array( array(
"service" => new external_single_structure( "service" => new external_single_structure(
array( array(
"enable" => new external_value(PARAM_BOOL, "Service status.", VALUE_OPTIONAL), "enable" => new external_value(PARAM_BOOL, "Enable or disable the service.", VALUE_OPTIONAL),
"title" => new external_value(PARAM_TEXT, "Name of the service."), "title" => new external_value(PARAM_TEXT, "Name of the service."),
"url" => new external_value(PARAM_URL, "URL address."), "url" => new external_value(PARAM_URL, "Web address of the service."),
"type" => new external_value(PARAM_TEXT, "Header type.", VALUE_OPTIONAL), "type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL), "token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL), "other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure( "events" => new external_multiple_structure(
new external_single_structure( new external_single_structure(
array( array(
"name" => new external_value(PARAM_TEXT, "Event name."), "name" => new external_value(PARAM_TEXT, "The name of the event."),
"value" => new external_value(PARAM_INT, "Observation status.") "value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
) )
), "Observed events.", VALUE_OPTIONAL ), "List of observed events.", VALUE_OPTIONAL
) )
), "Record about the service." ), "Information about the service."
) )
) )
); );
@ -401,22 +368,22 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function create_record($service = array()) { public static function create_record($service) {
$parameters = self::validate_parameters(self::create_record_parameters(), array("service" => $service)); $parameters = self::validate_parameters(self::create_record_parameters(), array("service" => $service));
$context = context_system::instance(); $context = context_system::instance();
self::validate_context($context); self::validate_context($context);
$record = new stdClass(); $record = new stdClass();
$record->other = $parameters["service"]["other"]; $record->other = $parameters["service"]["other"];
$record->title = $parameters["service"]["title"]; $record->title = $parameters["service"]["title"];
$record->token = $parameters["service"]["token"]; $record->token = $parameters["service"]["token"];
$record->url = $parameters["service"]["url"]; $record->url = $parameters["service"]["url"];
$record->events = array();
$record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : false; $record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : false;
$record->type = !empty($parameters["service"]["type"]) ? $parameters["service"]["type"] : "json"; $record->type = !empty($parameters["service"]["type"]) ? $parameters["service"]["type"] : "json";
$record->events = array();
foreach ($parameters["service"]["events"] as $value) { foreach ($parameters["service"]["events"] as $value) {
$record->events[$value["name"]] = $value["value"]; $record->events[$value["name"]] = $value["value"];
} }
@ -431,7 +398,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function create_record_returns() { public static function create_record_returns() {
return new external_value(PARAM_BOOL, "The result of the operation."); return new external_value(PARAM_BOOL, "Result of execution.");
} }
/** /**
@ -444,24 +411,24 @@ class local_webhooks_external extends external_api {
public static function update_record_parameters() { public static function update_record_parameters() {
return new external_function_parameters( return new external_function_parameters(
array( array(
"id" => new external_value(PARAM_INT, "Service identifier."), "service" => return new external_single_structure(
"service" => new external_single_structure(
array( array(
"enable" => new external_value(PARAM_BOOL, "Service status.", VALUE_OPTIONAL), "id" => new external_value(PARAM_INT, "Service ID."),
"enable" => new external_value(PARAM_BOOL, "Enable or disable the service.", VALUE_OPTIONAL),
"title" => new external_value(PARAM_TEXT, "Name of the service.", VALUE_OPTIONAL), "title" => new external_value(PARAM_TEXT, "Name of the service.", VALUE_OPTIONAL),
"url" => new external_value(PARAM_URL, "URL address.", VALUE_OPTIONAL), "url" => new external_value(PARAM_URL, "Web address of the service.", VALUE_OPTIONAL),
"type" => new external_value(PARAM_TEXT, "Header type.", VALUE_OPTIONAL), "type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL), "token" => new external_value(PARAM_RAW, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL), "other" => new external_value(PARAM_RAW, "Additional field.", VALUE_OPTIONAL),
"events" => new external_multiple_structure( "events" => new external_multiple_structure(
new external_single_structure( new external_single_structure(
array( array(
"name" => new external_value(PARAM_TEXT, "Event name."), "name" => new external_value(PARAM_TEXT, "The name of the event."),
"value" => new external_value(PARAM_INT, "Observation status.") "value" => new external_value(PARAM_BOOL, "Enabled or disabled handler.")
) )
), "Observed events.", VALUE_OPTIONAL ), "List of observed events.", VALUE_OPTIONAL
) )
), "Record about the service." ), "Information about the service."
) )
) )
); );
@ -470,20 +437,20 @@ class local_webhooks_external extends external_api {
/** /**
* Update the record in the database. * Update the record in the database.
* *
* @param number $serviceid
* @param array $service * @param array $service
* @return boolean * @return boolean
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function update_record($serviceid = 0, $service = array()) { public static function update_record($service) {
$parameters = self::validate_parameters(self::update_record_parameters(), array("id" => $serviceid, "service" => $service)); $parameters = self::validate_parameters(self::update_record_parameters(), array("service" => $service));
$context = context_system::instance(); $context = context_system::instance();
self::validate_context($context); self::validate_context($context);
$result = false; $result = false;
if ($record = local_webhooks_get_record($parameters["id"])) {
if ($record = local_webhooks_get_record($parameters["service"]["id"])) {
$record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : $record->enable; $record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : $record->enable;
$record->other = !empty($parameters["service"]["other"]) ? $parameters["service"]["other"] : $record->other; $record->other = !empty($parameters["service"]["other"]) ? $parameters["service"]["other"] : $record->other;
$record->title = !empty($parameters["service"]["title"]) ? $parameters["service"]["title"] : $record->title; $record->title = !empty($parameters["service"]["title"]) ? $parameters["service"]["title"] : $record->title;
@ -493,6 +460,7 @@ class local_webhooks_external extends external_api {
if (!empty($parameters["service"]["events"])) { if (!empty($parameters["service"]["events"])) {
$record->events = array(); $record->events = array();
foreach ($parameters["service"]["events"] as $value) { foreach ($parameters["service"]["events"] as $value) {
$record->events[$value["name"]] = $value["value"]; $record->events[$value["name"]] = $value["value"];
} }
@ -508,10 +476,10 @@ class local_webhooks_external extends external_api {
* Returns description of method result value. * Returns description of method result value.
* *
* @return external_description * @return external_description
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function update_record_returns() { public static function update_record_returns() {
return new external_value(PARAM_BOOL, "The result of the operation."); return new external_value(PARAM_BOOL, "Result of execution.");
} }
/** /**
@ -524,7 +492,7 @@ class local_webhooks_external extends external_api {
public static function delete_record_parameters() { public static function delete_record_parameters() {
return new external_function_parameters( return new external_function_parameters(
array( array(
"serviceid" => new external_value(PARAM_INT, "Service identifier.") "serviceid" => new external_value(PARAM_INT, "Service ID.")
) )
); );
} }
@ -537,7 +505,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function delete_record($serviceid = 0) { public static function delete_record($serviceid) {
$parameters = self::validate_parameters(self::delete_record_parameters(), array("serviceid" => $serviceid)); $parameters = self::validate_parameters(self::delete_record_parameters(), array("serviceid" => $serviceid));
$context = context_system::instance(); $context = context_system::instance();
@ -552,8 +520,8 @@ class local_webhooks_external extends external_api {
* @return external_description * @return external_description
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function delete_record_returns() { public static function delete_record_returns() {
return new external_value(PARAM_BOOL, "The result of the operation."); return new external_value(PARAM_BOOL, "Result of execution.");
} }
/** /**
@ -588,7 +556,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function delete_all_records_returns() { public static function delete_all_records_returns() {
return new external_value(PARAM_BOOL, "The result of the operation."); return new external_value(PARAM_BOOL, "Result of execution.");
} }
/** /**
@ -623,7 +591,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function create_backup_returns() { public static function create_backup_returns() {
return new external_value(PARAM_TEXT, "Backup copy."); return new external_value(PARAM_RAW, "Backup copy.");
} }
/** /**
@ -638,8 +606,8 @@ class local_webhooks_external extends external_api {
array( array(
"options" => new external_single_structure( "options" => new external_single_structure(
array( array(
"backup" => new external_value(PARAM_TEXT, "Backup copy."), "backup" => new external_value(PARAM_RAW, "Backup copy."),
"deleterecords" => new external_value(PARAM_BOOL, "Delete existing records.", VALUE_OPTIONAL) "deleterecords" => new external_value(PARAM_BOOL, "Delete or leave all records.", VALUE_OPTIONAL)
) )
) )
) )
@ -649,17 +617,17 @@ class local_webhooks_external extends external_api {
/** /**
* Restore from a backup. * Restore from a backup.
* *
* @param array $options * @param array $options
* @since Moodle 2.9 Options available * @since Moodle 2.9 Options available
* @since Moodle 2.2 * @since Moodle 2.2
*/ */
public static function restore_backup($options = array()) { public static function restore_backup($options) {
$parameters = self::validate_parameters(self::restore_backup_parameters(), array("options" => $options)); $parameters = self::validate_parameters(self::restore_backup_parameters(), array("options" => $options));
$context = context_system::instance(); $context = context_system::instance();
self::validate_context($context); self::validate_context($context);
$deleterecords = !empty($parameters["options"]["deleterecords"]) ? boolval($parameters["options"]["deleterecords"]) : false; $deleterecords = !empty($parameters["options"]["deleterecords"]) ? $parameters["options"]["deleterecords"] : false;
local_webhooks_restore_backup($parameters["options"]["backup"], $deleterecords); local_webhooks_restore_backup($parameters["options"]["backup"], $deleterecords);
} }
@ -672,4 +640,4 @@ class local_webhooks_external extends external_api {
public static function restore_backup_returns() { public static function restore_backup_returns() {
return null; return null;
} }
} }