1<?php 2/********************************************************************* 3 staff.php 4 5 Evertything about staff members. 6 7 Peter Rotich <peter@osticket.com> 8 Copyright (c) 2006-2013 osTicket 9 http://www.osticket.com 10 11 Released under the GNU General Public License WITHOUT ANY WARRANTY. 12 See LICENSE.TXT for details. 13 14 vim: expandtab sw=4 ts=4 sts=4: 15**********************************************************************/ 16require('admin.inc.php'); 17 18// Included here for role permission registration 19require_once INCLUDE_DIR . 'class.report.php'; 20 21$staff=null; 22if($_REQUEST['id'] && !($staff=Staff::lookup($_REQUEST['id']))) 23 $errors['err']=sprintf(__('%s: Unknown or invalid ID.'), __('agent')); 24 25if($_POST){ 26 switch(strtolower($_POST['do'])){ 27 case 'update': 28 if(!$staff){ 29 $errors['err']=sprintf(__('%s: Unknown or invalid'), __('agent')); 30 }elseif($staff->update($_POST,$errors)){ 31 $msg=sprintf(__('Successfully updated %s.'), 32 __('this agent')); 33 }elseif(!$errors['err']){ 34 $errors['err']=sprintf('%s %s', 35 sprintf(__('Unable to update %s.'), __('this agent')), 36 __('Correct any errors below and try again.')); 37 } 38 break; 39 case 'create': 40 $staff = Staff::create(); 41 // Unpack the data from the set-password dialog (if used) 42 if (isset($_SESSION['new-agent-passwd'])) { 43 foreach ($_SESSION['new-agent-passwd'] as $k=>$v) 44 if (!isset($_POST[$k])) 45 $_POST[$k] = $v; 46 } else { // If no password && no backend set or is local then send Welcome Email 47 $bk = array_key_exists('backend', $_POST) ? $_POST['backend'] : null; 48 if (!$bk || $bk == 'local') 49 $_POST['welcome_email'] = 1; 50 } 51 if ($staff->update($_POST,$errors)) { 52 unset($_SESSION['new-agent-passwd']); 53 $msg=sprintf(__('Successfully added %s.'),Format::htmlchars($_POST['firstname'])); 54 $type = array('type' => 'created'); 55 Signal::send('object.created', $staff, $type); 56 $_REQUEST['a']=null; 57 }elseif(!$errors['err']){ 58 $errors['err']=sprintf('%s %s', 59 sprintf(__('Unable to add %s.'), __('this agent')), 60 __('Correct any errors below and try again.')); 61 } 62 break; 63 case 'mass_process': 64 if(!$_POST['ids'] || !is_array($_POST['ids']) || !count($_POST['ids'])) { 65 $errors['err'] = sprintf(__('You must select at least %s.'), 66 __('one agent')); 67 } elseif(in_array($_POST['a'], array('disable', 'delete')) 68 && in_array($thisstaff->getId(),$_POST['ids']) 69 ) { 70 $errors['err'] = __('You can not disable/delete yourself - you could be the only admin!'); 71 } else { 72 $count = count($_POST['ids']); 73 $members = Staff::objects()->filter(array( 74 'staff_id__in' => $_POST['ids'] 75 )); 76 switch(strtolower($_POST['a'])) { 77 case 'enable': 78 $num = $members->update(array('isactive' => 1)); 79 if ($num) { 80 if($num==$count) 81 $msg = sprintf('Successfully activated %s', 82 _N('selected agent', 'selected agents', $count)); 83 else 84 $warn = sprintf(__('%1$d of %2$d %3$s activated'), $num, $count, 85 _N('selected agent', 'selected agents', $count)); 86 } else { 87 $errors['err'] = sprintf(__('Unable to activate %s'), 88 _N('selected agent', 'selected agents', $count)); 89 } 90 break; 91 92 case 'disable': 93 $num = $members->update(array('isactive' => 0)); 94 if ($num) { 95 if($num==$count) 96 $msg = sprintf('Successfully disabled %s', 97 _N('selected agent', 'selected agents', $count)); 98 else 99 $warn = sprintf(__('%1$d of %2$d %3$s disabled'), $num, $count, 100 _N('selected agent', 'selected agents', $count)); 101 } else { 102 $errors['err'] = sprintf(__('Unable to disable %s'), 103 _N('selected agent', 'selected agents', $count)); 104 } 105 break; 106 107 case 'delete': 108 $i = 0; 109 foreach($members as $s) { 110 if ($s->staff_id != $thisstaff->getId()) { 111 $s->delete(); 112 $i++; 113 } 114 } 115 116 if($i && $i==$count) 117 $msg = sprintf(__('Successfully deleted %s.'), 118 _N('selected agent', 'selected agents', $count)); 119 elseif($i>0) 120 $warn = sprintf(__('%1$d of %2$d %3$s deleted'), $i, $count, 121 _N('selected agent', 'selected agents', $count)); 122 elseif(!$errors['err']) 123 $errors['err'] = sprintf(__('Unable to delete %s.'), 124 _N('selected agent', 'selected agents', $count)); 125 break; 126 127 case 'permissions': 128 foreach ($members as $s) 129 if ($s->updatePerms($_POST['perms'], $errors) && $s->save()) 130 $i++; 131 132 if($i && $i==$count) 133 $msg = sprintf(__('Successfully updated %s.'), 134 _N('selected agent', 'selected agents', $count)); 135 elseif($i>0) 136 $warn = sprintf(__('%1$d of %2$d %3$s updated'), $i, $count, 137 _N('selected agent', 'selected agents', $count)); 138 elseif(!$errors['err']) 139 $errors['err'] = sprintf(__('Unable to update %s.'), 140 _N('selected agent', 'selected agents', $count)); 141 break; 142 143 case 'department': 144 if (!$_POST['dept_id'] || !$_POST['role_id'] 145 || !Dept::lookup($_POST['dept_id']) 146 || !Role::lookup($_POST['role_id']) 147 ) { 148 $errors['err'] = __('Internal error occurred'); 149 break; 150 } 151 foreach ($members as $s) { 152 $s->setDepartmentId((int) $_POST['dept_id'], $_POST['eavesdrop']); 153 $s->role_id = (int) $_POST['role_id']; 154 if ($s->save() && $s->dept_access->saveAll()) 155 $i++; 156 } 157 if($i && $i==$count) 158 $msg = sprintf(__('Successfully updated %s.'), 159 _N('selected agent', 'selected agents', $count)); 160 elseif($i>0) 161 $warn = sprintf(__('%1$d of %2$d %3$s updated'), $i, $count, 162 _N('selected agent', 'selected agents', $count)); 163 elseif(!$errors['err']) 164 $errors['err'] = sprintf(__('Unable to update %s.'), 165 _N('selected agent', 'selected agents', $count)); 166 break; 167 168 default: 169 $errors['err'] = sprintf('%s - %s', __('Unknown action'), __('Get technical help!')); 170 } 171 172 } 173 break; 174 default: 175 $errors['err']=__('Unknown action'); 176 break; 177 } 178} 179 180$page='staffmembers.inc.php'; 181$tip_namespace = 'staff.agent'; 182if($staff || ($_REQUEST['a'] && !strcasecmp($_REQUEST['a'],'add'))) { 183 if ($staff && ($pdept=$staff->getDept()) && !$pdept->isActive()) 184 $warn = sprintf(__('%s is assigned a %s that is not active.'), __('Agent'), __('Primary Department')); 185 $page='staff.inc.php'; 186} elseif ($_REQUEST['a'] && !strcasecmp($_REQUEST['a'],'export')) { 187 if (!Staff::export()) 188 $errors['err'] = sprintf(__('Unable to export %s.'), __('Agents')); 189} 190$nav->setTabActive('staff'); 191$ost->addExtraHeader('<meta name="tip-namespace" content="' . $tip_namespace . '" />', 192 "$('#content').data('tipNamespace', '".$tip_namespace."');"); 193require(STAFFINC_DIR.'header.inc.php'); 194require(STAFFINC_DIR.$page); 195include(STAFFINC_DIR.'footer.inc.php'); 196?> 197