diff --git a/admin/settings/server.php b/admin/settings/server.php index 1ae55f217d1..75e72ed3a08 100644 --- a/admin/settings/server.php +++ b/admin/settings/server.php @@ -607,15 +607,6 @@ if ($hassiteconfig) { } // Web services > Manage tokens. - $ADMIN->add('webservicesettings', new admin_externalpage('addwebservicetoken', new lang_string('managetokens', 'webservice'), - "{$CFG->wwwroot}/{$CFG->admin}/webservice/tokens.php", 'moodle/site:config', true)); - - $temp = new admin_settingpage('webservicetokens', new lang_string('managetokens', 'webservice')); - $temp->add(new admin_setting_managewebservicetokens()); - - if (empty($CFG->enablewebservices)) { - $temp->add(new admin_setting_heading('webservicesaredisabled', '', new lang_string('disabledwarning', 'webservice'))); - } - - $ADMIN->add('webservicesettings', $temp); + $ADMIN->add('webservicesettings', new admin_externalpage('webservicetokens', new lang_string('managetokens', 'webservice'), + new moodle_url('/admin/webservice/tokens.php'))); } diff --git a/admin/webservice/tokens.php b/admin/webservice/tokens.php index 21d74855f0c..fb95eb4e77b 100644 --- a/admin/webservice/tokens.php +++ b/admin/webservice/tokens.php @@ -1,6 +1,5 @@ . /** - * Web services tokens admin UI + * Web services / external tokens management UI. * - * @package webservice - * @author Jerome Mouneyrac - * @copyright 2009 Moodle Pty Ltd (http://moodle.com) - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package core_webservice + * @category admin + * @copyright 2009 Jerome Mouneyrac + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -require_once('../../config.php'); + +require(__DIR__ . '/../../config.php'); require_once($CFG->libdir . '/adminlib.php'); require_once($CFG->libdir . '/externallib.php'); +require_once($CFG->dirroot . '/webservice/lib.php'); $action = optional_param('action', '', PARAM_ALPHANUMEXT); $tokenid = optional_param('tokenid', '', PARAM_SAFEDIR); $confirm = optional_param('confirm', 0, PARAM_BOOL); -admin_externalpage_setup('addwebservicetoken'); +admin_externalpage_setup('webservicetokens'); -//Deactivate the second 'Manage token' navigation node, and use the main 'Manage token' navigation node -$node = $PAGE->settingsnav->find('addwebservicetoken', navigation_node::TYPE_SETTING); -$newnode = $PAGE->settingsnav->find('webservicetokens', navigation_node::TYPE_SETTING); -if ($node && $newnode) { - $node->display = false; - $newnode->make_active(); +if ($action === 'create') { + $webservicemanager = new webservice(); + $mform = new \core_webservice\token_form(null, ['action' => 'create']); + $data = $mform->get_data(); + + if ($mform->is_cancelled()) { + redirect($PAGE->url); + + } else if ($data) { + ignore_user_abort(true); + + // Check the user is allowed for the service. + $selectedservice = $webservicemanager->get_external_service_by_id($data->service); + + if ($selectedservice->restrictedusers) { + $restricteduser = $webservicemanager->get_ws_authorised_user($data->service, $data->user); + + if (empty($restricteduser)) { + $allowuserurl = new moodle_url('/admin/webservice/service_users.php', ['id' => $selectedservice->id]); + $allowuserlink = html_writer::link($selectedservice->name, $allowuserurl); + $errormsg = $OUTPUT->notification(get_string('usernotallowed', 'webservice', $allowuserlink)); + } + } + + $user = \core_user::get_user($data->user, '*', MUST_EXIST); + \core_user::require_active_user($user); + + // Generate the token. + if (empty($errormsg)) { + external_generate_token(EXTERNAL_TOKEN_PERMANENT, $data->service, $data->user, context_system::instance(), + $data->validuntil, $data->iprestriction); + redirect($PAGE->url); + } + } + + echo $OUTPUT->header(); + echo $OUTPUT->heading(get_string('createtoken', 'webservice')); + if (!empty($errormsg)) { + echo $errormsg; + } + $mform->display(); + echo $OUTPUT->footer(); + die(); } +if ($action === 'delete') { + $webservicemanager = new webservice(); + $token = $webservicemanager->get_token_by_id_with_details($tokenid); -$tokenlisturl = new moodle_url("/" . $CFG->admin . "/settings.php", array('section' => 'webservicetokens')); + if ($token->creatorid != $USER->id) { + require_capability('moodle/webservice:managealltokens', context_system::instance()); + } -require_once($CFG->dirroot . "/webservice/lib.php"); -$webservicemanager = new webservice(); + if ($confirm && confirm_sesskey()) { + $webservicemanager->delete_user_ws_token($token->id); + redirect($PAGE->url); + } -switch ($action) { + echo $OUTPUT->header(); - case 'create': - $mform = new \core_webservice\token_form(null, array('action' => 'create')); - $data = $mform->get_data(); - if ($mform->is_cancelled()) { - redirect($tokenlisturl); - } else if ($data and confirm_sesskey()) { - ignore_user_abort(true); + echo $OUTPUT->confirm( + get_string('deletetokenconfirm', 'webservice', [ + 'user' => $token->firstname . ' ' . $token->lastname, + 'service' => $token->name, + ]), + new single_button(new moodle_url('/admin/webservice/tokens.php', [ + 'tokenid' => $token->id, + 'action' => 'delete', + 'confirm' => 1, + 'sesskey' => sesskey(), + ]), get_string('delete')), + $PAGE->url + ); - //check the the user is allowed for the service - $selectedservice = $webservicemanager->get_external_service_by_id($data->service); - if ($selectedservice->restrictedusers) { - $restricteduser = $webservicemanager->get_ws_authorised_user($data->service, $data->user); - if (empty($restricteduser)) { - $allowuserurl = new moodle_url('/' . $CFG->admin . '/webservice/service_users.php', - array('id' => $selectedservice->id)); - $allowuserlink = html_writer::tag('a', $selectedservice->name , array('href' => $allowuserurl)); - $errormsg = $OUTPUT->notification(get_string('usernotallowed', 'webservice', $allowuserlink)); - } - } - - //check if the user is deleted. unconfirmed, suspended or guest - $user = $DB->get_record('user', array('id' => $data->user)); - if ($user->id == $CFG->siteguest or $user->deleted or !$user->confirmed or $user->suspended) { - throw new moodle_exception('forbiddenwsuser', 'webservice'); - } - - //process the creation - if (empty($errormsg)) { - //TODO improvement: either move this function from externallib.php to webservice/lib.php - // either move most of webservicelib.php functions into externallib.php - // (create externalmanager class) MDL-23523 - external_generate_token(EXTERNAL_TOKEN_PERMANENT, $data->service, - $data->user, context_system::instance(), - $data->validuntil, $data->iprestriction); - redirect($tokenlisturl); - } - } - - //OUTPUT: create token form - echo $OUTPUT->header(); - echo $OUTPUT->heading(get_string('createtoken', 'webservice')); - if (!empty($errormsg)) { - echo $errormsg; - } - $mform->display(); - echo $OUTPUT->footer(); - die; - break; - - case 'delete': - $token = $webservicemanager->get_token_by_id_with_details($tokenid); - - if ($token->creatorid != $USER->id) { - require_capability("moodle/webservice:managealltokens", context_system::instance()); - } - - //Delete the token - if ($confirm and confirm_sesskey()) { - $webservicemanager->delete_user_ws_token($token->id); - redirect($tokenlisturl); - } - - ////OUTPUT: display delete token confirmation box - echo $OUTPUT->header(); - $renderer = $PAGE->get_renderer('core', 'webservice'); - echo $renderer->admin_delete_token_confirmation($token); - echo $OUTPUT->footer(); - die; - break; - - default: - //wrong url access - redirect($tokenlisturl); - break; + echo $OUTPUT->footer(); + die(); } + +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('managetokens', 'core_webservice')); + +if (has_capability('moodle/webservice:managealltokens', context_system::instance())) { + echo html_writer::div(get_string('onlyseecreatedtokens', 'core_webservice'), 'alert alert-info'); +} + +$table = new \core_webservice\token_table('webservicetokens'); +$table->define_baseurl($PAGE->url); +$table->attributes['class'] = 'admintable generaltable'; +$table->data = []; +$table->out(30, false); + +echo $OUTPUT->footer(); + +// TODO Add button +//$tokenpageurl = "$CFG->wwwroot/$CFG->admin/webservice/tokens.php?sesskey=" . sesskey(); +// +//$return .= $OUTPUT->box_end(); +//// add a token to the table +//$return .= ""; +//$return .= get_string('add').""; diff --git a/lib/adminlib.php b/lib/adminlib.php index 923f9daab3a..b477d2e3eb8 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -10395,91 +10395,6 @@ class admin_setting_managewebserviceprotocols extends admin_setting { } } - -/** - * Special class for web service token administration. - * - * @author Jerome Mouneyrac - */ -class admin_setting_managewebservicetokens extends admin_setting { - - /** - * Calls parent::__construct with specific arguments - */ - public function __construct() { - $this->nosave = true; - parent::__construct('webservicestokenui', get_string('managetokens', 'webservice'), '', ''); - } - - /** - * Always returns true, does nothing - * - * @return true - */ - public function get_setting() { - return true; - } - - /** - * Always returns true, does nothing - * - * @return true - */ - public function get_defaultsetting() { - return true; - } - - /** - * Always returns '', does not write anything - * - * @return string Always returns '' - */ - public function write_setting($data) { - // do not write any setting - return ''; - } - - /** - * Builds the XHTML to display the control - * - * @param string $data Unused - * @param string $query - * @return string - */ - public function output_html($data, $query='') { - global $CFG, $OUTPUT; - - require_once($CFG->dirroot . '/webservice/classes/token_table.php'); - $baseurl = new moodle_url('/' . $CFG->admin . '/settings.php?section=webservicetokens'); - - $return = $OUTPUT->box_start('generalbox webservicestokenui'); - - if (has_capability('moodle/webservice:managealltokens', context_system::instance())) { - $return .= \html_writer::div(get_string('onlyseecreatedtokens', 'webservice')); - } - - $table = new \webservice\token_table('webservicetokens'); - $table->define_baseurl($baseurl); - $table->attributes['class'] = 'admintable generaltable'; // Any need changing? - $table->data = array(); - ob_start(); - $table->out(10, false); - $tablehtml = ob_get_contents(); - ob_end_clean(); - $return .= $tablehtml; - - $tokenpageurl = "$CFG->wwwroot/$CFG->admin/webservice/tokens.php?sesskey=" . sesskey(); - - $return .= $OUTPUT->box_end(); - // add a token to the table - $return .= ""; - $return .= get_string('add').""; - - return highlight($query, $return); - } -} - - /** * Colour picker * diff --git a/webservice/classes/token_table.php b/webservice/classes/token_table.php index 8e4e6bdf131..3f12802e4d9 100644 --- a/webservice/classes/token_table.php +++ b/webservice/classes/token_table.php @@ -22,7 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace webservice; +namespace core_webservice; defined('MOODLE_INTERNAL') || die; diff --git a/webservice/renderer.php b/webservice/renderer.php index 1f8a5e6a592..ebccbb9156e 100644 --- a/webservice/renderer.php +++ b/webservice/renderer.php @@ -184,29 +184,6 @@ class core_webservice_renderer extends plugin_renderer_base { $formcontinue, $formcancel); } - /** - * Display a confirmation page to delete a token - * - * @param stdClass $token Required properties: id (token id), firstname (user firstname), lastname (user lastname), name (service name) - * @return string html - */ - public function admin_delete_token_confirmation($token) { - global $CFG; - $optionsyes = array('tokenid' => $token->id, 'action' => 'delete', - 'confirm' => 1, 'sesskey' => sesskey()); - $optionsno = array('section' => 'webservicetokens', 'sesskey' => sesskey()); - $formcontinue = new single_button( - new moodle_url('/' . $CFG->admin . '/webservice/tokens.php', $optionsyes), - get_string('delete')); - $formcancel = new single_button( - new moodle_url('/' . $CFG->admin . '/settings.php', $optionsno), - get_string('cancel'), 'get'); - return $this->output->confirm(get_string('deletetokenconfirm', 'webservice', - (object) array('user' => $token->firstname . " " - . $token->lastname, 'service' => $token->name)), - $formcontinue, $formcancel); - } - /** * Display a list of functions for a given service * If the service is built-in, do not display remove/add operation (read-only)