From bd22f9314b72b06c38a109ce13a3242ed837a1a3 Mon Sep 17 00:00:00 2001
From: aydreeihn <adriane@enhancesoft.com>
Date: Mon, 7 Jan 2019 13:14:11 -0600
Subject: [PATCH] Issue: Filters

- Make sure we only set Filter Flags if they need to be changed (don't update them every time we save)
- Make sure we sure we use the email_id if we have actually set it. Otherwise, we lose what should be set for the Target Channel
---
 include/class.filter.php        | 8 ++++++++
 include/class.filter_action.php | 8 ++++----
 scp/filters.php                 | 2 --
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/include/class.filter.php b/include/class.filter.php
index 05f93c784..360d5bc79 100644
--- a/include/class.filter.php
+++ b/include/class.filter.php
@@ -153,6 +153,10 @@ class Filter {
         $this->update($this->ht, $errors);
     }
 
+    function hasFlag($flag) {
+        return 0 !== ($this->ht['flags'] & $flag);
+    }
+
     function stopOnMatch() {
         return ($this->ht['stop_onmatch']);
     }
@@ -504,6 +508,10 @@ class Filter {
             $vars['target'] = 'Email';
         }
 
+        //Note: this will be set when validating filters
+        if ($vars['email_id'])
+            $emailId = $vars['email_id'];
+
         $sql=' updated=NOW() '
             .',isactive='.db_input($vars['isactive'])
             .',flags='.db_input($vars['flags'])
diff --git a/include/class.filter_action.php b/include/class.filter_action.php
index 3adcac43c..88aa0d091 100644
--- a/include/class.filter_action.php
+++ b/include/class.filter_action.php
@@ -82,10 +82,10 @@ class FilterAction extends VerySimpleModel {
     function setFilterFlag($actions, $flag, $bool) {
         foreach ($actions as $action) {
           $filter = Filter::lookup($action->filter_id);
-          if ($filter) {
-            if ($flag == 'dept') $filter->setFlag(Filter::FLAG_INACTIVE_DEPT, $bool);
-            if ($flag == 'topic') $filter->setFlag(Filter::FLAG_INACTIVE_HT, $bool);
-          }
+          if ($filter && ($flag == 'dept') && ($filter->hasFlag(Filter::FLAG_INACTIVE_DEPT) != $bool))
+            $filter->setFlag(Filter::FLAG_INACTIVE_DEPT, $bool);
+          if ($filter && ($flag == 'topic') && ($filter->hasFlag(Filter::FLAG_INACTIVE_HT) != $bool))
+            $filter->setFlag(Filter::FLAG_INACTIVE_HT, $bool);
         }
     }
 
diff --git a/scp/filters.php b/scp/filters.php
index c83f9eac0..25f22df4c 100644
--- a/scp/filters.php
+++ b/scp/filters.php
@@ -31,8 +31,6 @@ if($_POST){
             if(!$filter){
                 $errors['err']=sprintf(__('%s: Unknown or invalid'), __('ticket filter'));
             }elseif($filter->update($_POST,$errors)){
-                $filter->setFlag(Filter::FLAG_INACTIVE_DEPT, false);
-                $filter->setFlag(Filter::FLAG_INACTIVE_HT, false);
                 $msg=sprintf(__('Successfully updated %s.'), __('this ticket filter'));
             }elseif(!$errors['err']){
                 $errors['err']=sprintf('%s %s',
-- 
GitLab