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