Memberikan Ijin kepada Staf Tertentu untuk Menambah Staf Baru Berdasarkan Departemennya di osTicket v1.6 RC5

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.

  1. 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;
  2. 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.
  3. 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
                    &nbsp;&nbsp;<i>Ability to add/update/disable/delete staff of your current department.</i>
                </td>
            </tr>
        </table>
  4. 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;
        }
  5. 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');
                }
  6. 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
  7. 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');
     
    ?>
  8. 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).

Share

452 kali dibacaCetak Artikel Ini Cetak Artikel Ini

Utarakan pikiran Anda

*


*