ModCfg/Application/Controller/Admin/d3_cfg_mod_main.php

608 lines
17 KiB
PHP

<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
*
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
namespace D3\ModCfg\Application\Controller\Admin;
use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod;
use D3\ModCfg\Application\Model\Configuration\d3modprofile;
use D3\ModCfg\Application\Model\Constants;
use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException;
use D3\ModCfg\Application\Model\Installcheck\d3installcheck;
use D3\ModCfg\Application\Model\Log\d3log;
use D3\ModCfg\Application\Model\d3filesystem;
use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception;
use Doctrine\DBAL\Exception as DBALException;
use Exception;
use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Exception\DatabaseErrorException;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Request;
use OxidEsales\Facts\Config\ConfigFile;
use stdClass;
class d3_cfg_mod_main extends AdminDetailsController
{
protected $_sThisTemplate = '@'.Constants::OXID_MODULE_ID.'/admin/base_main';
protected $_sModId = 'd3modcfg_lib';
protected $_sMenuItemTitle = 'd3mxcfg';
protected $_sMenuSubItemTitle = 'd3mxlibs';
protected $_aMessages;
protected $_blUseOwnOxid = false; // edit ModCfg -> false; edit profile -> true
public $soxId = null;
protected $_blUseModCfgStdObject = false;
/** @var string additional multilang item, which will added as last part to help url */
protected $_sHelpLinkMLAdd;
protected $_blHasDebugSwitch = false;
protected $_blHasTestModeSwitch = false;
protected $_sDebugHelpTextIdent = 'D3_CFG_MOD_GENERAL_DEBUGACTIVE_DESC';
protected $_sTestModeHelpTextIdent = 'D3_CFG_MOD_GENERAL_TESTMODEACTIVE_DESC';
protected $_sSavedId;
protected $_aNaviItems = [];
protected $_sD3ObjectClass = d3modprofile::class;
protected $_sSetModId;
protected $_blD3ShowLangSwitch = true;
/**
* constructor
*/
public function __construct()
{
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
startProfile(__METHOD__);
}
$this->addTplParam('aLanguages', Registry::getLang()->getLanguageArray());
$this->addTplParam('actlocation', false);
$this->addTplParam('Errors', false);
$this->addTplParam('box', 'box');
$this->addTplParam('shop', Registry::getConfig()->getActiveShop());
$this->addTplParam('art_category', null);
$this->addTplParam('_act', null);
$this->addTplParam('readonly', false);
$this->addTplParam('lstrt', false);
$this->addTplParam('updatenav', false);
$this->addTplParam('issubvariant', false);
parent::__construct();
/** @var d3modprofile $oListObject */
$oListObject = oxNew($this->_sD3ObjectClass);
if (method_exists($oListObject, 'd3IsMultilang')) {
$this->_blD3ShowLangSwitch = $oListObject->d3IsMultilang();
}
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
stopProfile(__METHOD__);
}
}
/**
* @return bool|d3_cfg_mod
*/
/**
* @return bool|d3_cfg_mod
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function d3GetSet()
{
if (d3_cfg_mod::isCallable()) {
if ($this->_blUseModCfgStdObject) {
return d3_cfg_mod::get($this->d3getModId());
} else {
return d3_cfg_mod::get($this->d3getModId());
}
}
return false;
}
/**
* @return d3log
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function d3getLog()
{
return $this->d3GetSet()->d3getLog();
}
/**
* @return bool|string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getValueStatus()
{
if (false == $this->d3GetSet()->getFieldData('oxvalue') ||
strlen($this->d3GetSet()->getFieldData('oxvalue')) == 0
) {
return 'error';
}
return false;
}
/**
* @return string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function render()
{
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
startProfile(__METHOD__);
}
$sRet = parent::render();
$soxId = $this->getEditObjectId();
if (false == $this->d3GetSet()->getFieldData('oxvalue') && d3log::isCallable()) {
$this->d3getLog()->log(
d3log::INFO,
self::class,
__FUNCTION__,
__LINE__,
"Admin-Error",
"no oValue-Var: " . $this->d3GetSet()->getFieldData('oxmodid')
);
}
$this->addTplParam('blShowLangSwitch', $this->_blD3ShowLangSwitch);
if (false == $this->_blUseOwnOxid) {
$this->addTplParam('oxid', $this->d3GetSet()->getId());
$this->addTplParam('edit', $this->d3GetSet());
// ToDo: required??
$this->addTplParam('value', $this->d3GetSet()->getAllValues());
} else {
$oProfile = $this->getProfile();
$this->addTplParam('edit', $oProfile);
$this->addTplParam('oSet', $oProfile->d3getModCfg());
// check if we right now saved a new entry
if ($this->_sSavedId) {
$soxId = $this->_sSavedId;
$this->addTplParam("oxid", $soxId);
// for reloading upper frame
$this->addTplParam("updatelist", "1");
}
if ($soxId && $soxId != "-1") {
$oOtherLang = $oProfile->getAvailableInLangs();
$aLang = array_diff(Registry::getLang()->getLanguageNames(), $oOtherLang);
if (count($aLang)) {
$this->addTplParam("posslang", $aLang);
}
foreach ($oOtherLang as $id => $language) {
$oLang= new stdClass();
$oLang->sLangDesc = $language;
$oLang->selected = ($id == $this->_iEditLang);
$this->_aViewData["otherlang"][$id] = clone $oLang;
}
}
if ($oProfile->isWriteProtected()) {
$this->addTplParam('readonly', true);
}
}
$this->fakeBottomMenu();
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
stopProfile(__METHOD__);
}
return $sRet;
}
/**
* @return d3modprofile|null
*/
public function getProfile()
{
$oProfile = null;
if ($this->_blUseOwnOxid) {
/** @var d3modprofile $oProfile */
$oProfile = oxNew($this->_sD3ObjectClass);
$soxId = $this->getEditObjectId();
if ($soxId && $soxId != "-1") {
// load object
$oProfile->loadInLang($this->_iEditLang, $soxId);
// load object in other languages
$oOtherLang = $oProfile->getAvailableInLangs();
if (false == isset($oOtherLang[$this->_iEditLang])) {
$oProfile->loadInLang(key($oOtherLang), $soxId);
}
}
}
return $oProfile;
}
/**
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
* @throws Exception
*/
public function save()
{
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
startProfile(__METHOD__);
}
if (false == $this->_blUseOwnOxid) {
$this->d3GetSet()->setLanguage($this->_iEditLang);
$this->d3GetSet()->prepareSaveData();
$this->d3GetSet()->save();
/** @var d3installcheck $oInstallCheck */
$oInstallCheck = oxNew(d3installcheck::class, $this->d3GetSet());
if ($this->d3GetSet()->getFieldData('oxactive') &&
$this->isAdmin() &&
$oInstallCheck->hasErrors()
) {
$this->_aMessages[] = Registry::getLang()->translateString('D3_CFG_MOD_INSTALLCHECK_PROBLEM');
}
} else {
$soxId = Registry::get(Request::class)->getRequestEscapedParameter("oxid");
$aParams = (array) Registry::get(Request::class)->getRequestEscapedParameter("editval");
// default values
$aParams = $this->addDefaultValues($aParams);
/** @var d3modprofile $oProfile */
$oProfile = oxNew($this->_sD3ObjectClass);
$oProfile->setLanguage($this->_iEditLang);
if ($soxId != "-1") {
$oProfile->loadInLang($this->_iEditLang, $soxId);
} else {
$aParams[$oProfile->d3GetFieldLongName('oxid')] = null;
}
$oProfile->setLanguage(0);
$oProfile->assign($aParams);
$oProfile->setLanguage($this->_iEditLang);
$oProfile->prepareSaveData();
$oProfile->save();
// set oxid if inserted
if ($soxId == "-1") {
$this->_sSavedId = $oProfile->getId();
}
$this->setEditObjectId($oProfile->getId());
}
if ((bool) Registry::get(ConfigFile::class)->getVar('iDebug')) {
stopProfile(__METHOD__);
}
}
/**
* Saves article parameters in different language.
* @throws Exception
*/
public function saveinnlang()
{
if (false == $this->_blUseOwnOxid) {
return;
}
$soxId = Registry::get(Request::class)->getRequestEscapedParameter("oxid");
$aParams = Registry::get(Request::class)->getRequestEscapedParameter("editval");
$oProfile = $this->_getLoadedProfile($soxId, $aParams);
$oProfile->setLanguage(0);
$oProfile->assign($aParams);
// apply new language
$sNewLanguage = Registry::get(Request::class)->getRequestEscapedParameter("new_lang");
$oProfile->setLanguage($sNewLanguage);
$oProfile->save();
// set for reload
Registry::getSession()->setVariable("new_lang", $sNewLanguage);
// set oxid if inserted
if ($soxId == "-1") {
$this->_sSavedId = $oProfile->getId();
}
$this->setEditObjectId($oProfile->getId());
}
/**
* @throws Exception
*/
public function d3savecopy()
{
if (false == $this->_blUseOwnOxid) {
return;
}
$soxId = Registry::get(Request::class)->getRequestEscapedParameter("oxid");
$aParams = Registry::get(Request::class)->getRequestEscapedParameter("editval");
$oProfile = $this->_getLoadedProfile($soxId, $aParams);
$oProfile->saveCopy();
// set oxid if inserted
$this->_sSavedId = $oProfile->getId();
$this->addTplParam("updatelist", "1");
}
/**
* @param $soxId
* @param $aParams
*
* @return d3modprofile
*/
protected function _getLoadedProfile($soxId, $aParams)
{
// default values
$aParams = $this->addDefaultValues($aParams);
/** @var d3modprofile $oProfile */
$oProfile = oxNew($this->_sD3ObjectClass);
$oProfile->setLanguage($this->_iEditLang);
if ($soxId != "-1") {
$oProfile->load($soxId);
} else {
$aParams[$oProfile->d3GetFieldLongName('oxid')] = null;
}
return $oProfile;
}
/**
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
* @throws StandardException
* @throws d3ShopCompatibilityAdapterException
* @throws d3_cfg_mod_exception
*/
public function d3exportProfile()
{
/** @var d3modprofile $oProfile */
$oProfile = oxNew($this->_sD3ObjectClass);
$oProfile->setEnableMultilang(false);
$soxId = Registry::get(Request::class)->getRequestEscapedParameter("oxid");
$oProfile->load($soxId);
$oProfile->exportItem('sql');
}
/**
* @param $sStatus
* @param $oSet
* @return bool
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getLogStatus($sStatus, $oSet = false)
{
return $this->d3GetSet()->getLogStatus($sStatus, $oSet);
}
/**
* @return string
*/
public function getUserMessages()
{
return $this->_aMessages;
}
/**
* @return bool
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function checkD3Log()
{
if ($this->d3getLog()) {
return true;
}
return false;
}
/**
* @return d3_cfg_mod
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getLogSet()
{
return $this->d3getLog()->getLogSet();
}
/**
* @return string
*/
public function d3GetMenuItemTitle()
{
return $this->_sMenuItemTitle;
}
/**
* @return string
*/
public function d3GetMenuSubItemTitle()
{
return $this->_sMenuSubItemTitle;
}
/**
* @return string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getHelpURL()
{
$sUrl = $this->d3GetSet()->getHelpURL();
/** @var d3filesystem $oFS */
$oFS = oxNew(d3filesystem::class);
if ($this->_sHelpLinkMLAdd) {
$sUrl .= $oFS->unprefixedslashit(Registry::getLang()->translateString($this->_sHelpLinkMLAdd));
}
$aFileName = $oFS->splitFilename($sUrl);
// has no extension
if (false == $aFileName['ext']) {
$sUrl = $oFS->trailingslashit($sUrl);
}
return $sUrl;
}
/**
* @return bool
*/
public function getHasDebugSwitch()
{
return $this->_blHasDebugSwitch;
}
/**
* @return string
*/
public function getDebugHelpTextIdent()
{
return $this->_sDebugHelpTextIdent;
}
/**
* @return bool
*/
public function getHasTestSwitch()
{
return $this->_blHasTestModeSwitch;
}
/**
* @return string
*/
public function getTestModeHelpTextIdent()
{
return $this->_sTestModeHelpTextIdent;
}
/**
* @param $sLogType
* @return string
* @throws DBALException
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getLogTypeTranslation($sLogType)
{
return $this->d3getLog()->getLogTypeTranslation($sLogType);
}
/**
* @return string
*/
public function d3getModId()
{
return $this->_sModId;
}
/**
* exampleItem: array('new' => array(
* 'sScript' => 'top.oxid.admin.editThis( -1 );return false;',
* 'sTranslationId' => 'foo',
* )
* @return array
*/
public function getNaviItems()
{
return $this->_aNaviItems;
}
/**
* @return array
*/
public function d3getAdditionalFormParams()
{
return [];
}
public function fakeBottomMenu()
{
$myAdminNavig = new stdClass();
$myAdminNavig->ordermanager_new = 1;
$this->addTplParam('bottom_buttons', $myAdminNavig);
}
/**
* @return mixed
* @throws DatabaseConnectionException
* @throws DatabaseErrorException
*/
public function getFolderList()
{
/** @var d3modprofile $oProfile */
$oProfile = oxNew($this->_sD3ObjectClass);
return $oProfile->d3getFolderList();
}
/**
* Sets default values for empty article (currently does nothing), returns
* array with parameters.
*
* @param array $aParams Parameters, to set default values
*
* @return array
*/
public function addDefaultValues($aParams)
{
return $aParams;
}
}