?> </td> <td valign="top"> <h3><?php echo _l('Ticket Messages'); ?> </h3> <div id="ticket_container" style="<?php echo module_config::c('ticket_scroll', 0) ? ' max-height: 400px; overflow-y:auto;' : ''; ?> "> <?php $ticket_messages = module_ticket::get_ticket_messages($ticket_id); $reply__ine_default = '----- (Please reply above this line) -----'; // incase they change it $reply__ine = module_config::s('ticket_reply_line', $reply__ine_default); $ticket_message_count = count($ticket_messages); $ticket_message_counter = 0; foreach ($ticket_messages as $ticket_message) { if ($ticket_message['private_message']) { continue; } $ticket_message_counter++; $attachments = module_ticket::get_ticket_message_attachments($ticket_message['ticket_message_id']); ?> <div class="ticket_message ticket_message_<?php //echo $ticket['user_id'] == $ticket_message['from_user_id'] ? 'creator' : 'admin';
} } else { $ticket_id = false; if (class_exists('module_security', false)) { module_security::check_page(array('module' => $module->module_name, 'feature' => 'create')); } } if (module_ticket::can_edit_tickets()) { module_ticket::mark_as_read($ticket_id, true); } //$module->pre_menu(); // so the links are re-build and the correct "unread" count is at the top. if (!module_security::can_access_data('ticket', $ticket)) { echo 'Ticket access denied'; exit; } $ticket_messages = module_ticket::get_ticket_messages($ticket['ticket_id'], true); if (!isset($logged_in_user) || !$logged_in_user) { // we assume the user is on the public side. // use the creator id as the logged in id. $logged_in_user = module_security::get_loggedin_id(); } $ticket_creator = $ticket['user_id']; if ($ticket_creator == $logged_in_user) { // we are sending a reply back to the admin, from the end user. $to_user_id = $ticket['assigned_user_id'] ? $ticket['assigned_user_id'] : 1; $from_user_id = $logged_in_user; } else { // we are sending a reply back to the ticket user. $to_user_id = $ticket['user_id']; $from_user_id = $logged_in_user; }
public static function api_filter_ticket($hook, $response, $endpoint, $method) { $response['ticket'] = true; switch ($method) { case 'list': if (class_exists('module_envato', false)) { // todo: filter this in the api filter so we keep envato code in the envato plugin $all_items_rel = module_envato::get_envato_items_rel(); } $search = isset($_REQUEST['search']) && is_array($_REQUEST['search']) ? $_REQUEST['search'] : array(); if (!isset($search['status_id'])) { $search['status_id'] = '2,3,5'; } // new/replied/inprogress $tickets_mysql = module_ticket::get_tickets($search, true); $response['tickets'] = array(); $extra_keys = module_ticket::get_ticket_extras_keys(); while ($ticket = mysql_fetch_assoc($tickets_mysql)) { // return user details along with this ticket $user = module_user::get_user($ticket['user_id'], false, true, true); $ticket['user'] = array(); foreach (array('user_id', 'customer_id', 'vendor_id', 'email', 'name', 'last_name') as $field) { $ticket['user'][$field] = isset($user[$field]) ? $user[$field] : ''; } $staff = module_user::get_user($ticket['assigned_user_id'] ? $ticket['assigned_user_id'] : module_config::c('ticket_default_user_id', 1), false, true, true); $ticket['staff'] = array(); foreach (array('user_id', 'customer_id', 'vendor_id', 'email', 'name', 'last_name') as $field) { $ticket['staff'][$field] = isset($staff[$field]) ? $staff[$field] : ''; } // find the extra data associated with this ticket. $ticket['extra'] = array(); foreach (self::get_ticket_extras($ticket['ticket_id']) as $extra_data) { if (isset($extra_keys[$extra_data['ticket_data_key_id']])) { $ticket['extra'][$extra_keys[$extra_data['ticket_data_key_id']]['key']] = $extra_data['value']; } } if (class_exists('module_envato', false)) { $ticket['user']['envato'] = array(); $ticket['user']['envato']['user'] = array(); $ticket['user']['envato']['purchases'] = array(); $envato_tickets = get_multiple('envato_ticket', array('ticket_id' => $ticket['ticket_id'])); foreach ($envato_tickets as $envato_ticket) { if ($envato_ticket && $envato_ticket['envato_ticket_id']) { if (isset($all_items_rel[$envato_ticket['envato_item_id']]) && $envato_ticket['envato_author_id']) { $envato_author = get_single('envato_author', 'envato_author_id', $envato_ticket['envato_author_id']); $buys = @unserialize($envato_author['purchase_history']); $purchase_history = array(); foreach ($buys as $buy) { $purchase_history[] = $buy; } $ticket['user']['envato']['purchases'][$envato_ticket['envato_item_id']] = array('item_name' => $all_items_rel[$envato_ticket['envato_item_id']], 'envato_item_id' => $envato_ticket['envato_item_id'], 'license_code' => $envato_ticket['license_code']); $ticket['user']['envato']['user'][$envato_author['envato_username']] = array('envato_username' => $envato_author['envato_username'], 'purchase_history' => $purchase_history); } } } } $ticket['url'] = self::link_open($ticket['ticket_id'], false, $ticket); $response['tickets'][] = $ticket; $response['reply_options'] = array(array('title' => 'Mark Thread Resolved', 'field' => array('type' => 'checkbox', 'value' => 1, 'name' => 'resolved', 'checked' => true))); } break; case 'message': $search = isset($_REQUEST['search']) && is_array($_REQUEST['search']) ? $_REQUEST['search'] : array(); $response['tickets'] = array(); if (empty($search['ticket_ids']) && isset($_REQUEST['ticket_ids'])) { $search['ticket_ids'] = explode(',', $_REQUEST['ticket_ids']); } if (isset($search['ticket_ids']) && is_array($search['ticket_ids'])) { foreach ($search['ticket_ids'] as $ticket_id) { $ticket_id = (int) trim($ticket_id); if ($ticket_id) { $messages = module_ticket::get_ticket_messages($ticket_id, false); if ($messages) { foreach ($messages as $message_id => $message) { $user = module_user::get_user($message['from_user_id'], false); $messages[$message_id]['user'] = array(); foreach (array('customer_id', 'vendor_id', 'email', 'name', 'last_name') as $field) { $messages[$message_id]['user'][$field] = isset($user[$field]) ? $user[$field] : ''; } } $response['tickets'][$ticket_id] = $messages; } } } } break; case 'reply': $ticket_id = (int) $_REQUEST['ticket_id']; $message = $_REQUEST['message']; $extra_data = isset($_REQUEST['extra_data']) && is_array($_REQUEST['extra_data']) ? $_REQUEST['extra_data'] : array(); // do we mark is as resolved? similar to bbpress api if ($ticket_id && $message) { // send a reply to this particular message. $ticket_data = self::get_ticket($ticket_id); if ($ticket_data && $ticket_data['ticket_id'] == $ticket_id) { $from_user_id = $ticket_data['assigned_user_id'] ? $ticket_data['assigned_user_id'] : module_config::c('ticket_default_user_id', 1); // send this back in initial api response. $ticket_message_id = self::send_reply($ticket_id, $message, $from_user_id, $ticket_data['user_id'], 'admin'); $response['ticket_message_id'] = $ticket_message_id; if ($ticket_message_id) { if (!empty($extra_data['resolved'])) { update_insert("ticket_message_id", $ticket_message_id, "ticket_message", array('status_id' => _TICKET_STATUS_RESOLVED_ID)); update_insert("ticket_id", $ticket_id, "ticket", array('status_id' => _TICKET_STATUS_RESOLVED_ID)); $response['stat'] = 'Changing status to ' . _TICKET_STATUS_RESOLVED_ID; } else { // change the ticket to in progress update_insert("ticket_message_id", $ticket_message_id, "ticket_message", array('status_id' => _TICKET_STATUS_IN_PROGRESS_ID)); update_insert("ticket_id", $ticket_id, "ticket", array('status_id' => _TICKET_STATUS_IN_PROGRESS_ID)); $response['stat'] = 'Changing status to ' . _TICKET_STATUS_IN_PROGRESS_ID; } } module_cache::clear('ticket'); } } if (empty($response['ticket_message_id'])) { $response['error'] = true; $response['message'] = 'Failed to send message reply.'; } break; } return $response; }