From 7ef1a37835917cd487e3b06ef6c0b6c2fd49026b Mon Sep 17 00:00:00 2001
From: Jared Hancock <jared@osticket.com>
Date: Thu, 7 Nov 2013 15:57:47 +0000
Subject: [PATCH] Fix regression saving ticket priority

---
 include/class.dynamic_forms.php | 4 +++-
 include/class.forms.php         | 5 +++++
 include/class.ticket.php        | 6 +++---
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index 6df00e2b4..215099e67 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -356,6 +356,7 @@ class DynamicFormEntry extends VerySimpleModel {
     function setAnswer($name, $value, $id=false) {
         foreach ($this->getAnswers() as $ans) {
             if ($ans->getField()->get('name') == $name) {
+                $ans->getField()->reset();
                 $ans->set('value', $value);
                 if ($id !== false)
                     $ans->set('value_id', $id);
@@ -523,6 +524,7 @@ class DynamicFormEntry extends VerySimpleModel {
             $a = DynamicFormEntryAnswer::create(
                 array('field_id'=>$f->get('id')));
             $a->field = $f;
+            $a->field->setAnswer($a);
             $inst->_values[] = $a;
         }
         return $inst;
@@ -569,7 +571,7 @@ class DynamicFormEntryAnswer extends VerySimpleModel {
         if (!isset($this->field)) {
             $f = DynamicFormField::lookup($this->get('field_id'));
             $this->field = $f->getImpl($f);
-            $this->field->answer = $this;
+            $this->field->setAnswer($this);
         }
         return $this->field;
     }
diff --git a/include/class.forms.php b/include/class.forms.php
index 9c0cc0b62..36cbfb760 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -116,6 +116,7 @@ class FormField {
     var $_clean;
     var $_errors = array();
     var $_widget;
+    var $answer;
     var $parent;
     var $presentation_only = false;
 
@@ -179,6 +180,9 @@ class FormField {
         }
         return $this->_clean;
     }
+    function reset() {
+        $this->_clean = $this->_widget = null;
+    }
 
     function errors() {
         return $this->_errors;
@@ -312,6 +316,7 @@ class FormField {
     }
 
     function getAnswer() { return $this->answer; }
+    function setAnswer($ans) { $this->answer = $ans; }
 
     function getFormName() {
         if (is_numeric($this->get('id')))
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 5565cfc2b..9001ee9a8 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -2028,7 +2028,7 @@ class Ticket {
         // 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 (!$form->getAnswer('priority'))
+            if (!$form->getAnswer('priority')->getIdValue())
                 $form->setAnswer('priority', null, $topic->getPriorityId());
             if($autorespond) $autorespond=$topic->autoRespond();
             $source=$vars['source']?$vars['source']:'Web';
@@ -2047,14 +2047,14 @@ class Ticket {
 
         }elseif($vars['emailId'] && !$vars['deptId'] && ($email=Email::lookup($vars['emailId']))) { //Emailed Tickets
             $deptId=$email->getDeptId();
-            if (!$form->getAnswer('priority'))
+            if (!$form->getAnswer('priority')->getIdValue())
                 $form->setAnswer('priority', null, $email->getPriorityId());
             if($autorespond) $autorespond=$email->autoRespond();
             $email=null;
             $source='Email';
         }
         //Last minute checks
-        if (!$form->getAnswer('priority'))
+        if (!$form->getAnswer('priority')->getIdValue())
             $form->setAnswer('priority', null, $cfg->getDefaultPriorityId());
         $deptId=$deptId?$deptId:$cfg->getDefaultDeptId();
         $topicId=$vars['topicId']?$vars['topicId']:0;
-- 
GitLab