* @link https://www.oxidmodule.com */ declare(strict_types=1); namespace D3\DataWizard\Application\Model; use D3\DataWizard\Application\Model\Actions\FixArtextendsItems; use D3\DataWizard\Application\Model\Exceptions\DataWizardException; use D3\DataWizard\Application\Model\Exports\InactiveCategories; use D3\DataWizard\Application\Model\Exports\KeyFigures; use OxidEsales\Eshop\Core\Registry; class Configuration { const GROUP_SHOP = 'D3_DATAWIZARD_GROUP_SHOP'; const GROUP_CATEGORY = 'D3_DATAWIZARD_GROUP_CATEGORIES'; const GROUP_ARTICLES = 'D3_DATAWIZARD_GROUP_ARTICLES'; const GROUP_USERS = 'D3_DATAWIZARD_GROUP_USERS'; const GROUP_ORDERS = 'D3_DATAWIZARD_GROUP_ORDERS'; const GROUP_REMARKS = 'D3_DATAWIZARD_GROUP_REMARKS'; protected $actions = []; protected $exports = []; public function __construct() { $this->configure(); } public function configure() { if (false === Registry::getConfig()->getConfigParam('d3datawizard_hideexamples', false)) { $this->registerAction(self::GROUP_ARTICLES, oxNew(FixArtextendsItems::class)); $this->registerExport(self::GROUP_CATEGORY, oxNew(InactiveCategories::class)); $this->registerExport(self::GROUP_SHOP, oxNew(KeyFigures::class)); } } /** * @param $group * @param ActionBase $action */ public function registerAction($group, ActionBase $action) { $this->actions[$group][md5(get_class($action))] = $action; } /** * @param $group * @param ExportBase $export */ public function registerExport($group, ExportBase $export) { $this->exports[$group][md5(get_class($export))] = $export; } /** * @return array */ public function getGroupedActions(): array { return $this->actions; } /** * @return array */ public function getGroupedExports(): array { return $this->exports; } /** * @return array */ public function getActionGroups(): array { return array_keys($this->actions); } /** * @return array */ public function getExportGroups(): array { return array_keys($this->exports); } /** * @param $group * * @return mixed */ public function getActionsByGroup($group) { return $this->actions[$group]; } /** * @param $group * * @return mixed */ public function getExportsByGroup($group) { return $this->exports[$group]; } /** * @return array */ public function getAllActions() : array { $all = []; foreach ($this->getActionGroups() as $group) { $all = array_merge($all, $this->getActionsByGroup($group)); } return $all; } /** * @return array */ public function getAllExports() : array { $all = []; foreach ($this->getExportGroups() as $group) { $all = array_merge($all, $this->getExportsByGroup($group)); } return $all; } /** * @param $id * * @return ActionBase */ public function getActionById($id) : ActionBase { return $this->getAllActions()[$id]; } /** * @param $id * * @return ExportBase */ public function getExportById($id) : ExportBase { $allExports = $this->getAllExports(); if (false == $allExports[$id]) { throw oxNew(DataWizardException::class, 'no export with id '.$id); } return $allExports[$id]; } }