From 4cc4f08bbc89937ccba770b0479fe7f1b5840936 Mon Sep 17 00:00:00 2001
From: Jared Hancock <jared@osticket.com>
Date: Sun, 2 Aug 2015 21:16:49 -0500
Subject: [PATCH] dept: Fix incorrect SQL removing a department

* Set all "route department" filter actions to "unchanged"
* Fix bug in quick-add code where new option was not properly added
---
 include/class.dept.php          | 12 +++++++++++-
 include/class.filter_action.php |  6 +++---
 scp/js/scp.js                   |  2 +-
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/include/class.dept.php b/include/class.dept.php
index a483eecc6..9979d2d0c 100644
--- a/include/class.dept.php
+++ b/include/class.dept.php
@@ -367,7 +367,17 @@ implements TemplateVariable {
                 ->filter(array('dept_id' => $id))
                 ->delete();
 
-            db_query('UPDATE '.FILTER_TABLE.' SET dept_id=0 WHERE dept_id='.db_input($id));
+            foreach(FilterAction::objects()
+                ->filter(array('type' => FA_RouteDepartment::$type)) as $fa
+            ) {
+                $config = $fa->getConfiguration();
+                if ($config && $config['dept_id'] == $id) {
+                    $config['dept_id'] = 0;
+                    // FIXME: Move this code into FilterAction class
+                    $fa->set('configuration', JsonDataEncoder::encode($config));
+                    $fa->save();
+                }
+            }
 
             // Delete extended access entries
             StaffDeptAccess::objects()
diff --git a/include/class.filter_action.php b/include/class.filter_action.php
index 62d66cb32..65a316c4d 100644
--- a/include/class.filter_action.php
+++ b/include/class.filter_action.php
@@ -285,10 +285,10 @@ class FA_RouteDepartment extends TriggerAction {
                     'prompt' => __('Unchanged'),
                     'data' => array('quick-add' => 'department'),
                 ),
-                'choices' => array_merge(
-                    Dept::getDepartments(),
+                'choices' =>
+                    Dept::getDepartments() +
                     array(':new:' => '— '.__('Add New').' —')
-                ),
+                ,
                 'validators' => function($self) {
                     if ($self->getClean() === ':new:')
                         $self->addError(__('Select a department'));
diff --git a/scp/js/scp.js b/scp/js/scp.js
index 9d72b9637..0568c6064 100644
--- a/scp/js/scp.js
+++ b/scp/js/scp.js
@@ -1058,7 +1058,7 @@ $(document).on('change', 'select[data-quick-add]', function() {
           $('<option>')
             .attr('value', id)
             .text(data.name)
-            .insertBefore($('select[data-quick-add="'+type+'"] option[data-quick-add]'));
+            .insertBefore(selected)
           $select.val(id);
         }
     });
-- 
GitLab