if (@txpinterface == 'admin') {
global $txp_user, $smd_faux_publish_user, $smd_faux_position, $smd_privs;
// PUT YOUR SUPER-USER LOGIN NAME(S) INSIDE THE '' (CASE SENSITIVE).
// COMMA-SEPARATE THE LIST OF NAMES.
$smd_faux_publish_user = '';
// DROPDOWN LOCATION. SET THIS TO:
// * 0 IF YOU WANT AN ADMIN->SWITCH ROLE TAB WITH THE DROPDOWN IN IT.
// * ANY OTHER VALUE(S) SPECIFY WHERE YOU WANT THE DROPDOWN TO APPEAR IN A FIXED LOCATION ON THE SCREEN
// --> THE VALUE IS THE NUMBER OF PIXELS FROM THE LEFT & TOP EDGES, e.g. '800' or '750,72'.
$smd_faux_position = '0';
// DON'T TOUCH ANYTHING BELOW THIS LINE!
$smd_privs = array(
1 => gTxt('publisher'),
2 => gTxt('managing_editor'),
3 => gTxt('copy_editor'),
4 => gTxt('staff_writer'),
5 => gTxt('freelancer'),
6 => gTxt('designer'),
);
if (in_list($txp_user, $smd_faux_publish_user)) {
if ($smd_faux_position) {
// Add the dropdown to the top bar
register_callback('smd_faux_go', 'admin_side', 'header');
} else {
// Add the interface to the Admin tab since that's visible to all users
add_privs('smd_faux_role', '1,2,3,4,5,6');
register_tab('admin', 'smd_faux_role', smd_faux_gTxt('tab_name'));
register_callback('smd_faux_role', 'smd_faux_role');
}
register_callback('smd_faux_plugin_off', 'plugin_lifecycle.smd_faux_role', 'disabled');
register_callback('smd_faux_plugin_off', 'plugin_lifecycle.smd_faux_role', 'deleted');
}
}
// Plugin jump-off point
function smd_faux_role($event, $step) {
if(!$step or !in_array($step, array(
'smd_faux_prefs',
'smd_faux_save',
))) {
smd_faux_prefs();
} else $step();
}
// Allow role to be altered via dropdown on its own tab...
function smd_faux_prefs($msg='') {
$msg = (empty($msg)) ? gps('smd_faux_msg') : $msg;
pagetop(smd_faux_gTxt('tab_name'), $msg);
echo smd_faux_dropdown();
}
// ...or position the dropdown on the top row
function smd_faux_go($event, $step, $data) {
global $smd_faux_position;
smd_faux_save();
$pos = do_list($smd_faux_position);
$left = (isset($pos[0]) && is_numeric($pos[0])) ? $pos[0] : 0;
$top = (isset($pos[1]) && is_numeric($pos[1])) ? $pos[1] : 0;
return '
'.smd_faux_dropdown().'
'.$data;
}
// Render the dropdown
function smd_faux_dropdown() {
global $txp_user, $smd_faux_publish_user, $smd_faux_position, $smd_privs;
$userlist = do_list($smd_faux_publish_user);
$out = '';
foreach ($userlist as $theUser) {
if ($txp_user == $theUser) {
$curr_privs = safe_field("privs", "txp_users", "name = '".doSlash($theUser)."'");
$out = form(
''.smd_faux_gTxt('set_user', array('{name}' => $theUser))
. selectInput('smd_faux_priv', $smd_privs, $curr_privs, '', 1)
.(($smd_faux_position) ? eInput(gps('event')).sInput(gps('step')) : eInput('smd_faux_role').sInput('smd_faux_save'))
.hInput('smd_faux_user', $theUser)
. '
'
);
}
}
return $out;
}
// Update the user privs in the database when the select list is altered
function smd_faux_save() {
global $smd_privs, $smd_faux_position;
$priv = gps('smd_faux_priv');
$uname = doSlash(gps('smd_faux_user'));
$msg = '';
if ($priv && $uname) {
assert_int($priv);
$check = safe_field('name', 'txp_users', "name='$uname'");
// Alter the privs of the nominated super-user
if ($check) {
safe_update('txp_users', 'privs='.doSlash($priv), "name = '".$uname."'");
$msg = smd_faux_gTxt('new_role', array('{name}' => $uname, '{role}' => $smd_privs[$priv]));
} else {
$msg = smd_faux_gTxt('bad_user', array('{name}' => $uname));
}
if ($smd_faux_position) {
header("Location: ".$_SERVER['HTTP_REFERER']);
} else {
$args['event'] = 'smd_faux_role';
$args['step'] = 'smd_faux_prefs';
$args['smd_faux_msg'] = $msg;
header("Location: ".$_SERVER['REQUEST_URI'].str_replace('&', '&', join_qs($args)));
}
}
}
// Restore publisher privs if plugin is deleted/disabled
function smd_faux_plugin_off($event, $step) {
global $smd_faux_publish_user;
$userlist = do_list($smd_faux_publish_user);
foreach ($userlist as $theUser) {
safe_update('txp_users', 'privs=1', "name = '".doSlash($theUser)."'");
}
}
// Plugin-specific replacement strings - localise as required
function smd_faux_gTxt($what, $atts = array()) {
$lang = array(
'bad_user' => 'No such user: {name}',
'new_role' => 'New role for {name} is {role}',
'set_user' => 'Set user {name} to: ',
'tab_name' => 'Switch role',
);
return strtr($lang[$what], $atts);
}