1<?php 2/********************************************************************* 3 departments.php 4 5 Departments 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$dept=null; 19if($_REQUEST['id'] && !($dept=Dept::lookup($_REQUEST['id']))) 20 $errors['err']=sprintf(__('%s: Unknown or invalid ID.'), __('department')); 21 22 if($_POST){ 23 switch(strtolower($_POST['do'])){ 24 case 'update': 25 if(!$dept){ 26 $errors['err']=sprintf(__('%s: Unknown or invalid'), __('department')); 27 }elseif($dept->update($_POST,$errors)){ 28 $msg=sprintf(__('Successfully updated %s.'), 29 __('this department')); 30 }elseif(!$errors['err']){ 31 $errors['err'] = sprintf('%s %s', 32 sprintf(__('Unable to update %s.'), __('this department')), 33 __('Correct any errors below and try again.')); 34 } 35 break; 36 case 'create': 37 $_dept = Dept::create(); 38 if(($_dept->update($_POST,$errors))){ 39 $msg=sprintf(__('Successfully added %s.'),Format::htmlchars($_POST['name'])); 40 $_REQUEST['a']=null; 41 $type = array('type' => 'created'); 42 Signal::send('object.created', $_dept, $type); 43 }elseif(!$errors['err']){ 44 $errors['err']=sprintf('%s %s', 45 sprintf(__('Unable to add %s.'), __('this department')), 46 __('Correct any errors below and try again.')); 47 } 48 break; 49 case 'mass_process': 50 if(!$_POST['ids'] || !is_array($_POST['ids']) || !count($_POST['ids'])) { 51 $errors['err'] = sprintf(__('You must select at least %s.'), 52 __('one department')); 53 }elseif(in_array($cfg->getDefaultDeptId(),$_POST['ids'])) { 54 $errors['err'] = __('You cannot disable/delete a default department. Select a new default department and try again.'); 55 }else{ 56 $count=count($_POST['ids']); 57 switch(strtolower($_POST['a'])) { 58 case 'make_public': 59 $sql='UPDATE '.DEPT_TABLE.' SET ispublic=1 ' 60 .' WHERE dept_id IN ('.implode(',', db_input($_POST['ids'])).')'; 61 if(db_query($sql) && ($num=db_affected_rows())){ 62 if($num==$count) 63 $msg=sprintf(__('Successfully made %s PUBLIC'), 64 _N('selected department', 'selected departments', $count)); 65 else 66 $warn=sprintf(__( 67 /* Phrase will read: 68 <a> of <b> <selected objects> made PUBLIC */ 69 '%1$d of %2$d %3$s made PUBLIC'), $num, $count, 70 _N('selected department', 'selected departments', $count)); 71 } else { 72 $errors['err']=sprintf(__('Unable to make %s PUBLIC.'), 73 _N('selected department', 'selected departments', $count)); 74 } 75 break; 76 case 'make_private': 77 $sql='UPDATE '.DEPT_TABLE.' SET ispublic=0 ' 78 .' WHERE dept_id IN ('.implode(',', db_input($_POST['ids'])).') ' 79 .' AND dept_id!='.db_input($cfg->getDefaultDeptId()); 80 if(db_query($sql) && ($num=db_affected_rows())) { 81 if($num==$count) 82 $msg = sprintf(__('Successfully made %s PRIVATE'), 83 _N('selected department', 'selected epartments', $count)); 84 else 85 $warn = sprintf(__( 86 /* Phrase will read: 87 <a> of <b> <selected objects> made PRIVATE */ 88 '%1$d of %2$d %3$s made PRIVATE'), $num, $count, 89 _N('selected department', 'selected departments', $count)); 90 } else { 91 $errors['err'] = sprintf(__('Unable to make %s private. Possibly already private!'), 92 _N('selected department', 'selected departments', $count)); 93 } 94 break; 95 case 'enable': 96 $depts = Dept::objects()->filter(array( 97 'id__in'=>$_POST['ids'], 98 ))->exclude(array( 99 'id'=>$cfg->getDefaultDeptId() 100 )); 101 foreach ($depts as $d) { 102 $d->setFlag(Dept::FLAG_ARCHIVED, false); 103 $d->setFlag(Dept::FLAG_ACTIVE, true); 104 $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}')); 105 FilterAction::setFilterFlags($filter_actions, 'Filter::FLAG_INACTIVE_DEPT', false); 106 if($d->save()) { 107 $type = array('type' => 'edited', 'status' => 'Active'); 108 Signal::send('object.edited', $d, $type); 109 $num++; 110 } 111 } 112 113 if ($num > 0) { 114 if($num==$count) 115 $msg = sprintf(__('Successfully enabled %s'), 116 _N('selected department', 'selected departments', $count)); 117 else 118 $warn = sprintf(__('%1$d of %2$d %3$s enabled'), $num, $count, 119 _N('selected department', 'selected departments', $count)); 120 } else { 121 $errors['err'] = sprintf(__('Unable to enable %s'), 122 _N('selected department', 'selected departments', $count)); 123 } 124 break; 125 case 'disable': 126 $depts = Dept::objects()->filter(array( 127 'id__in'=>$_POST['ids'], 128 ))->exclude(array( 129 'id'=>$cfg->getDefaultDeptId() 130 )); 131 foreach ($depts as $d) { 132 $d->setFlag(Dept::FLAG_ARCHIVED, false); 133 $d->setFlag(Dept::FLAG_ACTIVE, false); 134 $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}')); 135 FilterAction::setFilterFlags($filter_actions, 'Filter::FLAG_INACTIVE_DEPT', true); 136 if($d->save()) { 137 $type = array('type' => 'edited', 'status' => 'Disabled'); 138 Signal::send('object.edited', $d, $type); 139 $num++; 140 } 141 } 142 if ($num > 0) { 143 if($num==$count) 144 $msg = sprintf(__('Successfully disabled %s'), 145 _N('selected department', 'selected departments', $count)); 146 else 147 $warn = sprintf(__('%1$d of %2$d %3$s disabled'), $num, $count, 148 _N('selected department', 'selected departments', $count)); 149 } else { 150 $errors['err'] = sprintf(__('Unable to disable %s'), 151 _N('selected department', 'selected departments', $count)); 152 } 153 break; 154 case 'archive': 155 $depts = Dept::objects()->filter(array( 156 'id__in'=>$_POST['ids'], 157 ))->exclude(array( 158 'id'=>$cfg->getDefaultDeptId() 159 )); 160 foreach ($depts as $d) { 161 $d->setFlag(Dept::FLAG_ARCHIVED, true); 162 $d->setFlag(Dept::FLAG_ACTIVE, false); 163 $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}')); 164 FilterAction::setFilterFlags($filter_actions, 'Filter::FLAG_INACTIVE_DEPT', true); 165 if($d->save()) { 166 $type = array('type' => 'edited', 'status' => 'Archived'); 167 Signal::send('object.edited', $d, $type); 168 $num++; 169 } 170 } 171 if ($num > 0) { 172 if($num==$count) 173 $msg = sprintf(__('Successfully archived %s'), 174 _N('selected department', 'selected departments', $count)); 175 else 176 $warn = sprintf(__('%1$d of %2$d %3$s archived'), $num, $count, 177 _N('selected department', 'selected departments', $count)); 178 } else { 179 $errors['err'] = sprintf(__('Unable to archive %s'), 180 _N('selected department', 'departments', $count)); 181 } 182 break; 183 case 'delete': 184 //Deny all deletes if one of the selections has members in it. 185 $sql='SELECT count(staff_id) FROM '.STAFF_TABLE 186 .' WHERE dept_id IN ('.implode(',', db_input($_POST['ids'])).')'; 187 list($members)=db_fetch_row(db_query($sql)); 188 if($members) 189 $errors['err']=__('Departments with agents can not be deleted. Move the agents first.'); 190 else { 191 $i=0; 192 foreach($_POST['ids'] as $k=>$v) { 193 if($v!=$cfg->getDefaultDeptId() && ($d=Dept::lookup($v))) { 194 $d->delete(); 195 $i++; 196 } 197 198 } 199 if($i && $i==$count) 200 $msg = sprintf(__('Successfully deleted %s.'), 201 _N('selected department', 'selected departments', $count)); 202 elseif($i>0) 203 $warn = sprintf(__( 204 /* Phrase will read: 205 <a> of <b> <selected objects> deleted */ 206 '%1$d of %2$d %3$s deleted'), $i, $count, 207 _N('selected department', 'selected departments', $count)); 208 elseif(!$errors['err']) 209 $errors['err'] = sprintf(__('Unable to delete %s.'), 210 _N('selected department', 'selected departments', $count)); 211 } 212 break; 213 } 214 } 215 break; 216 default: 217 $errors['err']=__('Unknown action'); 218 break; 219 } 220 } 221 222$page='departments.inc.php'; 223$tip_namespace = 'staff.department'; 224if ($_REQUEST['a'] && $_REQUEST['a'] == 'export') { 225 if (!Dept::export($dept)) 226 $errors['err'] = sprintf(__('Unable to export %s.'), __('Department')); 227} elseif ($dept || ($_REQUEST['a'] && !strcasecmp($_REQUEST['a'],'add'))) { 228 if ($dept && ($pid=$dept->getParent()) && !$pid->isActive()) 229 $warn = sprintf(__('%s is assigned a %s that is not active.'), __('Department'), __('Parent Department')); 230 231 $page='department.inc.php'; 232} 233 234$nav->setTabActive('staff'); 235$ost->addExtraHeader('<meta name="tip-namespace" content="' . $tip_namespace . '" />', 236 "$('#content').data('tipNamespace', '".$tip_namespace."');"); 237require(STAFFINC_DIR.'header.inc.php'); 238require(STAFFINC_DIR.$page); 239include(STAFFINC_DIR.'footer.inc.php'); 240?> 241