docroot . 'webservice/lib.php');
safe_require('module', 'mobileapi');
define('TITLE', get_string('mytokenspagetitle', 'module.mobileapi'));
// Users shouldn't be able to access this page if webservices are not enabled.
if (!PluginModuleMobileapi::is_service_ready()) {
throw new AccessDeniedException(get_string('featuredisabled', 'auth.webservice'));
}
// get the list of services that are available for User Access Tokens usage
// determine if there is a corresponding token for the service
$dbservices = get_records_sql_array(
"SELECT
es.id || '_' || et.id || '_' || es.id as dispid,
es.id,
es.name,
es.enabled,
es.restrictedusers,
et.token,
" . db_format_tsfield('et.mtime', 'token_mtime') . ',
' . db_format_tsfield('et.ctime', 'token_ctime') . ',
et.institution,
et.validuntil as token_validuntil,
et.clientname,
et.clientenv,
esu.validuntil as user_validuntil,
esu.iprestriction
FROM
{external_services} es
LEFT JOIN {external_tokens} et
ON et.externalserviceid = es.id
AND et.userid = ?
AND et.tokentype = ?
LEFT JOIN {external_services_users} esu
ON esu.externalserviceid = es.id
AND esu.userid = ?
WHERE
es.tokenusers = 1
AND (es.restrictedusers = 0 OR esu.id IS NOT NULL)
AND (et.id IS NOT NULL OR esu.id IS NOT NULL)'
,array(
$USER->get('id'),
EXTERNAL_TOKEN_USER,
$USER->get('id')
)
);
/*
* display the access tokens for services
*/
if (empty($dbservices)) {
$userform = get_string('nopersonaltokens', 'module.mobileapi');
}
else {
$userform = array(
'name' => 'webservices_user_tokens',
'elementclasses' => false,
'successcallback' => 'webservices_user_tokens_submit',
'renderer' => 'multicolumntable',
);
$elements = array();
$elements['client_info'] = array(
'title' => ' ',
'datatable' => true,
'type' => 'html',
'value' => get_string('clientinfo', 'module.mobileapi'),
);
if (get_config_plugin('module', 'mobileapi', 'manualtokens')) {
$elements['token'] = array(
'title' => ' ',
'datatable' => true,
'type' => 'html',
'value' => get_string('token', 'module.mobileapi'),
);
}
$elements['created'] = array(
'title' => ' ',
'datatable' => true,
'type' => 'html',
'value' => get_string('tokencreated', 'module.mobileapi'),
);
// Action buttons (no title)
$elements['actions'] = array(
'title' => ' ',
'datatable' => true,
'type' => 'html',
'value' => '',
);
$userform['elements'] = $elements;
foreach ($dbservices as $service) {
$client = '
';
if ($service->clientname) {
$client .= $service->clientname;
}
else {
$client .= get_string('clientnotspecified', 'module.mobileapi');
}
$client .= '
';
if ($service->clientenv) {
$client .= " ({$service->clientenv})";
}
// information about the client that generated it
$userform['elements']['id' . $service->dispid . '_client_info'] = array(
'value' => $client,
'type' => 'html',
'key' => $service->dispid,
);
if (get_config_plugin('module', 'mobileapi', 'manualtokens')) {
$userform['elements']['id' . $service->dispid . '_token'] = array(
'value' => $service->token,
'type' => 'html',
'key' => $service->dispid,
);
}
$userform['elements']['id' . $service->dispid . '_ctime'] = array(
'value' => format_date($service->token_ctime),
'type' => 'html',
'key' => $service->dispid,
);
// generate button
// delete button
$userform['elements']['id' . $service->dispid . '_actions'] = array(
'value' => pieform(
array(
'name' => 'webservices_user_token_delete_' . $service->dispid,
'renderer' => 'div',
'elementclasses' => false,
'successcallback' => 'webservices_user_token_submit',
'class' => 'form-as-button pull-left',
'jsform' => false,
'elements' => array(
'token' => array('type' => 'hidden', 'value' => $service->token),
'action' => array('type' => 'hidden', 'value' => 'delete'),
'submit' => array(
'type' => 'button',
'usebuttontag' => true,
'class' => 'btn-default btn-sm',
'value' => '' . get_string('delete'),
'elementtitle' => get_string('deletespecific', 'mahara', $service->dispid),
),
),
)
),
'type' => 'html',
'key' => $service->dispid,
'class' => 'webserviceconfigcontrols' . (empty($service->token) ? ' only-button only-button-top' : ''),
);
}
$pieform = pieform_instance($userform);
$userform = $pieform->build(false);
}
$page_elements = array(
// fieldset for managing service function list
'user_tokens' => array(
'type' => 'fieldset',
'legend' => get_string('mytokenspagedesc', 'module.mobileapi'),
'elements' => array(
'sflist' => array(
'type' => 'html',
'value' => $userform,
)
),
'collapsible' => false,
)
);
// TODO: Currently this is hardcoded to only allow self-generation of the
// maharamobile service.
$service = get_record('external_services', 'component', 'module/mobileapi', 'shortname', 'maharamobile');
if (get_config_plugin('module', 'mobileapi', 'manualtokens')) {
$page_elements['generate_user_token'] = array(
'type' => 'fieldset',
'legend' => get_string('generateusertoken', 'module.mobileapi'),
'elements' => array(
'generate_user_token_html' => array(
'type' => 'html',
'value' => pieform(
array(
'name' => 'webservices_user_token_generate_' . $service->id,
'renderer' => 'div',
'elementclasses' => false,
'successcallback' => 'webservices_user_token_submit',
'class' => 'form-as-button pull-left',
'jsform' => false,
'elements' => array(
'action' => array('type' => 'hidden', 'value' => 'generate'),
'submit' => array(
'type' => 'button',
'usebuttontag' => true,
'class' => 'btn-default btn-sm',
'value' => ' ' . get_string('gen', 'auth.webservice'),
'elementtitle' => get_string('gen', 'auth.webservice')
),
),
)
)
)
)
);
}
$form = array(
'renderer' => 'div',
'type' => 'div',
'id' => 'maintable',
'name' => 'maincontainer',
'dieaftersubmit' => false,
'successcallback' => 'webservice_main_submit',
'elements' => $page_elements,
);
/**
* handle the callback for actions on the user token panel
* - generate noew token
* - delete token
*
* @param Pieform $form
* @param array $values
*/
function webservices_user_token_submit(Pieform $form, $values) {
global $USER, $SESSION;
if ($values['action'] == 'generate') {
// TODO: Currently this is hard-coded to only the maharamobile service
if (
get_config_plugin('module', 'mobileapi', 'manualtokens')
&& ($service = get_record('external_services', 'component', 'module/mobileapi', 'shortname', 'maharamobile', 'tokenusers', 1))
) {
$token = webservice_generate_token(
EXTERNAL_TOKEN_USER,
$service,
$USER->get('id'),
null,
null,
null,
get_string('tokenmanuallycreated', 'auth.webservice')
);
$SESSION->add_ok_msg(get_string('token_generated', 'auth.webservice'));
}
else {
$SESSION->add_error_msg(get_string('noservices', 'auth.webservice'));
}
}
else if ($values['action'] == 'delete') {
delete_records('external_tokens', 'userid', $USER->get('id'), 'token', $values['token']);
$SESSION->add_ok_msg(get_string('appaccessrevoked', 'module.mobileapi'));
}
redirect('/module/mobileapi/apps.php');
}
// render the page
$pieform = pieform_instance($form);
$form = $pieform->build(false);
$smarty = smarty();
setpageicon($smarty, 'icon-globe');
safe_require('auth', 'webservice');
$smarty->assign('form', $form);
$smarty->display('form.tpl');