From 72ed3241226940bee8c45b27be85b4a22453f99c Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Thu, 7 Jun 2018 06:39:36 +0400 Subject: Main library Signed-off-by: Valentin Popov --- lib.php | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 lib.php diff --git a/lib.php b/lib.php new file mode 100644 index 0000000..b67904f --- /dev/null +++ b/lib.php @@ -0,0 +1,137 @@ +. + +/** + * Main functions of the plugin. + * + * @copyright 2018 "Valentin Popov" + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package tool_apisiteadmins + */ + +defined("MOODLE_INTERNAL") || die(); + +/** + * Functions for working with the list of administrators. + * + * @copyright 2018 "Valentin Popov" + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package tool_apisiteadmins + */ +class tool_apisiteadmins { + /** + * Adds a user to the list of administrators. + * + * @param number $userid System user ID + * @return boolean Result of execution + */ + public static function add_user($userid) { + if (!core_user::is_real_user($userid, true)) { + print_error("invaliduser", "error", null); + } + + $userid = (int)$userid; + $admins = self::get_list(); + $admins[$userid] = $userid; + + self::create_event("administrator_added", $userid); + return self::save_changes($admins); + } + + /** + * Removes a user from the list of administrators. + * + * @param number $userid System user ID + * @return boolean Result of execution + */ + public static function remove_user($userid) { + if (!core_user::is_real_user($userid, true)) { + print_error("invaliduser", "error", null); + } + + $userid = (int)$userid; + $admins = self::get_list(); + unset($admins[$userid]); + + self::create_event("administrator_deleted", $userid); + return self::save_changes($admins); + } + + /** + * Registers the user as the primary administrator. + * + * @param number $userid System user ID + * @return boolean Result of execution + */ + public static function set_main($userid) { + if (!core_user::is_real_user($userid, true)) { + print_error("invaliduser", "error", null); + } + + $userid = (int)$userid; + $admins = self::get_list(); + if (isset($admins[$userid])) { + unset($admins[$userid]); + array_unshift($admins, $userid); + } + + self::create_event("administrator_changed", $userid); + return self::save_changes($admins); + } + + /** + * Creates an entry in the system log. + * + * @param string $name Event name + * @param number $userid System user ID + */ + private static function create_event($name, $userid) { + $function = "tool_apisiteadmins\\event\\$name"; + $function::create(array("relateduserid" => $userid))->trigger(); + } + + /** + * Applies the changes on the site. + * + * @return array List of administrators + */ + private static function get_list() { + $config = get_config("core", "siteadmins"); + + $result = array(); + foreach (explode(",", $config) as $id) { + $id = (int)$id; + if (!empty($id)) { + $result[$id] = $id; + } + } + + return $result; + } + + /** + * Applies the changes on the site. + * + * @param array $admins List of administrators + */ + private static function save_changes($admins) { + if (empty($admins)) { + $admins = self::get_list(); + } + + return set_config("siteadmins", implode(",", $admins)); + } +} -- cgit v1.2.3