* @link https://www.oxidmodule.com */ namespace D3\Contenttabs\Modules\Application\Model; use D3\Contenttabs\Application\Model\contentTabs as TabsModel; use D3\Contenttabs\Application\Model\contentTabs; use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; use Doctrine\DBAL\DBALException; use Exception; use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; use OxidEsales\Eshop\Core\Exception\StandardException; use OxidEsales\Eshop\Core\Field; /** * extends Article manager with content tab functionality */ class d3_oxarticle_longtexts extends d3_oxarticle_longtexts_parent { protected $_aD3ContentTabsSkipSaveFields = []; private $_sModId = 'd3contenttabs'; /** * @param string $sOXID * * @return bool * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException */ public function load($sOXID) { $blReturn = parent::load($sOXID); if (d3_cfg_mod::get($this->_sModId)->isActive()) { /** @var contentTabs $oContentTabs */ $oContentTabs = oxNew(contentTabs::class, $this); $oContentTabs->addTabFields(); } return $blReturn; } /** * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function save() { $blRet = parent::save(); if (d3_cfg_mod::get($this->_sModId)->isActive()) { /** @var contentTabs $oContentTabs */ $oContentTabs = oxNew(contentTabs::class, $this); $oContentTabs->saveTabFields(); } return $blRet; } /** * Deletes record and other information related to this article such as images from DB, * also removes variants. Returns true if entry was deleted. * * @param string $sOXID Article id * * @throws Exception * * @return bool */ public function delete($sOXID = null) { if (!$sOXID) { $sOXID = $this->getId(); } if (d3_cfg_mod::get($this->_sModId)->isActive() && $sOXID) { oxNew(TabsModel::class, $this)->deleteAllLongtexts($sOXID); } return parent::delete($sOXID); } /** * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ protected function _skipSaveFields() { parent::_skipSaveFields(); if (d3_cfg_mod::get($this->_sModId)->isActive()) { $this->_aSkipSaveFields = array_merge($this->_aSkipSaveFields, $this->_aD3ContentTabsSkipSaveFields); } } /** * @return array * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function getFieldNames() { if (d3_cfg_mod::get($this->_sModId)->isActive()) { /** @var contentTabs $oContentTabs */ $oContentTabs = oxNew(contentTabs::class, $this); foreach ($oContentTabs->getNewArticleFields(false == $this->_blEmployMultilanguage) as $sFieldName) { $this->_addField($sFieldName, (int) $oContentTabs->isMultilingualField($oContentTabs->getTableFieldNameFromArticleField($sFieldName))); if (! in_array($sFieldName, $this->_aD3ContentTabsSkipSaveFields)) { $this->_aD3ContentTabsSkipSaveFields[] = $sFieldName; } } } return parent::getFieldNames(); } public function getSelectFields($forceCoreTableUsage = null) { $sFieldList = parent::getSelectFields(); $viewName = $this->getViewName($forceCoreTableUsage); $aFieldList = explode(', ', $sFieldList); foreach ($this->_aD3ContentTabsSkipSaveFields as $sTabField) { if ($viewName) { $searchField = "`$viewName`.`$sTabField`"; } else { $searchField = ".`$sTabField`"; } $index = array_search($searchField, $aFieldList); if (false !== $index) { unset($aFieldList[ $index ]); } } return implode(', ', $aFieldList); } /** * @return contentTabs */ public function d3GetContentTabs() { return oxNew(contentTabs::class, $this); } /** * Get article long description * * @return object $oField field object * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function getLongDescription() { if (false === d3_cfg_mod::get($this->_sModId)->isActive() || $this->d3CanShowTab(1)) { return parent::getLongDescription(); } return oxNew(Field::class); } /** * @param $iTab * * @return bool * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function d3CanShowTab($iTab) { if (d3_cfg_mod::get($this->_sModId)->isActive()) { return $this->d3GetContentTabs()->canGetLongDescription($iTab); } return false; } /** * @param $iTab * * @return mixed|object|Field|string * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function d3GetLongDescriptionTitle($iTab) { return $this->d3GetContentTabs()->getLongDescriptionTitleFromArticleObject($iTab); } /** * @param $iTab * * @return mixed|object|Field * @throws DBALException * @throws DatabaseConnectionException * @throws DatabaseErrorException * @throws StandardException * @throws d3ShopCompatibilityAdapterException * @throws d3_cfg_mod_exception */ public function d3GetLongDescription($iTab) { if ($iTab == 1) { return $this->getLongDescription(); } return $this->d3GetContentTabs()->getLongDescriptionFromArticleObject($iTab); } /** * @return bool */ public function d3IsMultilang() { return $this->_blEmployMultilanguage; } }