Merekam dan Menampilkan Kunjungan Terakhir Klien dan Staf di osTicket v1.6 RC5

Adalah perlu dan bahkan penting bagi staf untuk mengetahui kapan sebuah tiket diakses untuk terakhir kalinya baik oleh klien dan staf di osTicket. Saya telah berhasil membuat modifikasi mengenai hal ini. Modifikasi ini akan merekam dan menampilkan tanggal dan jam ketika suatu tiket diakses terakhir kalinya. Jika staf mengakses sebuah tiket, maka dia akan dapat melihat kapan klien mengakses tiket tersebut. Juga, staf dapat mengetahui siapa staf yang terakhir mengakses tiket tadi. Jika tiket tadi sedang diakses untuk yang pertama kalinya, maka tidak ada informasi staf yang mengakses tiket tersebut, sampai staf yang sedang tercatat masuk tadi memuat ulang halaman viewticket.

  1. Pertama sekali, Anda harus membuat sebuah tabel yang bernama ost_ticket_visit di dalam database osTicket yang Anda gunakan. Pernyataan SQL berikut dapat Anda eksekusi melalui phpMyAdmin atau tools MySQL lainnya:

    CREATE TABLE `ost_ticket_visit` (
      `ticketID` int(11) NOT NULL,
      `lastvisitclient` datetime default NULL,
      `lastvisitstaff` datetime default NULL,
      `staff_id` int(10) NOT NULL,
      PRIMARY KEY  (`ticketID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  2. Buka file index.php, dan cari kode ini:

    45
    
      <form class="status_form" action="tickets.php" method="post">

    lalu ganti dengan kode berikut:

    45
    
      <form class="status_form" action="login.php" method="post">

    Catatan: Abaikan langkah ini jika Anda ternyata sudah memiliki kode versi modifikasi/terakhir.

  3. Buka file main.inc.php, dan cari kode ini:

    121
    
        define('TICKET_LOCK_TABLE',TABLE_PREFIX.'ticket_lock');

    setelah baris terakhir kode tadi, tambahkan kode berikut ini:

    122
    
        define('TICKET_VISIT_TABLE',TABLE_PREFIX.'ticket_visit'); // MOD Check lastlogin/lastlogout, added by Masino Sinaga, Oct 19, 2009
  4. Buka file login.php, dan cari kode ini:

    65
    66
    67
    
                @header("Location: tickets.php");
                require('tickets.php'); //Just incase. of header already sent error.
                exit;

    lalu ganti dengan kode berikut:

    65
    66
    67
    68
    69
    70
    
                //@header("Location: tickets.php");
                // MOD Last visit by client and staff, Added by Masino Sinaga, Oct 19, 2009
                $ticket->updateLastVisit($ticketID);
                @header("Location: tickets.php?id=" . $ticketID . ""); 
                require('tickets.php'); //Just incase. of header already sent error.           
                exit;
  5. Buka file tickets.php, dan cari kode ini:

    34
    35
    
            //Everything checked out.
            $inc='viewticket.inc.php';

    lalu timpa dengan kode berikut:

    34
    35
    36
    37
    
            // MOD Last visit by client and staff, Added by Masino Sinaga, Oct 19, 2009
            $ticket->updateLastVisit($id);
            //Everything checked out.
            $inc='viewticket.inc.php';
  6. Buka file \include\class.ticket.php, dan cari kode ini:

    1336
    1337
    
    }
    ?>

    lalu timpa dengan kode berikut:

    1336
    1337
    1338
    1339
    1340
    1341
    1342
    1343
    1344
    1345
    1346
    1347
    1348
    1349
    1350
    1351
    1352
    1353
    1354
    1355
    1356
    1357
    1358
    1359
    1360
    1361
    1362
    1363
    1364
    1365
    1366
    1367
    1368
    1369
    
       // MOD Last Visit by client and staff, Added by Masino Sinaga, Oct 19, 2009
       function updateLastVisit($ticketID, $staffId=0) {
         if ($staffId==0) {	
           if(db_query('UPDATE '.TICKET_VISIT_TABLE.' 
    	                SET lastvisitclient=NOW() 
     		        WHERE ticketID='.db_input($ticketID)) && db_affected_rows()){
              return true;
            } else {
              $sqlinsert = 'REPLACE INTO '.TICKET_VISIT_TABLE.' 
    			   SET ticketID = '.db_input($ticketID).', 
    			   lastvisitclient = NOW()';					
              if(db_query($sqlinsert) && ($msgid=db_insert_id())) {
                return true;	
              }
            }
          } else { 
    	if(db_query('UPDATE '.TICKET_VISIT_TABLE.' 
    	                 SET lastvisitstaff=NOW(), staff_id='.db_input($staffId).' 
    		         WHERE ticketID='.db_input($ticketID)) && db_affected_rows()){
              return true;
            } else {
              $sqlinsert = 'REPLACE INTO '.TICKET_VISIT_TABLE.' 
    	                   SET ticketID='.db_input($ticketID).', 
    	                   lastvisitstaff=NOW(), 
    			   staff_id='.db_input($staffId).'';					
              if(db_query($sqlinsert) && ($msgid=db_insert_id())) {
                return true;	
              }
            }			
          }
          return false;
       }
    }
    ?>
  7. Buat sebuah file kosong baru, lalu copy-paste kode berikut ke dalamnya, dan simpan dengan nama class.visit.php, kemudian letakkan file ini di dalam sub direktori \include\:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    <?php
     
    /*********************************************************************
        class.visit.php
     
        Handles the last ticket visiting, both for client and staff
     
        Masino Sinaga <masino_sinaga@posindonesia.co.id>
        Copyright (c)  2006,2007,2008,2009 osTicket
        http://www.openscriptsolution.com
     
        Released under the GNU General Public License WITHOUT ANY WARRANTY.
        See LICENSE.TXT for details.
     
        $Id: $
    **********************************************************************/
     
    class Visit {
     
        var $id;
        var $ticketID;
        var $udata;
        var $lastvisitclient;
        var $lastvisitstaff;
        var $staff_id;
        var $staff_name;
     
        function Visit($id){
            $this->id =0;
            return ($this->lookup($id));
        }
     
        function lookup($id){
            $sql='SELECT * FROM '.TICKET_VISIT_TABLE.' WHERE ticketID='.db_input($id);
            $res=db_query($sql);
            if(!$res || !db_num_rows($res))
                return NULL;
     
            $row=db_fetch_array($res);
            $this->udata=$row;
            $this->id = $row['ticketID']; 
            $this->lastvisitclient = $row['lastvisitclient'];
            $this->lastvisitstaff = $row['lastvisitstaff'];
            $this->staff_id = $row['staff_id'];
     
            return($this->id);
        }
     
        function getClientLastVisit(){
            return($this->lastvisitclient);
        }
     
        function getStaffLastVisit(){
            return($this->lastvisitstaff);
        }
     
        function getStaffID(){
            return($this->staff_id); 
        }
     
        function getStaffName(){
            $sql='SELECT username FROM '.STAFF_TABLE.' WHERE staff_id='.db_input($this->getStaffID());
            if(($res=db_query($sql)) && db_num_rows($res)) {
              $row=db_fetch_array($res);
              $this->staff_name = $row['username'];
            }
            return($this->staff_name);
        }
     
    }
    ?>
  8. Buka file \include\staff\viewticket.inc.php, dan cari kode ini:

    41
    42
    
         <td width=50%>	
        <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0>

    lalu timpa dengan kode berikut:

    41
    42
    43
    44
    45
    46
    47
    
         <td width=50%>	
        <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0>
          <tr>
            <th>
                Client Last Visit: </th>
            <td><?php echo Format::db_datetime($visit->getClientLastVisit()); ?></td>
          </tr>

    Cari lagi kode ini:

    67
    68
    69
    
         </td>
         <td width=50% valign="top">
            <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0>

    lalu timpa dengan kode berikut:

    67
    68
    69
    70
    71
    72
    73
    74
    75
    
         </td>
         <td width=50% valign="top">
            <table align="center" class="ticketinfo" cellspacing="1" cellpadding="3" width="100%" border=0>
          <tr>
            <th>
                Staff Last Visit: </th>
            <td><?php echo Format::db_datetime($visit->getStaffLastVisit());
    				      echo ($visit->getStaffName() != '') ? ' ('.$visit->getStaffName().')' : ''; ?></td>
          </tr>
  9. Buka file \scp\tickets.php, dan cari kode ini:

    21
    
    require_once(INCLUDE_DIR.'class.banlist.php');

    lalu timpa dengan kode berikut:

    21
    22
    
    require_once(INCLUDE_DIR.'class.banlist.php');
    require_once(INCLUDE_DIR.'class.visit.php'); // MOD Last Visit by client and staff, Added by Masino Sinaga, October 19, 2009

    Cari lagi kode ini:

    34
    35
    
        if(!$errors && $ticket->getId()==$id)
            $page='viewticket.inc.php'; //Default - view

    lalu timpa dengan kode berikut:

    34
    35
    36
    37
    38
    39
    40
    
        if(!$errors && $ticket->getId()==$id) { 
            // MOD Last visit by client and staff, Added by Masino Sinaga, October 19, 2009
            $ticketID = $ticket->getExtId();
            $visit= new Visit($ticketID);
            $page='viewticket.inc.php'; //Default - view
            $ticket->updateLastVisit($ticketID, $thisuser->getId());
        }

    Cari lagi kode ini:

    180
    181
    
                    $msg='Ticket updated successfully';
                    $page='viewticket.inc.php';

    lalu timpa dengan kode berikut:

    180
    181
    182
    183
    184
    185
    186
    
                    $msg='Ticket updated successfully';
                    //$page='viewticket.inc.php';
                    // MOD Last visit by client and staff, Added by Masino Sinaga, October 19, 2009
    	        $ticketID = $ticket->getExtId();
                    $visit= new Visit($ticketID);
                    $page='viewticket.inc.php'; //Default - view
                    $ticket->updateLastVisit($ticketID, $thisuser->getId());

    Cari lagi kode ini:

    369
    370
    
                            $page='viewticket.inc.php';
                            $ticket->reload(); //Reload ...possibly assigned!

    lalu timpa dengan kode berikut:

    369
    370
    371
    372
    373
    374
    375
    
                            //$page='viewticket.inc.php';
    	                // MOD Last visit by client and staff, Added by Masino Sinaga, October 19, 2009
                            $ticketID = $ticket->getExtId();
                            $visit= new Visit($ticketID);
                            $page='viewticket.inc.php'; //Default - view
                            $ticket->updateLastVisit($ticketID, $thisuser->getId());
                            $ticket->reload(); //Reload ...possibly assigned!

Itulah semuanya. Sekarang sebagai staf, Anda dapat melihat kapan waktu terakhir klien Anda mengakses sebuah tiket dari halaman viewticket, termasuk kapan Anda atau staf yang lain mengakses tiket tersebut untuk yang terakhir kalinya.

Informasi Kunjungan Terakhir oleh Client dan Staff di osTicket v1.6 RC5

Share

835 kali dibacaCetak Artikel Ini Cetak Artikel Ini

Komentar

  1. yarfik mengatakan:

    nanya lagi ya mas.. ^_^

    catatan pada langkah no2 itu maksudnya apa?

    -> Note: Please avoid this step if you already have the modification version.

    trims.

  2. yarfik mengatakan:

    satu lagi mas..

    ini berlaku surut g mas? berlaku untuk ticket2 sebelum script ini di masukkan g?

    thanks.

  3. Masino Sinaga mengatakan:

    @yarfik

    Itu maksudnya, kalau kode yang akan diubah sudah dalam bentuk versi yang dimodifikasi, maka perintah pada langkah modifikasi nomor 2 tersebut diabaikan saja, karena ada kemungkinan modifikasi nomor 2 tersebut sudah pernah dilakukan secara terpisah untuk mengatasi cek tiket dari halaman index di sisi klien.

  4. Masino Sinaga mengatakan:

    @yarfik

    Bisa ya, dan bisa tidak. Nah, lho? Bingung? Hehe, jangan bingung dulu!

    Maksudnya begini: Kalau tiket yang dimasukkan sebelum modifikasi ini dikunjungi kembali setelah modifikasi diterapkan, maka info kunjungan terakhir tersebut akan terekam. Tapi kalau tiket tersebut tidak pernah dikunjungi lagi setelah modifikasi diterapkan, maka info kunjungan terakhir tersebut tidak akan terekam dan tidak ditampilkan.

    Semoga dapat dipahami.

  5. jason mengatakan:

    Hi Masino,

    i am unable to find this in /scp/ticket.php

    369 $page=’viewticket.inc.php’;
    370 $ticket->reload(); //Reload …possibly assigned!

    Can you advise on which part i am missing ?
    thank you

  6. fackeid mengatakan:

    Hi
    I am using 1.6ST
    I am also not able to perform the last step

    i am unable to find this in /scp/ticket.php

    $page=’viewticket.inc.php’;
    $ticket->reload(); //Reload …possibly assigned!

  7. fackeid mengatakan:

    hey thanks Masino Singa…

    Now it worked like a charm…

    Thank you once again.

Utarakan pikiran Anda

*


*