From c85badffe7e255afcbd8e1b9454e57eb13ca6fae Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap.jansma@civicoop.org>
Date: Tue, 8 Oct 2019 10:44:47 +0200
Subject: [PATCH] Fixed issue with importing and deleting data processors

---
 CRM/Dataprocessor/Utils/Importer.php | 22 +++++++++++++++++++---
 info.xml                             |  2 +-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/CRM/Dataprocessor/Utils/Importer.php b/CRM/Dataprocessor/Utils/Importer.php
index 99a06d0d..87d8b6ea 100644
--- a/CRM/Dataprocessor/Utils/Importer.php
+++ b/CRM/Dataprocessor/Utils/Importer.php
@@ -221,11 +221,27 @@ class CRM_Dataprocessor_Utils_Importer {
     }
 
     // Remove all data processors which are in code or overridden but not imported
-    $dao = CRM_Core_DAO::executeQuery("SELECT id, name FROM civicrm_data_processor WHERE id NOT IN (".implode($importedIds, ",").") AND status IN (".CRM_Dataprocessor_Status::STATUS_IN_CODE.", ".CRM_Dataprocessor_Status::STATUS_OVERRIDDEN.") AND source_file IS NOT NULL");
+    $removeSql = "
+        SELECT id, name, status 
+        FROM civicrm_data_processor 
+        WHERE  status IN (".CRM_Dataprocessor_Status::STATUS_IN_CODE.", ".CRM_Dataprocessor_Status::STATUS_OVERRIDDEN.") 
+        AND source_file IS NOT NULL";
+    if (count($importedIds)) {
+      $removeSql .= " AND id NOT IN (".implode($importedIds, ",").")";
+    }
+    if ($extension) {
+      $removeSql .= " AND source_file LIKE '".CRM_Utils_Type::escape($extension, 'String')."/data-processors/%'";
+    }
+    $dao = CRM_Core_DAO::executeQuery($removeSql);
     while ($dao->fetch()) {
       try {
-        civicrm_api3('DataProcessor', 'delete', ['id' => $dao->id]);
-        $return['deleted data processors'][] = $dao->id.": ".$dao->name;
+        if ($dao->status == CRM_Dataprocessor_Status::STATUS_OVERRIDDEN) {
+          civicrm_api3('DataProcessor', 'create', array('id' => $dao->id, 'status' => CRM_Dataprocessor_Status::STATUS_IN_DATABASE, 'source_file' => 'null'));
+          $return['kept data processors'][] = $dao->id.": ".$dao->name;
+        } else {
+          civicrm_api3('DataProcessor', 'delete', ['id' => $dao->id]);
+          $return['deleted data processors'][] = $dao->id . ": " . $dao->name;
+        }
       } catch (\Exception $e) {
         $return['deleted data processors'][] = 'Error: '. $dao->id.": ".$dao->name;
       }
diff --git a/info.xml b/info.xml
index f264cb5f..42c04fcc 100644
--- a/info.xml
+++ b/info.xml
@@ -11,7 +11,7 @@
   </maintainer>
   <urls>
     <url desc="Main Extension Page">https://lab.civicrm.org/extensions/dataprocessor</url>
-    <url desc="Documentation">https://lab.civicrm.org/extensions/dataprocessor/README.md</url>
+    <url desc="Documentation">https://lab.civicrm.org/extensions/dataprocessor/blob/master/README.md</url>
     <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
   </urls>
   <releaseDate>2019-07-15</releaseDate>
-- 
GitLab