function create($data) { $db = JFactory::getDBO(); $base_data = array('ticket_status_id' => FSS_Ticket_Helper::GetStatusID('def_open'), 'opened' => date("Y-m-d H:i:s"), 'lastupdate' => date("Y-m-d H:i:s")); foreach ($base_data as $key => $value) { if (!array_key_exists($key, $data)) { $data[$key] = $value; } } $keys = array(); $values = array(); foreach ($data as $key => $value) { $keys[] = $db->escape($key); $values[] = "'" . $db->escape($value) . "'"; } $qry = "INSERT INTO #__fss_ticket_ticket (" . implode(", ", $keys) . ") VALUES (" . implode(", ", $values) . ")"; $db->setQuery($qry); $db->query(); $id = $db->insertid(); $this->load($id, true); $fields = FSSCF::GetCustomFields($this->id, $this->prod_id, $this->ticket_dept_id); FSSCF::StoreFields($fields, $this->id); $this->reference = FSS_Ticket_Helper::createRef($this->id); $qry = "UPDATE #__fss_ticket_ticket SET reference = '" . $db->escape($this->reference) . "' WHERE id = " . (int) $id; $db->setQuery($qry); $db->query(); }
function parseRequest() { $this->prodid = FSS_Input::getInt('prodid'); $this->deptid = FSS_Input::getInt('deptid'); $this->catid = FSS_Input::getInt('catid'); $this->mode = FSS_Input::getInt('mode'); $def_open = FSS_Ticket_Helper::GetStatusID("def_open"); $this->status = FSS_Input::getCmd('status', $def_open); }
function init() { $user = JFactory::getUser(); $this->userid = $user->get('id'); $this->model = $this->getModel("admin_support"); if (!FSS_Permission::auth("fss.handler", "com_fss.support_admin")) { return FSS_Admin_Helper::NoPerm(); } $this->def_open = FSS_Ticket_Helper::GetStatusID('def_open'); $this->ticket_view = FSS_Input::getCmd('tickets', $this->def_open); $this->count = SupportTickets::getTicketCount(); FSS_Helper::StylesAndJS(array('calendar', 'base64')); if (Task_Helper::HandleTasks($this)) { return false; } return true; }
function delete() { // load in tickets to do $ticketid = FSS_Input::getInt('ticketid'); $tickets = FSS_Input::getCmd('tickets'); $def_archive = FSS_Ticket_Helper::GetStatusID('def_archive'); if ($ticketid > 0) { $ticket = new SupportTicket(); if ($ticket->load($ticketid)) { $ticket->delete(); } } else { if ($tickets != '') { $tickets = new SupportTickets(); $tickets->limitstart = 0; $tickets->limit = 100; $tickets->loadTicketsByStatus($tickets); foreach ($tickets->tickets as $ticket) { $ticket->delete(); } } } JFactory::getApplication()->redirect($_SERVER['HTTP_REFERER']); }
function listTickets() { // load list of tickets to display and then do the generic ticket list page $pathway = JFactory::getApplication()->getPathway(); $pathway->addItem(JText::_("SUPPORT")); $def_open = FSS_Ticket_Helper::GetStatusID('def_open'); $tickets = FSS_Input::getCmd('tickets', $def_open); $this->ticket_list = new SupportTickets(); $this->ticket_list->limitstart = $this->limitstart; $this->ticket_list->limit = $this->limit; $this->ticket_list->loadTicketsByStatus($tickets); $this->ticket_count = $this->ticket_list->ticket_count; // get refresh settings $this->refresh = FSS_Input::getInt("refresh"); $this->do_refresh = FSS_Settings::Get('support_admin_refresh'); $this->pagination = new JPaginationEx($this->ticket_count, $this->limitstart, $this->limit); if (!$this->refresh) { FSS_Helper::IncludeModal(); } $this->displayTicketList(); if ($this->refresh) { exit; } }
function saveTicket() { $subject = FSS_Input::getString('subject'); $body = FSS_Input::getBBCode('body'); $prodid = FSS_Input::getInt('prodid'); $deptid = FSS_Input::getInt('deptid'); $catid = FSS_Input::getInt('catid'); $priid = FSS_Input::getInt('priid'); $handler = FSS_Input::getInt('handler'); $user = JFactory::getUser(); $userid = $user->get('id'); $name = ""; $session = JFactory::getSession(); $this->admin_create = 0; if ($session->Get('admin_create')) { $this->admin_create = $session->Get('admin_create'); } if ($this->admin_create == 1) { $this->admin_create = 1; $userid = $session->Get('admin_create_user_id'); } else { if ($this->admin_create == 2) { $userid = 0; } } $db = JFactory::getDBO(); if ($priid < 1) { $priid = FSS_Settings::get('support_default_priority'); } $ticket['subject'] = $subject; $ticket['body'] = $body; $ticket['priid'] = $priid; $ticket['handler'] = $handler; $ok = true; $errors['subject'] = ''; $errors['body'] = ''; $errors['cat'] = ''; $errors['captcha'] = ''; $fields = FSSCF::GetCustomFields(0, $prodid, $deptid); if (FSS_Settings::get('support_subject_message_hide') == "subject") { $ticket['subject'] = substr(strip_tags($ticket['body']), 0, 40); $subject = $ticket['subject']; } if (FSS_Settings::get('support_altcat')) { $cats = $this->get('Cats'); if (count($cats) > 0 && FSS_Input::getInt('catid') < 1) { $errors['cat'] = JText::_("YOU_MUST_SELECT_A_CATEGORY"); $ok = false; } } if ($body == "" && FSS_Settings::get('support_subject_message_hide') != "message" && FSS_Settings::get('support_subject_message_hide') != "both") { $errors['body'] = JText::_("YOU_MUST_ENTER_A_MESSAGE_FOR_YOUR_SUPPORT_TICKET"); $ok = false; } if (!FSSCF::ValidateFields($fields, $errors)) { $ok = false; } $email = ""; $password = ""; $now = FSS_Helper::CurDate(); $this->sortCaptchaType(); $captcha = new FSS_Captcha(); if (!$captcha->ValidateCaptcha('support_captcha_type')) { $errors['captcha'] = JText::_("INVALID_SECURITY_CODE"); $ok = false; } if ($userid < 1) { $email = FSSJ3Helper::getEscaped($db, $session->Get('ticket_email')); if ($session->Get('ticket_name')) { $name = FSSJ3Helper::getEscaped($db, $session->Get('ticket_name')); } if ($email == "" && $this->admin_create != 2) { $ok = false; } else { $password = FSS_Helper::createRandomPassword(); $session->Set('ticket_pass', $password); } } // assign handler to ticket $admin_id = $handler; if (!$admin_id) { $admin_id = FSS_Ticket_Helper::AssignHandler($prodid, $deptid, $catid); } $now = FSS_Helper::CurDate(); $def_open = FSS_Ticket_Helper::GetStatusID('def_open'); if (FSS_Settings::get('support_subject_format') != "") { $parser = new FSSParser(); foreach ($_POST as $var => $value) { $parser->setVar($var, FSS_Input::GetString($var)); } foreach ($fields as $field) { $parser->setVar('custom_' . $field['alias'], FSS_Input::GetString('custom_' . $field['id'])); } $user = JFactory::getUser($userid); $parser->setVar('userid', $userid); $parser->setVar('username', $user->username); $parser->setVar('name', $user->name); $parser->setVar('email', $user->email); $parser->setVar('subject', $subject); $parser->SetVar('product', FSS_EMail::GetProduct($prodid)); $parser->SetVar('department', FSS_EMail::GetDepartment($deptid)); $parser->SetVar('category', FSS_EMail::Getcategory($catid)); $parser->SetVar('date', FSS_Helper::Date($now, FSS_DATE_SHORT)); $parser->SetVar('time', FSS_Helper::Date($now, FSS_DATETIME_SHORT)); $parser->SetTemplate(FSS_Settings::get('support_subject_format')); $result = $parser->Parse(); if (trim($result) == "") { $sj = array(); foreach ($fields as $field) { $sj[] = FSS_Input::GetString('custom_' . $field['id']); } $result = implode(", ", $sj); } $ticket['subject'] = $result; $subject = $ticket['subject']; if ($subject == "") { $errors['subject'] = JText::_("YOU_MUST_ENTER_A_SUBJECT_FOR_YOUR_SUPPORT_TICKET"); $ok = false; } } if ($ok) { $qry = "INSERT INTO #__fss_ticket_ticket (reference, ticket_status_id, ticket_pri_id, ticket_cat_id, ticket_dept_id, prod_id, title, opened, lastupdate, user_id, admin_id, email, password, unregname, lang) VALUES "; $qry .= "('', {$def_open}, '" . FSSJ3Helper::getEscaped($db, $priid) . "', '" . FSSJ3Helper::getEscaped($db, $catid) . "', '" . FSSJ3Helper::getEscaped($db, $deptid) . "', '" . FSSJ3Helper::getEscaped($db, $prodid) . "', '" . FSSJ3Helper::getEscaped($db, $subject) . "', '{$now}', '{$now}', '" . FSSJ3Helper::getEscaped($db, $userid) . "', '" . FSSJ3Helper::getEscaped($db, $admin_id) . "', '{$email}', '" . FSSJ3Helper::getEscaped($db, $password) . "', '{$name}', '" . JFactory::getLanguage()->getTag() . "')"; $db->setQuery($qry); $db->Query(); $this->ticketid = $db->insertid(); $ref = FSS_Ticket_Helper::createRef($this->ticketid); $session->Set('ticket_reference', $ref); $qry = "UPDATE #__fss_ticket_ticket SET reference = '" . FSSJ3Helper::getEscaped($db, $ref) . "' WHERE id = '" . FSSJ3Helper::getEscaped($db, $this->ticketid) . "'"; $db->setQuery($qry); $db->Query(); if ($this->admin_create) { $curuser = JFactory::getUser(); $premsg = date("Y-m-d H:i:s", strtotime($now) - 1); $msg = JText::sprintf('TICKET_OPENED_BY', $curuser->name, $curuser->username); $qry = "INSERT INTO #__fss_ticket_messages (ticket_ticket_id, subject, body, user_id, posted, admin) VALUES ('"; $qry .= FSSJ3Helper::getEscaped($db, $this->ticketid) . "','" . FSSJ3Helper::getEscaped($db, $subject) . "','" . FSSJ3Helper::getEscaped($db, $msg) . "','" . FSSJ3Helper::getEscaped($db, $curuser->id) . "','{$premsg}', 6)"; $db->setQuery($qry); $db->Query(); } $qry = "INSERT INTO #__fss_ticket_messages (ticket_ticket_id, subject, body, user_id, posted) VALUES ('"; $qry .= FSSJ3Helper::getEscaped($db, $this->ticketid) . "','" . FSSJ3Helper::getEscaped($db, $subject) . "','" . FSSJ3Helper::getEscaped($db, $body) . "','" . FSSJ3Helper::getEscaped($db, $userid) . "','{$now}')"; $db->setQuery($qry); $db->Query(); $messageid = $db->insertid(); FSSCF::StoreFields($fields, $this->ticketid); // store tags if there are any posted $tags_input = FSS_Input::getString('tags'); $parts = explode("|", $tags_input); foreach ($parts as $part) { $tag = trim($part); if (!$tag || $tag == "") { continue; } $tags[] = $tag; $qry = "INSERT INTO #__fss_ticket_tags (ticket_id, tag) VALUES ('" . $this->ticketid . "', '" . $db->escape($tag) . "')"; $db->setQuery($qry); $db->Query(); } $t = new SupportTicket(); $t->load($this->ticketid, true); $files = $t->addFilesFromPost($messageid, $userid); $t->stripImagesFromMessage($messageid); $subject = FSS_Input::getString('subject'); $body = FSS_Input::getBBCode('body'); $action_name = "User_Open"; $action_params = array('subject' => $subject, 'user_message' => $body, 'files' => $files); SupportActions::DoAction($action_name, $t, $action_params); // additional users and emails if posted if ($this->admin_create > 0) { $additionalusers = JRequest::getVar('additionalusers'); $additionalusers = explode(",", $additionalusers); $t->addCC($additionalusers, 0, 0); $additionalemails = JRequest::getVar('additionalemails'); $additionalemails = explode(",", $additionalemails); foreach ($additionalemails as $email) { $email = trim($email); if ($email == "") { continue; } $t->addEMailCC($email); } if ($t->admin_id != JFactory::getUser()->id) { $t->addCC(JFactory::getUser()->id, 1, 0); } } $this->cleanAdminCreate(); // if related is passed as part of ticket open, relate the 2 tickets $related = JRequest::getVar('related'); if ($related > 0) { $t->addRelated($related); } } $this->errors = $errors; $this->ticket = $ticket; return $ok; }
<?php if ($this->merge) { ?> <?php include $this->snippet(JPATH_SITE . DS . 'components' . DS . 'com_fss' . DS . 'views' . DS . 'admin_support' . DS . 'snippet' . DS . '_merge_notice.php'); ?> <?php } ?> <?php include $this->snippet(JPATH_SITE . DS . 'components' . DS . 'com_fss' . DS . 'views' . DS . 'admin_support' . DS . 'snippet' . DS . '_search.php'); ?> <?php $def_archive = FSS_Ticket_Helper::GetStatusID('def_archive'); $closed = FSS_Ticket_Helper::GetClosedStatus(); if (array_key_exists($this->ticket_view, $closed) || $this->ticket_view == "closed") { ?> <p> <a class="btn btn-default btn-small" href="<?php echo FSSRoute::_('index.php?option=com_fss&view=admin_support&task=archive.archive&tickets=' . $this->ticket_view); ?> " onclick="return confirm('<?php echo JText::_('ARCHIVE_CONFIRM'); ?> ');"> <?php echo JText::_("ARCHIVE_ALL_CLOSED_TICKETS"); ?> </a>
static function &getTicketCount($foradmin = true, $current_handler_only = false) { $key = 0; if ($foradmin) { $key += 1; } if ($current_handler_only) { $key += 2; } if (empty(self::$counts)) { self::$counts = array(); } if (!array_key_exists($key, self::$counts)) { $db = JFactory::getDBO(); $query = "SELECT count( * ) AS count, ticket_status_id FROM #__fss_ticket_ticket as t WHERE 1 "; $query .= " AND " . SupportUsers::getAdminWhere(); if ($foradmin) { $query .= " AND " . SupportSource::admin_list_sql(); } else { $query .= " AND " . SupportSource::user_list_sql(); } if ($current_handler_only) { $query .= " AND admin_id = " . JFactory::getUser()->id; } $query .= " GROUP BY ticket_status_id"; $db->setQuery($query); $rows = $db->loadAssocList(); $out = array(); FSS_Ticket_Helper::GetStatusList(); foreach (FSS_Ticket_Helper::$status_list as $status) { $out[$status->id] = 0; } if (count($rows) > 0) { foreach ($rows as $row) { $out[$row['ticket_status_id']] = $row['count']; } } // work out counts for allopen, closed, all, archived $archived = FSS_Ticket_Helper::GetStatusID("def_archive"); $out['archived'] = 0; if (array_key_exists($archived, $out)) { $out['archived'] = $out[$archived]; } $allopen = FSS_Ticket_Helper::GetStatusIDs("is_closed", true); $out['allopen'] = 0; foreach ($allopen as $id) { if (array_key_exists($id, $out)) { $out['allopen'] += $out[$id]; } } $allclosed = FSS_Ticket_Helper::GetClosedStatus(); $out['allclosed'] = 0; foreach ($allclosed as $id) { if (array_key_exists($id, $out)) { $out['allclosed'] += $out[$id]; } } $all = FSS_Ticket_Helper::GetStatusIDs("def_archive", true); $out['all'] = 0; foreach ($all as $id) { if (array_key_exists($id, $out)) { $out['all'] += $out[$id]; } } self::$counts[$key] = $out; } return self::$counts[$key]; }
* @author Freestyle Joomla * @copyright (C) 2013 Freestyle Joomla * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html **/ defined('_JEXEC') or die; ?> <div class="control-group"> <label class="control-label"><?php echo JText::_("NEW_STATUS"); ?> </label> <div class="controls"> <select name="reply_status" class="select-color"> <?php FSS_Ticket_Helper::GetStatusList(); $def_admin = FSS_Ticket_Helper::GetStatusID('def_admin'); if ($def_admin < 1) { $def_admin = $this->ticket->ticket_status_id; } FSS_Translate_Helper::Tr(FSS_Ticket_Helper::$status_list); foreach (FSS_Ticket_Helper::$status_list as $status) { if ($status->def_archive) { continue; } if (!$this->can_Close() && $status->is_closed) { continue; } $sel = $status->id == $def_admin ? "SELECTED" : ""; echo "<option value='{$status->id}' style='color:{$status->color};' {$sel}>{$status->title}</option>"; } ?>
function Execute($aparams) { $debug = 0; $this->Log("Auto closing tickets"); $db = JFactory::getDBO(); $can_close = FSS_Ticket_Helper::GetStatusIDs('can_autoclose'); $def_close = FSS_Ticket_Helper::GetStatusID('def_closed'); if ($debug) { $this->Log("Can Close : " . implode(", ", $can_close)); } if ($debug) { $this->Log("Close To : " . $def_close); } $now = FSS_Helper::CurDate(); // if no audit log to be created, then can just close all tickets in a single query, this is quicker! if (!$aparams['addaudit'] && !$aparams['emailuser']) { if ($debug) { echo "No audit required, just closing<br>"; } $qry = "UPDATE #__fss_ticket_ticket SET closed = '{$now}', ticket_status_id = {$def_close} WHERE DATE_ADD(`lastupdate` ,INTERVAL " . FSSJ3Helper::getEscaped($db, $aparams['closeinterval']) . " DAY) < '{$now}' AND ticket_status_id IN (" . implode(", ", $can_close) . ")"; $db->setQuery($qry); $db->Query(); // UNCOMMENT $rows = $db->getAffectedRows(); if ($debug) { $this->Log($qry); } // COMMENT $this->Log("Auto closed {$rows} tickets"); return; } $qry = "SELECT * FROM #__fss_ticket_ticket WHERE DATE_ADD(`lastupdate` ,INTERVAL " . FSSJ3Helper::getEscaped($db, $aparams['closeinterval']) . " DAY) < '{$now}' AND ticket_status_id IN (" . implode(", ", $can_close) . ")"; $db->setQuery($qry); if ($debug) { $this->Log($qry); } $rows = $db->loadAssocList(); $this->Log("Found " . count($rows) . " tickets to close"); if (count($rows) == 0) { return; } $ids = array(); $auditrows = array(); foreach ($rows as $row) { $ids[] = FSSJ3Helper::getEscaped($db, $row['id']); if ($aparams['addaudit']) { // add audit log to the ticket $auditqry[] = "(" . FSSJ3Helper::getEscaped($db, $row['id']) . ", 'Audit Message', 'Ticket auto-closed after " . FSSJ3Helper::getEscaped($db, $aparams['closeinterval']) . " days of inactivity', 0, 3, '{$now}')"; } if ($aparams['emailuser']) { FSS_EMail::Admin_AutoClose($row); } } if ($aparams['addaudit']) { $qry = "INSERT INTO #__fss_ticket_messages (ticket_ticket_id, subject, body, user_id, admin, posted) VALUES \n"; $qry .= implode(",\n ", $auditqry); if ($debug) { $this->Log("Saving Audit Messages"); } if ($debug) { $this->Log($qry); } $db->setQuery($qry); $db->Query(); } $qry = "UPDATE #__fss_ticket_ticket SET closed = '{$now}', ticket_status_id = {$def_close} WHERE id IN (" . implode(", ", $ids) . ")"; if ($debug) { $this->Log("Closing Tickets"); } if ($debug) { $this->Log($qry); } $db->setQuery($qry); $db->Query(); $this->Log("Closed " . count($rows) . " tickets"); /*echo "<pre style='background-color:white;'>"; echo $qry; echo "</pre>";*/ }
function &getTicketCount() { $user = JFactory::getUser(); $userid = $user->get('id'); if (empty(self::$ticket_counts)) { self::$ticket_counts = array(); } if (array_key_exists($userid, self::$ticket_counts)) { $this->_counts = self::$ticket_counts[$userid]; return $this->_counts; } $uidlist = $this->getUIDS($userid); $tidlist = $this->getTIDS($userid); $db = JFactory::getDBO(); $query = "SELECT count( * ) AS count, ticket_status_id FROM #__fss_ticket_ticket WHERE (user_id IN (" . implode(", ", $uidlist) . ") OR id IN ( " . implode(", ", $tidlist) . ")) "; $query .= " AND " . SupportSource::user_list_sql(); $query .= " GROUP BY ticket_status_id"; $db->setQuery($query); $rows = $db->loadAssocList(); $out = array(); FSS_Ticket_Helper::GetStatusList(); foreach (FSS_Ticket_Helper::$status_list as $status) { $out[$status->id] = 0; } if (count($rows) > 0) { foreach ($rows as $row) { $out[$row['ticket_status_id']] = $row['count']; } } // work out counts for allopen, closed, all, archived $archived = FSS_Ticket_Helper::GetStatusID("def_archive"); if (array_key_exists($archived, $out)) { $out['archived'] = $out[$archived]; } else { $out['archived'] = 0; } $allopen = FSS_Ticket_Helper::GetStatusIDs("is_closed", true); $out['open'] = 0; foreach ($allopen as $id) { if (array_key_exists($id, $out)) { $out['open'] += $out[$id]; } } $allclosed = FSS_Ticket_Helper::GetClosedStatus(); $out['closed'] = 0; foreach ($allclosed as $id) { if (array_key_exists($id, $out)) { $out['closed'] += $out[$id]; } } $all = FSS_Ticket_Helper::GetStatusIDs("def_archive"); $out['all'] = 0; foreach ($rows as $row) { if ($row['ticket_status_id'] != $all) { $out['all'] += $row['count']; } } $this->_counts = $out; self::$ticket_counts[$userid] = $out; return $this->_counts; }
function merge() { $source_id = FSS_Input::getInt('source_id'); $dest_id = FSS_Input::getInt('dest_id'); if ($source_id < 1) { return $this->cancel(); } if ($dest_id < 1) { return $this->cancel(); } $source = new SupportTicket(); if (!$source->load($source_id)) { return $this->cancel(); } $dest = new SupportTicket(); if (!$dest->load($dest_id)) { return $this->cancel(); } //print_p($source); // need to copy messages $db = JFactory::getDBO(); $sql = "SELECT * FROM #__fss_ticket_messages WHERE ticket_ticket_id = " . $db->escape($source_id); $db->setQuery($sql); $messages = $db->loadObjectList(); $msg_map = array(); foreach ($messages as $message) { $old_id = $message->id; unset($message->id); $message->ticket_ticket_id = $dest_id; $new_id = $this->Insert("#__fss_ticket_messages", $message); $msg_map[$old_id] = $new_id; } // add time $qry = "UPDATE #__fss_ticket_ticket SET timetaken = timetaken + " . (int) $source->timetaken . " WHERE id = " . $dest_id; $db->setQuery($qry); $db->Query(); if ($source->timetaken > 0) { $qry = "UPDATE #__fss_ticket_ticket SET timetaken = 0 WHERE id = " . $source_id; $db->setQuery($qry); $db->Query(); $source->addAuditNote("Time taken cleared as merged with another ticket"); } // copy files $sql = "SELECT * FROM #__fss_ticket_attach WHERE ticket_ticket_id = " . $db->escape($source_id); $db->setQuery($sql); $attachments = $db->loadObjectList(); foreach ($attachments as $attachment) { unset($attachment->id); $attachment->ticket_ticket_id = $dest_id; // change id to that of new message if (array_key_exists($attachment->message_id, $msg_map)) { $attachment->message_id = $msg_map[$attachment->message_id]; } $new_id = $this->Insert("#__fss_ticket_attach", $attachment); } // add audit messages to both $source->addAuditNote("Ticket merged into another ticket then closed. Dest Ticket: " . $dest->reference . " - " . $dest->title); $dest->addAuditNote("Ticket merged into this one. Merged Ticket: " . $source->reference . " - " . $source->title); // close source ticket $closed = FSS_Ticket_Helper::GetStatusID('def_closed'); // add merge tag to source ticket $now = FSS_Helper::CurDate(); $qry = "UPDATE #__fss_ticket_ticket SET merged = " . (int) $dest_id . ", ticket_status_id = " . (int) $closed . ", lastupdate = '{$now}', closed = '{$now}' WHERE id = " . (int) $source_id; $db->setQuery($qry); $db->Query(); // redirect to new ticket // TODO: /* Need to copy cc information on the ticket */ $session = JFactory::getSession(); $session->clear('merge'); $session->clear('merge_ticket_id'); ?> <script> window.location = '<?php echo FSSRoute::_('index.php?option=com_fss&view=admin_support&layout=ticket&ticketid=' . $dest_id, false); ?> '; </script> <?php exit; }
function DoTicketReply($ticketid, $userid, $isadmin, &$messageid) { $db = JFactory::getDBO(); $subject = $this->subject; $body = $this->plainmsg; $now = FSS_Helper::CurDate(); if ($body) { $qry = "INSERT INTO #__fss_ticket_messages (ticket_ticket_id, subject, body, user_id, admin, posted) VALUES ('"; $qry .= FSSJ3Helper::getEscaped($db, $ticketid) . "','" . FSSJ3Helper::getEscaped($db, $subject) . "','" . FSSJ3Helper::getEscaped($db, $body) . "','" . FSSJ3Helper::getEscaped($db, $userid) . "', '" . FSSJ3Helper::getEscaped($db, $isadmin) . "', '{$now}')"; $db->setQuery($qry); $db->Query(); $messageid = $db->insertid(); $qry = "SELECT ticket_status_id FROM #__fss_ticket_ticket WHERE id = '" . FSSJ3Helper::getEscaped($db, $ticketid) . "'"; $db->setQuery($qry); $status = $db->loadAssoc(); if ($isadmin) { $newstatus = FSS_Ticket_Helper::GetStatusID('def_admin'); } else { $newstatus = FSS_Ticket_Helper::GetStatusID('def_user'); } if ($newstatus > 0) { $qry = "UPDATE #__fss_ticket_ticket SET ticket_status_id = '" . FSSJ3Helper::getEscaped($db, $newstatus) . "', closed = NULL WHERE id = '" . FSSJ3Helper::getEscaped($db, $ticketid) . "'"; } else { $qry = "UPDATE #__fss_ticket_ticket SET closed = NULL WHERE id = '" . FSSJ3Helper::getEscaped($db, $ticketid) . "'"; } $db->setQuery($qry); $db->Query(); if ($newstatus > 0) { $oldstatus = $this->GetStatus($status['ticket_status_id']); $newstatus = $this->GetStatus($newstatus); $this->AddTicketAuditNote($ticketid, "Status changed from '" . $oldstatus['title'] . "' to '" . $newstatus['title'] . "'", $userid); } } $qry = "UPDATE #__fss_ticket_ticket SET lastupdate = '{$now}' WHERE id = '" . FSSJ3Helper::getEscaped($db, $ticketid) . "'"; $db->setQuery($qry); $db->Query(); $ticket = $this->getTicket($ticketid); if ($isadmin) { FSS_EMail::Admin_Reply($ticket, $subject, $body, array()); } else { FSS_EMail::User_Reply($ticket, $subject, $body, array()); } }