Open sunnystark opened 6 years ago
1- Manage Departments->Allow escalation ->Escalate To->select department ->Escalate Wait Time-> here i mention 1 hour ...
put only numeric vale in this field ,
after wait 1 hour .. ticket did't escalate to higher department ..
i wish if my ticket auto escalate to another stuff .. i dont want manual assign.. to staff ..
solution please
There is code ..
<?php
/*
| Trellis Desk | ===================================== | By DJ Tarazona (dj@accord5.com) | (c) 2010 ACCORD5 | http://www.trellisdesk.com/ | ===================================== | Email: sales@accord5.com
| @ Version: v1.0.4 Final Build 10440094 | @ Version Int: 104.4.0.094 | @ Version Num: 10440094 | @ Build: 0094
| | Admin Departments
*/
class ad_depart {
#======================================= # @ Auto Run # Function that is run automatically # when the file is required. #======================================= function auto_run() { if ( ! $this->ifthd->member['acp']['manage_depart'] ) { $this->ifthd->skin->error('no_perm'); } $this->ifthd->skin->set_section( 'Ticket Control' ); $this->ifthd->skin->set_description( 'Manage your tickets, departments, custom department fields and canned replies.' ); switch( $this->ifthd->input['code'] ) { case 'list': $this->list_departs(); break; case 'reorder': $this->reorder_departs(); break; case 'add': $this->add_depart(); break; case 'edit': $this->edit_depart(); break; case 'delete': $this->delete_depart(); break; case 'doreorder': $this->do_reorder(); break; case 'doadd': $this->do_create(); break; case 'doedit': $this->do_edit(); break; case 'dodel': $this->do_delete(); break; default: $this->list_departs(); break; } } #======================================= # @ List Departmenets # Show a list of departmenets. #======================================= function list_departs($error='', $alert='') { #============================= # Grab Departments #============================= $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'order' => array( 'position' => 'asc' ), ) ); $this->ifthd->core->db->execute(); $depart_rows = ""; // Initialize for Security $row_count = 0; // Initialize for Security if ( $this->ifthd->core->db->get_num_rows() ) { while( $d = $this->ifthd->core->db->fetch_row() ) { $row_count ++; ( $row_count & 1 ) ? $row_class = 'option1-med' : $row_class = 'option2-med'; #============================= # Fix Up Information #============================= $d['description'] = $this->ifthd->shorten_str( $d['description'], 80, 1 ); $depart_rows .= "<tr> <td class='{$row_class}'><a href='<! HD_URL !>/admin.php?section=manage&act=tickets&code=list&depart={$d['id']}'>{$d['id']}</a></td> <td class='{$row_class}'><a href='<! HD_URL !>/admin.php?section=manage&act=tickets&code=list&depart={$d['id']}'>{$d['name']}</a></td> <td class='{$row_class}' style='font-weight: normal'>{$d['description']}</td> <td class='{$row_class}' align='center'>{$d['tickets']}</td> <td class='{$row_class}' align='center'><a href='<! HD_URL !>/admin.php?section=manage&act=depart&code=edit&id={$d['id']}'><img src='<! IMG_DIR !>/button_edit.gif' alt='Edit' /></a></td> <td class='{$row_class}' align='center'><a href='<! HD_URL !>/admin.php?section=manage&act=depart&code=delete&id={$d['id']}'><img src='<! IMG_DIR !>/button_delete.gif' alt='Delete' /></a></td> </tr>"; } } #============================= # Do Output #============================= if ( $error ) { $error = "<div class='critical'>{$error}</div>"; } elseif ( $alert ) { $error = "<div class='alert'>{$alert}</div>"; } $this->output = "{$error} <div class='groupbox'><div style='float:right'><a href='<! HD_URL !>/admin.php?section=manage&act=depart&code=reorder' title='Reorder departments'><img src='<! IMG_DIR !>/button_mini_reorder.gif' alt='Reorder' /></a></div>Department List</div> <table width='100%' cellpadding='0' cellspacing='0'> <tr> <th width='4%' align='left'>ID</th> <th width='22%' align='left'>Name</th> <th width='54%' align='left'>Description</th> <th width='8%'>Tickets</th> <th width='5%'>Edit</th> <th width='7%'>Delete</th> </tr> ". $depart_rows ." </table> <div class='formtail'><div class='fb_pad'><a href='<! HD_URL !>/admin.php?section=manage&act=depart&code=add' class='fake_button'>Add A New Department</a></div></div>"; $this->ifthd->skin->add_output( $this->output ); $this->nav = array( "<a href='<! HD_URL !>/admin.php?section=manage'>Management</a>", "<a href='<! HD_URL !>/admin.php?section=manage&act=depart'>Departments</a>", "List Departments", ); $this->ifthd->skin->do_output( array( 'nav' => $this->nav, 'title' => 'Manage Departments' ) ); } #======================================= # @ Add Department # Show add department form. #======================================= function add_depart($error="") { #============================= # Security Checks #============================= if ( ! $this->ifthd->member['acp']['manage_depart_add'] ) { $this->ifthd->skin->error('no_perm'); } if ( file_exists( HD_SRC .'pop3.php' ) ) { $pop3 = 1; } #============================= # Do Output #============================= if ( $error ) { $error = "<div class='critical'>{$error}</div>"; } $this->output = "<script type='text/javascript'> function validate_form(form) { if ( ! form.name.value ) { alert('Please enter a name.'); form.name.focus(); return false; } if ( ! form.description.value ) { alert('Please enter a description.'); form.description.focus(); return false; } } </script> <form action='<! HD_URL !>/admin.php?section=manage&act=depart&code=doadd' method='post' onsubmit='return validate_form(this)'> {$error} <div class='groupbox'>Adding Department</div> <table width='100%' cellpadding='0' cellspacing='0'> <tr> <td class='option1' width='25%'><label for='name'>Name</label></td> <td class='option1' width='75%'><input type='text' name='name' id='name' value='{$this->ifthd->input['name']}' size='35' /></td> </tr> <tr> <td class='option2' valign='top'><label for='description'>Description</label></td> <td class='option2'><textarea name='description' id='description' cols='50' rows='2'>{$this->ifthd->input['description']}</textarea></td> </tr> <tr> <td class='option1'>Auto Assign</td> <td class='option1' style='font-weight: normal'> <select name='auto_assign' id='auto_assign'><option value='0'>No one</option>". $this->ifthd->build_staff_drop( $this->ifthd->input['auto_assign'] ) ."</select> </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info10','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info10' style='display: none;'> <div> Tickets submitted to this department will automatically be assigned to the above user. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1'>Allow Escalation</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'can_escalate', $this->ifthd->input['can_escalate'] ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info1','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info1' style='display: none;'> <div> Escalation places the ticket in a higher priority status and can also be moved to another department (see more options below). </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Escalate To</td> <td class='option2' style='font-weight: normal'> <select name='escalate_depart' id='escalate_depart'><option value='0'>None</option>". $this->ifthd->build_dprt_drop( $this->ifthd->input['escalate_depart'], 0, 1 ) ."</select> (Optional) </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info2','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info2' style='display: none;'> <div> When a ticket is escalated, you can also place it in another department, regardless of the department's group permissions. Select a department to escalate ticket to, or select None to leave the ticket in its current department. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1' width='25%'><label for='escalate_wait'>Escalate Wait Time</label></td> <td class='option1' width='75%' style='font-weight: normal'><input type='text' name='escalate_wait' id='escalate_wait' value='{$this->ifthd->input['escalate_wait']}' size='10' style='vertical-align: bottom;' /> (Hours)</td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info3','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info3' style='display: none;'> <div> This is the amount of time that must have passed since ticket submission before a ticket can be escalated. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2' width='25%'><label for='auto_close'>Auto Close Wait Time</label></td> <td class='option2' width='75%' style='font-weight: normal'><input type='text' name='auto_close' id='auto_close' value='{$this->ifthd->input['auto_close']}' size='10' style='vertical-align: bottom;' /> (Hours) (Leave blank to disable)</td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info4','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info4' style='display: none;'> <div> Tickets can be automatically closed when in the Awaiting Client Action status. Enter the amount of hours that must pass before a ticket is automatically closed. Leave blank or enter 0 to disable. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1'>Enable Email Piping</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'email_pipe', $this->ifthd->input['email_pipe'] ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info5','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info5' style='display: none;'> <div> If set to yes, tickets can be submitted and replied to by sending an email to the specified email address below. This requires additional setup with email forwarders. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2' width='25%'><label for='incoming_email'>Incoming Email</label></td> <td class='option2' width='75%'><input type='text' name='incoming_email' id='incoming_email' value='{$this->ifthd->input['incoming_email']}' size='35' /></td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info6','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info6' style='display: none;'> <div> This is the email address that tickets and replies will be sent to for email piping. </div> </div> </div> </td> </tr>"; } if ( $pop3 ) { $this->output .= "<tr> <td class='option1'>Enable POP3 Checking</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'email_pop3', $this->ifthd->input['email_pop3'] ) ." </td> </tr> <tr> <td class='option2' width='25%'><label for='pop3_host'>Mail Server Address</label></td> <td class='option2' width='75%'><input type='text' name='pop3_host' id='pop3_host' value='{$this->ifthd->input['pop3_host']}' size='35' /> *</td> </tr> <tr> <td class='option1' width='25%'><label for='pop3_user'>Username</label></td> <td class='option1' width='75%'><input type='text' name='pop3_user' id='pop3_user' value='{$this->ifthd->input['pop3_user']}' size='35' /> *</td> </tr> <tr> <td class='option2' width='25%'><label for='pop3_pass'>Password</label></td> <td class='option2' width='75%'><input type='text' name='pop3_pass' id='pop3_pass' value='{$this->ifthd->input['pop3_pass']}' size='35' /> *</td> </tr>"; } $this->output .= "<tr> <td class='option1'>Enable Guest Emails</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'guest_pipe', $this->ifthd->input['guest_pipe'] ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info7','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info7' style='display: none;'> <div> If set to yes, guests (users who's email address is not registered) will be allowed to create tickets via email piping. Guests must also have permission to this department (see below). </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Can Close Own Tickets</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'ticket_own_close', $this->ifthd->input['ticket_own_close'] ) ." </td> </tr> <tr> <td class='option2'>Can Reopen Own Tickets</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'ticket_own_reopen', $this->ifthd->input['ticket_own_reopen'] ) ." </td> </tr> <tr> <td class='option1'>Require Close Reason</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'close_reason', $this->ifthd->input['close_reason'] ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info8','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info8' style='display: none;'> <div> If set to yes, a reason must be entered for the closing of each ticket. The close reason will be displayed on the view ticket page. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Allow Attachments</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'can_attach', $his->ifthd->input['can_attach'] ) ." </td> </tr> <tr> <td class='option1' valign='top'>Group Permissions</td> <td class='option1'> <select name='group_perm[]' id='group_perm' size='5' multiple='multiple'> ". $this->ifthd->build_group_drop( $this->ifthd->input['group_perm'] ) ." </select> </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info9','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info9' style='display: none;'> <div> Select the groups that has permission to create tickets in this department. This only applies for ticket creation. If a ticket is moved to a department in which the ticket owner does not have permission to, they will still be able to access the ticket. </div> </div> </div> </td> </tr>"; } $this->output .= "</table> <div class='formtail'><input type='submit' name='submit' id='add' value='Add Department' class='button' /></div>"; if ( $pop3 ) $this->output .= "<div class='option1'>* Only applies when POP3 is enabled.</div>"; $this->output .= "</form>"; $this->ifthd->skin->add_output( $this->output ); $this->nav = array( "<a href='<! HD_URL !>/admin.php?section=manage'>Management</a>", "<a href='<! HD_URL !>/admin.php?section=manage&act=depart'>Departments</a>", "Add Department", ); $this->ifthd->skin->do_output( array( 'nav' => $this->nav, 'title' => 'Manage Departments' ) ); } #======================================= # @ Edit Department # Show edit department form. #======================================= function edit_depart($error="") { #============================= # Security Checks #============================= $this->ifthd->input['id'] = intval( $this->ifthd->input['id'] ); if ( ! $this->ifthd->member['acp']['manage_depart_edit'] ) { $this->ifthd->skin->error('no_perm'); } if ( file_exists( HD_SRC .'pop3.php' ) ) { $pop3 = 1; } $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'where' => array( 'id', '=', $this->ifthd->input['id'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( ! $this->ifthd->core->db->get_num_rows() ) { $this->ifthd->skin->error('no_department'); } $d = $this->ifthd->core->db->fetch_row(); #============================= # Do Output #============================= if ( $error ) { $error = "<div class='critical'>{$error}</div>"; $name = $this->ifthd->input['name']; $description = $this->ifthd->input['description']; $can_escalate = $this->ifthd->input['can_escalate']; $escalate_depart = $this->ifthd->input['escalate_depart']; $escalate_wait = $this->ifthd->input['escalate_wait']; $auto_close = $this->ifthd->input['auto_close']; $email_pipe = $this->ifthd->input['email_pipe']; $guest_pipe = $this->ifthd->input['guest_pipe']; $incoming_email = $this->ifthd->input['incoming_email']; $email_pop3 = $this->ifthd->input['email_pop3']; $pop3_host = $this->ifthd->input['pop3_host']; $pop3_user = $this->ifthd->input['pop3_user']; $pop3_pass = $this->ifthd->input['pop3_pass']; $ticket_own_close = $this->ifthd->input['ticket_own_close']; $ticket_own_reopen = $this->ifthd->input['ticket_own_reopen']; $close_reason = $this->ifthd->input['close_reason']; $can_attach = $this->ifthd->input['can_attach']; $auto_assign = $this->ifthd->input['auto_assign']; $group_perm = $this->ifthd->input['group_perm']; } else { $name = $d['name']; $description = $d['description']; $can_escalate = $d['can_escalate']; $escalate_depart = $d['escalate_depart']; $escalate_wait = $d['escalate_wait']; $auto_close = $d['auto_close']; $email_pipe = $d['email_pipe']; $guest_pipe = $d['guest_pipe']; $incoming_email = $d['incoming_email']; $email_pop3 = $d['email_pop3']; $pop3_host = $d['pop3_host']; $pop3_user = $d['pop3_user']; $pop3_pass = $d['pop3_pass']; $ticket_own_close = $d['ticket_own_close']; $ticket_own_reopen = $d['ticket_own_reopen']; $close_reason = $d['close_reason']; $can_attach = $d['can_attach']; $auto_assign = $d['auto_assign']; $this->ifthd->core->db->construct( array( 'select' => array( 'g_id', 'g_m_depart_perm' ), 'from' => 'groups', ) ); $this->ifthd->core->db->execute(); if ( $this->ifthd->core->db->get_num_rows() ) { while ( $g = $this->ifthd->core->db->fetch_row() ) { $g_temp_perm = unserialize( $g['g_m_depart_perm'] ); if ( $g_temp_perm[ $d['id'] ] ) { $group_perm[] = $g['g_id']; } } } } $this->output = "<script type='text/javascript'> function validate_form(form) { if ( ! form.name.value ) { alert('Please enter a name.'); form.name.focus(); return false; } if ( ! form.description.value ) { alert('Please enter a description.'); form.description.focus(); return false; } } </script> <form action='<! HD_URL !>/admin.php?section=manage&act=depart&code=doedit&id={$d['id']}' method='post' onsubmit='return validate_form(this)'> {$error} <div class='groupbox'>Editing Department: {$d['name']}</div> <table width='100%' cellpadding='0' cellspacing='0'> <tr> <td class='option1' width='25%'><label for='name'>Name</label></td> <td class='option1' width='75%'><input type='text' name='name' id='name' value='{$name}' size='35' /></td> </tr> <tr> <td class='option2' valign='top'><label for='description'>Description</label></td> <td class='option2'><textarea name='description' id='description' cols='50' rows='2'>{$description}</textarea></td> </tr> <tr> <td class='option1'>Auto Assign</td> <td class='option1' style='font-weight: normal'> <select name='auto_assign' id='auto_assign'><option value='0'>No one</option>". $this->ifthd->build_staff_drop( $auto_assign ) ."</select> </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info10','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info10' style='display: none;'> <div> Tickets submitted to this department will automatically be assigned to the above user. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1'>Allow Escalation</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'can_escalate', $can_escalate ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info1','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info1' style='display: none;'> <div> Escalation places the ticket in a higher priority status and can also be moved to another department (see more options below). </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Escalate To</td> <td class='option2' style='font-weight: normal'> <select name='escalate_depart' id='escalate_depart'><option value='0'>None</option>". $this->ifthd->build_dprt_drop( $escalate_depart, $d['id'], 1 ) ."</select> (Optional) </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info2','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info2' style='display: none;'> <div> When a ticket is escalated, you can also place it in another department, regardless of the department's group permissions. Select a department to escalate ticket to, or select None to leave the ticket in its current department. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1' width='25%'><label for='escalate_wait'>Escalate Wait Time</label></td> <td class='option1' width='75%' style='font-weight: normal'><input type='text' name='escalate_wait' id='escalate_wait' value='{$escalate_wait}' size='10' style='vertical-align: bottom;' /> (Hours)</td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info3','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info3' style='display: none;'> <div> This is the amount of time that must have passed since ticket submission before a ticket can be escalated. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2' width='25%'><label for='auto_close'>Auto Close Wait Time</label></td> <td class='option2' width='75%' style='font-weight: normal'><input type='text' name='auto_close' id='auto_close' value='{$auto_close}' size='10' style='vertical-align: bottom;' /> (Hours) (Leave blank to disable)</td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info4','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info4' style='display: none;'> <div> Tickets can be automatically closed when in the Awaiting Client Action status. Enter the amount of hours that must pass before a ticket is automatically closed. Leave blank or enter 0 to disable. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option1'>Enable Email Piping</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'email_pipe', $email_pipe ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info5','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info5' style='display: none;'> <div> If set to yes, tickets can be submitted and replied to by sending an email to the specified email address below. This requires additional setup with email forwarders. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2' width='25%'><label for='incoming_email'>Incoming Email</label></td> <td class='option2' width='75%'><input type='text' name='incoming_email' id='incoming_email' value='{$incoming_email}' size='35' /></td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info6','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info6' style='display: none;'> <div> This is the email address that tickets and replies will be sent to for email piping. </div> </div> </div> </td> </tr>"; } if ( $pop3 ) { $this->output .= "<tr> <td class='option1'>Enable POP3 Checking</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'email_pop3', $email_pop3 ) ." </td> </tr> <tr> <td class='option2' width='25%'><label for='pop3_host'>Mail Server Address</label></td> <td class='option2' width='75%'><input type='text' name='pop3_host' id='pop3_host' value='{$pop3_host}' size='35' /> *</td> </tr> <tr> <td class='option1' width='25%'><label for='pop3_user'>Username</label></td> <td class='option1' width='75%'><input type='text' name='pop3_user' id='pop3_user' value='{$pop3_user}' size='35' /> *</td> </tr> <tr> <td class='option2' width='25%'><label for='pop3_pass'>Password</label></td> <td class='option2' width='75%'><input type='text' name='pop3_pass' id='pop3_pass' value='{$pop3_pass}' size='35' /> *</td> </tr>"; } $this->output .= "<tr> <td class='option1'>Enable Guest Emails</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'guest_pipe', $guest_pipe ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info7','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info7' style='display: none;'> <div> If set to yes, guests (users who's email address is not registered) will be allowed to create tickets via email piping. Guests must also have permission to this department (see below). </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Can Close Own Tickets</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'ticket_own_close', $ticket_own_close ) ." </td> </tr> <tr> <td class='option2'>Can Reopen Own Tickets</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'ticket_own_reopen', $ticket_own_reopen ) ." </td> </tr> <tr> <td class='option1'>Require Close Reason</td> <td class='option1' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'close_reason', $close_reason ) ." </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info8','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info8' style='display: none;'> <div> If set to yes, a reason must be entered for the closing of each ticket. The close reason will be displayed on the view ticket page. </div> </div> </div> </td> </tr>"; } $this->output .= "<tr> <td class='option2'>Allow Attachments</td> <td class='option2' style='font-weight: normal'> ". $this->ifthd->skin->yes_no_radio( 'can_attach', $can_attach ) ." </td> </tr> <tr> <td class='option1' valign='top'>Group Permissions</td> <td class='option1'> <select name='group_perm[]' id='group_perm' size='5' multiple='multiple'> ". $this->ifthd->build_group_drop( $group_perm ) ." </select> </td> </tr>"; if ( ACP_HELP ) { $this->output .= "<tr> <td colspan='2'> <div class='infopop'> <a onclick=\"javascript:Effect.toggle('info9','blind',{duration: 0.5});\" class='fake_link'><img src='<! IMG_DIR !>/toggle.gif' alt='+' /> Toggle information</a> <div id='info9' style='display: none;'> <div> Select the groups that has permission to create tickets in this department. This only applies for ticket creation. If a ticket is moved to a department in which the ticket owner does not have permission to, they will still be able to access the ticket. </div> </div> </div> </td> </tr>"; } $this->output .= "</table> <div class='formtail'><input type='submit' name='submit' id='edit' value='Edit Department' class='button' /></div>"; if ( $pop3 ) $this->output .= "<div class='option1'>* Only applies when POP3 is enabled.</div>"; $this->output .= "</form>"; $this->ifthd->skin->add_output( $this->output ); $this->nav = array( "<a href='<! HD_URL !>/admin.php?section=manage'>Management</a>", "<a href='<! HD_URL !>/admin.php?section=manage&act=depart'>Departments</a>", "Edit Department", ); $this->ifthd->skin->do_output( array( 'nav' => $this->nav, 'title' => 'Manage Departments' ) ); } #======================================= # @ Delete Department # Show delete department form. #======================================= function delete_depart() { #============================= # Security Checks #============================= $this->ifthd->input['id'] = intval( $this->ifthd->input['id'] ); if ( ! $this->ifthd->member['acp']['manage_depart_delete'] ) { $this->ifthd->skin->error('no_perm'); } $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'where' => array( 'id', '=', $this->ifthd->input['id'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( ! $this->ifthd->core->db->get_num_rows() ) { $this->ifthd->skin->error('no_department'); } $d = $this->ifthd->core->db->fetch_row(); #============================= # Do Output #============================= $depart_drop = $this->ifthd->build_dprt_drop( 0, $d['id'], 1 ); $this->output = "<form action='<! HD_URL !>/admin.php?section=manage&act=depart&code=dodel&id={$d['id']}' method='post'> <div class='groupbox'>Deleting Department: {$d['name']}</div> <div class='subbox'>What would you like to do with the tickets in this department?</div> <div class='option1'><input type='radio' name='action' id='action1' value='1' checked='checked' /> <label for='action1'>Move the tickets to this department:</label> <select name='moveto'>{$depart_drop}</select></div> <div class='option2'><input type='radio' name='action' id='action2' value='2' /> <label for='action2'>Delete the tickets</label></div> <div class='formtail'><input type='submit' name='submit' id='delete' value='Delete Department' class='button' /></div> </form>"; $this->ifthd->skin->add_output( $this->output ); $this->nav = array( "<a href='<! HD_URL !>/admin.php?section=manage'>Management</a>", "<a href='<! HD_URL !>/admin.php?section=manage&act=depart'>Departments</a>", "Delete Department", ); $this->ifthd->skin->do_output( array( 'nav' => $this->nav, 'title' => 'Manage Departments' ) ); } #======================================= # @ Do Create # Create a new department. #======================================= function do_create() { #============================= # Security Checks #============================= if ( file_exists( HD_SRC .'pop3.php' ) ) { $pop3 = 1; } if ( ! $this->ifthd->member['acp']['manage_depart_add'] ) { $this->ifthd->skin->error('no_perm'); } if ( ! $this->ifthd->input['name'] ) { $this->add_depart('Please enter a name.'); } if ( ! $this->ifthd->input['description'] ) { $this->add_depart('Please enter a description.'); } if ( ! is_array( $this->ifthd->input['group_perm'] ) ) { $this->add_depart('Please select some group permissions.'); } if ( $this->ifthd->input['email_pipe'] ) { if ( ! $this->ifthd->validate_email( $this->ifthd->input['incoming_email'] ) ) { $this->add_depart('Please enter a valid incoming email address.'); } $this->ifthd->core->db->construct( array( 'select' => array( 'id' ), 'from' => 'departments', 'where' => array( 'incoming_email', '=', $this->ifthd->input['incoming_email'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( $this->ifthd->core->db->get_num_rows() ) { $this->add_depart('That incoming email address is already used for another department. Please choose a different email.'); } } #============================= # Add Department #============================= $db_array = array( 'name' => $this->ifthd->input['name'], 'description' => $this->ifthd->input['description'], 'can_escalate' => $this->ifthd->input['can_escalate'], 'escalate_depart' => $this->ifthd->input['escalate_depart'], 'escalate_wait' => $this->ifthd->input['escalate_wait'], 'auto_close' => $this->ifthd->input['auto_close'], 'ticket_own_close' => $this->ifthd->input['ticket_own_close'], 'ticket_own_reopen' => $this->ifthd->input['ticket_own_reopen'], 'close_reason' => $this->ifthd->input['close_reason'], 'can_attach' => $this->ifthd->input['can_attach'], 'email_pipe' => $this->ifthd->input['email_pipe'], 'guest_pipe' => $this->ifthd->input['guest_pipe'], 'incoming_email' => $this->ifthd->input['incoming_email'], 'auto_assign' => $this->ifthd->input['auto_assign'], ); if ( $pop3 ) { $db_array['email_pop3'] = $this->ifthd->input['email_pop3']; $db_array['pop3_host'] = $this->ifthd->input['pop3_host']; $db_array['pop3_user'] = $this->ifthd->input['pop3_user']; $db_array['pop3_pass'] = $this->ifthd->input['pop3_pass']; } $this->ifthd->core->db->construct( array( 'insert' => 'departments', 'set' => $db_array, ) ); $this->ifthd->core->db->execute(); $depart_id = $this->ifthd->core->db->get_insert_id(); $this->ifthd->log( 'admin', "Department Added '". $this->ifthd->input['name'] ."'", 1, $depart_id ); #============================= # Generate Permissions #============================= $this->ifthd->core->db->construct( array( 'select' => array( 'g_id', 'g_m_depart_perm' ), 'from' => 'groups', 'where' => array( 'g_id', 'in', $this->ifthd->input['group_perm'] ), ) ); $this->ifthd->core->db->execute(); if ( $this->ifthd->core->db->get_num_rows() ) { while ( $g = $this->ifthd->core->db->fetch_row() ) { $temp_perm[ $g['g_id'] ] = unserialize( $g['g_m_depart_perm'] ); $temp_perm[ $g['g_id'] ][ $depart_id ] = 1; } } while ( list( $gid, $g_perm ) = each( $temp_perm ) ) { $this->ifthd->core->db->construct( array( 'update' => 'groups', 'set' => array( 'g_m_depart_perm' => serialize($g_perm) ), 'where' => array( 'g_id', '=', $gid ), ) ); $this->ifthd->core->db->execute(); } #============================= # Rebuild Cache #============================= $this->ifthd->rebuild_dprt_cache(); $this->ifthd->rebuild_group_cache(); #============================= # Redirect #============================= #$this->ifthd->skin->redirect( '?section=manage&act=depart&code=list', 'add_depart_success' ); $this->list_departs( '', 'The department has been successfully added.' ); } #======================================= # @ Do Edit # Edit a department. #======================================= function do_edit() { #============================= # Security Checks #============================= if ( file_exists( HD_SRC .'pop3.php' ) ) { $pop3 = 1; } $this->ifthd->input['id'] = intval( $this->ifthd->input['id'] ); if ( ! $this->ifthd->member['acp']['manage_depart_edit'] ) { $this->ifthd->skin->error('no_perm'); } $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'where' => array( 'id', '=', $this->ifthd->input['id'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( ! $this->ifthd->core->db->get_num_rows() ) { $this->ifthd->skin->error('no_department'); } if ( ! $this->ifthd->input['name'] ) { $this->edit_depart('Please enter a name.'); } if ( ! $this->ifthd->input['description'] ) { $this->edit_depart('Please enter a description.'); } if ( ! is_array( $this->ifthd->input['group_perm'] ) ) { $this->edit_depart('Please select some group permissions.'); } if ( $this->ifthd->input['email_pipe'] ) { if ( ! $this->ifthd->validate_email( $this->ifthd->input['incoming_email'] ) ) { $this->edit_depart('Please enter a valid incoming email address.'); } $this->ifthd->core->db->construct( array( 'select' => array( 'id' ), 'from' => 'departments', 'where' => array( array( 'incoming_email', '=', $this->ifthd->input['incoming_email'] ), array( 'id', '!=', $this->ifthd->input['id'], 'and' ) ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( $this->ifthd->core->db->get_num_rows() ) { $this->edit_depart('That incoming email address is already used for another department. Please choose a different email.'); } } #============================= # Edit Department #============================= $db_array = array( 'name' => $this->ifthd->input['name'], 'description' => $this->ifthd->input['description'], 'can_escalate' => $this->ifthd->input['can_escalate'], 'escalate_depart' => $this->ifthd->input['escalate_depart'], 'escalate_wait' => $this->ifthd->input['escalate_wait'], 'auto_close' => $this->ifthd->input['auto_close'], 'ticket_own_close' => $this->ifthd->input['ticket_own_close'], 'ticket_own_reopen' => $this->ifthd->input['ticket_own_reopen'], 'close_reason' => $this->ifthd->input['close_reason'], 'can_attach' => $this->ifthd->input['can_attach'], 'email_pipe' => $this->ifthd->input['email_pipe'], 'guest_pipe' => $this->ifthd->input['guest_pipe'], 'incoming_email' => $this->ifthd->input['incoming_email'], 'auto_assign' => $this->ifthd->input['auto_assign'], ); if ( $pop3 ) { $db_array['email_pop3'] = $this->ifthd->input['email_pop3']; $db_array['pop3_host'] = $this->ifthd->input['pop3_host']; $db_array['pop3_user'] = $this->ifthd->input['pop3_user']; $db_array['pop3_pass'] = $this->ifthd->input['pop3_pass']; } $this->ifthd->core->db->construct( array( 'update' => 'departments', 'set' => $db_array, 'where' => array( 'id', '=', $this->ifthd->input['id'] ), ) ); $this->ifthd->core->db->execute(); $this->ifthd->log( 'admin', "Department Edited '". $this->ifthd->input['name'] ."'", 1, $this->ifthd->input['id'] ); #============================= # Generate Permissions #============================= if ( is_array( $this->ifthd->input['group_perm'] ) ) { while ( list( , $mdperm ) = each( $this->ifthd->input['group_perm'] ) ) { $m_depart_perm[ $mdperm ] = 1; } } $this->ifthd->core->db->construct( array( 'select' => array( 'g_id', 'g_m_depart_perm' ), 'from' => 'groups', ) ); $this->ifthd->core->db->execute(); if ( $this->ifthd->core->db->get_num_rows() ) { while ( $g = $this->ifthd->core->db->fetch_row() ) { $temp_perm[ $g['g_id'] ] = unserialize( $g['g_m_depart_perm'] ); } } while ( list( $gid, $g_perm ) = each( $temp_perm ) ) { if ( $m_depart_perm[ $gid ] ) { $g_perm[ $this->ifthd->input['id'] ] = 1; } else { $g_perm[ $this->ifthd->input['id'] ] = 0; } $this->ifthd->core->db->construct( array( 'update' => 'groups', 'set' => array( 'g_m_depart_perm' => serialize($g_perm) ), 'where' => array( 'g_id', '=', $gid ), ) ); $this->ifthd->core->db->execute(); } #============================= # Rebuild Cache #============================= $this->ifthd->rebuild_dprt_cache(); $this->ifthd->rebuild_group_cache(); #============================= # Redirect #============================= #$this->ifthd->skin->redirect( '?section=manage&act=depart&code=list', 'edit_depart_success' ); $this->list_departs( '', 'The department has been successfully updated.' ); } #======================================= # @ Do Delete # Delete a department. #======================================= function do_delete() { #============================= # Security Checks #============================= $this->ifthd->input['id'] = intval( $this->ifthd->input['id'] ); if ( ! $this->ifthd->member['acp']['manage_depart_delete'] ) { $this->ifthd->skin->error('no_perm'); } $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'where' => array( 'id', '=', $this->ifthd->input['id'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( ! $this->ifthd->core->db->get_num_rows() ) { $this->ifthd->skin->error('no_department'); } $da = $this->ifthd->core->db->fetch_row(); #============================= # Perform Our Action #============================= if ( $this->ifthd->input['action'] == 1 ) { $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'where' => array( 'id', '=', $da['id'] ), 'limit' => array( 0,1 ), ) ); $this->ifthd->core->db->execute(); if ( ! $this->ifthd->core->db->get_num_rows() ) { $this->ifthd->skin->error('no_department'); } $d = $this->ifthd->core->db->fetch_row(); $this->ifthd->core->db->construct( array( 'update' => 'tickets', 'set' => array( 'did' => $d['id'], 'dname' => $d['name'] ), 'where' => array( 'did', '=', $da['id'] ), ) ); $this->ifthd->core->db->execute(); } elseif ( $this->ifthd->input['action'] == 2 ) { $this->ifthd->core->db->construct( array( 'delete' => 'tickets', 'where' => array( 'did', '=', $da['id'] ), ) ); $this->ifthd->core->db->execute(); } #============================= # Delete Department #============================= $this->ifthd->core->db->construct( array( 'delete' => 'departments', 'where' => array( 'id', '=', $da['id'] ), 'limit' => array( 1 ), ) ); $this->ifthd->core->db->execute(); $this->ifthd->log( 'admin', "Department Deleted '". $da['name'] ."'", 2, $da['id'] ); #============================= # Rebuild Cache #============================= $this->ifthd->rebuild_dprt_cache(); #============================= # Redirect #============================= #$this->ifthd->skin->redirect( '?section=manage&act=depart&code=list', 'delete_depart_success' ); $this->list_departs( 'The department has been successfully deleted.' ); } #======================================= # @ Reorder Departmenets # Show reoarder departments form. #======================================= function reorder_departs() { #============================= # Security Checks #============================= if ( ! $this->ifthd->member['acp']['manage_depart_reorder'] ) { $this->ifthd->skin->error('no_perm'); } #============================= # Grab Departments #============================= $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'order' => array( 'position' => 'asc' ), ) ); $this->ifthd->core->db->execute(); $depart_rows = ""; // Initialize for Security $row_count = 0; // Initialize for Security if ( $this->ifthd->core->db->get_num_rows() ) { while( $d = $this->ifthd->core->db->fetch_row() ) { $row_count ++; ( $row_count & 1 ) ? $row_class = 'option1-med' : $row_class = 'option2-med'; #============================= # Fix Up Information #============================= $d['description'] = $this->ifthd->shorten_str( $d['description'], 80, 1 ); if ( $error ) { $cur_pos = $this->ifthd->input[ 'pos_'. $d['id'] ]; } else { $cur_pos = $d['position']; } $depart_rows .= "<div id='d_{$d['id']}' class='{$row_class}' style='cursor:move'>{$d['name']} (<span class='desc'>{$d['description']}</span>)</div>"; } } #============================= # Do Output #============================= $this->output = "<form action='<! HD_URL !>/admin.php?section=manage&act=depart&code=doreorder' method='post' onsubmit='get_order()'> <input type='hidden' name='order' id='order' value='' /> <div class='groupbox'>Reordering Departments</div> <div class='subbox'>To reorder departments, simply click and drag the department to the desired position.</div> <div id='draggable'> ". $depart_rows ." </div> <div class='formtail'><input type='submit' name='submit' id='reorder' value='Reorder Departments' class='button' /></div> </form> <script type='text/javascript' language='javascript'> Sortable.create( 'draggable', {tag:'div',constraint:'vertical'} ) function get_order() { order = get_by_id('order'); order.value = Sortable.serialize('draggable'); } </script>"; $this->ifthd->skin->add_output( $this->output ); $this->nav = array( "<a href='<! HD_URL !>/admin.php?section=manage'>Management</a>", "<a href='<! HD_URL !>/admin.php?section=manage&act=depart'>Departments</a>", "Reorder Departments", ); $this->ifthd->skin->do_output( array( 'nav' => $this->nav, 'title' => 'Manage Departments' ) ); } #======================================= # @ Do Reorder # Reorder departments. #======================================= function do_reorder() { #============================= # Security Checks #============================= if ( ! $this->ifthd->member['acp']['manage_depart_reorder'] ) { $this->ifthd->skin->error('no_perm'); } $raw_order = str_replace( '&', '&', $this->ifthd->input['order'] ); parse_str( $raw_order, $order ); $final_order = array(); // Initialize for Security $depart_count = 0; // Initialize for Security while( list( , $did ) = each( $order['draggable'] ) ) { $depart_count ++; $final_order[ $did ] = $depart_count; } #============================= # Reorder Departments #============================= $this->ifthd->core->db->construct( array( 'select' => 'all', 'from' => 'departments', 'order' => array( 'position' => 'asc' ), ) ); $sel_dep = $this->ifthd->core->db->execute(); $depart_rows = ""; // Initialize for Security if ( $this->ifthd->core->db->get_num_rows($sel_dep) ) { while( $d = $this->ifthd->core->db->fetch_row($sel_dep) ) { if ( $d['position'] != intval( $final_order[ $d['id'] ] ) ) { $this->ifthd->core->db->construct( array( 'update' => 'departments', 'set' => array( 'position' => intval( $final_order[ $d['id'] ] ) ), 'where' => array( 'id', '=', $d['id'] ), ) ); $this->ifthd->core->db->execute(); } } } $this->ifthd->log( 'admin', "Departments Reordered" ); #============================= # Rebuild Cache #============================= $this->ifthd->rebuild_dprt_cache(); #============================= # Redirect #============================= #$this->ifthd->skin->redirect( '?section=manage&act=depart&code=list', 'reorder_depart_success' ); $this->list_departs( '', 'The departments have been successfully reordered. '); }
}
?>
Sorry but TrellisDesk is not maintained and not developed anymore.
1- Manage Departments->Allow escalation ->Escalate To->select department ->Escalate Wait Time-> here i mention 1 hour ...
put only numeric vale in this field ,
after wait 1 hour .. ticket did't escalate to higher department ..
i wish if my ticket auto escalate to another stuff .. i dont want manual assign.. to staff ..
solution please
There is code ..
<?php
/*
======================================================
| Trellis Desk | ===================================== | By DJ Tarazona (dj@accord5.com) | (c) 2010 ACCORD5 | http://www.trellisdesk.com/ | ===================================== | Email: sales@accord5.com
======================================================
| @ Version: v1.0.4 Final Build 10440094 | @ Version Int: 104.4.0.094 | @ Version Num: 10440094 | @ Build: 0094
======================================================
| | Admin Departments
======================================================
*/
class ad_depart {
}
?>