* @link https://www.oxidmodule.com */ declare(strict_types=1); namespace D3\Ordermanager\Application\Controller\Admin; use D3\ModCfg\Application\Model\d3filesystem; use D3\ModCfg\Application\Model\d3str; use D3\ModCfg\Application\Model\Exception\wrongModIdException; use D3\Ordermanager\Application\Model\Constants; use D3\Ordermanager\Application\Model\d3ordermanager as Manager; use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; use D3\Ordermanager\Application\Model\d3ordermanager_vars as VariablesTrait; use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController; use OxidEsales\Eshop\Application\Controller\Admin\AdminMall; // required for non fallback case use OxidEsales\Eshop\Core\Language; use OxidEsales\Eshop\Core\Request; class d3_cfg_ordermanageritem_mall extends d3AdminMall { use VariablesTrait; private string $_sModId = 'd3_ordermanager'; /** * DB table having oxshopincl and oxshopexcl fields we are going to deal with */ protected $_sMallTable = "d3modprofile"; protected $_blUseOwnOxid = true; protected $_sMenuItemTitle = 'd3mxordermanager'; protected $_sMenuSubItemTitle = 'd3tbclordermanager_items_mall'; protected $_sHelpLinkMLAdd; protected $_aNaviItems = [ 'new' => [ 'sScript' => 'top.oxid.admin.editThis( -1 );return false;', 'sTranslationId' => 'D3_TOOLTIPS_NEWORDERMANAGER', ], ]; /** * Class name of object to load */ protected $_sObjectClassName = Manager::class; /** * constructor. */ public function __construct() { d3GetOxidDIC()->getParameter($this->_DIC_Instance_Id . 'modcfgid') === $this->_sModId or throw oxNew(wrongModIdException::class, $this->_sModId); parent::__construct(); } public function getProfile(): Manager { /** @var Manager $oManager */ $oManager = d3GetOxidDIC()->get($this->_sObjectClassName); return $oManager; } public function render(): string { $oProfile = $this->getProfile(); /** @var Request $request */ $request = d3GetOxidDIC()->get('d3ox.ordermanager.'.Request::class); $soxId = $request->getRequestEscapedParameter("oxid"); if ($this->_isSetOxid($soxId)) { // load object $oProfile->loadInLang($this->_iEditLang, $soxId); $oProfile = $this->_d3LoadInOtherLang($oProfile, $soxId); } $this->addTplParam('edit', $oProfile); return parent::render(); } public function getUserMessages(): array { return []; } public function getLang(): Language { /** @var Language $lang */ $lang = d3GetOxidDIC()->get('d3ox.ordermanager.'.Language::class); return $lang; } public function getHelpURL(): string { $sUrl = $this->d3GetSet()->getHelpURL(); /** @var d3str $oD3Str */ $oD3Str = d3GetOxidDIC()->get(d3str::class); if ($this->_sHelpLinkMLAdd) { $sUrl .= $oD3Str->unprefixedslashit($this->getLang()->translateString($this->_sHelpLinkMLAdd)); } $oFS = d3GetOxidDIC()->get(d3filesystem::class); $aFileName = $oFS->splitFilename($sUrl); // has no extension if (false == $aFileName['ext']) { return $oD3Str->trailingslashit($sUrl); } return $sUrl; } /** * return type can't be defined, because of unmockable d3_cfg_mod class, use stdClass in test * @return d3_cfg_mod */ public function d3GetSet() { /** @var d3_cfg_mod $modcfg */ $modcfg = d3GetOxidDIC()->get('d3.ordermanager.modcfg'); return $modcfg; } /** * exampleItem: array('new' => array( * 'sScript' => 'top.oxid.admin.editThis( -1 );return false;', * 'sTranslationId' => 'foo', * ) */ public function getNaviItems(): array { return $this->_aNaviItems; } public function d3GetMenuItemTitle(): string { return $this->_sMenuItemTitle; } public function d3GetMenuSubItemTitle(): string { return $this->_sMenuSubItemTitle; } /** * @param $soxId */ protected function _isSetOxid($soxId): bool { return isset($soxId) && $soxId && $soxId != "-1"; } /** * @param $soxId * */ protected function _d3LoadInOtherLang(Manager $oProfile, $soxId): Manager { // load object in other languages $oOtherLang = $oProfile->getAvailableInLangs(); if (false == isset($oOtherLang[$this->_iEditLang])) { $oProfile->loadInLang(key($oOtherLang), $soxId); } return $oProfile; } }