public function save_ticket($ticket_id, $data) { if (isset($data['website_id']) && $data['website_id']) { $website = module_website::get_website($data['website_id']); $data['customer_id'] = $website['customer_id']; } if (isset($data['user_id']) && $data['user_id']) { $user = module_user::get_user($data['user_id'], false); if (!isset($data['customer_id']) || !$data['customer_id']) { $data['customer_id'] = $user['customer_id']; } } if ((int) $ticket_id > 0) { $existing_ticket_data = $this->get_ticket($ticket_id); } else { $existing_ticket_data = array(); } if (isset($data['change_assigned_user_id']) && (int) $data['change_assigned_user_id'] > 0) { // check if we're realling changing the user. if ($ticket_id > 0) { if ($existing_ticket_data['assigned_user_id'] != $data['change_assigned_user_id']) { // they are really changing the user $data['assigned_user_id'] = $data['change_assigned_user_id']; } } else { $data['assigned_user_id'] = $data['change_assigned_user_id']; } module_cache::clear('ticket'); } $ticket_id = update_insert("ticket_id", $ticket_id, "ticket", $data); if ($ticket_id) { // save any extra data if (isset($data['ticket_extra']) && is_array($data['ticket_extra'])) { $available_extra_fields = $this->get_ticket_extras_keys(); foreach ($data['ticket_extra'] as $ticket_data_key_id => $ticket_data_key_value) { if (strlen($ticket_data_key_value) > 0 && isset($available_extra_fields[$ticket_data_key_id])) { // save this one! // hack: addition for encryption module. // bit nasty, but it works. if (class_exists('module_encrypt', false) && isset($available_extra_fields[$ticket_data_key_id]['encrypt_key_id']) && $available_extra_fields[$ticket_data_key_id]['encrypt_key_id'] && strpos($ticket_data_key_value, 'encrypt:') === false && ($available_extra_fields[$ticket_data_key_id]['type'] == 'text' || $available_extra_fields[$ticket_data_key_id]['type'] == 'textarea')) { // encrypt this value using this key. $page_name = 'ticket_extras'; // match the page_name we have in ticket_extra_sidebar.php $input_id = 'ticket_extras_' . $ticket_data_key_id; // match the input id we have in ticket_extra_sidebar.php $ticket_data_key_value = module_encrypt::save_encrypt_value($available_extra_fields[$ticket_data_key_id]['encrypt_key_id'], $ticket_data_key_value, $page_name, $input_id); } // check for existing $existing = get_single('ticket_data', array('ticket_id', 'ticket_data_key_id'), array($ticket_id, $ticket_data_key_id)); if ($existing) { update_insert('ticket_data_id', $existing['ticket_data_id'], 'ticket_data', array('value' => $ticket_data_key_value)); } else { update_insert('ticket_data_id', 'new', 'ticket_data', array('ticket_data_key_id' => $ticket_data_key_id, 'ticket_id' => $ticket_id, 'value' => $ticket_data_key_value)); } } } } $ticket_message_id = false; if (isset($data['new_ticket_message']) && strlen($data['new_ticket_message']) > 1) { // post a new reply to this message. // who are we replying to? $ticket_data = $this->get_ticket($ticket_id); if (isset($data['change_status_id']) && $data['change_status_id']) { update_insert("ticket_id", $ticket_id, "ticket", array('status_id' => $data['change_status_id'])); } else { if ($ticket_data['status_id'] == _TICKET_STATUS_RESOLVED_ID || $ticket_data['status_id'] == 7) { $data['change_status_id'] = _TICKET_STATUS_IN_PROGRESS_ID; // change to in progress. } } module_cache::clear('ticket'); // it's either a reply from the admin, or from the user via the web interface. $ticket_data = $this->get_ticket($ticket_id); $logged_in_user = isset($data['force_logged_in_user_id']) ? $data['force_logged_in_user_id'] : false; if (!$logged_in_user) { $logged_in_user = module_security::get_loggedin_id(); if (!$logged_in_user) { $logged_in_user = $ticket_data['user_id']; } } if (!$ticket_data['user_id'] && module_security::get_loggedin_id()) { update_insert('ticket_id', $ticket_id, 'ticket', array('user_id' => module_security::get_loggedin_id())); $ticket_data['user_id'] = module_security::get_loggedin_id(); } $ticket_creator = $ticket_data['user_id']; // echo "creator: $ticket_creator logged in: $logged_in_user"; print_r($ticket_data);exit; //echo "Creator: ".$ticket_data['user_id'] . " logged in ".$logged_in_user;exit; if ($ticket_creator == $logged_in_user) { // we are sending a reply back to the admin, from the end user. self::mark_as_unread($ticket_id); $ticket_message_id = $this->send_reply($ticket_id, $data['new_ticket_message'], $ticket_creator, $ticket_data['assigned_user_id'] ? $ticket_data['assigned_user_id'] : module_config::c('ticket_default_user_id', 1), 'end_user', '', array('private_message' => isset($data['private_message']) && $data['private_message'])); } else { // we are sending a reply back to the ticket user. // admin is allowed to change the status of a message. $from_user_id = $ticket_data['assigned_user_id'] ? $ticket_data['assigned_user_id'] : module_security::get_loggedin_id(); //echo "From $from_user_id to $ticket_creator ";exit; $ticket_message_id = $this->send_reply($ticket_id, $data['new_ticket_message'], $from_user_id, $ticket_creator, 'admin', '', array('private_message' => isset($data['private_message']) && $data['private_message'])); // do we add cc/bcc here? } if ($ticket_message_id && isset($data['change_status_id']) && $data['change_status_id']) { // store the ticket status change here. update_insert("ticket_message_id", $ticket_message_id, "ticket_message", array('status_id' => $data['change_status_id'])); } } if (isset($data['change_status_id']) && $data['change_status_id']) { // we only update this status if the sent reply or send reply and next buttons are clicked. if (isset($_REQUEST['newmsg']) || isset($_REQUEST['newmsg_next'])) { update_insert("ticket_id", $ticket_id, "ticket", array('status_id' => $data['change_status_id'])); } } } module_extra::save_extras('ticket', 'ticket_id', $ticket_id); // automaticall send notification email to assigned staff membeR? if (module_config::c('ticket_auto_notify_staff', 0)) { module_cache::clear('ticket'); $new_ticket_data = self::get_ticket($ticket_id); if ($new_ticket_data['assigned_user_id'] && (!$existing_ticket_data || $existing_ticket_data['assigned_user_id'] != $new_ticket_data['assigned_user_id'])) { // copied from ticket_admin_notify.php // template for sending emails. // are we sending the paid one? or the dueone. $template = module_template::get_template_by_key('ticket_email_notify'); $new_ticket_data['from_name'] = module_security::get_loggedin_name(); $new_ticket_data['ticket_url'] = module_ticket::link_open($ticket_id); $new_ticket_data['ticket_subject'] = $new_ticket_data['subject']; // sending to the staff member. $replace_fields = self::get_replace_fields($new_ticket_data['ticket_id'], $new_ticket_data); $template->assign_values($replace_fields); $template->assign_values($new_ticket_data); $html = $template->render('html'); $email = module_email::new_email(); $email->replace_values = $new_ticket_data + $replace_fields; $email->set_subject($template->description); $email->set_to('user', $new_ticket_data['assigned_user_id']); // do we send images inline? $email->set_html($html); if ($email->send()) { // it worked successfully!! } else { /// log err? } } } module_cache::clear('ticket'); return $ticket_id; }