From 3cfa7d037837434962fa8b24ae962ee38752f9e7 Mon Sep 17 00:00:00 2001
From: Jitendra Purohit <purohitjitend@gmail.com>
Date: Mon, 17 Feb 2025 21:46:28 +0530
Subject: [PATCH 1/2] Fix hook URL storage in settings

---
 CRM/Zapier/Form/ZapHooks.php |  8 ++++----
 CRM/Zapier/Upgrader.php      | 37 ++++++++++++++++++++++++++++++++++++
 CRM/Zapier/Utils.php         | 37 +++---------------------------------
 info.xml                     |  3 ++-
 zapier.civix.php             |  2 +-
 5 files changed, 47 insertions(+), 40 deletions(-)
 create mode 100644 CRM/Zapier/Upgrader.php

diff --git a/CRM/Zapier/Form/ZapHooks.php b/CRM/Zapier/Form/ZapHooks.php
index 1e7937f..04d5e07 100644
--- a/CRM/Zapier/Form/ZapHooks.php
+++ b/CRM/Zapier/Form/ZapHooks.php
@@ -24,7 +24,7 @@ class CRM_Zapier_Form_ZapHooks extends CRM_Core_Form {
       ]
     ]);
 
-    $zapHooks = unserialize(Civi::settings()->get('zapierHooks') ?? '') ?: [];
+    $zapHooks = Civi::settings()->get('zapierHooks') ?? [];
     $this->setDefaults($zapHooks);
 
     // export form elements
