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)