Artikel ini akan menunjukkan kepada Anda bagaimana memodifikasi Sistem osTicket Anda supaya dapat memberikan kemampuan bagi staf tertentu untuk menambahkan anggota staf baru berdasarkan departemen di mana staf tertentu itu berada. Seperti yang kita ketahui, hanya staf yang tipe akunnya Admin yang dapat melakukan hal ini, karena hanya ada dua tipe akun di osTicket sampai dengan versi 1.6 RC5; merek adalah: Staff dan Admin. Jika Anda mengeset tipe akun staf tertentu yang memiliki user-group Managers menjadi tipe akun Admin (supaya dia dapat memiliki kemampuan untuk menambahkan staf barunya dari Panel Admin), maka mereka akan dapat mengakses semua fitur yang terdapat di Panel Admin. Jadi, daripada memberikan hak akses penuh kepada Manager tadi, maka sebaiknya kita membuatkan perijinan baru yang berbasiskan pada user group, dan setelah itu, kita mengeset nilai Yes kepada user group Managers, sehingga staf Manager dapat menambahkan staf baru mereka tanpa harus mengakses Panel Admin. Akan ada tab baru di Panel Staff yang bernama My Staff. Tab ini memiliki dua sub tab baru, masing-masing: My Staff Members dan Add My New Staff untuk membedakannya dengan tab Staff yang terdapat di Panel Admin.
-
Pertama sekali, Anda harus mengubah struktur tabel ost_groups dengan menggunakan skrip SQL query berikut. Mohon diperhatikan bahwa ost_ adalah nama awalan tabel. Awalan ini bisa saja berbeda dengan nama awalan tabel osTicket Anda. Jika berbeda, silahkan sesuaikan sendiri seperlunya.
ALTER TABLE ost_groups ADD COLUMN `can_manage_staff` tinyint(1) default 0 NOT NULL;
- Unduh file ini: my_dept_staff.zip. Ekstrak file tersebut, maka ada dua file di dalamnya, setelah itu, letakkan kedua file tadi ke sub direktori \include\staff\ dari Sistem osTicket Anda.
-
Buka file \include\staff\group.inc.php Anda, dan cari kode ini:
99 100
</tr> </table>
lalu timpa dengan kode berikut:
99 100 101 102 103 104 105 106 107
</tr> <tr><th>Can Manage Staff</th> <!-- added by Masino Sinaga, December 8, 2009 --> <td> <input type="radio" name="can_manage_staff" value="1" <?=$info['can_manage_staff']?'checked':''?> />Yes <input type="radio" name="can_manage_staff" value="0" <?=!$info['can_manage_staff']?'checked':''?> />No <i>Ability to add/update/disable/delete staff of your current department.</i> </td> </tr> </table> -
Buka file \include\class.staff.php Anda, dan cari kode ini:
227 228 229
function canManageKb() { //kb = knowledge base. return ($this->isadmin() || $this->udata['can_manage_kb'])?true:false; }
setelah baris terakhir dari kode tersebut, tambahkan kode berikut:
230 231 232
function canManageStaff() { // added by Masino Sinaga, December 8, 2009 return ($this->isadmin() || $this->udata['can_manage_staff'])?true:false; }
-
Buka file \include\class.nav.php Anda, dan cari kode ini:
39 40
$tabs['kbase']=array('desc'=>'Knowledge Base','href'=>'kb.php','title'=>'Knowledge Base: Premade'); }
setelah baris terakhir dari kode tersebut, tambahkan kode berikut:
41 42 43
if($thisuser && $thisuser->canManageStaff()){ $tabs['staffdept']=array('desc'=>'My Staff','href'=>'mystaff.php','title'=>'Staff'); }
-
Buka file \include\class.group.php Anda, dan cari kode yang ini:
59
', can_manage_kb='.db_input($vars['can_manage_kb']);
lalu timpa kode tersebut dengan kode berikut ini:
59 60
', can_manage_kb='.db_input($vars['can_manage_kb']). ', can_manage_staff='.db_input($vars['can_manage_staff']); // added by Masino Sinaga, December 8, 2009
-
Buat sebuah file php baru dengan nama mystaff.php, lalu letakkan file ini ke dalam sub direktori \scp\ setelah Anda salin, tempelkan, dan simpan kode berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
<?php /********************************************************************* mystaff.php Staff Base handle Based on the kb.php file Original code by: Peter Rotich <peter@osticket.com> Modified code by: Masino Sinaga, http://www.openscriptsolution.com Copyright (c) 2006,2007,2008,2009 osTicket http://www.osticket.com Released under the GNU General Public License WITHOUT ANY WARRANTY. See LICENSE.TXT for details. vim: expandtab sw=4 ts=4 sts=4: $Id: $ **********************************************************************/ require('staff.inc.php'); if(!$thisuser->isadmin() && !$thisuser->canManageStaff()) die('Staff Access Page Denied'); // modified by Masino Sinaga, Dec 8, 2009) die('Access denied'); $page=''; if(!$page && $_REQUEST['a']=='add' && !$replyID) $page='staffdept.inc.php'; $inc=$page?$page:'staffdeptmembers.inc.php'; $nav->setTabActive('staffdept'); $nav->addSubMenu(array('desc'=>'My Staff Members','href'=>'mystaff.php','iconclass'=>'users')); $nav->addSubMenu(array('desc'=>'Add My New Staff','href'=>'mystaff.php?a=add','iconclass'=>'newuser')); require_once(STAFFINC_DIR.'header.inc.php'); require_once(STAFFINC_DIR.$inc); require_once(STAFFINC_DIR.'footer.inc.php'); ?>
-
Buka file \scp\admin.php Anda, dan cari kode ini:
19
if(!$thisuser or !$thisuser->isadmin()){
lalu timpa dengan kode berikut:
if(!$thisuser and !$thisuser->isadmin() and !$thisuser->canManageStaff()){ // modified by Masino Sinaga, December 8, 2009
Cari lagi kode yang ini:
452 453
case 'dept': include_once(INCLUDE_DIR.'class.dept.php');
sebelum baris pertama kode tersebut, tambahkan kode berikut:
451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508
case 'staffdept': // added by Masino Sinaga, MOD Create My Staff Under My Dept (for Managers), added by Masino Sinaga, December 8, 2009 include_once(INCLUDE_DIR.'class.staff.php'); $do=strtolower($_POST['do']); switch($do){ case 'update': $staff = new Staff($_POST['staff_id']); if($staff && $staff->getId()) { if($staff->update($_POST,$errors)) $msg='Staff profile updated successfully'; elseif(!$errors['err']) $errors['err']='Error updating the user'; }else{ $errors['err']='Internal error'; } break; case 'create': if(($uID=Staff::create($_POST,$errors))) $msg=Format::htmlchars($_POST['firstname'].' '.$_POST['lastname']).' added successfully'; elseif(!$errors['err']) $errors['err']='Unable to add the user. Internal error'; break; case 'mass_process': //ok..at this point..look WMA. if($_POST['uids'] && is_array($_POST['uids'])) { $ids=implode(',',$_POST['uids']); $selected=count($_POST['uids']); if(isset($_POST['enable'])) { $sql='UPDATE '.STAFF_TABLE.' SET isactive=1,updated=NOW() WHERE isactive=0 AND staff_id IN('.$ids.')'; db_query($sql); $msg=db_affected_rows()." of $selected selected users enabled"; }elseif(in_array($thisuser->getId(),$_POST['uids'])) { //sucker...watch what you are doing...why don't you just DROP the DB? $errors['err']='You can not lock or delete yourself!'; }elseif(isset($_POST['disable'])) { $sql='UPDATE '.STAFF_TABLE.' SET isactive=0, updated=NOW() '. ' WHERE isactive=1 AND staff_id IN('.$ids.') AND staff_id!='.$thisuser->getId(); db_query($sql); $msg=db_affected_rows()." of $selected selected users locked"; //Release tickets assigned to the user?? NO? could be a temp thing // May be auto-release if not logged in for X days? }elseif(isset($_POST['delete'])) { db_query('DELETE FROM '.STAFF_TABLE.' WHERE staff_id IN('.$ids.') AND staff_id!='.$thisuser->getId()); $msg=db_affected_rows()." of $selected selected users deleted"; //Demote the user db_query('UPDATE '.DEPT_TABLE.' SET manager_id=0 WHERE manager_id IN('.$ids.') '); db_query('UPDATE '.TICKET_TABLE.' SET staff_id=0 WHERE staff_id IN('.$ids.') '); }else{ $errors['err']='Uknown command!'; } }else{ $errors['err']='No users selected.'; } break; default: $errors['err']='Uknown command!'; } break;
Masih pada file tersebut di atas, cari kode ini:
738 739
//Departments case 'dept': //lazy
sebelum baris pertama dari kode tersebut, tambahkan kode berikut ini:
737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759
case 'staffdept': // added by Masino Sinaga, MOD Create Staff Under My Dept (for Managers), added by Masino Sinaga, December 8, 2009 $group=null; //Tab and Nav options. $nav->setTabActive('staffdept'); $nav->addSubMenu(array('desc'=>'My Staff Members','href'=>'admin.php?t=staffdept','iconclass'=>'users')); $nav->addSubMenu(array('desc'=>'Add My New Staff','href'=>'admin.php?t=staffdept&a=new','iconclass'=>'newuser')); $page=''; switch($thistab){ case 'staffdept': $page='staffdeptmembers.inc.php'; if(($id=$_REQUEST['id']?$_REQUEST['id']:$_POST['staff_id']) && is_numeric($id)) { $staff = new Staff($id); if(!$staff || !is_object($staff) || $staff->getId()!=$id) { $staff=null; $errors['err']='Unable to fetch info on rep ID#'.$id; } } $page=($staff or ($_REQUEST['a']=='new' && !$uID))?'staffdept.inc.php':'staffdeptmembers.inc.php'; break; default: $page='staffdeptmembers.inc.php'; } break;
Setelah Anda menerapkan semua kode modifikasi tersebut, sekarang pergi ke Panel Admin -> Staff -> User Groups, lalu klik pada item record Managers, lalu pilih Yes pada petunjuk Can Manage Staff, dan klik tombol Submit untuk menyimpan perubahan.
Lalu buat sebuah record staf baru, tugaskan staf tersebut dengan user group Managers, dan pastikan Anda memilih Staff sebagai tipe akunnya, setelah itu, login dengan menggunakan akun staff baru tersebut, dan sekarang Anda seharusnya sudah melihat sebuah tab baru di Panel Staff yang bernama My Staff. Anda dapat mengetesnya dengan menambahkan beberapa record staf baru, dan sekarang Anda dapat melihat bahwa hanya ada satu pilihan departemen (berdasarkan departmen di mana staf yang sedang login itu berada) pada petunjuk Department, dan hanya ada satu pilihan di petunjuk User Group; yaitu: Staff.
Kesimpulan untuk MOD ini adalah: tab My Staff sangat berguna jika Anda ingin memberikan kemampuan bagi staf tertentu yang memiliki tipe akun Staff untuk membuat staf baru tanpa harus mengakses Panel Admin (tentu saja, karena tipe akunnya bukan admin).

Komentar Terakhir