diff --git a/Application/Controller/Admin/GA4AdminUserInterface_main.php b/Application/Controller/Admin/GA4AdminUserInterface_main.php index e15d461..dcf96c0 100644 --- a/Application/Controller/Admin/GA4AdminUserInterface_main.php +++ b/Application/Controller/Admin/GA4AdminUserInterface_main.php @@ -8,9 +8,13 @@ use D3\GoogleAnalytics4\Application\Model\Constants; use D3\GoogleAnalytics4\Application\Model\ManagerHandler; use D3\GoogleAnalytics4\Application\Model\ManagerTypes; use OxidEsales\Eshop\Application\Controller\Admin\ModuleConfiguration; +use OxidEsales\Eshop\Core\Module\Module; use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Str; use OxidEsales\Eshop\Core\ViewConfig; use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Bridge\ModuleConfigurationDaoBridge; +use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Bridge\ModuleConfigurationDaoBridgeInterface; use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingService; use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface; @@ -27,9 +31,99 @@ class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controlle $this->addTplParam('d3ManagerTypeArray', oxNew(ManagerTypes::class)->getManagerList()); $this->addTplParam('d3CurrentCMP', oxNew(ManagerHandler::class)->getActManager()); + $tmpArray = []; + + try { + $moduleConfiguration = ContainerFactory::getInstance() + ->getContainer() + ->get(ModuleConfigurationDaoBridgeInterface::class) + ->get(Constants::OXID_MODULE_ID); + + if (!empty($moduleConfiguration->getModuleSettings())) { + $formatModuleSettings = $this + ->d3FormatModuleSettingsForTemplate($moduleConfiguration->getModuleSettings()); + + $tmpArray["var_constraints"] = $formatModuleSettings['constraints']; + $tmpArray["var_grouping"] = $formatModuleSettings['grouping']; + + foreach ($this->_aConfParams as $sType => $sParam) { + $tmpArray[$sParam] = $formatModuleSettings['vars'][$sType] ?? null; + } + } + } catch (\Throwable $throwable) { + Registry::getUtilsView()->addErrorToDisplay($throwable); + Registry::getLogger()->error($throwable->getMessage()); + } + + $module = oxNew(Module::class); + $module->load(Constants::OXID_MODULE_ID); + + dumpVar($module->getModuleData()['settings']); + echo "





"; + dumpVar($tmpArray); + die; + return $return; } + private function d3FormatModuleSettingsForTemplate(array $moduleSettings): array + { + $confVars = [ + 'bool' => [], + 'str' => [], + 'arr' => [], + 'aarr' => [], + 'select' => [], + 'password' => [], + ]; + $constraints = []; + $grouping = []; + + foreach ($moduleSettings as $setting) { + $name = $setting->getName(); + $valueType = $setting->getType(); + $value = null; + + if ($setting->getValue() !== null) { + switch ($setting->getType()) { + case 'arr': + $value = $this->arrayToMultiline($setting->getValue()); + break; + case 'aarr': + $value = $this->aarrayToMultiline($setting->getValue()); + break; + case 'bool': + $value = filter_var($setting->getValue(), FILTER_VALIDATE_BOOLEAN); + break; + default: + $value = $setting->getValue(); + break; + } + $value = Str::getStr()->htmlentities($value); + } + + $group = $setting->getGroupName(); + + + $confVars[$valueType][$name] = $value; + $constraints[$name] = $setting->getConstraints() ?? ''; + + if ($group) { + if (!isset($grouping[$group])) { + $grouping[$group] = [$name => $valueType]; + } else { + $grouping[$group][$name] = $valueType; + } + } + } + + return [ + 'vars' => $confVars, + 'constraints' => $constraints, + 'grouping' => $grouping, + ]; + } + public function save() { parent::save(); @@ -90,33 +184,37 @@ class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controlle { foreach ($aParams as $sConfigType => $aConfigParams) { foreach ($aConfigParams as $sSettingName => $sSettingValue){ - $oModConfig = oxNew(ModuleConfiguration::class); + try { + //if($this->d3GetModuleConfigParam($sSettingName) !== $sSettingValue){} + if ($this->d3SettingExists($sSettingName)){ + $sSettingName = Constants::OXID_MODULE_ID.$sSettingName; - /* ToDo: - * in the array is a select field, we must convert it to str or check if the "saveCollection" is the select save method? - * - * */ + // converting select to str + if ($sConfigType === "select"){ + $sConfigType = "str"; + } - //if($this->d3GetModuleConfigParam($sSettingName) !== $sSettingValue){} - if ($this->d3SettingExists($sSettingName)){ - $sSettingName = Constants::OXID_MODULE_ID.$sSettingName; - switch ($sConfigType){ - case 'str': - $this->d3GetModuleSettings()->saveString($sSettingName, $sSettingValue,Constants::OXID_MODULE_ID); - break; - case 'bool': - $this->d3GetModuleSettings()->saveBoolean($sSettingName, $sSettingValue,Constants::OXID_MODULE_ID); - break; - default: - Registry::getLogger()->error( - 'No given datatype defined!', - [Constants::OXID_MODULE_ID." -> ".__METHOD__.": ".__LINE__." with '".$sSettingName."'"] - ); - } + switch ($sConfigType){ + case 'str': + $this->d3GetModuleSettings()->saveString($sSettingName, $sSettingValue,Constants::OXID_MODULE_ID); + break; + case 'bool': + $this->d3GetModuleSettings()->saveBoolean($sSettingName, $sSettingValue,Constants::OXID_MODULE_ID); + break; + default: + Registry::getLogger()->error( + 'No given datatype defined!', + [Constants::OXID_MODULE_ID." -> ".__METHOD__.": ".__LINE__." with '".$sSettingName."'"] + ); + } } + } catch (\Throwable $throwable) { + Registry::getUtilsView()->addErrorToDisplay($throwable); + Registry::getLogger()->error($throwable->getMessage()); + } + } } - die; } /** @@ -125,6 +223,42 @@ class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controlle */ public function d3GetModuleConfigParam(string $configParamName) { + $container = ContainerFactory::getInstance()->getContainer(); + $moduleConfiguration = $container->get(ModuleConfigurationDaoBridgeInterface::class)->get($moduleId); + + + return Registry::get(ViewConfig::class)->d3GetModuleConfigParam($configParamName); } + + private function d3convertSettingsToArray(\OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration $moduleConfiguration): array + { + $data = []; + + foreach ($moduleConfiguration->getModuleSettings() as $index => $setting) { + if ($setting->getGroupName()) { + $data[$index]['group'] = $setting->getGroupName(); + } + + if ($setting->getName()) { + $data[$index]['name'] = $setting->getName(); + } + + if ($setting->getType()) { + $data[$index]['type'] = $setting->getType(); + } + + $data[$index]['value'] = $setting->getValue(); + + if (!empty($setting->getConstraints())) { + $data[$index]['constraints'] = $setting->getConstraints(); + } + + if ($setting->getPositionInGroup() > 0) { + $data[$index]['position'] = $setting->getPositionInGroup(); + } + } + + return $data; + } } \ No newline at end of file