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); }