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.
-
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;
-
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.
-
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
-
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;
-
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';
-
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; } } ?>
-
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); } } ?>
-
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> -
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.


nanya lagi ya mas.. ^_^
catatan pada langkah no2 itu maksudnya apa?
-> Note: Please avoid this step if you already have the modification version.
trims.
satu lagi mas..
ini berlaku surut g mas? berlaku untuk ticket2 sebelum script ini di masukkan g?
thanks.
@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.
@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.
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
For 1.6 ST version, you should find this following code instead:
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!
For 1.6 ST version, you should find this following code instead:
Hopefully that will help you.
hey thanks Masino Singa…
Now it worked like a charm…
Thank you once again.