Peringatan Tiket yang Ditutup untuk Semua Anggota Departemen di osTicket v1.6 ST (Stabil)

Sungguh masuk akal ketika sebuah tiket ditutup oleh pelanggan atau klien Anda, maka semua anggota departemen akan otomatis diberitahukan via email oleh sistem tiket Anda. Saya membuat modifikasi untuk mengimplementasikan hal ini ke dalam osTicket v1.6 ST (Stabil), termasuk pengaturan untuk mengaktifkan atau menonaktifkan fitur ini, apakah memang perlu diimplementasikan, atau suatu ketika Anda tidak membutuhkan fitur ini, sehingga dapat menonaktifkannya. Selain itu, Anda juga dapat mengatur templat isi email yang akan dikirim ketika sebuah tiket ditutup melalui pengaturan Template Email di Admin Panel. Modifikasi ini sekaligus juga menjawab pertanyaan yang terkait di Forum Diskusi osTicket.

  1. Pertama sekali, Anda harus mengubah struktur tabel ost_config Anda, dengan menambahkan empat field baru ke dalamnya, cukup dengan mengeksekusi skrip SQL berikut dalam database osTicket Anda. Perlu diingat bahwa dalam contoh ini, saya menggunakan ost_ sebagai awalan nama tabel. Sesuaikan awalan tabel ini jika berbeda dengan awalan tabel milik Anda:

    ALTER TABLE ost_config 
    ADD COLUMN `closed_alert_active` tinyint(1) default 0 NOT NULL,
    ADD COLUMN `closed_alert_assigned` tinyint(1) default 0 NOT NULL,
    ADD COLUMN `closed_alert_dept_manager` tinyint(1) default 0 NOT NULL,
    ADD COLUMN `closed_alert_dept_members` tinyint(1) default 0 NOT NULL;
  2. Anda juga harus mengubah tabel ost_email_template dengan menambahkan dua field baru untuk membuat templat email baru untuk menyimpan peringatan saat tiket ditutup. Cukup dengan menjalankan skrip SQL berikut ke dalam database osTicket Anda sama seperti langkah sebelumnya di atas:

    ALTER TABLE ost_email_template 
    ADD COLUMN `ticket_closed_subj` varchar(255) default '' NOT NULL,
    ADD COLUMN `ticket_closed_body` text NOT NULL;
  3. Buka file /include/staff/preference.inc.php file, lalu temukan kode berikut:
    478
    479
    480
    
    <input type="checkbox" name="overdue_alert_dept_members" <?=$config['overdue_alert_dept_members']?'checked':''?>> Department Members (spammy)
                </td>
            </tr>

    setelah baris kode tersebut, tambahkan kode di bawah ini:

    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    
    <?php // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 ?>
            <tr><th valign="top">Closed Ticket Alert:</th>
                <td>
                  <input type="radio" name="closed_alert_active"  value="1"   <?=$config['closed_alert_active']?'checked':''?> />Enable
                  <input type="radio" name="closed_alert_active"  value="0"   <?=!$config['closed_alert_active']?'checked':''?> />Disable
                  <br><i>Admin Email gets an alert by default. Select additional recipients below</i>&nbsp;<font class="error">&nbsp;<?=$errors['closed_alert_active']?></font><br>
                  <input type="checkbox" name="closed_alert_assigned" <?=$config['closed_alert_assigned']?'checked':''?>> Assigned Staff
                  <input type="checkbox" name="closed_alert_dept_manager" <?=$config['closed_alert_dept_manager']?'checked':''?>> Department Manager
                  <input type="checkbox" name="closed_alert_dept_members" <?=$config['closed_alert_dept_members']?'checked':''?>> Department Members (spammy)
                </td>
            </tr>
    <?php // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 ?>
  4. Buka file /include/class.config.php Anda, dan temukan kode ini:
    376
    377
    378
    
        function alertDeptMembersONOverdueTicket() {
            return $this->config['overdue_alert_dept_members']?true:false;
        }

    setelah baris terakhir dari kode tadi, tambahkan kode berikut ini:

    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010
        function alertONClosedTicket() {
            return $this->config['closed_alert_active']?true:false;
        }
     
        function alertAssignedONClosedTicket() {
            return $this->config['closed_alert_assigned']?true:false;
        }
     
        function alertDeptManagerONClosedTicket() {
            return $this->config['closed_alert_dept_manager']?true:false;
        }
     
        function alertDeptMembersONClosedTicket() {
            return $this->config['closed_alert_dept_members']?true:false;
        }
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010

    Temukan lagi kode yang ini:

    511
    512
    513
    514
    515
    516
    
            if($var['note_alert_active']
                    && (!isset($var['note_alert_laststaff'])
                        && !isset($var['note_alert_assigned'])
                        && !isset($var['note_alert_dept_manager']))){
                $errors['note_alert_active']='No target recipient(s) selected';
            }

    setelah baris terakhir dari kode tadi, tambahkan kode yang ini:

    518
    519
    520
    521
    522
    523
    524
    525
    
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010
            if($var['closed_alert_active']
                    && (!isset($var['closed_alert_assigned'])
                        && !isset($var['closed_alert_dept_manager'])
                        && !isset($var['closed_alert_dept_members']))){
                $errors['closed_alert_active']='No target recipient(s) selected';
            }
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010

    Temukan lagi kode ini:

    599
    
                ',overdue_alert_dept_members='.db_input(isset($var['overdue_alert_dept_members'])?1:0).

    timpa dengan kode berikut ini:

    599
    600
    601
    602
    603
    604
    605
    
                ',overdue_alert_dept_members='.db_input(isset($var['overdue_alert_dept_members'])?1:0).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010            
                ',closed_alert_active='.db_input($var['closed_alert_active']).            
    			',closed_alert_assigned='.db_input(isset($var['closed_alert_assigned'])?1:0).
                ',closed_alert_dept_manager='.db_input(isset($var['closed_alert_dept_manager'])?1:0).
                ',closed_alert_dept_members='.db_input(isset($var['closed_alert_dept_members'])?1:0).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010
  5. Buka file /include/class.ticket.php Anda, dan temukan kode ini:
    385
    386
    387
    388
    389
    390
    391
    
        //Close the ticket
        function close(){
     
            $sql= 'UPDATE '.TICKET_TABLE.' SET status='.db_input('closed').',staff_id=0,isoverdue=0,duedate=NULL,updated=NOW(),closed=NOW() '.
                  ' WHERE ticket_id='.db_input($this->getId());
            return (db_query($sql) && db_affected_rows())?true:false;
        }

    lalu timpa dengan kode berikut ini:

    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    
        //Close the ticket
        function close(){
            global $cfg;
            $sql= 'UPDATE '.TICKET_TABLE.' SET status='.db_input('closed').',staff_id=0,isoverdue=0,duedate=NULL,updated=NOW(),closed=NOW() '.
                  ' WHERE ticket_id='.db_input($this->getId());
            //return (db_query($sql) && db_affected_rows())?true:false;
     
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 NOT FINISHED YET        
            if(db_query($sql) && db_affected_rows()) {
                //echo $sql;
                $dept=$this->getDept();
     
                if(!$dept || !($tplId=$dept->getTemplateId()))
                    $tplId=$cfg->getDefaultTemplateId();
     
                //if requested && enabled fire nasty alerts.
                if($cfg->alertONClosedTicket()){
                    $sql='SELECT ticket_closed_subj,ticket_closed_body FROM '.EMAIL_TEMPLATE_TABLE.
                         ' WHERE cfg_id='.db_input($cfg->getId()).' AND tpl_id='.db_input($tplId);
                    if(($resp=db_query($sql)) && db_num_rows($resp) && list($subj,$body)=db_fetch_row($resp)){
     
                        $body=$this->replaceTemplateVars($body);
                        $subj=$this->replaceTemplateVars($subj);
     
                        if(!($email=$cfg->getAlertEmail()))
                            $email=$cfg->getDefaultEmail();
     
                        if($email && $email->getId()) {
                            //Fire and email to admin. No questions asked.
                            $alert = str_replace("%staff",'Admin',$body);
                            $email->send($cfg->getAdminEmail(),$subj,$alert);
     
                            /*** Build list of recipients and fire the alerts ***/
                            $recipients=array();
                            //Assigned staff... if any
                            if($this->isAssigned() && $cfg->alertAssignedONClosedTicket()){
                                $recipients[]=$this->getStaff();
                            }elseif($cfg->alertDeptMembersONClosedTicket()){ //Alert assigned or dept members not both
                                //All dept members.
                                $sql='SELECT staff_id FROM '.STAFF_TABLE.' WHERE dept_id='.db_input($dept->getId());
                                if(($users=db_query($sql)) && db_num_rows($users)) {
                                    while(list($id)=db_fetch_row($users))
                                        $recipients[]= new Staff($id);     //possible mem issues with a large number of staff?
                                }
                            }
                            //Always blame the manager
                            if($cfg->alertDeptManagerONClosedTicket() && $dept) {
                                $recipients[]=$dept->getManager();
                            }
                            //Ok...we are ready to go....
                            $sentlist=array();
                            foreach( $recipients as $k=>$staff){
                                if(!$staff || !is_object($staff) || !$staff->isAvailable()) continue;
                                if(in_array($staff->getEmail(),$sentlist)) continue; //avoid duplicate emails.
                                $alert = str_replace("%staff",$staff->getFirstName(),$body);
                                $email->send($staff->getEmail(),$subj,$alert);
                            }
                        }
                    }else {
                        Sys::log(LOG_WARNING,'Template Fetch Error',"Unable to fetch 'closed' alert template #$tplId");
                    }
                }
                return true;
            }
            return false;
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 NOT FINISHED YET
     
        }
  6. Buka file /include/staff/template.inc.php Anda, dan temukan kode yang ini:

    173
    174
    175
    176
    177
    
                <tr>
                    <th>Message Body:</th>
                    <td><textarea rows="7" cols="75" name="ticket_overdue_body"><?=$tpl['ticket_overdue_body']?></textarea>
                        &nbsp;<font class="error">&nbsp;<?=$errors['ticket_overdue_body']?></font></td>
                </tr>

    setelah baris terakhir kode tadi, tambahkan kode berikut ini:

    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    
    <?php // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 ?>
                <tr class="header"><td colspan=2 >Closed Ticket Alert/Notice</td></tr>
                <tr class="subheader"><td colspan=2 >Alert sent to staff on closed tickets.</td></tr>
                <tr>
                    <th>Subject</th>
                    <td>
                        <input type="text" size="65" name="ticket_closed_subj" value="<?=$tpl['ticket_closed_subj']?>">
                                &nbsp;<font class="error">&nbsp;<?=$errors['ticket_closed_subj']?></font></td>
                </tr>
                <tr>
                    <th>Message Body:</th>
                    <td><textarea rows="7" cols="75" name="ticket_closed_body"><?=$tpl['ticket_closed_body']?></textarea>
                        &nbsp;<font class="error">&nbsp;<?=$errors['ticket_closed_body']?></font></td>
                </tr>
    <?php // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010 ?>
  7. Buka file /include/class.msgtpl.php Anda, dan temukan kode yang ini:

    104
    105
    
            $fields['ticket_overdue_subj']  = array('type'=>'string',   'required'=>1, 'error'=>'Subject required');
            $fields['ticket_overdue_body']  = array('type'=>'string',   'required'=>1, 'error'=>'Template message required');

    setelah baris terakhir dari kode tadi, tambahkan kode yang ini:

    107
    108
    109
    110
    
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010        
            $fields['ticket_closed_subj']  = array('type'=>'string',   'required'=>1, 'error'=>'Subject required');
            $fields['ticket_closed_body']  = array('type'=>'string',   'required'=>1, 'error'=>'Template message required');
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010

    Temukan lagi kode yang ini:

    143
    
                     ',ticket_overdue_body='.db_input(Format::striptags($var['ticket_overdue_body'])).

    lalu timpa dengan kode berikut:

    143
    144
    145
    146
    147
    
                     ',ticket_overdue_body='.db_input(Format::striptags($var['ticket_overdue_body'])).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010
                     ',ticket_closed_subj='.db_input(Format::striptags($var['ticket_closed_subj'])).
                     ',ticket_closed_body='.db_input(Format::striptags($var['ticket_closed_body'])).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010

    Temukan lagi kode yang ini:

    213
    
                     ',ticket_overdue_body='.db_input(Format::striptags($info['ticket_overdue_body'])).

    lalu timpa dengan kode berikut ini:

    213
    214
    215
    216
    217
    
                     ',ticket_overdue_body='.db_input(Format::striptags($info['ticket_overdue_body'])).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010
                     ',ticket_closed_subj='.db_input(Format::striptags($info['ticket_closed_subj'])).
                     ',ticket_closed_body='.db_input(Format::striptags($info['ticket_closed_body'])).
    // Closed Ticket Alert for Department Members, modified by Masino Sinaga, February 27, 2010

