From ca2f69f918272f33f63fe52b9c5994f155850033 Mon Sep 17 00:00:00 2001 From: Sam Gavinio Date: Mon, 9 Oct 2017 17:10:55 +0800 Subject: [PATCH] Initialize config set if it is empty. --- .../Zendesk/Zendesk/Model/Api/ConfigSets.php | 73 +++++++++++++++++++ .../Zendesk/Zendesk/Model/Observer.php | 23 ++++-- 2 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 src/app/code/community/Zendesk/Zendesk/Model/Api/ConfigSets.php diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Api/ConfigSets.php b/src/app/code/community/Zendesk/Zendesk/Model/Api/ConfigSets.php new file mode 100644 index 00000000..bcacd74f --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/Model/Api/ConfigSets.php @@ -0,0 +1,73 @@ +_call('embeddable/config'); + + return $response ? $response['embeds'] : []; + } + + /** + * Initializes Zendesk's WebWidget + * + * @param array $config + */ + public function initialize($config = []) + { + $config = array_merge([], $this->_getDefaultWidgetConfig()); + + return $this->_call('embeddable/api/config_sets.json', null, 'POST', [ + 'config_set' => $config, + ]); + } + + /** + * Override the _getUrl method to prevent appending the api/v2 base path + * + * @param string $path + * @return string + */ + protected function _getUrl($path) + { + return 'https://' . $this->getDomain() . '/' . trim($path, '/'); + } + + /** + * Returns the default widget config + * + * @return array + */ + private function _getDefaultWidgetConfig() + { + return [ + 'color' => self::DEFAULT_WIDGET_COLOR, + 'position' => self::DEFAULT_WIDGET_POSITION, + ]; + } +} diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php index c99479b0..30559d9c 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Observer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Observer.php @@ -101,17 +101,26 @@ public function saveConfig(Varien_Event_Observer $observer) // If the zendesk domain is not found in the web widget snippet (wrapped with quotes), generate it again $zDomain = Mage::getStoreConfig('zendesk/general/domain', $storeCode); $widgetSnippet = Mage::getStoreConfig('zendesk/frontend_features/web_widget_code_snippet', $storeCode); - // Case insensitive search with single and double quotes, still better performance than 1 regexp search - if($zDomain && stripos($widgetSnippet, "'{$zDomain}'") === false && stripos($widgetSnippet, '"'.$zDomain.'"') === false) { - $webWidgetSnippet=<<find(); + if (! isset($embeds['launcher'])) { + Mage::getModel('zendesk/api_configsets')->initialize(); + } + } + + // Case insensitive search with single and double quotes, still better performance than 1 regexp search + $hasUnatchedSnippet = stripos($widgetSnippet, "'{$zDomain}'") === false && stripos($widgetSnippet, '"'.$zDomain.'"') === false; + if (! $hasUnmatchedSnippet) { + $webWidgetSnippet=<< EOJS; - - Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_active', 1); - Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_snippet', $webWidgetSnippet); - } elseif (empty($zDomain)) { + Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_snippet', $webWidgetSnippet); + } + } else { Mage::getModel('core/config')->saveConfig('zendesk/frontend_features/web_widget_code_snippet', ''); } }