protected function saveStructureSettings(Structure $oStructure) { /** @var Module $oModule */ $oModule = $oStructure->getModule(); /** @var ModuleSetting[] $aModuleSettings */ $aModuleSettings = $oModule->getModuleSettings(); foreach ($aModuleSettings as $oModuleSetting) { /** @var StructureSetting $oStructureSettings */ $oStructureSettings = DataSource::factory(StructureSetting::cls()); $oStructureSettings->builder()->where("module_setting_id={$oModuleSetting->id}")->whereAnd()->where("structure_id={$oStructure->id}"); /** @var StructureSetting[] $aStructureSettings */ $aStructureSettings = $oStructureSettings->findAll(); if (!empty($aStructureSettings)) { $oStructureSetting = $aStructureSettings[0]; $oStructureSetting->value = is_null($oModuleSetting->entity) ? (string) Param::post($oModuleSetting->parameter, false)->asString() : (string) Param::post($oModuleSetting->parameter, false)->asInteger(); $oStructureSetting->commit(); } else { /** @var StructureSetting $oNewStructureSetting */ $oNewStructureSetting = DataSource::factory(StructureSetting::cls()); $oNewStructureSetting->structure_id = $oStructure->id; $oNewStructureSetting->module_setting_id = $oModuleSetting->id; $oNewStructureSetting->value = is_null($oModuleSetting->entity) ? Param::post($oModuleSetting->parameter)->asString() : Param::post($oModuleSetting->parameter)->asInteger(); $oNewStructureSetting->commit(); } } }
protected function executeModule(Structure $oStructure) { if (!$oStructure->active || $oStructure->module_id == 0) { $controllerName = $this->Router->error404(); $action = 'actionIndex'; $controller = new $controllerName(); $controller->{$action}(); return; } $oModule = $oStructure->getModule(); $modulePath = SFW_MODULES_ROOT . ucfirst($oModule->name) . DIRECTORY_SEPARATOR; $indexFilePath = "{$modulePath}manifest.php"; $manifest = (include $indexFilePath); if (!$oStructure->anchor) { $frame = $this->getActiveFrame($oStructure); $seoTitle = $oStructure->seo_title; $seoDescription = $oStructure->seo_description; $seoKeywords = $oStructure->seo_keywords; $frame->setTitle(empty($seoTitle) ? $oStructure->name : $seoTitle); if (!empty($seoDescription)) { $frame->addMeta(['name' => 'description', 'content' => $seoDescription]); } if (!empty($seoKeywords)) { $frame->addMeta(['name' => 'keywords', 'content' => $seoKeywords]); } } else { $oClosestIndStructure = $oStructure->getClosetsIndStructure(); $frame = $this->getActiveFrame($oClosestIndStructure); } $run = $manifest['run']; $controllerName = "App\\Modules\\" . ucfirst($oModule->name) . "\\" . "{$run['controller']}"; $aModuleSettings = $oModule->getModuleSettings(); $aStructureSettings = $oStructure->getStructureSettings(); /** @var PublicAreaController $controller */ $controller = new $controllerName($frame, $manifest, $oStructure); foreach ($aStructureSettings as $oStructureSetting) { foreach ($aModuleSettings as $oModuleSetting) { if ($oModuleSetting->id == $oStructureSetting->module_setting_id) { $controller->{$oModuleSetting->parameter} = $oStructureSetting->value; } } } $controller->{$manifest['run']['action']}(); $aStructureFragments = $oStructure->getStructureFragments(); foreach ($aStructureFragments as $oStructureFragment) { if ($oStructureFragment->active && !$oStructureFragment->deleted) { $this->executeModule($oStructureFragment); } } }