diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php index b736648e5b8803261e988df656c5c89d81fe0f34..553a3da2f9c56b079cee698eff687f7b7f844ca5 100644 --- a/include/class.dynamic_forms.php +++ b/include/class.dynamic_forms.php @@ -396,9 +396,9 @@ class DynamicFormEntry extends VerySimpleModel { return $this->_clean; } - function forTicket($ticket_id) { + function forTicket($ticket_id, $force=false) { static $entries = array(); - if (!isset($entries[$ticket_id])) + if (!isset($entries[$ticket_id]) || $force) $entries[$ticket_id] = DynamicFormEntry::objects() ->filter(array('object_id'=>$ticket_id, 'object_type'=>'T')); return $entries[$ticket_id]; diff --git a/include/class.ticket.php b/include/class.ticket.php index 6edb55e8b455671bd738e56d4771803f28f70c21..f4dd51c0ddac73c880d4bf741397c2fee7a9187c 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -107,7 +107,7 @@ class Ticket { function loadDynamicData() { if (!$this->_answers) { - foreach (DynamicFormEntry::forTicket($this->getId()) as $form) + foreach (DynamicFormEntry::forTicket($this->getId(), true) as $form) foreach ($form->getAnswers() as $answer) $this->_answers[$answer->getField()->get('name')] = $answer->getValue(); diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php index 43e68f52567066a78290809100ee96418a4c27d8..eb2b6f1315e8dd67edd5aaaa6e9e94b32f59f7bb 100644 --- a/include/staff/tickets.inc.php +++ b/include/staff/tickets.inc.php @@ -136,7 +136,7 @@ if ($_REQUEST['advsid'] && isset($_SESSION['adv_'.$_REQUEST['advsid']])) { } $sortOptions=array('date'=>'ticket.created','ID'=>'ticketID', - 'pri'=>'priority_urgency','name'=>'user.name','subj'=>'subject.value', + 'pri'=>'priority_id','name'=>'user.name','subj'=>'subject', 'status'=>'ticket.status','assignee'=>'assigned','staff'=>'staff', 'dept'=>'dept_name'); @@ -171,41 +171,38 @@ if(!$order_by ) { elseif(!strcasecmp($status,'closed')) $order_by='ticket.closed, ticket.created'; //No priority sorting for closed tickets. elseif($showoverdue) //priority> duedate > age in ASC order. - $order_by='priority_urgency ASC, ISNULL(duedate) ASC, duedate ASC, effective_date ASC, ticket.created'; + $order_by='priority_id, ISNULL(duedate) ASC, duedate ASC, effective_date ASC, ticket.created'; else //XXX: Add due date here?? No - - $order_by='priority_urgency ASC, effective_date DESC, ticket.created'; + $order_by='priority_id, effective_date DESC, ticket.created'; } $order=$order?$order:'DESC'; if($order_by && strpos($order_by,',') && $order) $order_by=preg_replace('/(?<!ASC|DESC),/', " $order,", $order_by); -$sort=$_REQUEST['sort']?strtolower($_REQUEST['sort']):'urgency'; //Urgency is not on display table. +$sort=$_REQUEST['sort']?strtolower($_REQUEST['sort']):'priority_id'; //Urgency is not on display table. $x=$sort.'_sort'; $$x=' class="'.strtolower($order).'" '; if($_GET['limit']) $qstr.='&limit='.urlencode($_GET['limit']); -$dynfields='(SELECT entry.object_id, value, value_id FROM '.FORM_ANSWER_TABLE.' ans '. - 'LEFT JOIN '.FORM_ENTRY_TABLE.' entry ON entry.id=ans.entry_id '. - 'LEFT JOIN '.FORM_FIELD_TABLE.' field ON field.id=ans.field_id '. - 'WHERE field.name = "%1$s" AND entry.object_type="T")'; -$subject_sql=sprintf($dynfields, 'subject'); -$prio_sql=sprintf($dynfields, 'priority'); - $qselect ='SELECT DISTINCT ticket.ticket_id,lock_id,ticketID,ticket.dept_id,ticket.staff_id,ticket.team_id ' - .' ,subject.value as subject' + .',MAX(IF(field.name = \'subject\', ans.value, NULL)) as `subject`' + .',MAX(IF(field.name = \'priority\', ans.value, NULL)) as `priority_desc`' + .',MAX(IF(field.name = \'priority\', ans.value_id, NULL)) as `priority_id`' .' ,user.name' .' ,email.address as email, dept_name ' - .' ,ticket.status,ticket.source,isoverdue,isanswered,ticket.created,pri.* '; + .' ,ticket.status,ticket.source,isoverdue,isanswered,ticket.created '; $qfrom=' FROM '.TICKET_TABLE.' ticket '. ' LEFT JOIN '.USER_TABLE.' user ON user.id = ticket.user_id'. ' LEFT JOIN '.USER_EMAIL_TABLE.' email ON user.id = email.user_id'. ' LEFT JOIN '.DEPT_TABLE.' dept ON ticket.dept_id=dept.dept_id '. - ' LEFT JOIN '.$subject_sql.' subject ON subject.object_id = ticket.ticket_id'. - ' LEFT JOIN '.$prio_sql.' tprio ON tprio.object_id = ticket.ticket_id'; + ' LEFT JOIN ost_form_entry entry ON entry.object_type=\'T\' + and entry.object_id=ticket.ticket_id'. + ' LEFT JOIN ost_form_entry_values ans ON ans.entry_id = entry.id'. + ' LEFT JOIN ost_form_field field ON field.id=ans.field_id'; $sjoin=''; if($search && $deep_search) { @@ -230,8 +227,7 @@ $qselect.=' ,count(attach.attach_id) as attachments ' .' ,IF(staff.staff_id IS NULL,team.name,CONCAT_WS(" ", staff.lastname, staff.firstname)) as assigned ' .' ,IF(ptopic.topic_pid IS NULL, topic.topic, CONCAT_WS(" / ", ptopic.topic, topic.topic)) as helptopic '; -$qfrom.=' LEFT JOIN '.TICKET_PRIORITY_TABLE.' pri ON (tprio.value_id=pri.priority_id) ' - .' LEFT JOIN '.TICKET_LOCK_TABLE.' tlock ON (ticket.ticket_id=tlock.ticket_id AND tlock.expire>NOW() +$qfrom.=' LEFT JOIN '.TICKET_LOCK_TABLE.' tlock ON (ticket.ticket_id=tlock.ticket_id AND tlock.expire>NOW() AND tlock.staff_id!='.db_input($thisstaff->getId()).') ' .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach ON (ticket.ticket_id=attach.ticket_id) ' .' LEFT JOIN '.TICKET_THREAD_TABLE.' thread ON ( ticket.ticket_id=thread.ticket_id) ' @@ -241,6 +237,11 @@ $qfrom.=' LEFT JOIN '.TICKET_PRIORITY_TABLE.' pri ON (tprio.value_id=pri.priorit .' LEFT JOIN '.TOPIC_TABLE.' topic ON (ticket.topic_id=topic.topic_id) ' .' LEFT JOIN '.TOPIC_TABLE.' ptopic ON (ptopic.topic_id=topic.topic_pid) '; +// Fetch priority information +$res = db_query('select * from '.PRIORITY_TABLE); +$prios = array(); +while ($row = db_fetch_array($res)) + $prios[$row['priority_id']] = $row; $query="$qselect $qfrom $qwhere $qgroup ORDER BY $order_by $order LIMIT ".$pageNav->getStart().",".$pageNav->getLimit(); //echo $query; @@ -396,8 +397,8 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting.. $displaystatus="<b>$displaystatus</b>"; echo "<td>$displaystatus</td>"; } else { ?> - <td class="nohover" align="center" style="background-color:<?php echo $row['priority_color']; ?>;"> - <?php echo $row['priority_desc']; ?></td> + <td class="nohover" align="center" style="background-color:<?php echo $prios[$row['priority_id']]['priority_color']; ?>;"> + <?php echo $prios[$row['priority_id']]['priority_desc']; ?></td> <?php } ?> diff --git a/scp/tickets.php b/scp/tickets.php index 067df4f709f31e5c4fda297a00e37f2d8cc6050b..0fde54a63b35bfb20c1116aacf90836a17ab894e 100644 --- a/scp/tickets.php +++ b/scp/tickets.php @@ -490,8 +490,6 @@ if($_POST && !$errors): } if (!$ticket->checkStaffAccess($thisstaff) || $ticket->isClosed()) $ticket=null; - else - $ticket->loadDynamicData(); Draft::deleteForNamespace('ticket.staff%', $thisstaff->getId()); } elseif(!$errors['err']) { $errors['err']='Unable to create the ticket. Correct the error(s) and try again';