@@ -34,11 +34,11 @@ class CRM_Zapier_Form_ZapHooks extends CRM_Core_Form {
 
   public function postProcess() {
     $values = $this->exportValues();
-    $zapHooks = serialize([
+    $zapHooks = [
       'create_contact' => $values['create_contact'] ?? '',
       'update_participant' => $values['update_participant'] ?? '',
-    ]);
-    Civi::settings()->set('zapierHooks', serialize($zapHooks));
+    ];
+    Civi::settings()->set('zapierHooks', $zapHooks);
     CRM_Core_Session::setStatus(E::ts('Zapier hooks are saved.'));
     parent::postProcess();
   }
diff --git a/CRM/Zapier/Upgrader.php b/CRM/Zapier/Upgrader.php
new file mode 100644
index 0000000..8f659a3
--- /dev/null
+++ b/CRM/Zapier/Upgrader.php
@@ -0,0 +1,37 @@
+<?php
+
+use CRM_Zapier_ExtensionUtil as E;
+
+/**
+ * Collection of upgrade steps.
+ */
+class CRM_Zapier_Upgrader extends CRM_Extension_Upgrader_Base {
+
+  public static function is_serialized($val) {
+    if (!is_string($val)) return false;
+    if (trim($val) == "") return false;
+    $val = trim($val);
+    if (preg_match('/^(i|s|a|o|d):.*{/si', $val) > 0) return true;
+    return false;
+  }
+
+  /**
+   * Example: Run a couple simple queries.
+   *
+   * @return TRUE on success
+   * @throws CRM_Core_Exception
+   */
+  public function upgrade_4200(): bool {
+    $this->ctx->log->info('Applying update 4200');
+    $val = Civi::settings()->get('zapierHooks');
+    if (self::is_serialized($val)) {
+      $val = unserialize($val);
+      if (is_array($val)) {
+        Civi::settings()->set('zapierHooks', $val);
+      }
+    }
+
+    return TRUE;
+  }
+
+}
diff --git a/CRM/Zapier/Utils.php b/CRM/Zapier/Utils.php
index b8dd099..bcd6e93 100644
--- a/CRM/Zapier/Utils.php
+++ b/CRM/Zapier/Utils.php
@@ -33,8 +33,8 @@ class CRM_Zapier_Utils {
       return;
     }
 
-    $zapHooks[$trigger] = $url;
-    Civi::settings()->set('zapierHooks', serialize($zapHooks));
+    $zapHooks[$trigger]= $url;
+    Civi::settings()->set('zapierHooks', $zapHooks);
   }
 
   /**
@@ -55,7 +55,7 @@ class CRM_Zapier_Utils {
   }
 
   public static function getZapHooks() {
-    return self::unserialize_recursive(Civi::settings()->get('zapierHooks') ?? '') ?: [];
+    return Civi::settings()->get('zapierHooks') ?? [];
   }
 
   public static function getZapHook($name) {
@@ -63,37 +63,6 @@ class CRM_Zapier_Utils {
     return $zapHooks[$name] ?? NULL;
   }
 
-  public static function unserialize_recursive($val) {
-    // $pattern = "/.*\{(.*)\}/";
-    if (self::is_serialized($val)){
-      $val = trim($val);
-      $ret = unserialize($val);
-      if (is_array($ret)) {
-        foreach($ret as &$r) {
-          $r = self::unserialize_recursive($r);
-        }
-      }
-      return $ret;
-    }
-    elseif (is_array($val)) {
-      foreach($val as &$r) {
-        $r = self::unserialize_recursive($r);
-      }
-      return $val;
-    }
-    else {
-      return $val;
-    }
-  }
-
-  public static function is_serialized($val) {
-    if (!is_string($val)) return false;
-    if (trim($val) == "") return false;
-    $val = trim($val);
-    if (preg_match('/^(i|s|a|o|d):.*{/si', $val) > 0) return true;
-    return false;
-  }
-
   /**
    * @param $url
    * @param $data
diff --git a/info.xml b/info.xml
index b161843..0167835 100644
--- a/info.xml
+++ b/info.xml
@@ -18,7 +18,7 @@
   <version>1.0</version>
   <develStage>alpha</develStage>
   <compatibility>
-    <ver>5.27</ver>
+    <ver>5.38</ver>
   </compatibility>
   <comments>This is a new, undeveloped module</comments>
   <classloader>
@@ -36,4 +36,5 @@
     <mixin>menu-xml@1.0.0</mixin>
     <mixin>smarty-v2@1.0.1</mixin>
   </mixins>
+  <upgrader>CRM_Zapier_Upgrader</upgrader>
 </extension>
diff --git a/zapier.civix.php b/zapier.civix.php
index ac3d214..99f190e 100644
--- a/zapier.civix.php
+++ b/zapier.civix.php
@@ -8,7 +8,7 @@
  */
 class CRM_Zapier_ExtensionUtil {
   const SHORT_NAME = 'zapier';
-  const LONG_NAME = 'nz.co.fuzion.zapier';
+  const LONG_NAME = 'zapier';
   const CLASS_PREFIX = 'CRM_Zapier';
 
   /**
-- 
GitLab


From 457fb3efc4aa9ffb4b9f7f51b8c5f56e3446a01f Mon Sep 17 00:00:00 2001
From: Jitendra Purohit <purohitjitend@gmail.com>
Date: Mon, 17 Feb 2025 21:55:11 +0530
Subject: [PATCH 2/2] upgrade hook to fix existing hook urls

---
 CRM/Zapier/Upgrader.php | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/CRM/Zapier/Upgrader.php b/CRM/Zapier/Upgrader.php
index 8f659a3..29adfad 100644
--- a/CRM/Zapier/Upgrader.php
+++ b/CRM/Zapier/Upgrader.php
@@ -26,8 +26,11 @@ class CRM_Zapier_Upgrader extends CRM_Extension_Upgrader_Base {
     $val = Civi::settings()->get('zapierHooks');
     if (self::is_serialized($val)) {
       $val = unserialize($val);
-      if (is_array($val)) {
-        Civi::settings()->set('zapierHooks', $val);
+      if (self::is_serialized($val)) {
+        $val = unserialize($val);
+        if (is_array($val)) {
+          Civi::settings()->set('zapierHooks', $val);
+        }
       }
     }
 
-- 
GitLab