Itulah semuanya! :-)

Setelah modifikasi tersebut berhasil Anda lakukan, maka jangan lupa (HARUS) mendefinisikan isi dari templat email yang akan digunakan untuk mengirim pemberitahuan ke staf ketika sebuah tiket ditutup. Silahkan Anda atur melalui menu: Admin Panel -> Emails -> Templates, lalu isi pada bagian Closed Ticket Alert:.

Misalnya: isikan pada bagian Subject:

Closed Ticket Alert

dan di bagian Body:, isikan templat berikut:

A ticket, #%ticket assigned to you or in your department has been closed.
 
%url/scp/tickets.php?id=%id
 
Thank you for your kindly cooperation so far.
 
- Support Ticket System - powered by osTicket.
Share

3,080 kali dibacaCetak Artikel Ini Cetak Artikel Ini

Komentar

  1. RJ Gerber, Jr. mengatakan:

    Masino,

    After implementing the edits to send a notification upon closing a ticket to dept. managers, the email template appears, and I can edit the name of the notice and the edit the template’s message body. I save (successfully, according to OSTicket), but when I go back into templates to view the changes, every edit that was made disappeared.
    Closed ticket notices are appearing in managers mailboxes without a subject, or message body from the closed ticket alert template…

    Thanks!

  2. Marco mengatakan:

    Hi,

    We have apply your code in our version of osticket.
    It works fine. Thank you.

Utarakan pikiran Anda

*


*