This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
1 | <?php declare(strict_types=1); |
||
2 | |||
3 | /* |
||
4 | * You may not change or alter any portion of this comment or credits |
||
5 | * of supporting developers from this source code or any supporting source code |
||
6 | * which is considered copyrighted (c) material of the original comment or credit authors. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
11 | */ |
||
12 | |||
13 | /** |
||
14 | * @copyright {@link https://xoops.org/ XOOPS Project} |
||
15 | * @license {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later} |
||
16 | * @author Brian Wahoff <[email protected]> |
||
17 | * @author Eric Juden <[email protected]> |
||
18 | * @author XOOPS Development Team |
||
19 | */ |
||
20 | |||
21 | use Xmf\Module\Admin; |
||
22 | use Xmf\Request; |
||
23 | use XoopsModules\Xhelp; |
||
24 | |||
25 | require_once __DIR__ . '/admin_header.php'; |
||
26 | // require_once XHELP_CLASS_PATH . '/PageNav.php'; |
||
27 | |||
28 | global $xoopsModule; |
||
29 | |||
30 | $helper = Xhelp\Helper::getInstance(); |
||
31 | |||
32 | $xhelp_id = 0; |
||
33 | $module_id = $xoopsModule->getVar('mid'); |
||
34 | $displayName = $helper->getConfig('xhelp_displayName'); // Determines if username or real name is displayed |
||
35 | |||
36 | $aLimitByS = ['10' => 10, '15' => 15, '20' => 20, '25' => 25, '50' => 50, '100' => 100]; |
||
37 | $aLimitByD = ['1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '10' => 10]; |
||
38 | |||
39 | if (isset($_REQUEST['op'])) { |
||
40 | $op = Request::getString('op', 'default', 'REQUEST'); |
||
41 | } |
||
42 | |||
43 | switch ($op) { |
||
44 | case 'addRole': |
||
45 | addRole(); |
||
46 | break; |
||
47 | case 'clearOrphanedStaff': |
||
48 | clearOrphanedStaff(); |
||
49 | break; |
||
50 | case 'clearRoles': |
||
51 | clearRoles(); |
||
52 | break; |
||
53 | case 'customDept': |
||
54 | customDept(); |
||
55 | break; |
||
56 | case 'editRole': |
||
57 | editRole(); |
||
58 | break; |
||
59 | case 'editStaff': |
||
60 | editStaff(); |
||
61 | break; |
||
62 | case 'manageStaff': |
||
63 | manageStaff(); |
||
64 | break; |
||
65 | default: |
||
66 | $helper->redirect('admin/index.php'); |
||
67 | break; |
||
68 | } |
||
69 | |||
70 | function addRole() |
||
71 | { |
||
72 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
73 | $session = Xhelp\Session::getInstance(); |
||
74 | $helper = Xhelp\Helper::getInstance(); |
||
75 | |||
76 | if (isset($_POST['add'])) { |
||
77 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
78 | $roleHandler = $helper->getHandler('Role'); |
||
79 | |||
80 | /** @var \XoopsModules\Xhelp\Role $role */ |
||
81 | $role = $roleHandler->create(); |
||
82 | $role->setVar('name', \Xmf\Request::getString('roleName', '', 'POST')); |
||
83 | $role->setVar('description', \Xmf\Request::getString('roleDescription', '', 'POST')); |
||
84 | if (Request::hasVar('tasks', 'POST')) { |
||
85 | $tasksValue = array_sum($_POST['tasks']); |
||
86 | } else { |
||
87 | $tasksValue = 0; |
||
88 | } |
||
89 | $role->setVar('tasks', $tasksValue); |
||
90 | |||
91 | $lastPage = $session->get('xhelp_return_op'); |
||
92 | |||
93 | if ($roleHandler->insert($role)) { |
||
94 | $message = _AM_XHELP_MESSAGE_ROLE_INSERT; |
||
95 | $helper->redirect("staff.php?op=$lastPage"); |
||
96 | } else { |
||
97 | $message = _AM_XHELP_MESSAGE_ROLE_INSERT_ERROR; |
||
98 | $helper->redirect("staff.php?op=$lastPage", 3, $message); |
||
99 | } |
||
100 | } else { |
||
101 | // Set array of security items |
||
102 | $tasks = [ |
||
103 | XHELP_SEC_TICKET_ADD => _AM_XHELP_SEC_TEXT_TICKET_ADD, |
||
104 | XHELP_SEC_TICKET_EDIT => _AM_XHELP_SEC_TEXT_TICKET_EDIT, |
||
105 | XHELP_SEC_TICKET_DELETE => _AM_XHELP_SEC_TEXT_TICKET_DELETE, |
||
106 | XHELP_SEC_TICKET_MERGE => _AM_XHELP_SEC_TEXT_TICKET_MERGE, |
||
107 | XHELP_SEC_TICKET_OWNERSHIP => _AM_XHELP_SEC_TEXT_TICKET_OWNERSHIP, |
||
108 | XHELP_SEC_TICKET_STATUS => _AM_XHELP_SEC_TEXT_TICKET_STATUS, |
||
109 | XHELP_SEC_TICKET_PRIORITY => _AM_XHELP_SEC_TEXT_TICKET_PRIORITY, |
||
110 | XHELP_SEC_TICKET_LOGUSER => _AM_XHELP_SEC_TEXT_TICKET_LOGUSER, |
||
111 | XHELP_SEC_RESPONSE_ADD => _AM_XHELP_SEC_TEXT_RESPONSE_ADD, |
||
112 | XHELP_SEC_RESPONSE_EDIT => _AM_XHELP_SEC_TEXT_RESPONSE_EDIT, |
||
113 | XHELP_SEC_FILE_DELETE => _AM_XHELP_SEC_TEXT_FILE_DELETE, |
||
114 | XHELP_SEC_FAQ_ADD => _AM_XHELP_SEC_TEXT_FAQ_ADD, |
||
115 | XHELP_SEC_TICKET_TAKE_OWNERSHIP => _AM_XHELP_SEC_TEXT_TICKET_TAKE_OWNERSHIP, |
||
116 | ]; |
||
117 | xoops_cp_header(); |
||
118 | //echo $oAdminButton->renderButtons('manStaff'); |
||
119 | $adminObject = Admin::getInstance(); |
||
120 | $adminObject->displayNavigation('staff.php?op=addRole'); |
||
121 | |||
122 | echo '<script type="text/javascript" src="' . XOOPS_URL . '/modules/xhelp/include/functions.js"></script>'; |
||
123 | echo "<form action='staff.php?op=addRole' method='post'>"; |
||
124 | echo $GLOBALS['xoopsSecurity']->getTokenHTML(); |
||
125 | echo "<table width='100%' cellspacing='1' class='outer'>"; |
||
126 | echo "<tr><th colspan='2'>" . _AM_XHELP_TEXT_CREATE_ROLE . '</th></tr>'; |
||
127 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_NAME . "</td> |
||
128 | <td class='even'><input type='text' name='roleName' maxlength='35' value='' class='formButton'></td> |
||
129 | </tr>"; |
||
130 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_DESCRIPTION . "</td> |
||
131 | <td class='even'><textarea name='roleDescription' class='formButton'></textarea></td> |
||
132 | </tr>"; |
||
133 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_PERMISSIONS . "</td> |
||
134 | <td class='even'> |
||
135 | <table border='0'> |
||
136 | <tr><td>"; |
||
137 | foreach ($tasks as $bit_value => $task) { |
||
138 | echo "<tr><td><input type='checkbox' name='tasks[]' value='" . (2 ** $bit_value) . "'>" . $task . '</td></tr>'; |
||
139 | } |
||
140 | echo "<tr><td><input type='checkbox' name='allTasks' value='0' onclick='selectAll(this.form,\"tasks[]\",this.checked);'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
141 | echo '</table> |
||
142 | </td> |
||
143 | </tr>'; |
||
144 | echo "<tr> |
||
145 | <td colspan='2' class='foot'> |
||
146 | <input type='submit' name='add' value='" . _AM_XHELP_BUTTON_CREATE_ROLE . "' class='formButton'> |
||
147 | <input type='button' name='cancel' value='" . _AM_XHELP_BUTTON_CANCEL . "' onclick='history.go(-1)' class='formButton'> |
||
148 | </td> |
||
149 | </tr>"; |
||
150 | echo '</table></form>'; |
||
151 | require_once __DIR__ . '/admin_footer.php'; |
||
152 | } |
||
153 | } |
||
154 | |||
155 | function clearOrphanedStaff() |
||
156 | { |
||
157 | $helper = Xhelp\Helper::getInstance(); |
||
158 | /** @var \XoopsMemberHandler $memberHandler */ |
||
159 | $memberHandler = xoops_getHandler('member'); |
||
160 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
161 | $staffHandler = $helper->getHandler('Staff'); |
||
162 | $users = $memberHandler->getUserList(); |
||
163 | $staff = $staffHandler->getObjects(); |
||
164 | $helper = Xhelp\Helper::getInstance(); |
||
165 | |||
166 | $aUsers = []; |
||
167 | foreach ($staff as $stf) { |
||
168 | $staff_uid = $stf->getVar('uid'); |
||
169 | if (!array_key_exists($staff_uid, $users)) { |
||
170 | $aUsers[$staff_uid] = $staff_uid; |
||
171 | } |
||
172 | } |
||
173 | |||
174 | $criteria = new \Criteria('uid', '(' . implode(',', $aUsers) . ')', 'IN'); |
||
175 | $ret = $staffHandler->deleteAll($criteria); |
||
176 | |||
177 | if ($ret) { |
||
178 | $helper->redirect('admin/staff.php?op=manageStaff'); |
||
179 | } else { |
||
180 | $helper->redirect('admin/staff.php?op=manageStaff', 3, _AM_XHELP_MSG_CLEAR_ORPHANED_ERR); |
||
181 | } |
||
182 | } |
||
183 | |||
184 | function clearRoles() |
||
185 | { |
||
186 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
187 | $session = Xhelp\Session::getInstance(); |
||
188 | $helper = Xhelp\Helper::getInstance(); |
||
189 | |||
190 | /** @var \XoopsModules\Xhelp\DepartmentHandler $departmentHandler */ |
||
191 | $departmentHandler = $helper->getHandler('Department'); |
||
192 | $depts = $departmentHandler->getObjects(); |
||
193 | |||
194 | foreach ($depts as $dept) { |
||
195 | $deptid = $dept->getVar('id'); |
||
196 | $deptRoles = $session->get("xhelp_dept_$deptid"); |
||
197 | if ($deptRoles) { |
||
198 | $session->del("xhelp_dept_$deptid"); |
||
199 | } |
||
200 | } |
||
201 | |||
202 | if (!$returnPage = $session->get('xhelp_return_page')) { |
||
203 | $returnPage = false; |
||
204 | } |
||
205 | |||
206 | $session->del('xhelp_return_page'); |
||
207 | $session->del('xhelp_mainRoles'); |
||
208 | $session->del('xhelp_mainDepts'); |
||
209 | $session->del('xhelp_return_op'); |
||
210 | |||
211 | if ($returnPage) { |
||
212 | $helper->redirect((string)$returnPage); |
||
213 | } else { |
||
214 | $helper->redirect('admin/staff.php?op=manageStaff'); |
||
215 | } |
||
216 | } |
||
217 | |||
218 | function customDept() |
||
219 | { |
||
220 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
221 | $session = Xhelp\Session::getInstance(); |
||
222 | global $xoopsUser, $displayName; |
||
223 | $helper = Xhelp\Helper::getInstance(); |
||
224 | |||
225 | $lastPage = $session->get('xhelp_return_op'); |
||
226 | |||
227 | $uid = Request::getInt('uid', 0, 'REQUEST'); |
||
228 | $deptid = 0; |
||
229 | if (0 == $uid) { |
||
230 | $helper->redirect("admin/staff.php?op=$lastPage", 3, _AM_XHELP_MSG_NEED_UID); |
||
231 | } |
||
232 | if (Request::hasVar('deptid', 'REQUEST')) { |
||
233 | $deptid = Request::getInt('deptid', 0, 'REQUEST'); |
||
234 | } |
||
235 | |||
236 | if (isset($_POST['submit'])) { |
||
237 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
238 | $roleHandler = $helper->getHandler('Role'); |
||
239 | |||
240 | if (Request::hasVar('roles', 'POST')) { |
||
241 | foreach ($_POST['roles'] as $role) { |
||
242 | $thisRole = $roleHandler->get($role); |
||
243 | $aRoleNames[] = $thisRole->getVar('name'); |
||
244 | } |
||
245 | } |
||
246 | |||
247 | $session->set("xhelp_dept_$deptid", // Store roles for customized dept |
||
248 | [ |
||
249 | 'id' => $deptid, |
||
250 | 'roles' => !empty($_POST['roles']) ? $_POST['roles'] : -1, |
||
251 | 'roleNames' => !empty($aRoleNames) ? $aRoleNames : -1, |
||
252 | ]); |
||
253 | |||
254 | $xhelp_has_deptRoles = false; |
||
255 | $hasRoles = $session->get("xhelp_dept_$deptid"); |
||
256 | if ($hasRoles) { |
||
257 | $xhelp_has_deptRoles = true; |
||
258 | if (-1 == $hasRoles['roles']) { // No perms for this dept |
||
259 | //$session->del("xhelp_dept_$deptid"); // Delete custom roles for dept |
||
260 | $xhelp_has_deptRoles = false; |
||
261 | } |
||
262 | } |
||
263 | |||
264 | [$mainDepts] = $session->get('xhelp_mainDepts'); |
||
265 | if ($mainDepts) { |
||
266 | if ($xhelp_has_deptRoles) { // If dept has roles |
||
267 | if (!in_array($deptid, $mainDepts)) { // Does dept already exist in array? |
||
268 | $mainDepts[] = $deptid; // Add dept to array |
||
269 | $session->set('xhelp_mainDepts', $mainDepts); // Set session with new dept value |
||
270 | } |
||
271 | } else { |
||
272 | // Unset element in array with current dept value |
||
273 | foreach ($mainDepts as $dept) { |
||
274 | if ($dept == $deptid) { |
||
275 | unset($dept); |
||
276 | } |
||
277 | } |
||
278 | $session->set('xhelp_mainDepts', $mainDepts); |
||
279 | } |
||
280 | // If mainDepts is not set |
||
281 | } elseif ($xhelp_has_deptRoles) { // If dept has any roles |
||
282 | $session->set('xhelp_mainDepts', [$deptid]); |
||
283 | } |
||
284 | |||
285 | if (!$lastPage = $session->get('xhelp_return_op2')) { |
||
286 | $lastPage = $session->get('xhelp_return_op'); |
||
287 | } |
||
288 | $helper->redirect("admin/staff.php?op=$lastPage&uid=$uid"); |
||
289 | } else { |
||
290 | if (Request::hasVar('addRole', 'POST')) { |
||
291 | $session->set('xhelp_return_op2', $lastPage); |
||
292 | $session->set('xhelp_return_op', mb_substr(mb_strstr($_SERVER['REQUEST_URI'], 'op='), 3)); |
||
293 | $helper->redirect('admin/staff.php?op=addRole'); |
||
294 | } |
||
295 | |||
296 | if (Request::hasVar('xhelp_role', 'GET')) { |
||
297 | $aRoles = explode(',', $_GET['xhelp_role']); |
||
298 | foreach ($aRoles as $role) { |
||
299 | $role = (int)$role; |
||
300 | } |
||
301 | $session->set('xhelp_mainRoles', $aRoles); // Store roles from the manage staff page |
||
302 | } |
||
303 | |||
304 | if (Request::hasVar('xhelp_depts', 'GET')) { |
||
305 | $aDepts = explode(',', $_GET['xhelp_depts']); |
||
306 | foreach ($aDepts as $dept) { |
||
307 | $dept = (int)$dept; |
||
308 | } |
||
309 | $session->set('xhelp_mainDepts', $aDepts); // Store depts from the manage staff page |
||
310 | } |
||
311 | |||
312 | /** @var \XoopsModules\Xhelp\DepartmentHandler $departmentHandler */ |
||
313 | $departmentHandler = $helper->getHandler('Department'); |
||
314 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
315 | $roleHandler = $helper->getHandler('Role'); |
||
316 | |||
317 | $dept = $departmentHandler->get($deptid); |
||
318 | |||
319 | $criteria = new \Criteria('', ''); |
||
320 | $criteria->setOrder('ASC'); |
||
321 | $criteria->setSort('name'); |
||
322 | $roles = $roleHandler->getObjects($criteria); |
||
323 | |||
324 | $lastPage = $session->get('xhelp_return_op'); |
||
325 | xoops_cp_header(); |
||
326 | |||
327 | echo '<script type="text/javascript" src="' . XOOPS_URL . '/modules/xhelp/include/functions.js"></script>'; |
||
328 | echo "<form action='staff.php?op=customDept&deptid=" . $deptid . '&uid=' . $uid . "' method='post'>"; |
||
329 | echo $GLOBALS['xoopsSecurity']->getTokenHTML(); |
||
330 | echo "<table width='100%' cellspacing='1' class='outer'>"; |
||
331 | echo "<tr><th colspan='2'>" . _AM_XHELP_TEXT_DEPT_PERMS . '</th></tr>'; |
||
332 | echo "<tr><td class='head' width='20%'>" . _AM_XHELP_TEXT_USER . "</td> |
||
333 | <td class='even'>" . Xhelp\Utility::getUsername($uid, $displayName) . '</td></tr>'; |
||
334 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_DEPARTMENT . "</td> |
||
335 | <td class='even'>" . $dept->getVar('department') . '</td></tr>'; |
||
336 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_ROLES . "</td> |
||
337 | <td class='even'><table width='75%'>"; |
||
338 | |||
339 | $bFound = false; |
||
340 | $storedRoles = $session->get("xhelp_dept_$deptid"); |
||
341 | if ($storedRoles) { // If editing previously customized dept |
||
342 | foreach ($roles as $role) { |
||
343 | if (-1 != $storedRoles['roles']) { |
||
344 | foreach ($storedRoles['roles'] as $storedRole) { |
||
345 | if ($role->getVar('id') == $storedRole) { |
||
346 | $bFound = true; |
||
347 | break; |
||
348 | } |
||
349 | |||
350 | $bFound = false; |
||
351 | } |
||
352 | } |
||
353 | if ($bFound) { |
||
354 | echo "<tr><td><input type='checkbox' name='roles[]' checked value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
355 | } else { |
||
356 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
357 | } |
||
358 | } |
||
359 | } elseif ($mainRoles = $session->get('xhelp_mainRoles')) { // If roles set on manage staff page |
||
360 | foreach ($roles as $role) { |
||
361 | if (in_array($role->getVar('id'), $mainRoles)) { |
||
362 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "' checked><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
363 | } else { |
||
364 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
365 | } |
||
366 | } |
||
367 | } elseif ('editStaff' === $lastPage && (!$storedRoles = $session->get("xhelp_dept_$deptid"))) { |
||
368 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
369 | $staffHandler = $helper->getHandler('Staff'); |
||
370 | $myRoles = $staffHandler->getRolesByDept($uid, $deptid); |
||
371 | |||
372 | $bFound = false; |
||
373 | foreach ($roles as $role) { |
||
374 | if (!empty($myRoles)) { |
||
375 | foreach ($myRoles as $myRole) { |
||
376 | if ($role->getVar('id') == $myRole->getVar('roleid')) { |
||
377 | $bFound = true; |
||
378 | break; |
||
379 | } |
||
380 | |||
381 | $bFound = false; |
||
382 | } |
||
383 | } |
||
384 | if ($bFound) { |
||
385 | echo "<tr><td><input type='checkbox' name='roles[]' checked value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
386 | } else { |
||
387 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
388 | } |
||
389 | } |
||
390 | } else { |
||
391 | foreach ($roles as $role) { // If no roles set |
||
392 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "'><a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $uid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
393 | } |
||
394 | } |
||
395 | echo "<tr><td><input type='checkbox' name='checkallRoles' value='0' onclick='selectAll(this.form,\"roles[]\",this.checked);'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
396 | echo '</table></td></tr>'; |
||
397 | echo "<tr><td colspan='2' class='foot'> |
||
398 | <input type='submit' name='submit' value='" . _AM_XHELP_BUTTON_UPDATE . "' class='formButton'> |
||
399 | <input type='submit' name='addRole' value='" . _AM_XHELP_BUTTON_CREATE_ROLE . "' class='formButton'> |
||
400 | <input type='button' name='cancel' value='" . _AM_XHELP_BUTTON_CANCEL . "' onclick='history.go(-1)' class='formButton'> |
||
401 | </td> |
||
402 | </tr>"; |
||
403 | echo '</table>'; |
||
404 | require_once __DIR__ . '/admin_footer.php'; |
||
405 | } |
||
406 | } |
||
407 | |||
408 | /** |
||
409 | * @param int|string $xhelp_id |
||
410 | * @param string $return_op |
||
411 | */ |
||
412 | function deleteRole($xhelp_id, string $return_op) |
||
413 | { |
||
414 | $xhelp_id = (int)$xhelp_id; |
||
415 | $helper = Xhelp\Helper::getInstance(); |
||
416 | |||
417 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
418 | $roleHandler = $helper->getHandler('Role'); |
||
419 | $role = $roleHandler->get($xhelp_id); |
||
420 | |||
421 | if ($roleHandler->delete($role, true)) { |
||
422 | $message = _AM_XHELP_MESSAGE_ROLE_DELETE; |
||
423 | $helper->redirect("admin/staff.php?op=$return_op"); |
||
424 | } else { |
||
425 | $message = _AM_XHELP_MESSAGE_ROLE_DELETE_ERROR; |
||
426 | $helper->redirect("admin/staff.php?op=$return_op", 3, $message); |
||
427 | } |
||
428 | } |
||
429 | |||
430 | function editRole() |
||
431 | { |
||
432 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
433 | $session = Xhelp\Session::getInstance(); |
||
434 | $helper = Xhelp\Helper::getInstance(); |
||
435 | |||
436 | $lastPage = $session->get('xhelp_return_op'); |
||
437 | $xhelp_id = 0; |
||
438 | |||
439 | if (Request::hasVar('id', 'REQUEST')) { |
||
440 | $xhelp_id = Request::getInt('id', 0, 'REQUEST'); |
||
441 | } |
||
442 | |||
443 | $uid = Request::getInt('uid', 0, 'REQUEST'); |
||
444 | |||
445 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
446 | $roleHandler = $helper->getHandler('Role'); |
||
447 | $role = $roleHandler->get($xhelp_id); |
||
448 | |||
449 | if (Request::hasVar('deleteRole', 'POST')) { |
||
450 | deleteRole($xhelp_id, 'manageStaff'); |
||
451 | exit(); |
||
0 ignored issues
–
show
|
|||
452 | } |
||
453 | |||
454 | if (isset($_POST['edit'])) { |
||
455 | $role->setVar('name', \Xmf\Request::getString('roleName', '', 'POST')); |
||
456 | $role->setVar('description', \Xmf\Request::getString('roleDescription', '', 'POST')); |
||
457 | if (Request::hasVar('tasks', 'POST')) { |
||
458 | $tasksValue = array_sum($_POST['tasks']); |
||
459 | } else { |
||
460 | $tasksValue = 0; |
||
461 | } |
||
462 | $role->setVar('tasks', $tasksValue); |
||
463 | |||
464 | if (!$lastPage = $session->get('xhelp_return_op2')) { |
||
465 | $lastPage = $session->get('xhelp_return_op'); |
||
466 | } |
||
467 | |||
468 | if ($roleHandler->insert($role)) { |
||
469 | Xhelp\Utility::resetStaffUpdatedTime(); |
||
470 | |||
471 | $message = _AM_XHELP_MESSAGE_ROLE_UPDATE; |
||
472 | $helper->redirect("admin/staff.php?op=$lastPage&uid=$uid"); |
||
473 | } else { |
||
474 | $message = _AM_XHELP_MESSAGE_ROLE_UPDATE_ERROR; |
||
475 | $helper->redirect("admin/staff.php?op=$lastPage&uid=$uid", 3, $message); |
||
476 | } |
||
477 | } else { |
||
478 | $session->set('xhelp_return_op2', $lastPage); |
||
479 | $session->set('xhelp_return_op', mb_substr(mb_strstr($_SERVER['REQUEST_URI'], 'op='), 3)); |
||
480 | |||
481 | // Set array of security items |
||
482 | $tasks = [ |
||
483 | XHELP_SEC_TICKET_ADD => _AM_XHELP_SEC_TEXT_TICKET_ADD, |
||
484 | XHELP_SEC_TICKET_EDIT => _AM_XHELP_SEC_TEXT_TICKET_EDIT, |
||
485 | XHELP_SEC_TICKET_DELETE => _AM_XHELP_SEC_TEXT_TICKET_DELETE, |
||
486 | XHELP_SEC_TICKET_OWNERSHIP => _AM_XHELP_SEC_TEXT_TICKET_OWNERSHIP, |
||
487 | XHELP_SEC_TICKET_STATUS => _AM_XHELP_SEC_TEXT_TICKET_STATUS, |
||
488 | XHELP_SEC_TICKET_PRIORITY => _AM_XHELP_SEC_TEXT_TICKET_PRIORITY, |
||
489 | XHELP_SEC_TICKET_LOGUSER => _AM_XHELP_SEC_TEXT_TICKET_LOGUSER, |
||
490 | XHELP_SEC_RESPONSE_ADD => _AM_XHELP_SEC_TEXT_RESPONSE_ADD, |
||
491 | XHELP_SEC_RESPONSE_EDIT => _AM_XHELP_SEC_TEXT_RESPONSE_EDIT, |
||
492 | XHELP_SEC_TICKET_MERGE => _AM_XHELP_SEC_TEXT_TICKET_MERGE, |
||
493 | XHELP_SEC_FILE_DELETE => _AM_XHELP_SEC_TEXT_FILE_DELETE, |
||
494 | XHELP_SEC_FAQ_ADD => _AM_XHELP_SEC_TEXT_FAQ_ADD, |
||
495 | XHELP_SEC_TICKET_TAKE_OWNERSHIP => _AM_XHELP_SEC_TEXT_TICKET_TAKE_OWNERSHIP, |
||
496 | ]; |
||
497 | xoops_cp_header(); |
||
498 | //echo $oAdminButton->renderButtons('manStaff'); |
||
499 | $adminObject = Admin::getInstance(); |
||
500 | $adminObject->displayNavigation('staff.php?op=editRole'); |
||
501 | |||
502 | echo '<script type="text/javascript" src="' . XOOPS_URL . '/modules/xhelp/include/functions.js"></script>'; |
||
503 | echo "<form action='staff.php?op=editRole&id=" . $xhelp_id . '&uid=' . $uid . "' method='post'>"; |
||
504 | echo $GLOBALS['xoopsSecurity']->getTokenHTML(); |
||
505 | echo "<table width='100%' cellspacing='1' class='outer'>"; |
||
506 | echo "<tr><th colspan='2'>" . _AM_XHELP_TEXT_EDIT_ROLE . '</th></tr>'; |
||
507 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_NAME . "</td> |
||
508 | <td class='even'><input type='text' name='roleName' maxlength='35' value='" . $role->getVar('name') . "' class='formButton'></td> |
||
509 | </tr>"; |
||
510 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_DESCRIPTION . "</td> |
||
511 | <td class='even'><textarea name='roleDescription' class='formButton'>" . $role->getVar('description') . '</textarea></td> |
||
512 | </tr>'; |
||
513 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_PERMISSIONS . "</td> |
||
514 | <td class='even'> |
||
515 | <table border='0'> |
||
516 | <tr><td>"; |
||
517 | foreach ($tasks as $bit_value => $task) { |
||
518 | if (($role->getVar('tasks') & (2 ** $bit_value)) > 0) { |
||
519 | echo "<tr><td><input type='checkbox' name='tasks[]' value='" . (2 ** $bit_value) . "' checked>" . $task . '</td></tr>'; |
||
520 | } else { |
||
521 | echo "<tr><td><input type='checkbox' name='tasks[]' value='" . (2 ** $bit_value) . "'>" . $task . '</td></tr>'; |
||
522 | } |
||
523 | } |
||
524 | echo "<tr><td><input type='checkbox' name='allTasks' value='0' onclick='selectAll(this.form,\"tasks[]\",this.checked);'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
525 | echo '</table> |
||
526 | </td> |
||
527 | </tr>'; |
||
528 | echo "<tr> |
||
529 | <td colspan='2' class='foot'> |
||
530 | <input type='submit' name='edit' value='" . _AM_XHELP_BUTTON_UPDATE . "' class='formButton'> |
||
531 | <input type='button' name='cancel' value='" . _AM_XHELP_BUTTON_CANCEL . "' onclick='history.go(-1)' class='formButton'> |
||
532 | <input type='submit' name='deleteRole' value='" . _AM_XHELP_BUTTON_DELETE . "' class='formButton'> |
||
533 | |||
534 | </td> |
||
535 | </tr>"; |
||
536 | echo '</table></form>'; |
||
537 | require_once __DIR__ . '/admin_footer.php'; |
||
538 | } |
||
539 | } |
||
540 | |||
541 | function editStaff() |
||
542 | { |
||
543 | global $_POST, $_GET, $xoopsModule, $xoopsUser, $displayName; |
||
544 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
545 | $session = Xhelp\Session::getInstance(); |
||
546 | $helper = Xhelp\Helper::getInstance(); |
||
547 | |||
548 | if (Request::hasVar('uid', 'REQUEST')) { |
||
549 | $uid = Request::getInt('uid', 0); |
||
550 | } |
||
551 | /* |
||
552 | if (\Xmf\Request::hasVar('user', 'REQUEST')) { // Remove me |
||
553 | $uid = $_REQUEST['user']; |
||
554 | } |
||
555 | */ |
||
556 | if (Request::hasVar('clearRoles', 'POST')) { |
||
557 | $helper->redirect('admin/staff.php?op=clearRoles'); |
||
558 | } |
||
559 | |||
560 | $session->set('xhelp_return_op', 'editStaff'); |
||
561 | |||
562 | if (isset($_POST['updateStaff'])) { |
||
563 | $uid = Request::getInt('uid', 0, 'POST'); |
||
564 | $depts = $_POST['departments']; |
||
565 | $roles = $_POST['roles']; |
||
566 | $custroles = $_POST['custrole']; |
||
567 | |||
568 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
569 | $staffHandler = $helper->getHandler('Staff'); |
||
570 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||
571 | $membershipHandler = $helper->getHandler('Membership'); |
||
572 | |||
573 | //Remove existing dept membership |
||
574 | if (!$membershipHandler->clearStaffMembership($uid)) { |
||
575 | $message = _XHELP_MESSAGE_EDITSTAFF_NOCLEAR_ERROR; |
||
576 | $helper->redirect('admin/staff.php?op=manageStaff', 3, $message); |
||
577 | } |
||
578 | |||
579 | //Add staff member to selected depts |
||
580 | if ($membershipHandler->addDeptToStaff($depts, $uid)) { |
||
581 | $message = _XHELP_MESSAGE_EDITSTAFF; |
||
582 | } else { |
||
583 | $message = _XHELP_MESSAGE_EDITSTAFF_ERROR; |
||
584 | } |
||
585 | |||
586 | //Clear Existing Staff Role Permissions |
||
587 | $removedRoles = $staffHandler->removeStaffRoles($uid); |
||
588 | |||
589 | //Add Global Role Permissions |
||
590 | foreach ($roles as $role) { |
||
591 | $staffHandler->addStaffRole($uid, $role, 0); |
||
592 | } |
||
593 | |||
594 | //Add Department Specific Roles |
||
595 | foreach ($depts as $dept) { |
||
596 | if ('' != $custroles[$dept]) { |
||
597 | $dept_roles = explode(',', $custroles[$dept]); |
||
598 | } else { |
||
599 | $dept_roles = $roles; |
||
600 | } |
||
601 | |||
602 | foreach ($dept_roles as $role) { |
||
603 | $staffHandler->addStaffRole($uid, (int)$role, $dept); |
||
604 | } |
||
605 | } |
||
606 | |||
607 | $staff = $staffHandler->getByUid($uid); |
||
608 | $staff->setVar('permTimestamp', time()); |
||
609 | if (!$staffHandler->insert($staff)) { |
||
610 | $message = _XHELP_MESSAGE_EDITSTAFF; |
||
611 | } |
||
612 | |||
613 | $helper->redirect('admin/staff.php?op=clearRoles', 3, $message); |
||
614 | } else { |
||
615 | //xoops_cp_header(); |
||
616 | /** @var \XoopsMemberHandler $memberHandler */ |
||
617 | $memberHandler = xoops_getHandler('member'); // Get member handler |
||
618 | $member = $memberHandler->getUser($uid); |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
619 | |||
620 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
621 | $roleHandler = $helper->getHandler('Role'); |
||
622 | $criteria = new \Criteria('', ''); |
||
623 | $criteria->setOrder('ASC'); |
||
624 | $criteria->setSort('name'); |
||
625 | $roles = $roleHandler->getObjects($criteria, true); |
||
626 | |||
627 | /** @var \XoopsModules\Xhelp\DepartmentHandler $departmentHandler */ |
||
628 | $departmentHandler = $helper->getHandler('Department'); // Get department handler |
||
629 | $criteria = new \Criteria('', ''); |
||
630 | $criteria->setSort('department'); |
||
631 | $criteria->setOrder('ASC'); |
||
632 | $total = $departmentHandler->getCount($criteria); |
||
633 | $departmentInfo = $departmentHandler->getObjects($criteria); |
||
634 | |||
635 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
636 | $staffHandler = $helper->getHandler('Staff'); // Get staff handler |
||
637 | $staff = $staffHandler->getByUid($uid); |
||
638 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||
639 | $membershipHandler = $helper->getHandler('Membership'); |
||
640 | $staffDepts = $membershipHandler->membershipByStaff($uid); |
||
641 | $staffRoles = $staff->getAllRoleRights(); |
||
642 | $global_roles = (isset($staffRoles[0]['roles']) ? array_keys($staffRoles[0]['roles']) : []); //Get all Global Roles |
||
643 | |||
644 | $xhelp_depts = []; |
||
645 | foreach ($staffDepts as $myDept) { |
||
646 | $deptid = $myDept->getVar('id'); |
||
647 | if (0 != $deptid) { |
||
648 | $xhelp_depts[] = $deptid; |
||
649 | } |
||
650 | } |
||
651 | $xhelp_depts = implode(',', $xhelp_depts); |
||
652 | |||
653 | //$myRoles =& $staffHandler->getRoles($staff->getVar('uid')); |
||
654 | xoops_cp_header(); |
||
655 | //echo $oAdminButton->renderButtons('manStaff'); |
||
656 | $adminObject = Admin::getInstance(); |
||
657 | $adminObject->displayNavigation('staff.php?op=editStaff'); |
||
658 | |||
659 | echo '<script type="text/javascript" src="' . XOOPS_URL . '/modules/xhelp/include/functions.js"></script>'; |
||
660 | echo "<form name='frmEditStaff' method='post' action='staff.php?op=editStaff&uid=" . $uid . "'>"; |
||
661 | echo "<table width='100%' border='0' cellspacing='1' class='outer'> |
||
662 | <tr><th colspan='2'><label>" . _AM_XHELP_EDIT_STAFF . '</label></th></tr>'; |
||
663 | echo "<tr><td class='head' width='20%'>" . _AM_XHELP_TEXT_USER . "</td> |
||
664 | <td class='even'>" . Xhelp\Utility::getUsername($member, $displayName); |
||
665 | echo '</td></tr>'; |
||
666 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_ROLES . "</td> |
||
667 | <td class='even'><table width='75%'>"; |
||
668 | |||
669 | foreach ($roles as $role) { |
||
670 | $roleid = $role->getVar('id'); |
||
671 | if (in_array($roleid, $global_roles)) { |
||
672 | echo "<tr><td><input type='checkbox' name='roles[]' checked value='" |
||
673 | . $role->getVar('id') |
||
674 | . "' onclick=\"Xhelp\RoleCustOnClick('frmEditStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"><a href='staff.php?op=editRole&id=" |
||
675 | . $role->getVar('id') |
||
676 | . '&uid=' |
||
677 | . $uid |
||
678 | . "'>" |
||
679 | . $role->getVar('name') |
||
680 | . '</a> - ' |
||
681 | . $role->getVar('description') |
||
682 | . '</td></tr>'; |
||
683 | } else { |
||
684 | $mainRoles = $session->get('xhelp_mainRoles'); |
||
685 | if ($mainRoles) { |
||
686 | if (in_array($roleid, $mainRoles)) { |
||
687 | echo "<tr><td><input type='checkbox' name='roles[]' checked value='" |
||
688 | . $role->getVar('id') |
||
689 | . "' onclick=\"Xhelp\RoleCustOnClick('frmEditStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"><a href='staff.php?op=editRole&id=" |
||
690 | . $role->getVar('id') |
||
691 | . '&uid=' |
||
692 | . $uid |
||
693 | . "'>" |
||
694 | . $role->getVar('name') |
||
695 | . '</a> - ' |
||
696 | . $role->getVar('description') |
||
697 | . '</td></tr>'; |
||
698 | } else { |
||
699 | echo "<tr><td><input type='checkbox' name='roles[]' value='" |
||
700 | . $role->getVar('id') |
||
701 | . "' onclick=\"Xhelp\RoleCustOnClick('frmEditStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"><a href='staff.php?op=editRole&id=" |
||
702 | . $role->getVar('id') |
||
703 | . '&uid=' |
||
704 | . $uid |
||
705 | . "'>" |
||
706 | . $role->getVar('name') |
||
707 | . '</a> - ' |
||
708 | . $role->getVar('description') |
||
709 | . '</td></tr>'; |
||
710 | } |
||
711 | } else { |
||
712 | echo "<tr><td><input type='checkbox' name='roles[]' value='" |
||
713 | . $role->getVar('id') |
||
714 | . "' onclick=\"Xhelp\RoleCustOnClick('frmEditStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"><a href='staff.php?op=editRole&id=" |
||
715 | . $role->getVar('id') |
||
716 | . '&uid=' |
||
717 | . $uid |
||
718 | . "'>" |
||
719 | . $role->getVar('name') |
||
720 | . '</a> - ' |
||
721 | . $role->getVar('description') |
||
722 | . '</td></tr>'; |
||
723 | } |
||
724 | } |
||
725 | } |
||
726 | echo "<tr><td><input type='checkbox' name='checkallRoles' value='0' onclick='selectAll(this.form,\"roles[]\",this.checked); Xhelp\RoleCustOnClick(\"frmEditStaff\", \"roles[]\", \"xhelp_role\", \"&\", \"xhelp_dept_cust\");'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
727 | echo '</table></td></tr>'; |
||
728 | echo "<tr><td class='head'>" . _AM_XHELP_TEXT_DEPARTMENTS . "</td> |
||
729 | <td class='even'><table width='75%'>"; |
||
730 | |||
731 | // This block is used to append custom role names to each department |
||
732 | foreach ($departmentInfo as $dept) { |
||
733 | $deptid = $dept->getVar('id'); |
||
734 | $deptname = $dept->getVar('department'); |
||
735 | $inDept = false; //Is the user a member of the dept |
||
736 | |||
737 | $deptroleids = []; |
||
738 | $deptrolenames = []; |
||
739 | |||
740 | $sess_roles = $session->get("xhelp_dept_$deptid"); |
||
741 | if ($sess_roles) { //Customized roles stored in session? |
||
742 | if (-1 != $sess_roles['roles']) { //Is the user assigned to any roles in the dept? |
||
743 | $inDept = true; |
||
744 | foreach ($sess_roles['roles'] as $roleid) { // Check if customized roles match global roles |
||
745 | if (in_array($roleid, $global_roles)) { // If found role in global roles |
||
746 | $deptroleids[] = $roleid; // Add role to array of checked roles |
||
747 | } |
||
748 | } |
||
749 | $deptroleids = implode(',', $sess_roles['roles']); // Put all roles into 1 string separated by a ',' |
||
750 | |||
751 | //An empty string means dept roles match global roles |
||
752 | if ('' !== $deptroleids) { //Customized Roles |
||
753 | $deptrolenames = implode(', ', $sess_roles['roleNames']); |
||
754 | } |
||
755 | } else { //Not a member of the dept |
||
756 | $inDept = false; |
||
757 | } |
||
758 | } elseif (isset($staffRoles[$deptid])) { //User has assigned dept roles |
||
759 | $inDept = true; |
||
760 | |||
761 | if ($staffRoles[$deptid]['roles'] == $staffRoles[0]['roles']) { // If global roles same as dept roles |
||
762 | // $deptrolenames = []; |
||
763 | // $deptroleids = []; |
||
764 | foreach ($staffRoles[$deptid]['roles'] as $roleid => $tasks) { |
||
765 | if (isset($roles[$roleid])) { |
||
766 | $deptroleids[] = $roleid; |
||
767 | } |
||
768 | } |
||
769 | $deptroleids = implode(',', $deptroleids); |
||
770 | $deptrolenames = ''; |
||
771 | } else { |
||
772 | // $deptrolenames = []; |
||
773 | // $deptroleids = []; |
||
774 | foreach ($staffRoles[$deptid]['roles'] as $roleid => $tasks) { |
||
775 | if (isset($roles[$roleid])) { |
||
776 | $deptroleids[] = $roleid; |
||
777 | $deptrolenames[] = $roles[$roleid]->getVar('name'); |
||
778 | } |
||
779 | } |
||
780 | $deptrolenames = implode(', ', $deptrolenames); |
||
781 | $deptroleids = implode(',', $deptroleids); |
||
782 | } |
||
783 | } else { //Not a member of the dept |
||
784 | $deptroleids = []; |
||
785 | foreach ($staffRoles[0]['roles'] as $roleid => $tasks) { |
||
786 | if (isset($roles[$roleid])) { |
||
787 | $deptroleids[] = $roleid; |
||
788 | } |
||
789 | } |
||
790 | $deptroleids = implode(',', $deptroleids); |
||
791 | $deptrolenames = ''; |
||
792 | |||
793 | $inDept = false; |
||
794 | } |
||
795 | |||
796 | //Should element be checked? |
||
797 | $checked = ($inDept ? 'checked' : ''); |
||
798 | |||
799 | printf( |
||
800 | "<tr><td><input type='checkbox' name='departments[]' value='%u' %s onclick=\"Xhelp\RoleCustOnClick('frmEditStaff', 'departments[]', 'xhelp_depts', '&', 'xhelp_dept_cust');\">%s [<a href='staff.php?op=customDept&deptid=%u&uid=%u&xhelp_role=%s&xhelp_depts=%s' class='xhelp_dept_cust'>Customize</a>] <i>%s</i><input type='hidden' name='custrole[%u]' value='%s'></td></tr>", |
||
801 | $deptid, |
||
802 | $checked, |
||
803 | $deptname, |
||
804 | $deptid, |
||
805 | $uid, |
||
806 | $deptroleids, |
||
807 | $xhelp_depts, |
||
808 | $deptrolenames, |
||
809 | $deptid, |
||
810 | $deptroleids |
||
811 | ); |
||
812 | } |
||
813 | echo "<tr><td> |
||
814 | <input type='checkbox' name='checkAll' value='0' onclick='selectAll(this.form,\"departments[]\", this.checked);Xhelp\RoleCustOnClick(\"frmEditStaff\", \"departments[]\", \"xhelp_depts\", \"&\", \"xhelp_dept_cust\");'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
815 | echo '<tr><td>'; |
||
816 | echo '</td></tr>'; |
||
817 | echo '</table>'; |
||
818 | echo '</td></tr>'; |
||
819 | echo "<tr><td colspan='2' class='foot'> |
||
820 | <input type='hidden' name='uid' value='" . $uid . "'> |
||
821 | <input type='submit' name='updateStaff' value='" . _AM_XHELP_BUTTON_UPDATESTAFF . "'> |
||
822 | <input type='button' name='cancel' value='" . _AM_XHELP_BUTTON_CANCEL . "' onclick='history.go(-1)' class='formButton'> |
||
823 | </td></tr>"; |
||
824 | echo '</table></form>'; |
||
825 | |||
826 | require_once __DIR__ . '/admin_footer.php'; |
||
827 | }//end if |
||
828 | }//end function |
||
829 | |||
830 | function manageStaff() |
||
831 | { |
||
832 | global $xoopsModule, $xoopsUser, $displayName, $aLimitByS, $aLimitByD; |
||
833 | // require_once XHELP_CLASS_PATH . '/session.php'; |
||
834 | $session = Xhelp\Session::getInstance(); |
||
835 | $session->del('xhelp_return_page'); |
||
836 | $helper = Xhelp\Helper::getInstance(); |
||
837 | |||
838 | $start = $limit = 0; |
||
839 | $dstart = $dlimit = 0; |
||
840 | $staff_search = false; |
||
841 | $dept_search = false; |
||
842 | |||
843 | if (Request::hasVar('addRole', 'POST')) { |
||
844 | $helper->redirect('admin/staff.php?op=addRole'); |
||
845 | } |
||
846 | if (Request::hasVar('clearRoles', 'POST')) { |
||
847 | $helper->redirect('admin/staff.php?op=clearRoles'); |
||
848 | } |
||
849 | |||
850 | if (Request::hasVar('limit', 'REQUEST')) { |
||
851 | $limit = Request::getInt('limit', 0, 'REQUEST'); |
||
852 | } |
||
853 | |||
854 | if (Request::hasVar('start', 'REQUEST')) { |
||
855 | $start = Request::getInt('start', 0, 'REQUEST'); |
||
856 | } |
||
857 | if (Request::hasVar('staff_search', 'REQUEST')) { |
||
858 | $staff_search = $_REQUEST['staff_search']; |
||
859 | } |
||
860 | |||
861 | if (Request::hasVar('dept_search', 'REQUEST')) { |
||
862 | $dept_search = $_REQUEST['dept_search']; |
||
863 | } |
||
864 | |||
865 | if (!$limit) { |
||
866 | $limit = 20; |
||
867 | } |
||
868 | |||
869 | if (Request::hasVar('dlimit', 'REQUEST')) { |
||
870 | $dlimit = Request::getInt('dlimit', 0, 'REQUEST'); |
||
871 | } |
||
872 | |||
873 | if (Request::hasVar('dstart', 'REQUEST')) { |
||
874 | $dstart = Request::getInt('dstart', 0, 'REQUEST'); |
||
875 | } |
||
876 | |||
877 | if (!$dlimit) { |
||
878 | $dlimit = 10; |
||
879 | } |
||
880 | |||
881 | $session->set('xhelp_return_op', 'manageStaff'); |
||
882 | |||
883 | if (isset($_POST['addStaff'])) { |
||
884 | $uid = $_POST['user_id']; |
||
885 | $depts = $_POST['departments']; |
||
886 | $roles = $_POST['roles'] ?? null; |
||
887 | //$selectAll = $_POST['selectall']; |
||
888 | |||
889 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
890 | $staffHandler = $helper->getHandler('Staff'); |
||
891 | |||
892 | if (null === $uid || '' == $uid) { |
||
893 | $helper->redirect('admin/staff.php?op=manageStaff', 3, _AM_XHELP_STAFF_ERROR_USERS); |
||
894 | } |
||
895 | if (null === $depts) { |
||
896 | $helper->redirect('admin/staff.php?op=manageStaff', 3, _AM_XHELP_STAFF_ERROR_DEPTARTMENTS); |
||
897 | } |
||
898 | if (null === $roles) { |
||
899 | $helper->redirect('admin/staff.php?op=manageStaff', 3, _AM_XHELP_STAFF_ERROR_ROLES); |
||
900 | } |
||
901 | if ($staffHandler->isStaff($uid)) { |
||
902 | $helper->redirect('admin/staff.php?op=manageStaff', 3, _AM_XHELP_STAFF_EXISTS); |
||
903 | } |
||
904 | |||
905 | /** @var \XoopsMemberHandler $memberHandler */ |
||
906 | $memberHandler = xoops_getHandler('member'); // Get member handler |
||
907 | $newUser = $memberHandler->getUser($uid); |
||
908 | |||
909 | $email = $newUser->getVar('email'); |
||
910 | if ($staffHandler->addStaff($uid, $email)) { // $selectAll |
||
911 | $message = _XHELP_MESSAGE_ADDSTAFF; |
||
912 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||
913 | $membershipHandler = $helper->getHandler('Membership'); |
||
914 | |||
915 | //Set Department Membership |
||
916 | if ($membershipHandler->addDeptToStaff($depts, $uid)) { |
||
917 | $message = _XHELP_MESSAGE_ADDSTAFF; |
||
918 | } else { |
||
919 | $message = _XHELP_MESSAGE_ADDSTAFF_ERROR; |
||
920 | } |
||
921 | |||
922 | //Set Global Roles |
||
923 | foreach ($roles as $role) { |
||
924 | $staffHandler->addStaffRole($uid, $role, 0); |
||
925 | } |
||
926 | |||
927 | //Set Department Roles |
||
928 | foreach ($depts as $dept) { |
||
929 | $custRoles = $session->get("xhelp_dept_$dept"); |
||
930 | if ($custRoles) { |
||
931 | if (-1 != $custRoles['roles']) { |
||
932 | foreach ($custRoles['roles'] as $role) { |
||
933 | $staffHandler->addStaffRole($uid, $role, $dept); |
||
934 | } |
||
935 | } else { |
||
936 | // If dept still checked, but no custom depts, give global roles to dept |
||
937 | foreach ($roles as $role) { |
||
938 | $staffHandler->addStaffRole($uid, $role, $dept); |
||
939 | } |
||
940 | } |
||
941 | } else { |
||
942 | foreach ($roles as $role) { |
||
943 | $staffHandler->addStaffRole($uid, $role, $dept); |
||
944 | } |
||
945 | } |
||
946 | } |
||
947 | /** @var \XoopsModules\Xhelp\TicketListHandler $ticketListHandler */ |
||
948 | $ticketListHandler = $helper->getHandler('TicketList'); |
||
949 | $hasTicketLists = $ticketListHandler->createStaffGlobalLists($uid); |
||
950 | |||
951 | $helper->redirect('admin/staff.php?op=clearRoles'); |
||
952 | } else { |
||
953 | $message = _XHELP_MESSAGE_ADDSTAFF_ERROR; |
||
954 | $helper->redirect('admin/staff.php?op=clearRoles', 3, $message); |
||
955 | } |
||
956 | } else { |
||
957 | /** @var \XoopsMemberHandler $memberHandler */ |
||
958 | $memberHandler = xoops_getHandler('member'); // Get member handler |
||
959 | /** @var \XoopsModules\Xhelp\StaffHandler $staffHandler */ |
||
960 | $staffHandler = $helper->getHandler('Staff'); // Get staff handler |
||
961 | /** @var \XoopsModules\Xhelp\DepartmentHandler $departmentHandler */ |
||
962 | $departmentHandler = $helper->getHandler('Department'); // Get department handler |
||
963 | /** @var \XoopsModules\Xhelp\RoleHandler $roleHandler */ |
||
964 | $roleHandler = $helper->getHandler('Role'); |
||
965 | |||
966 | //Get List of depts in system |
||
967 | $criteria = new \Criteria('', ''); |
||
968 | $criteria->setSort('department'); |
||
969 | $criteria->setOrder('ASC'); |
||
970 | |||
971 | $dept_count = $departmentHandler->getCount($criteria); |
||
972 | $dept_obj = $departmentHandler->getObjects($criteria); |
||
973 | xoops_cp_header(); |
||
974 | //echo $oAdminButton->renderButtons('manStaff'); |
||
975 | $adminObject = Admin::getInstance(); |
||
976 | $adminObject->displayNavigation('staff.php?op=manageStaff'); |
||
977 | |||
978 | if (Request::hasVar('uid', 'GET')) { |
||
979 | $userid = Request::getInt('uid', 0, 'GET'); |
||
980 | $uname = $xoopsUser::getUnameFromId($userid); |
||
981 | } else { |
||
982 | $userid = 0; |
||
983 | $uname = ''; |
||
984 | } |
||
985 | |||
986 | if ($dept_count > 0) { |
||
987 | $userid = Request::getInt('uid', 0, 'GET'); |
||
988 | |||
989 | //Get List of staff members |
||
990 | $criteria = new \Criteria('', ''); |
||
991 | $criteria->setStart($start); |
||
992 | $criteria->setLimit($limit); |
||
993 | |||
994 | $staff_obj = $staffHandler->getObjects($criteria); |
||
995 | $staff_count = $staffHandler->getCount($criteria); |
||
996 | $user_count = $memberHandler->getUserCount(); |
||
997 | |||
998 | $nav = new Xhelp\PageNav($staff_count, $limit, $start, 'start', "op=manageStaff&limit=$limit"); |
||
999 | |||
1000 | //Get List of Staff Roles |
||
1001 | $criteria = new \Criteria('', ''); |
||
1002 | $criteria->setOrder('ASC'); |
||
1003 | $criteria->setSort('name'); |
||
1004 | $roles = $roleHandler->getObjects($criteria); |
||
1005 | |||
1006 | echo '<script type="text/javascript" src="' . XOOPS_URL . '/modules/xhelp/include/functions.js"></script>'; |
||
1007 | echo "<form method='post' id='manageStaff' name='manageStaff' action='staff.php?op=manageStaff'>"; |
||
1008 | echo "<table width='100%' cellspacing='1' class='outer'> |
||
1009 | <tr><th colspan='2'>" . _AM_XHELP_ADD_STAFF . '</th></tr>'; |
||
1010 | |||
1011 | echo "<tr><td class='head' width='20%'>" . _AM_XHELP_TEXT_USER . "</td> |
||
1012 | <td class='even'> |
||
1013 | <input type='text' id='fullname' name='fullname' class='formButton' value='" . $uname . "' disabled='disabled' style='background-color:#E1E1E1;' onchange=\"window.location='staff.php?op=manageStaff&uid='+user_id.value;\"> |
||
1014 | <input type='hidden' id='user_id' name='user_id' class='formButton' value='" . $userid . "'>"; |
||
1015 | echo " <a href=\"javascript:openWithSelfMain('" . XHELP_BASE_URL . "/lookup.php?admin=1', 'lookup',400, 300);\" title='" . _AM_XHELP_TEXT_FIND_USERS . "'>" . _AM_XHELP_TEXT_FIND_USERS . '</a> |
||
1016 | </td> |
||
1017 | </tr>'; |
||
1018 | |||
1019 | echo '</td></tr>'; |
||
1020 | echo "<tr><td class='head' width='20%'>" . _AM_XHELP_TEXT_ROLES . "</td> |
||
1021 | <td class='even'><table width='75%'>"; |
||
1022 | $mainRoles = $session->get('xhelp_mainRoles'); |
||
1023 | if ($mainRoles) { |
||
1024 | foreach ($roles as $role) { |
||
1025 | if (in_array($role->getVar('id'), $mainRoles)) { |
||
1026 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "' checked onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"> |
||
1027 | <a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $userid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
1028 | } else { |
||
1029 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "' onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"> |
||
1030 | <a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $userid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
1031 | } |
||
1032 | } |
||
1033 | } else { |
||
1034 | foreach ($roles as $role) { |
||
1035 | echo "<tr><td><input type='checkbox' name='roles[]' value='" . $role->getVar('id') . "' onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'roles[]', 'xhelp_role', '&', 'xhelp_dept_cust');\"> |
||
1036 | <a href='staff.php?op=editRole&id=" . $role->getVar('id') . '&uid=' . $userid . "'>" . $role->getVar('name') . '</a> - ' . $role->getVar('description') . '</td></tr>'; |
||
1037 | } |
||
1038 | } |
||
1039 | echo "<tr><td><input type='checkbox' name='checkallRoles' value='0' onclick='selectAll(this.form,\"roles[]\",this.checked); Xhelp\RoleCustOnClick(\"manageStaff\", \"roles[]\", \"xhelp_role\", \"&\", \"xhelp_dept_cust\");'><b>" . _AM_XHELP_TEXT_SELECT_ALL . '</b></td></tr>'; |
||
1040 | echo '</table></td></tr>'; |
||
1041 | echo "<tr><td class='head' width='20%'>" . _AM_XHELP_TEXT_DEPARTMENTS . "</td> |
||
1042 | <td class='even' width='50%'><table width='75%'>"; |
||
1043 | $mainDepts = $session->get('xhelp_mainDepts'); |
||
1044 | if ($mainDepts) { |
||
1045 | foreach ($dept_obj as $dept) { |
||
1046 | $deptid = $dept->getVar('id'); |
||
1047 | $aDept = $session->get("xhelp_dept_$deptid"); |
||
1048 | $aDeptRoles = $aDept['roleNames']; |
||
1049 | if (!empty($aDeptRoles) && is_array($aDeptRoles)) { |
||
1050 | $deptRoles = implode(', ', $aDeptRoles); |
||
1051 | } else { |
||
1052 | $deptRoles = ''; |
||
1053 | } |
||
1054 | if (in_array($dept->getVar('id'), $mainDepts)) { |
||
1055 | echo "<tr><td> |
||
1056 | <input type='checkbox' name='departments[]' checked value='" . $dept->getVar('id') . "' onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'departments[]', 'xhelp_depts', '&', 'xhelp_dept_cust');\"> |
||
1057 | " . $dept->getVar('department') . " [<a href='staff.php?op=customDept&deptid=" . $dept->getVar('id') . '&uid=' . $userid . "' class='xhelp_dept_cust'>" . _AM_XHELP_TEXT_CUSTOMIZE . '</a>] <i>' . $deptRoles . '</i> |
||
1058 | </td></tr>'; |
||
1059 | } else { |
||
1060 | echo "<tr><td> |
||
1061 | <input type='checkbox' name='departments[]' value='" . $dept->getVar('id') . "' onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'departments[]', 'xhelp_depts', '&', 'xhelp_dept_cust');\"> |
||
1062 | " . $dept->getVar('department') . " [<a href='staff.php?op=customDept&deptid=" . $dept->getVar('id') . '&uid=' . $userid . "' class='xhelp_dept_cust'>" . _AM_XHELP_TEXT_CUSTOMIZE . '</a>] <i>' . $deptRoles . '</i> |
||
1063 | </td></tr>'; |
||
1064 | } |
||
1065 | } |
||
1066 | } else { |
||
1067 | foreach ($dept_obj as $dept) { |
||
1068 | $deptid = $dept->getVar('id'); |
||
1069 | $aDept = $session->get("xhelp_dept_$deptid"); |
||
1070 | $aDeptRoles = $aDept['roleNames'] ?? ''; |
||
1071 | if (!empty($aDeptRoles)) { |
||
1072 | $deptRoles = implode(', ', $aDeptRoles); |
||
1073 | } else { |
||
1074 | $deptRoles = ''; |
||
1075 | } |
||
1076 | echo "<tr><td> |
||
1077 | <input type='checkbox' name='departments[]' value='" . $dept->getVar('id') . "' onclick=\"Xhelp\RoleCustOnClick('manageStaff', 'departments[]', 'xhelp_depts', '&', 'xhelp_dept_cust');\"> |
||
1078 | " . $dept->getVar('department') . " [<a href='staff.php?op=customDept&deptid=" . $dept->getVar('id') . '&uid=' . $userid . "' class='xhelp_dept_cust'>" . _AM_XHELP_TEXT_CUSTOMIZE . '</a>] <i>' . $deptRoles . '</i> |
||
1079 | </td></tr>'; |
||
1080 | } |
||
1081 | } |
||
1082 | echo "<tr><td><input type='checkbox' name='checkallDepts' value='0' onclick='selectAll(this.form,\"departments[]\",this.checked);Xhelp\RoleCustOnClick(\"manageStaff\", \"departments[]\", \"xhelp_depts\", \"&\", \"xhelp_dept_cust\");'><b>" |
||
1083 | . _AM_XHELP_TEXT_SELECT_ALL |
||
1084 | . '</b></td></tr>'; |
||
1085 | echo '</table></td></tr>'; |
||
1086 | echo "<tr><td colspan='2' class='foot'> |
||
1087 | <input type='submit' name='addStaff' value='" . _AM_XHELP_BUTTON_ADDSTAFF . "'> |
||
1088 | <input type='submit' name='addRole' value='" . _AM_XHELP_BUTTON_CREATE_ROLE . "' class='formButton'> |
||
1089 | <input type='submit' name='clearRoles' value='" . _AM_XHELP_BUTTON_CLEAR_PERMS . "' class='formButton'> |
||
1090 | </td></tr>"; |
||
1091 | echo '</table></form>'; |
||
1092 | |||
1093 | echo "<form method='post' id='cleanStaff' name='cleanStaff' action='staff.php?op=clearOrphanedStaff'>"; |
||
1094 | echo "<table width='100%' cellspacing='1' class='outer'> |
||
1095 | <tr><th colspan='2'>" . _AM_XHELP_TEXT_MAINTENANCE . '</th></tr>'; |
||
1096 | echo "<tr><td class='head' width='40%'>" . _AM_XHELP_TEXT_ORPHANED . "</td> |
||
1097 | <td class='even'><input type='submit' name='cleanStaff' value='" . _AM_XHELP_BUTTON_SUBMIT . "'></td> |
||
1098 | </tr>"; |
||
1099 | echo '</table></form>'; |
||
1100 | |||
1101 | if ($staff_count > 0) { |
||
1102 | //Get User Information for each staff member |
||
1103 | $staff_uids = []; |
||
1104 | foreach ($staff_obj as $obj) { |
||
1105 | $staff_uids[] = $obj->getVar('uid'); |
||
1106 | } |
||
1107 | if (false !== $staff_search) { |
||
1108 | $criteria = new \CriteriaCompo(new \Criteria('uname', "%$staff_search%", 'LIKE'), 'OR'); |
||
1109 | $criteria->add(new \Criteria('name', "%$staff_search%", 'LIKE'), 'OR'); |
||
1110 | $criteria->add(new \Criteria('email', "%$staff_search%", 'LIKE'), 'OR'); |
||
1111 | } else { |
||
1112 | $criteria = new \Criteria('uid', '(' . implode(',', $staff_uids) . ')', 'IN'); |
||
1113 | } |
||
1114 | $staff_users = $memberHandler->getUsers($criteria); |
||
1115 | |||
1116 | if (false !== $dept_search) { |
||
1117 | $criteria = new \Criteria('department', "%$dept_search%", 'LIKE'); |
||
1118 | } else { |
||
1119 | $criteria = new \Criteria('', ''); |
||
1120 | } |
||
1121 | $criteria->setStart($dstart); |
||
1122 | $criteria->setLimit($dlimit); |
||
1123 | |||
1124 | $allDepts = $departmentHandler->getObjects($criteria, true); |
||
1125 | $dnav = new Xhelp\PageNav($departmentHandler->getCount($criteria), $dlimit, $dstart, 'dstart', "op=manageStaff&start=$start&limit=$limit&dlimit=$dlimit", 'tblManageStaff'); |
||
1126 | |||
1127 | echo "<form action='" . XHELP_ADMIN_URL . "/staff.php?op=manageStaff' style='margin:0; padding:0;' method='post'>"; |
||
1128 | echo $GLOBALS['xoopsSecurity']->getTokenHTML(); |
||
1129 | echo "<table width='100%' cellspacing='1' class='outer'>"; |
||
1130 | echo "<tr><td align='right'>" . _AM_XHELP_TEXT_STAFF . ': ' . _AM_XHELP_BUTTON_SEARCH . " <input type='text' name='staff_search' value='$staff_search'> |
||
1131 | " . _AM_XHELP_TEXT_NUMBER_PER_PAGE . "<select name='limit'>"; |
||
1132 | foreach ($aLimitByS as $value => $text) { |
||
1133 | ($limit == $value) ? $selected = 'selected' : $selected = ''; |
||
1134 | echo "<option value='$value' $selected>$text</option>"; |
||
1135 | } |
||
1136 | echo '</select> |
||
1137 | |
||
1138 | ' . _AM_XHELP_TEXT_DEPARTMENTS . ': ' . _AM_XHELP_BUTTON_SEARCH . " |
||
1139 | <input type='text' name='dept_search' value='$dept_search'> |
||
1140 | " . _AM_XHELP_TEXT_NUMBER_PER_PAGE . " |
||
1141 | <select name='dlimit'>"; |
||
1142 | foreach ($aLimitByD as $value => $text) { |
||
1143 | ($dlimit == $value) ? $selected = 'selected' : $selected = ''; |
||
1144 | echo "<option value='$value' $selected>$text</option>"; |
||
1145 | } |
||
1146 | echo "</select> |
||
1147 | |
||
1148 | <input type='submit' name='staff_select' id='staff_select' value='" . _AM_XHELP_BUTTON_SUBMIT . "'> |
||
1149 | </td> |
||
1150 | </tr>"; |
||
1151 | echo '</table></form>'; |
||
1152 | |||
1153 | echo "<table width='100%' cellspacing='1' class='outer' id='tblManageStaff'> |
||
1154 | <tr><th colspan='" . (3 + count($allDepts)) . "'><label>" . _AM_XHELP_MANAGE_STAFF . '</label></th></tr>'; |
||
1155 | echo "<tr class='head'><td rowspan='2'>" . _AM_XHELP_TEXT_ID . "</td><td rowspan='2'>" . _AM_XHELP_TEXT_USER . "</td><td colspan='" . count($allDepts) . "'>" . _AM_XHELP_TEXT_DEPARTMENTS . ' ' . $dnav->renderNav() . "</td><td rowspan='2'>" . _AM_XHELP_TEXT_ACTIONS . '</td></tr>'; |
||
1156 | echo "<tr class='head'>"; |
||
1157 | foreach ($allDepts as $thisdept) { |
||
1158 | echo '<td>' . $thisdept->getVar('department') . '</td>'; |
||
1159 | } |
||
1160 | echo '</tr>'; |
||
1161 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||
1162 | /** @var \XoopsModules\Xhelp\MembershipHandler $membershipHandler */ |
||
1163 | $membershipHandler = $helper->getHandler('Membership'); |
||
1164 | $staffRoleHandler = $helper->getHandler('StaffRole'); |
||
1165 | foreach ($staff_users as $staff) { |
||
1166 | $departments = $membershipHandler->membershipByStaff($staff->getVar('uid'), true); |
||
1167 | echo "<tr class='even'><td>" . $staff->getVar('uid') . '</td><td>' . $staff->getVar('uname') . '</td>'; |
||
1168 | foreach ($allDepts as $thisdept) { |
||
1169 | echo "<td><img src='" . XOOPS_URL . '/modules/xhelp/assets/images/'; |
||
1170 | echo array_key_exists($thisdept->getVar('id'), $departments) ? 'on' : 'off'; |
||
1171 | echo ".png'></td>"; |
||
1172 | } |
||
1173 | echo "<td><a href='staff.php?op=editStaff&uid=" . $staff->getVar('uid') . "'><img src='" . XOOPS_URL . "/modules/xhelp/assets/images/button_edit.png' title='" . _AM_XHELP_TEXT_EDIT . "' name='editStaff'></a> |
||
1174 | <a href='delete.php?deleteStaff=1&uid=" . $staff->getVar('uid') . "'><img src='" . XOOPS_URL . "/modules/xhelp/assets/images/button_delete.png' title='" . _AM_XHELP_TEXT_DELETE . "' name='deleteStaff'></a> |
||
1175 | </td></tr>"; |
||
1176 | } |
||
1177 | echo '</table><br>'; |
||
1178 | echo "<div id='staff_nav'>" . $nav->renderNav() . '</div>'; |
||
1179 | } |
||
1180 | } else { |
||
1181 | echo "<div id='readOnly' class='errorMsg'>"; |
||
1182 | echo _AM_XHELP_TEXT_MAKE_DEPTS; |
||
1183 | echo '</div>'; |
||
1184 | echo "<br><a href='department.php?op=manageDepartments'>" . _AM_XHELP_LINK_ADD_DEPT . '</a>'; |
||
1185 | } |
||
1186 | |||
1187 | require_once __DIR__ . '/admin_footer.php'; |
||
1188 | }//end if |
||
1189 | } |
||
1190 |
In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.