diff --git a/include/api.tickets.php b/include/api.tickets.php index 60907d56e9edc3bd1694ca633094c4fadc34f40f..1cc51de3f853b1e4dbab206326139c6fd8a0a1cf 100644 --- a/include/api.tickets.php +++ b/include/api.tickets.php @@ -122,14 +122,6 @@ class TicketApiController extends ApiController { # Create the ticket with the data (attempt to anyway) $errors = array(); - if ($topic=Topic::lookup($data['topicId'])) { - if ($form=DynamicForm::lookup($topic->ht['form_id'])) { - $form = $form->instanciate(); - if (!$form->isValid()) - $errors += $form->errors(); - } - } - $ticket = Ticket::create($data, $errors, $data['source'], $autorespond, $alert); # Return errors (?) if (count($errors)) { @@ -145,12 +137,6 @@ class TicketApiController extends ApiController { return $this->exerr(500, "Unable to create new ticket: unknown error"); } - # Save dynamic form - if (isset($form)) { - $form->setTicketId($ticket->getId()); - $form->save(); - } - return $ticket; } diff --git a/include/class.ticket.php b/include/class.ticket.php index a69109204c85f16a88ab60fa01f2c0b87b1a2d8f..23b485da0bd381c9d8eb1e76f8a6d5ca944542f5 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -2230,6 +2230,14 @@ class Ticket { $vars['email'], $filter->getName())); } + if ($vars['topicId'] && ($topic=Topic::lookup($vars['topicId']))) { + if ($topic_form = DynamicForm::lookup($topic->ht['form_id'])) { + $topic_form = $topic_form->instanciate(); + if (!$topic_form->getForm()->isValid($field_filter('topic'))) + $errors = array_merge($errors, $topic_form->getForm()->errors()); + } + } + $id=0; $fields=array(); $fields['message'] = array('type'=>'*', 'required'=>1, 'error'=>'Message required'); @@ -2293,24 +2301,26 @@ class Ticket { # Some things will need to be unpacked back into the scope of this # function - if (isset($vars['autorespond'])) $autorespond=$vars['autorespond']; + if (isset($vars['autorespond'])) + $autorespond = $vars['autorespond']; # Apply filter-specific priority if ($vars['priorityId']) $form->setAnswer('priority', null, $vars['priorityId']); // OK...just do it. - $deptId=$vars['deptId']; //pre-selected Dept if any. - $source=ucfirst($vars['source']); - $topic=NULL; + $deptId = $vars['deptId']; //pre-selected Dept if any. + $source = ucfirst($vars['source']); + // Intenal mapping magic...see if we need to override anything - if(isset($vars['topicId']) && ($topic=Topic::lookup($vars['topicId']))) { //Ticket created via web by user/or staff - $deptId=$deptId?$deptId:$topic->getDeptId(); + if (isset($topic)) { + $deptId = $deptId ?: $topic->getDeptId(); $priority = $form->getAnswer('priority'); if (!$priority || !$priority->getIdValue()) $form->setAnswer('priority', null, $topic->getPriorityId()); - if($autorespond) $autorespond=$topic->autoRespond(); - $source=$vars['source']?$vars['source']:'Web'; + if ($autorespond) + $autorespond = $topic->autoRespond(); + $source = $vars['source'] ?: 'Web'; //Auto assignment. if (!isset($vars['staffId']) && $topic->getStaffId()) @@ -2319,27 +2329,30 @@ class Ticket { $vars['teamId'] = $topic->getTeamId(); //set default sla. - if(isset($vars['slaId'])) - $vars['slaId'] = $vars['slaId']?$vars['slaId']:$cfg->getDefaultSLAId(); - elseif($topic && $topic->getSLAId()) + if (isset($vars['slaId'])) + $vars['slaId'] = $vars['slaId'] ?: $cfg->getDefaultSLAId(); + elseif ($topic && $topic->getSLAId()) $vars['slaId'] = $topic->getSLAId(); + } - }elseif($vars['emailId'] && !$vars['deptId'] && ($email=Email::lookup($vars['emailId']))) { //Emailed Tickets - $deptId=$email->getDeptId(); + // Apply email settings for emailed tickets + if ($vars['emailId'] && ($email=Email::lookup($vars['emailId']))) { + $deptId = $deptId ?: $email->getDeptId(); $priority = $form->getAnswer('priority'); if (!$priority || !$priority->getIdValue()) $form->setAnswer('priority', null, $email->getPriorityId()); - if($autorespond) $autorespond=$email->autoRespond(); - $email=null; - $source='Email'; + if ($autorespond) + $autorespond = $email->autoRespond(); + $email = null; + $source = 'Email'; } //Last minute checks $priority = $form->getAnswer('priority'); if (!$priority || !$priority->getIdValue()) $form->setAnswer('priority', null, $cfg->getDefaultPriorityId()); - $deptId=$deptId?$deptId:$cfg->getDefaultDeptId(); - $topicId=$vars['topicId']?$vars['topicId']:0; - $ipaddress=$vars['ip']?$vars['ip']:$_SERVER['REMOTE_ADDR']; + $deptId = $deptId ?: $cfg->getDefaultDeptId(); + $topicId = $vars['topicId'] ?: 0; + $ipaddress = $vars['ip'] ?: $_SERVER['REMOTE_ADDR']; //We are ready son...hold on to the rails. $number = Ticket::genRandTicketNumber(); @@ -2375,6 +2388,13 @@ class Ticket { // Save the (common) dynamic form $form->setTicketId($id); $form->save(); + + // Save the form data from the help-topic form, if any + if ($topic_form) { + $topic_form->setTicketId($id); + $topic_form->save(); + } + $ticket->loadDynamicData(); $dept = $ticket->getDept(); diff --git a/open.php b/open.php index acb25fd70a9b94261f80ab1908eff404359d8f45..3d9b90e81f73a9dbf46d8b0c91c2290e649e30d2 100644 --- a/open.php +++ b/open.php @@ -29,16 +29,6 @@ if ($_POST) { $errors['captcha']='Invalid - try again!'; } - $form = false; - if ($topic = Topic::lookup($vars['topicId'])) { - if ($form = DynamicForm::lookup($topic->ht['form_id'])) { - $form = $form->instanciate(); - // Don't require internal fields (they're not shown) - if (!$form->isValid(function($f) { return !$f->get('private'); })) - $errors += $form->errors(); - } - } - if (!$errors && $cfg->allowOnlineAttachments() && $_FILES['attachments']) $vars['files'] = AttachmentFile::format($_FILES['attachments'], true); @@ -46,11 +36,6 @@ if ($_POST) { if(($ticket=Ticket::create($vars, $errors, SOURCE))){ $msg='Support ticket request created'; Draft::deleteForNamespace('ticket.client.'.substr(session_id(), -12)); - // Save the form data from the help-topic form, if any - if ($form) { - $form->setTicketId($ticket->getId()); - $form->save(); - } //Logged in...simply view the newly created ticket. if($thisclient && $thisclient->isValid()) { session_write_close(); diff --git a/scp/tickets.php b/scp/tickets.php index 2a8c9e6ee4938a4a19ea57812c0a5559499f4255..1655e7027a98ca7af715d3213b4b68c318134692 100644 --- a/scp/tickets.php +++ b/scp/tickets.php @@ -485,13 +485,6 @@ if($_POST && !$errors): break; case 'open': $ticket=null; - if ($topic=Topic::lookup($_POST['topicId'])) { - if ($form = DynamicForm::lookup($topic->ht['form_id'])) { - $form = $form->instanciate(); - if (!$form->getForm()->isValid()) - $errors = array_merge($errors, $form->getForm()->errors()); - } - } if(!$thisstaff || !$thisstaff->canCreateTickets()) { $errors['err']='You do not have permission to create tickets. Contact admin for such access'; } else { @@ -501,11 +494,6 @@ if($_POST && !$errors): if(($ticket=Ticket::open($vars, $errors))) { $msg='Ticket created successfully'; $_REQUEST['a']=null; - # Save extra dynamic form(s) - if (isset($form)) { - $form->setTicketId($ticket->getId()); - $form->save(); - } if (!$ticket->checkStaffAccess($thisstaff) || $ticket->isClosed()) $ticket=null; Draft::deleteForNamespace('ticket.staff%', $thisstaff->getId());