diff --git a/CRM/Zapier/Form/ZapHooks.php b/CRM/Zapier/Form/ZapHooks.php index 1e7937f8595b62cffd9e538dff579408c757ec8d..04d5e0709f1ea4f89b87400001b027616764905f 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 0000000000000000000000000000000000000000..29adfad9a9d4922be5b919038aeebec1f32aafbd --- /dev/null +++ b/CRM/Zapier/Upgrader.php @@ -0,0 +1,40 @@ +<?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 (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 b8dd0998060ff89fe6e4cd9569a46d6d9116916d..bcd6e93b091bcc238d013de4db3ff799f71837a0 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 b161843f218b3b1a9231cae493a83f2067900a82..0167835da1c78446f2c95912dc382406094f4800 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 ac3d214cbd672bc08ef547b87abc414683e640ca..99f190ed45293e0027f8047f735d4a1b18f1e8f5 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'; /**