From bf3865f08953eb02daf191e65d7c76ea50054304 Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Thu, 24 Dec 2015 11:51:39 +0000 Subject: [PATCH] change component registration to dynamic, module can disabled without errors --- .gitattributes | 1 + copy_this/.noencode | 2 +- .../d3/d3geoip/components/d3cmp_geoip.php | 2 +- copy_this/modules/d3/d3geoip/metadata.php | 4 +- .../controllers/d3_oxshopcontrol_geoip.php | 58 ++ .../d3/d3geoip/setup/d3geoip_update.php | 935 +++++++++--------- 6 files changed, 541 insertions(+), 461 deletions(-) create mode 100644 copy_this/modules/d3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip.php diff --git a/.gitattributes b/.gitattributes index d8c517b..73b98c1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11,6 +11,7 @@ copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php -text copy_this/modules/d3/d3geoip/menu.xml -text copy_this/modules/d3/d3geoip/metadata.php -text copy_this/modules/d3/d3geoip/models/d3geoip.php -text +copy_this/modules/d3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip.php -text copy_this/modules/d3/d3geoip/picture.png -text copy_this/modules/d3/d3geoip/setup/d3geoip_update.php -text copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php -text diff --git a/copy_this/.noencode b/copy_this/.noencode index 852e36b..48d822f 100644 --- a/copy_this/.noencode +++ b/copy_this/.noencode @@ -1 +1 @@ -copyAsIsFiles = modules/d3/d3geoip/components, modules/d3/d3geoip/controllers, modules/d3/d3geoip/models/d3geoip_update.php, modules/d3/d3geoip/views, modules/d3/d3geoip/IntelliSenseHelper.php, modules/d3/d3geoip/metadata.php \ No newline at end of file +copyAsIsFiles = modules/d3/d3geoip/components, modules/d3/d3geoip/controllers, modules/d3/d3geoip/models/d3geoip_update.php, modules/d3/d3geoip/modules/controllers, modules/d3/d3geoip/views, modules/d3/d3geoip/IntelliSenseHelper.php, modules/d3/d3geoip/metadata.php \ No newline at end of file diff --git a/copy_this/modules/d3/d3geoip/components/d3cmp_geoip.php b/copy_this/modules/d3/d3geoip/components/d3cmp_geoip.php index 6cfd75f..af86929 100644 --- a/copy_this/modules/d3/d3geoip/components/d3cmp_geoip.php +++ b/copy_this/modules/d3/d3geoip/components/d3cmp_geoip.php @@ -45,4 +45,4 @@ class d3cmp_geoip extends oxView parent::init(); } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/metadata.php b/copy_this/modules/d3/d3geoip/metadata.php index 7cabca1..0e9489d 100644 --- a/copy_this/modules/d3/d3geoip/metadata.php +++ b/copy_this/modules/d3/d3geoip/metadata.php @@ -19,7 +19,9 @@ $aModule = array( 'author' => 'D³ Data Development (Inh.: Thomas Dartsch)', 'email' => 'support@shopmodule.com', 'url' => 'http://www.oxidmodule.com/', - 'extend' => array(), + 'extend' => array( + 'oxshopcontrol' => 'd3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip', + ), 'files' => array( 'd3cmp_geoip' => 'd3/d3geoip/components/d3cmp_geoip.php', 'd3_cfg_geoipset' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset.php', diff --git a/copy_this/modules/d3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip.php b/copy_this/modules/d3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip.php new file mode 100644 index 0000000..bf17d26 --- /dev/null +++ b/copy_this/modules/d3/d3geoip/modules/controllers/d3_oxshopcontrol_geoip.php @@ -0,0 +1,58 @@ + + * @link http://www.oxidmodule.com + */ + +class d3_oxshopcontrol_geoip extends d3_oxshopcontrol_geoip_parent +{ + /** + * @param null $sClass + * @param null $sFunction + * @param null $aParams + * @param null $aViewsChain + * @return null + */ + public function start ($sClass = null, $sFunction = null, $aParams = null, $aViewsChain = null) + { + $this->_d3AddGeoIpComponent(); + + parent::start($sClass, $sFunction, $aParams, $aViewsChain); + } + + /** + * check, if developer mode has to be enabled + * + * @return bool + */ + protected function _d3AddGeoIpComponent() + { + startProfile(__METHOD__); + + $aUserComponentNames = oxRegistry::getConfig()->getConfigParam('aUserComponentNames'); + $sGeoIpCmpName = 'd3cmp_geoip'; + $blDontUseCache = 1; + + if (false == is_array($aUserComponentNames)) { + $aUserComponentNames = array(); + } + + if (false == in_array($sGeoIpCmpName, array_keys($aUserComponentNames))) { + $aUserComponentNames[$sGeoIpCmpName] = $blDontUseCache; + oxRegistry::getConfig()->setConfigParam('aUserComponentNames', $aUserComponentNames); + } + + stopProfile(__METHOD__); + } +} diff --git a/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php index 6dc06bd..6fc3efc 100644 --- a/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php +++ b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php @@ -1,458 +1,477 @@ - - * @link http://www.oxidmodule.com - */ - -class d3geoip_update extends d3install_updatebase -{ - public $sModKey = 'd3_geoip'; - public $sModName = 'GeoIP'; - public $sModVersion = '3.0.1.0'; - public $sModRevision = '67'; - public $sBaseConf = '5FibjlIQlRvbWMzY29mVi85RXFxbkc5bFI3R24rNkd5Y0lEcXJFOGhtaGExRVcyaEF6a281cVhRUXFMU -0d6dnNDbCtLRVdObFh3bnVEdUNRTFJrVlE5VGtsRkF3Tyt4TU1Pd290WDliOTQ2SUE5Skk0eTcxTGdlT -XZna0dhS2ZOekJUSC94ZUd5YmxXZzRXcG5QSWcvZnFJa1l0N1MrdWRZaFU1VG5nUGFwNEF1WTh6azNja -Gs3SmtzQ05SVjROSGdSZ2N0S3Q1TTV1RGlCSU5RZnh1dGVNNVd6bTBzMU1FdHFiNytJQldBRjRTNmx3U -VVlRkhrRzYxYUtpaWNBOUUrLzZ2YjN5SDM1cllVMTIrYUFPRnRYcFpibHVBQytEQVFnNFV0RWpFZXAwd -FE9'; - public $sRequirements = ''; - public $sBaseValue = ''; - - protected $_aUpdateMethods = array( - array('check' => 'checkGeoIpTableExist', - 'do' => 'updateGeoIpTableExist'), - array('check' => 'checkGeoIpItems', - 'do' => 'updateGeoIpItems'), - array('check' => 'checkModCfgItemExist', - 'do' => 'updateModCfgItemExist'), - array('check' => 'checkGeoIpFields', - 'do' => 'fixGeoIpFields'), - array('check' => 'checkIndizes', - 'do' => 'fixIndizes'), - array('check' => 'hasUnregisteredFiles', - 'do' => 'showUnregisteredFiles'), - array('check' => 'checkRegisteredComponent', - 'do' => 'registerComponent'), - array('check' => 'checkModCfgSameRevision', - 'do' => 'updateModCfgSameRevision'), - ); - - // Standardwerte für checkMultiLangTables() und fixRegisterMultiLangTables() - public $aMultiLangTables = array(); - - public $aFields = array( - 'D3GEOIPSHOP' => array( - 'sTableName' => 'oxcountry', - 'sFieldName' => 'D3GEOIPSHOP', - 'sType' => 'VARCHAR(10)', - 'blNull' => false, - 'sDefault' => 'oxbaseshop', - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3GEOIPLANG' => array( - 'sTableName' => 'oxcountry', - 'sFieldName' => 'D3GEOIPLANG', - 'sType' => 'TINYINT(2)', - 'blNull' => false, - 'sDefault' => '-1', - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3GEOIPCUR' => array( - 'sTableName' => 'oxcountry', - 'sFieldName' => 'D3GEOIPCUR', - 'sType' => 'TINYINT(2)', - 'blNull' => false, - 'sDefault' => '-1', - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3GEOIPURL' => array( - 'sTableName' => 'oxcountry', - 'sFieldName' => 'D3GEOIPURL', - 'sType' => 'VARCHAR(255)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3STARTIP' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3STARTIP', - 'sType' => 'VARCHAR(39)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3ENDIP' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3ENDIP', - 'sType' => 'VARCHAR(39)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3STARTIPNUM' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3STARTIPNUM', - 'sType' => 'DECIMAL(38,0)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3ENDIPNUM' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3ENDIPNUM', - 'sType' => 'DECIMAL(38,0)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3ISO' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3ISO', - 'sType' => 'CHAR(2)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - 'D3COUNTRYNAME' => array( - 'sTableName' => 'd3geoip', - 'sFieldName' => 'D3COUNTRYNAME', - 'sType' => 'VARCHAR(50)', - 'blNull' => false, - 'sDefault' => false, - 'sComment' => '', - 'sExtra' => '', - 'blMultilang' => false, - ), - ); - - public $aIndizes = array( - 'IPNUM' => array( - 'sTableName' => 'd3geoip', - 'sType' => 'INDEX', - 'sName' => 'IPNUM', - 'aFields' => array( - 'D3STARTIPNUM' => 'D3STARTIPNUM', - 'D3ENDIPNUM' => 'D3ENDIPNUM', - ), - ), - 'D3ISO' => array( - 'sTableName' => 'd3geoip', - 'sType' => 'INDEX', - 'sName' => 'D3ISO', - 'aFields' => array( - 'D3ISO' => 'D3ISO', - ), - ), - ); - - /** - * @return bool - */ - public function checkGeoIpTableExist() - { - return $this->_checkTableNotExist('d3geoip'); - } - - /** - * @return bool - */ - public function updateGeoIpTableExist() - { - $blRet = false; - if ($this->checkGeoIpTableExist()) { - $blRet = $this->_addTable2('d3geoip', $this->aFields, $this->aIndizes, 'GeoIP', 'MyISAM'); - } - - return $blRet; - } - - /** - * @return bool - */ - public function checkGeoIpItems() - { - /** @var $oShop oxshop */ - $aWhere = array( - 'D3ISO' => 'DE', - ); - - $blRet = $this->_checkTableItemNotExist('d3geoip', $aWhere); - - return $blRet; - } - - /** - * @return bool - */ - public function updateGeoIpItems() - { - return $this->_confirmMessage('D3_GEOIP_UPDATE_ITEMINSTALL'); - } - - /** - * @return bool - */ - public function checkModCfgItemExist() - { - $blRet = false; - foreach ($this->getShopList() as $oShop) { - /** @var $oShop oxshop */ - $aWhere = array( - 'oxmodid' => $this->sModKey, - 'oxnewrevision' => $this->sModRevision, - 'oxshopid' => $oShop->getId(), - ); - - $blRet = $this->_checkTableItemNotExist('d3_cfg_mod', $aWhere); - - if ($blRet) { - return $blRet; - } - } - - return $blRet; - } - - /** - * @return bool - */ - public function updateModCfgItemExist() - { - $blRet = false; - - if ($this->checkModCfgItemExist()) { - foreach ($this->getShopList() as $oShop) { - /** @var $oShop oxshop */ - $aWhere = array( - 'oxmodid' => $this->sModKey, - 'oxshopid' => $oShop->getId(), - 'oxnewrevision' => $this->sModRevision, - ); - - if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere)) { - // update don't use this property - unset($aWhere['oxnewrevision']); - - $aInsertFields = array( - array ( - 'fieldname' => 'OXID', - 'content' => "md5('" . $this->sModKey . " " . $oShop->getId() . " de')", - 'force_update' => true, - 'use_quote' => false, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXSHOPID', - 'content' => $oShop->getId(), - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXMODID', - 'content' => $this->sModKey, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXNAME', - 'content' => $this->sModName, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXACTIVE', - 'content' => "0", - 'force_update' => false, - 'use_quote' => false, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXBASECONFIG', - 'content' => $this->sBaseConf, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXSERIAL', - 'content' => "", - 'force_update' => false, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXINSTALLDATE', - 'content' => "NOW()", - 'force_update' => true, - 'use_quote' => false, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXVERSION', - 'content' => $this->sModVersion, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXSHOPVERSION', - 'content' => oxRegistry::getConfig()->getEdition(), - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array ( - 'fieldname' => 'OXREQUIREMENTS', - 'content' => $this->sRequirements, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ), - array( - 'fieldname' => 'OXVALUE', - 'content' => $this->sBaseValue, - 'force_update' => false, - 'use_quote' => true, - 'use_multilang' => false, - ), - array( - 'fieldname' => 'OXNEWREVISION', - 'content' => $this->sModRevision, - 'force_update' => true, - 'use_quote' => true, - 'use_multilang' => false, - ) - ); - $blRet = $this->_updateTableItem2('d3_cfg_mod', $aInsertFields, $aWhere); - - if ($this->getStepByStepMode()) { - break; - } - } - } - } - return $blRet; - } - - /** - * change default value for shop id in EE - * @return bool - */ - public function checkGeoIpFields() - { - /** @var $oShop oxshop */ - $oShop = $this->getShopList()->current(); - $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); - - return $this->checkFields(); - } - - /** - * change default value for shop id in EE - * @return bool - */ - public function fixGeoIpFields() - { - /** @var $oShop oxshop */ - $oShop = $this->getShopList()->current(); - $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); - - return $this->fixFields(); - } - - /** - * @return bool - */ - public function hasUnregisteredFiles() - { - return $this->_hasUnregisteredFiles('d3geoip', array('d3FileRegister')); - } - - /** - * @return bool - */ - public function showUnregisteredFiles() - { - return $this->_showUnregisteredFiles('d3geoip', array('d3FileRegister')); - } - - /** - * @return bool - */ - public function checkRegisteredComponent() - { - $sVarName = 'aUserComponentNames'; - $sModuleId = ''; - /** @var $oShop oxshop */ - foreach ($this->getShopListByActiveModule('d3geoip') as $oShop) { - /** @var array $aUserComponents */ - $aUserComponents = oxRegistry::getConfig()->getShopConfVar($sVarName, $oShop->getId(), $sModuleId); - - if (false == $aUserComponents - || false == $aUserComponents['d3cmp_geoip'] - ) { - return true; - } - } - - return false; - } - - /** - * @return bool - */ - public function registerComponent() - { - $blRet = true; - $sVarName = 'aUserComponentNames'; - $sModuleId = ''; - - /** @var $oShop oxshop */ - foreach ($this->getShopList() as $oShop) { - $aUserComponents = oxRegistry::getConfig()->getShopConfVar($sVarName, $oShop->getId(), $sModuleId); - if (false == $aUserComponents) { - $aUserComponents = array(); - } - - if (false == $aUserComponents['d3cmp_geoip']) { - $blDontUseCache = 1; - $aUserComponents['d3cmp_geoip'] = $blDontUseCache; - $this->fixOxconfigVariable($sVarName, $oShop->getId(), '', $aUserComponents, 'arr'); - } - } - - return $blRet; - } -} + + * @link http://www.oxidmodule.com + */ + +class d3geoip_update extends d3install_updatebase +{ + public $sModKey = 'd3_geoip'; + public $sModName = 'GeoIP'; + public $sModVersion = '3.0.1.0'; + public $sModRevision = '67'; + public $sBaseConf = '5FibjlIQlRvbWMzY29mVi85RXFxbkc5bFI3R24rNkd5Y0lEcXJFOGhtaGExRVcyaEF6a281cVhRUXFMU +0d6dnNDbCtLRVdObFh3bnVEdUNRTFJrVlE5VGtsRkF3Tyt4TU1Pd290WDliOTQ2SUE5Skk0eTcxTGdlT +XZna0dhS2ZOekJUSC94ZUd5YmxXZzRXcG5QSWcvZnFJa1l0N1MrdWRZaFU1VG5nUGFwNEF1WTh6azNja +Gs3SmtzQ05SVjROSGdSZ2N0S3Q1TTV1RGlCSU5RZnh1dGVNNVd6bTBzMU1FdHFiNytJQldBRjRTNmx3U +VVlRkhrRzYxYUtpaWNBOUUrLzZ2YjN5SDM1cllVMTIrYUFPRnRYcFpibHVBQytEQVFnNFV0RWpFZXAwd +FE9'; + public $sRequirements = ''; + public $sBaseValue = ''; + + protected $_aUpdateMethods = array( + array('check' => 'checkGeoIpTableExist', + 'do' => 'updateGeoIpTableExist'), + array('check' => 'checkGeoIpItems', + 'do' => 'updateGeoIpItems'), + array('check' => 'checkModCfgItemExist', + 'do' => 'updateModCfgItemExist'), + array('check' => 'checkGeoIpFields', + 'do' => 'fixGeoIpFields'), + array('check' => 'checkIndizes', + 'do' => 'fixIndizes'), + array('check' => 'hasUnregisteredFiles', + 'do' => 'showUnregisteredFiles'), + array('check' => 'checkRegisteredComponent', + 'do' => 'unregisterComponent'), + array('check' => 'checkModCfgSameRevision', + 'do' => 'updateModCfgSameRevision'), + ); + + // Standardwerte für checkMultiLangTables() und fixRegisterMultiLangTables() + public $aMultiLangTables = array(); + + public $aFields = array( + 'D3GEOIPSHOP' => array( + 'sTableName' => 'oxcountry', + 'sFieldName' => 'D3GEOIPSHOP', + 'sType' => 'VARCHAR(10)', + 'blNull' => false, + 'sDefault' => 'oxbaseshop', + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3GEOIPLANG' => array( + 'sTableName' => 'oxcountry', + 'sFieldName' => 'D3GEOIPLANG', + 'sType' => 'TINYINT(2)', + 'blNull' => false, + 'sDefault' => '-1', + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3GEOIPCUR' => array( + 'sTableName' => 'oxcountry', + 'sFieldName' => 'D3GEOIPCUR', + 'sType' => 'TINYINT(2)', + 'blNull' => false, + 'sDefault' => '-1', + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3GEOIPURL' => array( + 'sTableName' => 'oxcountry', + 'sFieldName' => 'D3GEOIPURL', + 'sType' => 'VARCHAR(255)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3STARTIP' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3STARTIP', + 'sType' => 'VARCHAR(39)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3ENDIP' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3ENDIP', + 'sType' => 'VARCHAR(39)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3STARTIPNUM' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3STARTIPNUM', + 'sType' => 'DECIMAL(38,0)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3ENDIPNUM' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3ENDIPNUM', + 'sType' => 'DECIMAL(38,0)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3ISO' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3ISO', + 'sType' => 'CHAR(2)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'D3COUNTRYNAME' => array( + 'sTableName' => 'd3geoip', + 'sFieldName' => 'D3COUNTRYNAME', + 'sType' => 'VARCHAR(50)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + ); + + public $aIndizes = array( + 'IPNUM' => array( + 'sTableName' => 'd3geoip', + 'sType' => 'INDEX', + 'sName' => 'IPNUM', + 'aFields' => array( + 'D3STARTIPNUM' => 'D3STARTIPNUM', + 'D3ENDIPNUM' => 'D3ENDIPNUM', + ), + ), + 'D3ISO' => array( + 'sTableName' => 'd3geoip', + 'sType' => 'INDEX', + 'sName' => 'D3ISO', + 'aFields' => array( + 'D3ISO' => 'D3ISO', + ), + ), + ); + + /** + * @return bool + */ + public function checkGeoIpTableExist() + { + return $this->_checkTableNotExist('d3geoip'); + } + + /** + * @return bool + */ + public function updateGeoIpTableExist() + { + $blRet = false; + if ($this->checkGeoIpTableExist()) { + $blRet = $this->_addTable2('d3geoip', $this->aFields, $this->aIndizes, 'GeoIP', 'MyISAM'); + } + + return $blRet; + } + + /** + * @return bool + */ + public function checkGeoIpItems() + { + /** @var $oShop oxshop */ + $aWhere = array( + 'D3ISO' => 'DE', + ); + + $blRet = $this->_checkTableItemNotExist('d3geoip', $aWhere); + + return $blRet; + } + + /** + * @return bool + */ + public function updateGeoIpItems() + { + return $this->_confirmMessage('D3_GEOIP_UPDATE_ITEMINSTALL'); + } + + /** + * @return bool + */ + public function checkModCfgItemExist() + { + $blRet = false; + foreach ($this->getShopList() as $oShop) { + /** @var $oShop oxshop */ + $aWhere = array( + 'oxmodid' => $this->sModKey, + 'oxnewrevision' => $this->sModRevision, + 'oxshopid' => $oShop->getId(), + ); + + $blRet = $this->_checkTableItemNotExist('d3_cfg_mod', $aWhere); + + if ($blRet) { + return $blRet; + } + } + + return $blRet; + } + + /** + * @return bool + */ + public function updateModCfgItemExist() + { + $blRet = false; + + if ($this->checkModCfgItemExist()) { + foreach ($this->getShopList() as $oShop) { + /** @var $oShop oxshop */ + $aWhere = array( + 'oxmodid' => $this->sModKey, + 'oxshopid' => $oShop->getId(), + 'oxnewrevision' => $this->sModRevision, + ); + + if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere)) { + // update don't use this property + unset($aWhere['oxnewrevision']); + + $aInsertFields = array( + array ( + 'fieldname' => 'OXID', + 'content' => "md5('" . $this->sModKey . " " . $oShop->getId() . " de')", + 'force_update' => true, + 'use_quote' => false, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXSHOPID', + 'content' => $oShop->getId(), + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXMODID', + 'content' => $this->sModKey, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXNAME', + 'content' => $this->sModName, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXACTIVE', + 'content' => "0", + 'force_update' => false, + 'use_quote' => false, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXBASECONFIG', + 'content' => $this->sBaseConf, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXSERIAL', + 'content' => "", + 'force_update' => false, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXINSTALLDATE', + 'content' => "NOW()", + 'force_update' => true, + 'use_quote' => false, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXVERSION', + 'content' => $this->sModVersion, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXSHOPVERSION', + 'content' => oxRegistry::getConfig()->getEdition(), + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array ( + 'fieldname' => 'OXREQUIREMENTS', + 'content' => $this->sRequirements, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ), + array( + 'fieldname' => 'OXVALUE', + 'content' => $this->sBaseValue, + 'force_update' => false, + 'use_quote' => true, + 'use_multilang' => false, + ), + array( + 'fieldname' => 'OXNEWREVISION', + 'content' => $this->sModRevision, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, + ) + ); + $blRet = $this->_updateTableItem2('d3_cfg_mod', $aInsertFields, $aWhere); + + if ($this->getStepByStepMode()) { + break; + } + } + } + } + return $blRet; + } + + /** + * change default value for shop id in EE + * @return bool + */ + public function checkGeoIpFields() + { + /** @var $oShop oxshop */ + $oShop = $this->getShopList()->current(); + $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); + + return $this->checkFields(); + } + + /** + * change default value for shop id in EE + * @return bool + */ + public function fixGeoIpFields() + { + /** @var $oShop oxshop */ + $oShop = $this->getShopList()->current(); + $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); + + return $this->fixFields(); + } + + /** + * @return bool + */ + public function hasUnregisteredFiles() + { + return $this->_hasUnregisteredFiles('d3geoip', array('d3FileRegister')); + } + + /** + * @return bool + */ + public function showUnregisteredFiles() + { + return $this->_showUnregisteredFiles('d3geoip', array('d3FileRegister')); + } + + /** + * @return bool + */ + public function checkRegisteredComponent() + { + /** @var $oShop oxshop */ + foreach ($this->getShopListByActiveModule('d3geoip') as $oShop) { + $aUserComponents = $this->_d3GetUserComponentsFromDb($oShop); + + if (is_array($aUserComponents) + && in_array('d3cmp_geoip', array_keys($aUserComponents)) + ) { + return true; + } + } + + return false; + } + + /** + * @return bool + */ + public function unregisterComponent() + { + $blRet = true; + $sVarName = 'aUserComponentNames'; + + /** @var $oShop oxshop */ + foreach ($this->getShopList() as $oShop) { + $aUserComponents = $this->_d3GetUserComponentsFromDb($oShop); + + if (is_array($aUserComponents) + && in_array('d3cmp_geoip', array_keys($aUserComponents)) + ) { + unset($aUserComponents['d3cmp_geoip']); + if (false == count($aUserComponents)) { + $aUserComponents = null; + } + $this->fixOxconfigVariable($sVarName, $oShop->getId(), '', $aUserComponents, 'arr'); + } + } + + return $blRet; + } + + /** + * @param oxShop $oShop + * @return array|null + */ + protected function _d3GetUserComponentsFromDb(oxShop $oShop) + { + $sVarName = 'aUserComponentNames'; + $sModuleId = ''; + $oDb = oxDb::getDb(oxDb::FETCH_MODE_ASSOC); + $sSelect = "SELECT oxvartype as type, ".oxRegistry::getConfig()->getDecodeValueQuery(). + " as value FROM `oxconfig` WHERE oxshopid = ".$oDb->quote($oShop->getId()). + " AND oxvarname = ".$oDb->quote($sVarName). + " AND oxmodule = ".$oDb->quote($sModuleId); + + $aResult = $oDb->getAll($sSelect); + $aUserComponents = is_array($aResult) && count($aResult) + ? oxRegistry::getConfig()->decodeValue($aResult[0]['type'], $aResult[0]['value']) + : null; + + return $aUserComponents; + } +}