From 2b98b194cbc0d6ad1d849d10cb5adb36599174f7 Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap.jansma@civicoop.org>
Date: Wed, 12 Feb 2020 18:35:18 +0100
Subject: [PATCH] Fixed caching issues

---
 Civi/DataProcessor/Output/UIOutputHelper.php | 22 +++++++++++++++-----
 api/v3/DataProcessor.php                     |  1 +
 api/v3/DataProcessorField.php                |  1 +
 api/v3/DataProcessorFilter.php               |  1 +
 api/v3/DataProcessorOutput.php               |  1 +
 api/v3/DataProcessorSource.php               |  1 +
 6 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/Civi/DataProcessor/Output/UIOutputHelper.php b/Civi/DataProcessor/Output/UIOutputHelper.php
index 836baf6b..cdab5ca2 100644
--- a/Civi/DataProcessor/Output/UIOutputHelper.php
+++ b/Civi/DataProcessor/Output/UIOutputHelper.php
@@ -70,12 +70,21 @@ class UIOutputHelper {
       if (CIVICRM_UF === 'UnitTests') {
         return;
       }
+      $factory = dataprocessor_get_factory();
       if ($op == 'delete') {
         $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $id]);
+        $outputClass = $factory->getOutputByName($output['type']);
+        if ($outputClass instanceof UIOutputInterface) {
+          self::$rebuildMenu = TRUE;
+        }
         self::removeOutputFromNavigation($output['configuration']);
       }
       elseif ($op == 'edit') {
         $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $id]);
+        $outputClass = $factory->getOutputByName($output['type']);
+        if ($outputClass instanceof UIOutputInterface) {
+          self::$rebuildMenu = TRUE;
+        }
         if (!isset($output['configuration']['navigation_id']) && !isset($params['configuration']['navigation_parent_path'])) {
           return;
         }
@@ -97,11 +106,14 @@ class UIOutputHelper {
           }
         }
       }
-      elseif ($op == 'create' && isset($params['configuration']['navigation_parent_path'])) {
-        $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', ['id' => $params['data_processor_id']]);
-        $configuration = self::createOrUpdateNavigationItem($params, $dataProcessor);
-        if ($configuration) {
-          $params['configuration'] = $configuration;
+      elseif ($op == 'create') {
+        self::$rebuildMenu = true;
+        if (isset($params['configuration']['navigation_parent_path'])) {
+          $dataProcessor = civicrm_api3('DataProcessor', 'getsingle', ['id' => $params['data_processor_id']]);
+          $configuration = self::createOrUpdateNavigationItem($params, $dataProcessor);
+          if ($configuration) {
+            $params['configuration'] = $configuration;
+          }
         }
       }
     } elseif ($objectName == 'DataProcessor' && $op == 'edit') {
diff --git a/api/v3/DataProcessor.php b/api/v3/DataProcessor.php
index 7c0b50c7..34d16b74 100644
--- a/api/v3/DataProcessor.php
+++ b/api/v3/DataProcessor.php
@@ -67,6 +67,7 @@ function civicrm_api3_data_processor_delete($params) {
   CRM_Dataprocessor_BAO_DataProcessorField::deleteWithDataProcessorId($params['id']);
   CRM_Dataprocessor_BAO_DataProcessorFilter::deleteWithDataProcessorId($params['id']);
   CRM_Dataprocessor_BAO_DataProcessorSource::deleteWithDataProcessorId($params['id']);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorField.php b/api/v3/DataProcessorField.php
index a9047bd1..10317fd8 100644
--- a/api/v3/DataProcessorField.php
+++ b/api/v3/DataProcessorField.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_field_create($params) {
 function civicrm_api3_data_processor_field_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorField', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorFilter.php b/api/v3/DataProcessorFilter.php
index 22e6afc0..a8ad730f 100644
--- a/api/v3/DataProcessorFilter.php
+++ b/api/v3/DataProcessorFilter.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_filter_create($params) {
 function civicrm_api3_data_processor_filter_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorFilter', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
diff --git a/api/v3/DataProcessorOutput.php b/api/v3/DataProcessorOutput.php
index ff25acea..29330b15 100644
--- a/api/v3/DataProcessorOutput.php
+++ b/api/v3/DataProcessorOutput.php
@@ -30,6 +30,7 @@ function civicrm_api3_data_processor_output_create($params) {
   $return = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params);
   $dataProcessorId = civicrm_api3('DataProcessorOutput', 'getvalue', array('id' => $return['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return $return;
 }
 
diff --git a/api/v3/DataProcessorSource.php b/api/v3/DataProcessorSource.php
index 4d93a044..133030c9 100644
--- a/api/v3/DataProcessorSource.php
+++ b/api/v3/DataProcessorSource.php
@@ -56,6 +56,7 @@ function civicrm_api3_data_processor_source_create($params) {
 function civicrm_api3_data_processor_source_delete($params) {
   $dataProcessorId = civicrm_api3('DataProcessorSource', 'getvalue', array('id' => $params['id'], 'return' => 'data_processor_id'));
   CRM_Dataprocessor_BAO_DataProcessor::updateAndChekStatus($dataProcessorId);
+  CRM_Dataprocessor_Utils_Cache::clearAllDataProcessorCaches();
   return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params);
 }
 
-- 
GitLab