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
*/
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.
*
* @param array $listrecords
* @param array $listrecords
* @return array
*/
private static function formation_list($listrecords) {
$result = array();
foreach ($listrecords as $index => $record) {
$result[$index] = (array) $record;
$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;
@ -84,7 +107,7 @@ class local_webhooks_external extends external_api {
public static function change_status_parameters() {
return new external_function_parameters(
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.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));
$context = context_system::instance();
@ -113,7 +136,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2
*/
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(
array(
"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.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));
$context = context_system::instance();
self::validate_context($context);
$result = array();
if ($listrecords = local_webhooks_search_services_by_event($parameters["eventname"], $parameters["active"])) {
$result = self::formation_list($listrecords);
}
@ -163,25 +187,7 @@ class local_webhooks_external extends external_api {
*/
public static function search_services_by_event_returns() {
return new external_multiple_structure(
new external_single_structure(
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."
self::structure_record_parameters(), "List of services."
);
}
@ -195,7 +201,7 @@ class local_webhooks_external extends external_api {
public static function get_record_parameters() {
return new external_function_parameters(
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.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));
$context = context_system::instance();
self::validate_context($context);
$service = array();
$result = array();
if ($record = local_webhooks_get_record($parameters["serviceid"])) {
$service["events"] = self::formation_events($record->events);
$service["enable"] = $record->enable;
$service["id"] = $record->id;
$service["other"] = $record->other;
$service["title"] = $record->title;
$service["token"] = $record->token;
$service["type"] = $record->type;
$service["url"] = $record->url;
$result = (array) $record;
$result["events"] = self::formation_events($record->events);
}
return $service;
return $result;
}
/**
@ -236,25 +237,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2
*/
public static function get_record_returns() {
return new external_single_structure(
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."
);
return self::structure_record_parameters();
}
/**
@ -280,6 +263,7 @@ class local_webhooks_external extends external_api {
self::validate_context($context);
$result = array();
if ($listrecords = local_webhooks_get_list_records()) {
$result = self::formation_list($listrecords);
}
@ -295,25 +279,7 @@ class local_webhooks_external extends external_api {
*/
public static function get_list_records_returns() {
return new external_multiple_structure(
new external_single_structure(
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."
self::structure_record_parameters(), "List of services."
);
}
@ -340,6 +306,7 @@ class local_webhooks_external extends external_api {
self::validate_context($context);
$result = array();
if ($eventlist = local_webhooks_get_list_events()) {
foreach ($eventlist as $item) {
$result[] = $item["eventname"];
@ -357,7 +324,7 @@ class local_webhooks_external extends external_api {
*/
public static function get_list_events_returns() {
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(
"service" => new external_single_structure(
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."),
"url" => new external_value(PARAM_URL, "URL address."),
"type" => new external_value(PARAM_TEXT, "Header type.", VALUE_OPTIONAL),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL),
"url" => new external_value(PARAM_URL, "Web address of the service."),
"type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
"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, "Event name."),
"value" => new external_value(PARAM_INT, "Observation status.")
"name" => new external_value(PARAM_TEXT, "The name of the event."),
"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.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));
$context = context_system::instance();
self::validate_context($context);
$record = new stdClass();
$record->other = $parameters["service"]["other"];
$record->title = $parameters["service"]["title"];
$record->token = $parameters["service"]["token"];
$record->url = $parameters["service"]["url"];
$record->other = $parameters["service"]["other"];
$record->title = $parameters["service"]["title"];
$record->token = $parameters["service"]["token"];
$record->url = $parameters["service"]["url"];
$record->events = array();
$record->enable = !empty($parameters["service"]["enable"]) ? $parameters["service"]["enable"] : false;
$record->type = !empty($parameters["service"]["type"]) ? $parameters["service"]["type"] : "json";
$record->events = array();
foreach ($parameters["service"]["events"] as $value) {
$record->events[$value["name"]] = $value["value"];
}
@ -431,7 +398,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2
*/
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() {
return new external_function_parameters(
array(
"id" => new external_value(PARAM_INT, "Service identifier."),
"service" => new external_single_structure(
"service" => return new external_single_structure(
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),
"url" => new external_value(PARAM_URL, "URL address.", VALUE_OPTIONAL),
"type" => new external_value(PARAM_TEXT, "Header type.", VALUE_OPTIONAL),
"token" => new external_value(PARAM_TEXT, "Authorization key.", VALUE_OPTIONAL),
"other" => new external_value(PARAM_TEXT, "Additional field.", VALUE_OPTIONAL),
"url" => new external_value(PARAM_URL, "Web address of the service.", VALUE_OPTIONAL),
"type" => new external_value(PARAM_TEXT, "Used header type.", VALUE_OPTIONAL),
"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, "Event name."),
"value" => new external_value(PARAM_INT, "Observation status.")
"name" => new external_value(PARAM_TEXT, "The name of the event."),
"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.
*
* @param number $serviceid
* @param array $service
* @return boolean
* @since Moodle 2.9 Options available
* @since Moodle 2.2
*/
public static function update_record($serviceid = 0, $service = array()) {
$parameters = self::validate_parameters(self::update_record_parameters(), array("id" => $serviceid, "service" => $service));
public static function update_record($service) {
$parameters = self::validate_parameters(self::update_record_parameters(), array("service" => $service));
$context = context_system::instance();
self::validate_context($context);
$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->other = !empty($parameters["service"]["other"]) ? $parameters["service"]["other"] : $record->other;
$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"])) {
$record->events = array();
foreach ($parameters["service"]["events"] as $value) {
$record->events[$value["name"]] = $value["value"];
}
@ -508,10 +476,10 @@ class local_webhooks_external extends external_api {
* Returns description of method result value.
*
* @return external_description
* @since Moodle 2.2
* @since Moodle 2.2
*/
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() {
return new external_function_parameters(
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.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));
$context = context_system::instance();
@ -552,8 +520,8 @@ class local_webhooks_external extends external_api {
* @return external_description
* @since Moodle 2.2
*/
public static function delete_record_returns() {
return new external_value(PARAM_BOOL, "The result of the operation.");
public static function delete_record_returns() {
return new external_value(PARAM_BOOL, "Result of execution.");
}
/**
@ -588,7 +556,7 @@ class local_webhooks_external extends external_api {
* @since Moodle 2.2
*/
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
*/
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(
"options" => new external_single_structure(
array(
"backup" => new external_value(PARAM_TEXT, "Backup copy."),
"deleterecords" => new external_value(PARAM_BOOL, "Delete existing records.", VALUE_OPTIONAL)
"backup" => new external_value(PARAM_RAW, "Backup copy."),
"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.
*
* @param array $options
* @param array $options
* @since Moodle 2.9 Options available
* @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));
$context = context_system::instance();
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);
}
@ -672,4 +640,4 @@ class local_webhooks_external extends external_api {
public static function restore_backup_returns() {
return null;
}
}
}