function display($tpl = null) { if (FSS_Settings::Get('support_only_admin_open')) { return $this->noPermission("Access Denied", "CREATING_NEW_TICKETS_BY_USERS_IS_CURRENTLY_DISABLED"); } if (!FSS_Permission::auth("fss.ticket.open", "com_fss.support_user")) { return FSS_Helper::NoPerm(); } $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $userid = $user->get('id'); $this->assign('userid', $userid); $this->assign('email', ''); // defaults for blank ticket $this->ticket = new stdClass(); $this->ticket->prodid = FSS_Input::getInt('prodid'); $this->ticket->deptid = FSS_Input::getInt('deptid'); $this->ticket->catid = FSS_Input::getInt('catid'); $this->ticket->priid = FSS_Input::getInt('priid'); $this->ticket->subject = FSS_Input::getString('subject'); $this->ticket->body = FSS_Input::getBBCode('body'); $this->errors['subject'] = ''; $this->errors['body'] = ''; $this->errors['cat'] = ''; $what = FSS_Input::getCmd('what'); // done with ticket, try and save, if not, display any errors if ($what == "add") { if ($this->saveTicket()) { echo "Saved OK!"; exit; $link = 'index.php?option=com_fss&view=ticket&layout=view&Itemid=' . FSS_Input::getInt('Itemid') . '&ticketid=' . $this->ticketid; $mainframe->redirect($link); return; } } $this->product = $this->get('Product'); $this->dept = $this->get('Department'); $this->cats = SupportHelper::getCategories(); $this->pris = SupportHelper::getPriorities(); $this->support_user_attach = FSS_Settings::get('support_user_attach'); $this->fields = FSSCF::GetCustomFields(0, $prodid, $deptid); parent::display(); }
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; }
function saveReply() { $this->removeDraft(FSS_Input::getInt('draft')); // get posted data $ticketid = FSS_Input::getInt('ticketid'); $reply_type = FSS_Input::getCmd('reply_type'); $user_message = FSS_Input::getBBCode('body'); $handler_message = FSS_Input::getBBCode('body2'); $subject = FSS_Input::getString('subject'); // load ticket $ticket = new SupportTicket(); if (!$ticket->load($ticketid)) { exit; } // set up some variables $user_id = JFactory::getUser()->id; $handler_id = $user_id; $old_st = $ticket->getStatus(); $action_name = ""; $action_params = array(); $message_id = 0; $files_private = 0; // add signatures to messages if (FSS_Input::getInt('signature')) { if ($user_message) { $user_message .= SupportCanned::AppendSig(FSS_Input::getInt('signature'), $ticket); } if ($handler_message) { $handler_message .= SupportCanned::AppendSig(FSS_Input::getInt('signature'), $ticket); } } $extra_time = 0; $timestart = 0; $timeend = 0; if (FSS_Settings::Get('time_tracking') != "") { if (FSS_Settings::get('time_tracking_type') == 'se') { $timestart = strtotime("1970-01-01 " . FSS_Input::getString('timetaken_start')); $timeend = strtotime("1970-01-01 " . FSS_Input::getString('timetaken_end')); $extra_time = (int) (($timeend - $timestart) / 60); } elseif (FSS_Settings::get('time_tracking_type') == 'tm') { $timestart = strtotime(FSS_Input::getString('timetaken_start')); $timeend = strtotime(FSS_Input::getString('timetaken_end')); $extra_time = (int) (($timeend - $timestart) / 60); } else { $extra_time = (int) (FSS_Input::getInt('timetaken_hours') * 60 + FSS_Input::getInt('timetaken_mins')); } } // different reply types switch ($reply_type) { case 'reply': // post reply to user if ($user_message) { $message_id = $ticket->addMessage($user_message, $subject, $user_id, TICKET_MESSAGE_ADMIN, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); } elseif ($extra_time > 0) { // no message, add time if needed $ticket->addTime($extra_time, "", true, $timestart, $timeend); } // update status $new_status = FSS_Input::getInt('reply_status'); $ticket->updateStatus($new_status); // reassign ticket if needed if (FSS_Settings::get('support_assign_reply') == 1 && FSS_Input::getInt('dontassign') == 0) { $ticket->assignHandler($handler_id, TICKET_ASSIGN_TOOK_OWNER); } elseif (FSS_Settings::get('support_autoassign') == 3 && $ticket->admin_id == 0 && FSS_Input::getInt('dontassign') == 0) { $ticket->assignHandler($handler_id, TICKET_ASSIGN_ASSIGNED); } // call SupportActions handler for admin reply $action_name = "Admin_Reply"; $action_params = array('subject' => $subject, 'user_message' => $user_message, 'status' => $new_status); break; case 'private': // add message to ticket if ($handler_message) { $message_id = $ticket->addMessage($handler_message, $subject, $user_id, TICKET_MESSAGE_PRIVATE, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); } else { if ($extra_time > 0) { $ticket->addTime($extra_time, "", true, $timestart, $timeend); } } $files_private = 1; // call support actions for private comment $action_name = "Admin_Private"; $action_params = array('subject' => $subject, 'handler_message' => $handler_message); break; case 'user': // update user on ticket $new_user_id = FSS_Input::getInt("user_id"); $ticket->updateUser($new_user_id); if ($user_message) { $message_id = $ticket->addMessage($user_message, $subject, $user_id, TICKET_MESSAGE_ADMIN, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); } else { if ($extra_time > 0) { $ticket->addTime($extra_time, "", true, $timestart, $timeend); $extra_time = 0; } } $action_name = "Admin_ForwardUser"; $action_params = array('subject' => $subject, 'user_message' => $user_message, 'user_id' => $new_user_id); // break; case 'product': $new_handler_id = FSS_Input::getInt('new_handler'); // update product and department $new_product_id = FSS_Input::getInt("new_product_id"); $new_department_id = FSS_Input::getInt("new_department_id"); $ticket->updateProduct($new_product_id); $ticket->updateDepartment($new_department_id); /** * -2 - Auto Assign * -1 - Unchanged * 0 - Unassigned * X - Hander **/ if ($new_handler_id == -1) { //$ticket->assignHandler($new_handler_id, TICKET_ASSIGN_FORWARD); } else { if ($new_handler_id == 0) { $ticket->assignHandler(0, -1); } else { if ($new_handler_id > 0) { $ticket->assignHandler($new_handler_id, TICKET_ASSIGN_FORWARD); } else { if ($new_handler_id == -2) { // auto assign new handler $admin_id = FSS_Ticket_Helper::AssignHandler($new_product_id, $new_department_id, $ticket->ticket_cat_id, true); $ticket->assignHandler($admin_id, TICKET_ASSIGN_FORWARD); } } } } if ($user_message) { $message_id = $ticket->addMessage($user_message, $subject, $user_id, TICKET_MESSAGE_ADMIN, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); $extra_time = 0; } if ($handler_message) { $ticket->addMessage($handler_message, $subject, $user_id, TICKET_MESSAGE_PRIVATE, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); $extra_time = 0; } if ($extra_time > 0) { $ticket->addTime($extra_time, "", true, $timestart, $timeend); } $action_name = "Admin_ForwardProduct"; $action_params = array('subject' => $subject, 'user_message' => $user_message, 'handler_message' => $handler_message, 'product_id' => $new_product_id, 'department_id' => $new_department_id); break; case 'handler': $new_handler_id = FSS_Input::getInt('new_handler'); if ($new_handler_id == -2) { // auto assign new handler $admin_id = FSS_Ticket_Helper::AssignHandler($ticket->prod_id, $ticket->ticket_dept_id, $ticket->ticket_cat_id, true); $ticket->assignHandler($admin_id, TICKET_ASSIGN_FORWARD); } else { if ($new_handler_id != -1) { $ticket->assignHandler($new_handler_id, TICKET_ASSIGN_FORWARD); } } // update status $new_status = FSS_Input::getCmd('reply_status'); $ticket->updateStatus($new_status); if ($user_message) { $message_id = $ticket->addMessage($user_message, $subject, $user_id, TICKET_MESSAGE_ADMIN, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); $extra_time = 0; } if ($handler_message) { $ticket->addMessage($handler_message, $subject, $user_id, TICKET_MESSAGE_PRIVATE, $extra_time, $timestart, $timeend); $ticket->addTime($extra_time); $extra_time = 0; } if ($extra_time > 0) { $ticket->addTime($extra_time, "", true, $timestart, $timeend); } $action_name = "Admin_ForwardHandler"; $action_params = array('subject' => $subject, 'user_message' => $user_message, 'handler_message' => $handler_message, 'handler_id' => $new_handler_id); break; } // add posted files $files = $ticket->addFilesFromPost($message_id, -1, $files_private); $ticket->stripImagesFromMessage($message_id); $action_params['files'] = $files; // call action handler SupportActions::DoAction($action_name, $ticket, $action_params); // Redirect to new page $link = FSSRoute::_('index.php?option=com_fss&view=admin_support&layout=ticket&ticketid=' . $ticket->id, false); $new_st = $ticket->getStatus(); if ($reply_type == "reply") { if ($new_st->is_closed && SupportUsers::getSetting("return_on_close")) { $link = SupportHelper::parseRedirectType($old_st->id, SupportUsers::getSetting("return_on_close")); } else { if (SupportUsers::getSetting("return_on_reply")) { $link = SupportHelper::parseRedirectType($old_st->id, SupportUsers::getSetting("return_on_reply")); } } } JFactory::getApplication()->redirect($link); }
function delete_message() { if (!$this->view->can_EditTicket()) { exit; } $messageid = FSS_Input::getInt('messageid'); $subject = FSS_Input::getString('subject'); $body = FSS_Input::getBBCode('body'); $body = urldecode($body); $subject = urldecode($subject); $db = JFactory::getDBO(); $qry = "SELECT * FROM #__fss_ticket_messages WHERE id = " . FSSJ3Helper::getEscaped($db, $messageid); $db->setQuery($qry); $row = $db->LoadAssoc(); $ticket = new SupportTicket(); if ($ticket->load($row['ticket_ticket_id'])) { $ticket->deleteMessage($messageid, $subject, $body); if ($row['time'] > 0) { $ticket->addTime(-$row['time']); } } exit; }