From 475405dbb8c5a29f27850165e6618396b1cfe3ab Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Tue, 23 Jun 2015 07:49:41 +0000 Subject: [PATCH 2/8] validate IP syntax (#4094) --- copy_this/modules/d3/d3geoip/models/d3geoip.php | 11 ++++++++--- setup+doku/Precheck/d3precheck.php | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/copy_this/modules/d3/d3geoip/models/d3geoip.php b/copy_this/modules/d3/d3geoip/models/d3geoip.php index 270408f..3d5654f 100644 --- a/copy_this/modules/d3/d3geoip/models/d3geoip.php +++ b/copy_this/modules/d3/d3geoip/models/d3geoip.php @@ -48,8 +48,13 @@ class d3GeoIP extends oxbase $sIP = $this->getIP(); } - $iIPNum = $this->_getNumIp($sIP); - $sISOAlpha = $this->LoadByIPNum($iIPNum); + $iIPNum = $this->_getNumIp( + oxRegistry::getConfig()->checkParamSpecialChars( + str_replace(' ', '', $sIP) + ) + ); + + $sISOAlpha = $this->loadByIPNum($iIPNum); if (!$sISOAlpha) { @@ -93,7 +98,7 @@ class d3GeoIP extends oxbase stopProfile(__METHOD__); - return $sIP; + return oxRegistry::getConfig()->checkParamSpecialChars(str_replace(' ', '', $sIP)); } /** diff --git a/setup+doku/Precheck/d3precheck.php b/setup+doku/Precheck/d3precheck.php index 900f3c5..3802750 100644 --- a/setup+doku/Precheck/d3precheck.php +++ b/setup+doku/Precheck/d3precheck.php @@ -86,9 +86,9 @@ class requConfig // benötigt PHP-Extension (kaskadierbar (siehe "Desc1")) 'hasExtension' => array( array( - 'blExec' => 0, + 'blExec' => 1, 'aParams' => array( - 'type' => 'curl', + 'type' => 'bcmath', ), ), array( From 177b6ebce606dbe14c5ce05de730866cc542d74d Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Tue, 23 Jun 2015 09:29:07 +0000 Subject: [PATCH 3/8] code syntax improved --- .gitattributes | 2 +- ..._geoip_stub.php => IntelliSenseHelper.php} | 0 .../controllers/admin/d3_cfg_geoipset.php | 2 +- .../admin/d3_cfg_geoipset_licence.php | 2 +- .../admin/d3_cfg_geoipset_list.php | 2 +- .../admin/d3_cfg_geoipset_main.php | 15 +- .../controllers/admin/d3_country_geoip.php | 159 +++++-------- .../modules/d3/d3geoip/models/d3geoip.php | 209 +++++++++++------- .../modules/components/d3_oxcmp_cur_geoip.php | 13 +- .../components/d3_oxcmp_lang_geoip.php | 5 +- .../d3geoip/views/admin/de/d3_geoip_lang.php | 68 +++--- .../views/admin/tpl/d3_cfg_geoipset_main.tpl | 53 +++-- .../views/admin/tpl/d3_country_geoip.tpl | 44 ++-- 13 files changed, 287 insertions(+), 287 deletions(-) rename copy_this/modules/d3/d3geoip/{d3_geoip_stub.php => IntelliSenseHelper.php} (100%) diff --git a/.gitattributes b/.gitattributes index 60f4d3a..1bc0150 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,12 +1,12 @@ * text=auto !eol /Doxyfile -text copy_this/.noencode -text +copy_this/modules/d3/d3geoip/IntelliSenseHelper.php -text copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset.php -text copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php -text copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php -text copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php -text copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php -text -copy_this/modules/d3/d3geoip/d3_geoip_stub.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 diff --git a/copy_this/modules/d3/d3geoip/d3_geoip_stub.php b/copy_this/modules/d3/d3geoip/IntelliSenseHelper.php similarity index 100% rename from copy_this/modules/d3/d3geoip/d3_geoip_stub.php rename to copy_this/modules/d3/d3geoip/IntelliSenseHelper.php diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset.php index cbd15ea..61ec21e 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset.php @@ -28,4 +28,4 @@ class d3_cfg_geoipset extends d3_cfg_mod_ return parent::render(); } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php index fd10925..7535c00 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php @@ -21,4 +21,4 @@ class d3_cfg_geoipset_licence extends d3_cfg_mod_licence protected $_hasNewsletterForm = false; protected $_sMenuItemTitle = 'd3mxgeoip'; protected $_sMenuSubItemTitle = 'd3mxgeoip_settings'; -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php index 94b9f83..250bb00 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php @@ -38,4 +38,4 @@ class d3_cfg_geoipset_list extends d3_cfg_mod_list return $sRet; } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php index f5cf3ca..47390bd 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php @@ -18,7 +18,7 @@ class d3_cfg_geoipset_main extends d3_cfg_mod_main { protected $_sModId = 'd3_geoip'; protected $_sThisTemplate = "d3_cfg_geoipset_main.tpl"; - protected $_blHasDebugSwitch = TRUE; + protected $_blHasDebugSwitch = true; protected $_sDebugHelpTextIdent = 'D3_GEOIP_SET_DEBUG_DESC'; /** @@ -33,12 +33,9 @@ class d3_cfg_geoipset_main extends d3_cfg_mod_main $oD3GeoIP = oxNew('d3geoip'); $oCountry = $oD3GeoIP->getUserLocationCountryObject($sIP); - if ($oCountry->getId()) - { + if ($oCountry->getId()) { $sTitle = $oCountry->getFieldData('oxtitle'); - } - else - { + } else { $sTitle = oxRegistry::getLang()->translateString('D3_GEOIP_SET_IP_CHECKIP_NOTSET'); } @@ -79,7 +76,9 @@ class d3_cfg_geoipset_main extends d3_cfg_mod_main $oCountryList = oxNew('oxcountrylist'); $oListObject = $oCountryList->getBaseObject(); $sFieldList = $oListObject->getSelectFields(); - $sQ = "select (SELECT d3startip FROM ".$oGeoIp->getViewName()." WHERE D3ISO = " .$oListObject->getViewName(). ".oxisoalpha2 LIMIT 1) as IP, $sFieldList from " . $oListObject->getViewName(); + $sQ = "select (SELECT d3startip FROM ".$oGeoIp->getViewName(). + " WHERE D3ISO = " .$oListObject->getViewName(). ". + oxisoalpha2 LIMIT 1) as IP, $sFieldList from " . $oListObject->getViewName(); $oCountryList->selectString($sQ); @@ -87,4 +86,4 @@ class d3_cfg_geoipset_main extends d3_cfg_mod_main return $oCountryList; } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php index 63c25dd..5caa23f 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php @@ -31,9 +31,8 @@ class d3_country_geoip extends oxAdminView */ public function render() { - if ( !oxRegistry::getConfig()->getConfigParam( 'blAllowSharedEdit' ) ) - { - $this->addTplParam('readonly', TRUE); + if (false == oxRegistry::getConfig()->getConfigParam('blAllowSharedEdit')) { + $this->addTplParam('readonly', true); } $ret = parent::render(); @@ -41,59 +40,49 @@ class d3_country_geoip extends oxAdminView $soxId = oxRegistry::getConfig()->getRequestParameter("oxid"); // check if we right now saved a new entry $sSavedID = oxRegistry::getConfig()->getRequestParameter("saved_oxid"); - if ( ($soxId == "-1" || !isset( $soxId)) && isset( $sSavedID) ) - { + if (($soxId == "-1" || !isset($soxId)) && isset($sSavedID)) { $soxId = $sSavedID; oxRegistry::getSession()->deleteVariable("saved_oxid"); - $this->addTplParam("oxid",$soxId); + $this->addTplParam("oxid", $soxId); // for reloading upper frame $this->addTplParam("updatelist", "1"); } - if ( $soxId != "-1" && isset( $soxId)) - { + if ($soxId != "-1" && isset($soxId)) { // load object /** @var $oCountry oxcountry */ - $oCountry = oxNew( "oxcountry" ); - $oCountry->loadInLang( $this->_iEditLang, $soxId ); - - if ($oCountry->isForeignCountry()) - { - $this->addTplParam("blForeignCountry", TRUE); - } - else - { - $this->addTplParam("blForeignCountry", FALSE); + $oCountry = oxNew("oxcountry"); + $oCountry->loadInLang($this->_iEditLang, $soxId); + + if ($oCountry->isForeignCountry()) { + $this->addTplParam("blForeignCountry", true); + } else { + $this->addTplParam("blForeignCountry", false); } $oOtherLang = $oCountry->getAvailableInLangs(); - if (!isset($oOtherLang[$this->_iEditLang])) - { - $oCountry->loadInLang( key($oOtherLang), $soxId ); + if (!isset($oOtherLang[$this->_iEditLang])) { + $oCountry->loadInLang(key($oOtherLang), $soxId); } $this->oCountry = $oCountry; $this->addTplParam("edit", $oCountry); // remove already created languages - $aLang = array_diff (oxRegistry::getLang()->getLanguageNames(), $oOtherLang ); + $aLang = array_diff(oxRegistry::getLang()->getLanguageNames(), $oOtherLang); - if ( count( $aLang)) - { + if (count($aLang)) { $this->addTplParam("posslang", $aLang); } - foreach ( $oOtherLang as $id => $language) - { + foreach ($oOtherLang as $id => $language) { $oLang= new stdClass(); $oLang->sLangDesc = $language; $oLang->selected = ($id == $this->_iEditLang); $this->_aViewData["otherlang"][$id] = clone $oLang; } - } - else - { - $this->addTplParam("blForeignCountry", TRUE); + } else { + $this->addTplParam("blForeignCountry", true); } $this->oShopList = oxNew('oxshoplist'); @@ -128,38 +117,33 @@ class d3_country_geoip extends oxAdminView public function save() { //allow malladmin only to perform this action - if ( !oxRegistry::getConfig()->getConfigParam( 'blAllowSharedEdit' ) ) - { + if (false == oxRegistry::getConfig()->getConfigParam('blAllowSharedEdit')) { return; } $soxId = oxRegistry::getConfig()->getRequestParameter("oxid"); - $aParams = oxRegistry::getConfig()->getRequestParameter("editval" ); + $aParams = oxRegistry::getConfig()->getRequestParameter("editval"); /** @var $oCountry oxcountry */ - $oCountry = oxNew( "oxcountry" ); + $oCountry = oxNew("oxcountry"); - if ( $soxId != "-1") - { - $oCountry->loadInLang( $this->_iEditLang, $soxId ); - } - else - { - $aParams['oxcountry__oxid'] = NULL; + if ($soxId != "-1") { + $oCountry->loadInLang($this->_iEditLang, $soxId); + } else { + $aParams['oxcountry__oxid'] = null; } $oCountry->setLanguage(0); - $oCountry->assign( $aParams ); + $oCountry->assign($aParams); $oCountry->setLanguage($this->_iEditLang); - $oCountry = oxRegistry::get('oxUtilsFile')->processFiles( $oCountry ); + $oCountry = oxRegistry::get('oxUtilsFile')->processFiles($oCountry); $oCountry->save(); $this->addTplParam("updatelist", "1"); // set oxid if inserted - if ( $soxId == "-1") - { - oxRegistry::getSession()->setVariable( "saved_oxid", $oCountry->getId()); + if ($soxId == "-1") { + oxRegistry::getSession()->setVariable("saved_oxid", $oCountry->getId()); } } @@ -178,23 +162,19 @@ class d3_country_geoip extends oxAdminView { $aCurrencies = array(); - if ($this->getModCfgValue('blChangeShop') && $this->oCountry->getFieldData('d3geoipshop')) - { + if ($this->getModCfgValue('blChangeShop') && $this->oCountry->getFieldData('d3geoipshop')) { $sShopId = $this->oCountry->getFieldData('d3geoipshop'); - } - else - { + } else { $sShopId = oxRegistry::getConfig()->getActiveView()->getViewConfig()->getActiveShopId(); } - $sQ = "select DECODE( oxvarvalue, '".$this->getConfig()->getConfigParam( 'sConfigKey' )."') as oxvarvalue from oxconfig where oxshopid = '".$sShopId."' AND oxvarname = 'aCurrencies'"; + $sQ = "select DECODE( oxvarvalue, '".oxRegistry::getConfig()->getConfigParam('sConfigKey'). + "') as oxvarvalue from oxconfig where oxshopid = '".$sShopId."' AND oxvarname = 'aCurrencies'"; $sCurs = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getOne($sQ); - if ($sCurs) - { - foreach (unserialize($sCurs) as $sKey => $sValue) - { + if ($sCurs) { + foreach (unserialize($sCurs) as $sKey => $sValue) { $aFields = explode('@', $sValue); $aCurrencies[$sKey]->id = $sKey; $aCurrencies[$sKey]->name = $aFields[0]; @@ -211,12 +191,9 @@ class d3_country_geoip extends oxAdminView */ public function getLangList() { - if ($this->getModCfgValue('blChangeShop') && $this->oCountry->getFieldData('d3geoipshop')) - { + if ($this->getModCfgValue('blChangeShop') && $this->oCountry->getFieldData('d3geoipshop')) { $sShopId = $this->oCountry->getFieldData('d3geoipshop'); - } - else - { + } else { $sShopId = oxRegistry::getConfig()->getActiveView()->getViewConfig()->getActiveShopId(); } @@ -224,60 +201,50 @@ class d3_country_geoip extends oxAdminView $aLangParams = oxRegistry::getConfig()->getShopConfVar('aLanguageParams', $sShopId); $aConfLanguages = oxRegistry::getConfig()->getShopConfVar('aLanguages', $sShopId); - if ( is_array( $aConfLanguages ) ) - { + if (is_array($aConfLanguages)) { $i = 0; - reset( $aConfLanguages ); - while ( list( $key, $val ) = each( $aConfLanguages ) ) - { - if (is_array($aLangParams) ) - { + reset($aConfLanguages); + while ((list($key, $val) = each($aConfLanguages))) { + if (is_array($aLangParams)) { //skipping non active languages - if ( !$aLangParams[$key]['active'] ) - { + if (false == $aLangParams[$key]['active']) { $i++; - continue; + continue; } } - if ( $val) - { + if ($val) { $oLang = new stdClass(); - if ( isset($aLangParams[$key]['baseId']) ) - { + if (isset($aLangParams[$key]['baseId'])) { $oLang->id = $aLangParams[$key]['baseId']; - } - else - { + } else { $oLang->id = $i; } $oLang->oxid = $key; $oLang->abbr = $key; $oLang->name = $val; - if ( is_array($aLangParams) ) - { + if (is_array($aLangParams)) { $oLang->active = $aLangParams[$key]['active']; $oLang->sort = $aLangParams[$key]['sort']; } - if ( isset( $iLanguage ) && $oLang->id == $iLanguage ) - { + if (isset($iLanguage) && $oLang->id == $iLanguage) { $oLang->selected = 1; - } - else - { + } else { $oLang->selected = 0; } - if ($oLang->active) + + if ($oLang->active) { $aLanguages[$oLang->id] = $oLang; + } } ++$i; } } - if (is_array($aLangParams) ) { - uasort( $aLanguages, array($this, '_sortLanguagesCallback') ); + if (is_array($aLangParams)) { + uasort($aLanguages, array($this, '_sortLanguagesCallback')); } return $aLanguages; @@ -288,20 +255,16 @@ class d3_country_geoip extends oxAdminView * @param $oLang2 * @return int */ - protected function _sortLanguagesCallback( $oLang1, $oLang2 ) + protected function _sortLanguagesCallback($oLang1, $oLang2) { $sSortParam = $this->_sDefSort; - $sVal1 = is_string($oLang1->$sSortParam) ? strtolower( $oLang1->$sSortParam ) : $oLang1->$sSortParam; - $sVal2 = is_string($oLang2->$sSortParam) ? strtolower( $oLang2->$sSortParam ) : $oLang2->$sSortParam; + $sVal1 = is_string($oLang1->$sSortParam) ? strtolower($oLang1->$sSortParam) : $oLang1->$sSortParam; + $sVal2 = is_string($oLang2->$sSortParam) ? strtolower($oLang2->$sSortParam) : $oLang2->$sSortParam; - if ( $this->_sDefSortOrder == 'asc' ) - { + if ($this->_sDefSortOrder == 'asc') { return ($sVal1 < $sVal2) ? -1 : 1; - } - else - { + } else { return ($sVal1 > $sVal2) ? -1 : 1; } } - -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/models/d3geoip.php b/copy_this/modules/d3/d3geoip/models/d3geoip.php index 3d5654f..d71df8b 100644 --- a/copy_this/modules/d3/d3geoip/models/d3geoip.php +++ b/copy_this/modules/d3/d3geoip/models/d3geoip.php @@ -39,12 +39,10 @@ class d3GeoIP extends oxbase */ public function getUserLocationCountryObject($sIP = null) { - if (!$this->oCountry) - { + if (!$this->oCountry) { startProfile(__METHOD__); - if (!$sIP) - { + if (!$sIP) { $sIP = $this->getIP(); } @@ -56,14 +54,25 @@ class d3GeoIP extends oxbase $sISOAlpha = $this->loadByIPNum($iIPNum); - if (!$sISOAlpha) - { - $this->_getLog()->log(d3log::ERROR, __CLASS__, __FUNCTION__, __LINE__, 'get ISO by IP failed', $sIP); + if (!$sISOAlpha) { + $this->_getLog()->log( + d3log::ERROR, + __CLASS__, + __FUNCTION__, + __LINE__, + 'get ISO by IP failed', + $sIP + ); $this->oCountry = $this->getCountryFallBackObject(); - } - else - { - $this->_getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, 'get ISO by IP', $sIP." => ".$sISOAlpha); + } else { + $this->_getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + 'get ISO by IP', + $sIP." => ".$sISOAlpha + ); $this->oCountry = $this->getCountryObject($sISOAlpha); } @@ -82,16 +91,15 @@ class d3GeoIP extends oxbase { startProfile(__METHOD__); - if ($this->_getModConfig()->getValue('blUseTestIp') && $this->_getModConfig()->getValue('sTestIp')) - { + if ($this->_getModConfig()->getValue('blUseTestIp') + && $this->_getModConfig()->getValue('sTestIp') + ) { $sIP = $this->_getModConfig()->getValue('sTestIp'); - } - elseif ($this->_getModConfig()->getValue('blUseTestCountry') && $this->_getModConfig()->getValue('sTestCountryIp')) - { + } elseif ($this->_getModConfig()->getValue('blUseTestCountry') + && $this->_getModConfig()->getValue('sTestCountryIp') + ) { $sIP = $this->_getModConfig()->getValue('sTestCountryIp'); - } - else - { + } else { // ToDo: use $_SERVER['X-Forwared-For'] && Client-IP in case of proxy $sIP = $_SERVER['REMOTE_ADDR']; } @@ -110,33 +118,30 @@ class d3GeoIP extends oxbase protected function _getNumIp($sIP) { // make sure it is an ip - if (filter_var($sIP, FILTER_VALIDATE_IP) === FALSE) - return FALSE; + if (filter_var($sIP, FILTER_VALIDATE_IP) === false) { + return false; + } startProfile(__METHOD__); $parts = unpack('N*', inet_pton($sIP)); - if (strpos($sIP, '.') !== FALSE) - { + if (strpos($sIP, '.') !== false) { $parts = array(1=>0, 2=>0, 3=>0, 4=>$parts[1]); } - foreach ($parts as &$part) - { - if ($part < 0) + foreach ($parts as &$part) { + if ($part < 0) { $part += 4294967296; + } } - if (function_exists('bcadd')) - { + if (function_exists('bcadd')) { $dIP = $parts[4]; $dIP = bcadd($dIP, bcmul($parts[3], '4294967296')); $dIP = bcadd($dIP, bcmul($parts[2], '18446744073709551616')); $dIP = bcadd($dIP, bcmul($parts[1], '79228162514264337593543950336')); - } - else - { + } else { throw new Exception('extension BCMath is required'); } @@ -153,7 +158,7 @@ class d3GeoIP extends oxbase * @param int $iIPNum IP number * @return string */ - public function LoadByIPNum($iIPNum) + public function loadByIPNum($iIPNum) { startProfile(__METHOD__); @@ -176,7 +181,8 @@ class d3GeoIP extends oxbase startProfile(__METHOD__); $oCountry = oxNew('oxcountry'); - $sSelect = "SELECT oxid FROM ".$oCountry->getViewName()." WHERE OXISOALPHA2 = '".$sISOAlpha."' AND OXACTIVE = '1'"; + $sSelect = "SELECT oxid FROM ".$oCountry->getViewName(). + " WHERE OXISOALPHA2 = '".$sISOAlpha."' AND OXACTIVE = '1'"; $oCountry->load(oxDb::getDb()->getOne($sSelect)); @@ -196,8 +202,9 @@ class d3GeoIP extends oxbase $oCountry = oxNew('oxcountry'); - if ($this->_getModConfig()->getValue('blUseFallback') && $this->_getModConfig()->getValue('sFallbackCountryId')) - { + if ($this->_getModConfig()->getValue('blUseFallback') + && $this->_getModConfig()->getValue('sFallbackCountryId') + ) { $oCountry->Load($this->_getModConfig()->getValue('sFallbackCountryId')); } @@ -217,17 +224,27 @@ class d3GeoIP extends oxbase $this->performURLSwitch(); $this->performShopSwitch(); - if (!$this->_getModConfig()->isActive() || !$this->_getModConfig()->getValue('blChangeLang')) - { + if (!$this->_getModConfig()->isActive() + || false == $this->_getModConfig()->getValue('blChangeLang')) { stopProfile(__METHOD__); return; } $oCountry = $this->getUserLocationCountryObject(); - if (!$this->isAdmin() && oxRegistry::getUtils()->isSearchEngine() === false && oxRegistry::getSession()->getVariable('d3isSetLang') === null && $oCountry->getId() && $oCountry->getFieldData('d3geoiplang') > -1) - { - $this->_getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, 'set language', $this->getIP().' => '.$oCountry->getFieldData('d3geoiplang')); + if (!$this->isAdmin() + && oxRegistry::getUtils()->isSearchEngine() === false + && oxRegistry::getSession()->getVariable('d3isSetLang') === null + && $oCountry->getId() && $oCountry->getFieldData('d3geoiplang') > -1 + ) { + $this->_getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + 'set language', + $this->getIP().' => '.$oCountry->getFieldData('d3geoiplang') + ); oxRegistry::getLang()->setTplLanguage((int) $oCountry->getFieldData('d3geoiplang')); oxRegistry::getLang()->setBaseLanguage((int) $oCountry->getFieldData('d3geoiplang')); oxRegistry::getSession()->setVariable('d3isSetLang', true); @@ -242,16 +259,30 @@ class d3GeoIP extends oxbase */ public function setCountryCurrency() { - if (!$this->_getModConfig()->isActive() || !$this->_getModConfig()->getValue('blChangeCurr')) + if (!$this->_getModConfig()->isActive() + || false == $this->_getModConfig()->getValue('blChangeCurr') + ) { return; + } startProfile(__METHOD__); $oCountry = $this->getUserLocationCountryObject(); - if (!$this->isAdmin() && oxRegistry::getUtils()->isSearchEngine() === false && !oxRegistry::getSession()->getVariable('d3isSetCurr') && $oCountry->getId() && $oCountry->getFieldData('d3geoipcur') > -1) - { - $this->_getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, 'set currency', $this->getIP().' => '.$oCountry->getFieldData('d3geoipcur')); + if (!$this->isAdmin() + && oxRegistry::getUtils()->isSearchEngine() === false + && !oxRegistry::getSession()->getVariable('d3isSetCurr') + && $oCountry->getId() + && $oCountry->getFieldData('d3geoipcur') > -1 + ) { + $this->_getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + 'set currency', + $this->getIP().' => '.$oCountry->getFieldData('d3geoipcur') + ); oxRegistry::getConfig()->setActShopCurrency((int) $oCountry->getFieldData('d3geoipcur')); oxRegistry::getSession()->setVariable('d3isSetCurr', true); } @@ -265,40 +296,38 @@ class d3GeoIP extends oxbase */ public function performShopSwitch() { - if (!$this->_getModConfig()->isActive() || !$this->_getModConfig()->getValue('blChangeShop')) + if (!$this->_getModConfig()->isActive() || !$this->_getModConfig()->getValue('blChangeShop')) { return; + } startProfile(__METHOD__); $oCountry = $this->getUserLocationCountryObject(); $iNewShop = $oCountry->getFieldData('d3geoipshop'); - if (oxRegistry::getConfig()->getRequestParameter('d3redirect') != 1 && - !$this->isAdmin() && - oxRegistry::getUtils()->isSearchEngine() === false && - $oCountry->getId() && - $this->getConfig()->isMall() && - $iNewShop > -1 && + if (oxRegistry::getConfig()->getRequestParameter('d3redirect') != 1 + && false == $this->isAdmin() + && oxRegistry::getUtils()->isSearchEngine() === false + && $oCountry->getId() + && $this->getConfig()->isMall() + && $iNewShop > -1 && ( - $iNewShop != $this->getConfig()->getShopId() || - strtolower($this->getConfig()->getActiveView()->getClassName()) == 'mallstart' + $iNewShop != $this->getConfig()->getShopId() + || strtolower($this->getConfig()->getActiveView()->getClassName()) == 'mallstart' ) - ) - { + ) { $oNewConf = new oxConfig(); $oNewConf->setShopId($iNewShop); $oNewConf->init(); $this->getConfig()->onShopChange(); - if (!oxRegistry::getSession()->getVariable('d3isSetLang') && - $this->_getModConfig()->getValue('blChangeLang') && - $oCountry->getFieldData('d3geoiplang') > -1) - { + if (!oxRegistry::getSession()->getVariable('d3isSetLang') + && $this->_getModConfig()->getValue('blChangeLang') + && $oCountry->getFieldData('d3geoiplang') > -1 + ) { $sLangId = $oCountry->getFieldData('d3geoiplang'); - } - else - { + } else { $sLangId = ''; } @@ -309,9 +338,20 @@ class d3GeoIP extends oxbase 'fnc' => oxRegistry::getConfig()->getRequestParameter('fnc'), 'shp' => $iNewShop ); - $sUrl = str_replace('&', '&', $oStr->generateParameterUrl($oNewConf->getShopHomeUrl($sLangId), $aParams)); + $sUrl = str_replace( + '&', + '&', + $oStr->generateParameterUrl($oNewConf->getShopHomeUrl($sLangId), $aParams) + ); - $this->_getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, 'change shop', $this->getIP().' => '.$sUrl); + $this->_getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + 'change shop', + $this->getIP().' => '.$sUrl + ); header("Location: ".$sUrl); exit(); @@ -326,8 +366,8 @@ class d3GeoIP extends oxbase */ public function performURLSwitch() { - if (!$this->_getModConfig()->isActive() || !$this->_getModConfig()->getValue('blChangeURL')) - { + if (!$this->_getModConfig()->isActive() + || false == $this->_getModConfig()->getValue('blChangeURL')) { return; } @@ -335,16 +375,22 @@ class d3GeoIP extends oxbase $oCountry = $this->getUserLocationCountryObject(); - if (!$this->isAdmin() && - oxRegistry::getUtils()->isSearchEngine() === false && - $oCountry->getId() && - $oCountry->getFieldData('d3geoipurl') && - strlen(trim($oCountry->getFieldData('d3geoipurl'))) > 0 - ) - { + if (false == $this->isAdmin() + && oxRegistry::getUtils()->isSearchEngine() === false + && $oCountry->getId() + && $oCountry->getFieldData('d3geoipurl') + && strlen(trim($oCountry->getFieldData('d3geoipurl'))) > 0 + ) { $sNewUrl = $oCountry->getFieldData('d3geoipurl'); - $this->_getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, 'change url', $this->getIP().' => '.$oCountry->getFieldData('d3geoipurl')); + $this->_getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + 'change url', + $this->getIP().' => '.$oCountry->getFieldData('d3geoipurl') + ); header("Location: ".$sNewUrl); exit(); @@ -362,12 +408,12 @@ class d3GeoIP extends oxbase { startProfile(__METHOD__); - $oShoplist = oxNew( 'oxshoplist' ); + $oShoplist = oxNew('oxshoplist'); $oShoplist->getList(); $aShopUrls = array(); - foreach ( $oShoplist as $sId => $oShop ) - { - $aShopUrls[$sId] = $this->getConfig()->getShopConfVar( 'sMallShopURL', $sId ); + + foreach (array_keys($oShoplist) as $sId) { + $aShopUrls[$sId] = $this->getConfig()->getShopConfVar('sMallShopURL', $sId); } stopProfile(__METHOD__); @@ -392,11 +438,10 @@ class d3GeoIP extends oxbase */ protected function _getLog() { - if (!$this->oD3Log) - { - $this->oD3Log = $this->_getModConfig()->getLog(); + if (!$this->oD3Log) { + $this->oD3Log = $this->_getModConfig()->d3getLog(); } return $this->oD3Log; } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php index 2f088d2..18739c3 100644 --- a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php +++ b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php @@ -16,17 +16,15 @@ */ class d3_oxcmp_cur_geoip extends d3_oxcmp_cur_geoip_parent { - private $_sModId = 'd3_geoip'; + private $_sModId = 'd3_geoip'; /** * @return null */ public function init() { - if (d3_cfg_mod::get($this->_sModId)->isActive()) - { - if (d3_cfg_mod::get($this->_sModId)->hasDebugMode()) - { + if (d3_cfg_mod::get($this->_sModId)->isActive()) { + if (d3_cfg_mod::get($this->_sModId)->hasDebugMode()) { /** @var $oGeoIp d3geoip */ $oGeoIp = oxNew('d3geoip'); echo $oGeoIp->getIP(); @@ -35,9 +33,8 @@ class d3_oxcmp_cur_geoip extends d3_oxcmp_cur_geoip_parent /** @var $oLocation d3geoip */ $oLocation = oxNew('d3geoip'); $oLocation->setCountryCurrency(); - } + } return parent::init(); } - -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php index b585a5b..7a6e026 100644 --- a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php +++ b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php @@ -23,8 +23,7 @@ class d3_oxcmp_lang_geoip extends d3_oxcmp_lang_geoip_parent */ public function init() { - if (d3_cfg_mod::get($this->_sModId)->isActive()) - { + if (d3_cfg_mod::get($this->_sModId)->isActive()) { /** @var $oLocation d3geoip */ $oLocation = oxNew('d3geoip'); $oLocation->setCountryLanguage(); @@ -32,4 +31,4 @@ class d3_oxcmp_lang_geoip extends d3_oxcmp_lang_geoip_parent return parent::init(); } -} \ No newline at end of file +} diff --git a/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php b/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php index 7bf8a34..2548d9f 100644 --- a/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php +++ b/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php @@ -20,46 +20,44 @@ $iLangNr = 0; // RESOURCE IDENTITFIER = STRING // ------------------------------- $aLang = array( + 'charset' => 'ISO-8859-15', + 'd3mxgeoip' => 'GeoIP', + 'd3mxgeoip_settings' => 'Einstellungen', + 'd3tbclgeoip_settings_main' => 'Grundeinstellungen', + 'tbclcountry_geoip' => 'GeoIP-Kundenumleitungen', -'charset' => 'ISO-8859-15', -'d3mxgeoip' => 'GeoIP', -'d3mxgeoip_settings' => 'Einstellungen', -'d3tbclgeoip_settings_main' => 'Grundeinstellungen', -'tbclcountry_geoip' => 'GeoIP-Kundenumleitungen', + 'D3_GEOIP_TRANSL' => 'GeoIP-Kundenumleitungen', -'D3_GEOIP_TRANSL' => 'GeoIP-Kundenumleitungen', + 'D3_GEOIP_SET_DEBUG_DESC' => 'Mit aktiviertem Debug-Modus wird im Frontend die aktuelle IP-Adresse des Shopbesuchers gezeigt. Beachten Sie, dass Umleitungen, die auf Weiterleitungen basieren, dann nicht ausgeführt werden können.', + 'D3_GEOIP_SET_OPTIONS' => 'Optionen', + 'D3_GEOIP_SET_OPTIONS_CHANGESHOP' => 'Mandant wechseln, wenn eingestellt (nur EE)', + 'D3_GEOIP_SET_OPTIONS_CHANGECURR' => 'Währung wechseln, wenn eingestellt', + 'D3_GEOIP_SET_OPTIONS_CHANGELANG' => 'Sprache wechseln, wenn eingestellt', + 'D3_GEOIP_SET_OPTIONS_CHANGEURL' => 'URL wechseln, wenn eingestellt', + 'D3_GEOIP_SET_OPTIONS_NOCOUNTRY' => 'Shop verwendet die Einstellung dieses Landes, wenn IP nicht zuzuordnen ist', + 'D3_GEOIP_SET_IP' => 'IP-Einstellungen', + 'D3_GEOIP_SET_IP_TESTIP' => 'statt Kunden-IP immer diese IP-Adresse verwenden', + 'D3_GEOIP_SET_IP_TESTCOUNTRY' => 'statt Kunden-IP immer eine IP-Adresse dieses Landes verwenden', + 'D3_GEOIP_SET_IP_TESTCOUNTRY_INACTIVE' => '(inaktiv)', + 'D3_GEOIP_SET_IP_CHECKIP' => 'diese IP-Adresse prüfen', + 'D3_GEOIP_SET_IP_CHECKIP_NOTSET' => 'IP nicht zugewiesen oder Land nicht aktiv', + 'D3_GENERAL_GEOIP_SAVE' => 'Speichern', -'D3_GEOIP_SET_DEBUG_DESC' => 'Mit aktiviertem Debug-Modus wird im Frontend die aktuelle IP-Adresse des Shopbesuchers gezeigt. Beachten Sie, dass Umleitungen, die auf Weiterleitungen basieren, dann nicht ausgeführt werden können.', -'D3_GEOIP_SET_OPTIONS' => 'Optionen', -'D3_GEOIP_SET_OPTIONS_CHANGESHOP' => 'Mandant wechseln, wenn eingestellt (nur EE)', -'D3_GEOIP_SET_OPTIONS_CHANGECURR' => 'Währung wechseln, wenn eingestellt', -'D3_GEOIP_SET_OPTIONS_CHANGELANG' => 'Sprache wechseln, wenn eingestellt', -'D3_GEOIP_SET_OPTIONS_CHANGEURL' => 'URL wechseln, wenn eingestellt', -'D3_GEOIP_SET_OPTIONS_NOCOUNTRY' => 'Shop verwendet die Einstellung dieses Landes, wenn IP nicht zuzuordnen ist', -'D3_GEOIP_SET_IP' => 'IP-Einstellungen', -'D3_GEOIP_SET_IP_TESTIP' => 'statt Kunden-IP immer diese IP-Adresse verwenden', -'D3_GEOIP_SET_IP_TESTCOUNTRY' => 'statt Kunden-IP immer eine IP-Adresse dieses Landes verwenden', -'D3_GEOIP_SET_IP_TESTCOUNTRY_INACTIVE' => '(inaktiv)', -'D3_GEOIP_SET_IP_CHECKIP' => 'diese IP-Adresse prüfen', -'D3_GEOIP_SET_IP_CHECKIP_NOTSET' => 'IP nicht zugewiesen oder Land nicht aktiv', -'D3_GENERAL_GEOIP_SAVE' => 'Speichern', + 'D3_GEOIP_SELSHOP' => 'zuständiger Shop', + 'D3_GEOIP_SELLANG' => 'vorgewählte Sprache', + 'D3_GEOIP_SELCUR' => 'vorgewählte Währung', + 'D3_GEOIP_CUSTSELSHOP' => ' - vom Kunden gewählter Shop - ', + 'D3_GEOIP_CUSTSELLANG' => ' - vom Kunden gewählte Sprache - ', + 'D3_GEOIP_CUSTSELCUR' => ' - vom Kunden gewählte Währung - ', + 'D3_GEOIP_OR' => 'oder', + 'D3_GEOIP_DISABLED' => '(deaktiviert)', + 'D3_GEOIP_SELURL' => 'zu wechselnde URL', + 'D3_GEOIP_SELURL_DESC' => 'Sobald im URL-Feld eine Eingabe vorhanden ist, wird bei passenden Kunden versucht, zur hinterlegten URL zu wechseln. Möchten Sie den Mandanten, die Währung und / oder die Sprache einstellen, entfernen Sie die URL.

Aktivieren / deaktivieren Sie den URL-Wechsel zusätzlich in den Modul-Grundeinstellungen.', -'D3_GEOIP_SELSHOP' => 'zuständiger Shop', -'D3_GEOIP_SELLANG' => 'vorgewählte Sprache', -'D3_GEOIP_SELCUR' => 'vorgewählte Währung', -'D3_GEOIP_CUSTSELSHOP' => ' - vom Kunden gewählter Shop - ', -'D3_GEOIP_CUSTSELLANG' => ' - vom Kunden gewählte Sprache - ', -'D3_GEOIP_CUSTSELCUR' => ' - vom Kunden gewählte Währung - ', -'D3_GEOIP_OR' => 'oder', -'D3_GEOIP_DISABLED' => '(deaktiviert)', -'D3_GEOIP_SELURL' => 'zu wechselnde URL', -'D3_GEOIP_SELURL_DESC' => 'Sobald im URL-Feld eine Eingabe vorhanden ist, wird bei passenden Kunden versucht, zur hinterlegten URL zu wechseln. Möchten Sie den Mandanten, die Währung und / oder die Sprache einstellen, entfernen Sie die URL.

Aktivieren / deaktivieren Sie den URL-Wechsel zusätzlich in den Modul-Grundeinstellungen.', - -'D3_GEOIP_METADATA_TITLE' => 'D³ GeoIP Vorauswahl', -'D3_GEOIP_METADATA_DESC' => 'Begrüßen Sie Ihre Kunden in seiner Landessprache.', - -'D3_GEOIP_UPDATE_ITEMINSTALL' => 'Die umfangreiche IP-Liste kann leider nicht über die automatische Installation eingebunden werden. Bitte installieren Sie diese manuell. '.PHP_EOL.PHP_EOL.'Die erforderlichen Daten finden Sie im Installationspaket des Moduls unter "setup+doku/geoip-Data_IPv4_*.sql" ("setup+doku/geoip-Data_IPv6_*.sql" für IPv6-Adressen) oder als handlichere SQL-Dateien unter "setup+doku/geoip_data_parts/". '.PHP_EOL.PHP_EOL.'Sie benötigen entweder die Komplettdateien oder die Sammlung kleinerer Daten. Führen Sie die SQL-Datei(en) bitte in Ihrer Datenbank aus.', + 'D3_GEOIP_METADATA_TITLE' => 'D³ GeoIP Vorauswahl', + 'D3_GEOIP_METADATA_DESC' => 'Begrüßen Sie Ihre Kunden in seiner Landessprache.', + 'D3_GEOIP_UPDATE_ITEMINSTALL' => 'Die umfangreiche IP-Liste kann leider nicht über die automatische Installation eingebunden werden. Bitte installieren Sie diese manuell. '.PHP_EOL.PHP_EOL.'Die erforderlichen Daten finden Sie im Installationspaket des Moduls unter "setup+doku/geoip-Data_IPv4_*.sql" ("setup+doku/geoip-Data_IPv6_*.sql" für IPv6-Adressen) oder als handlichere SQL-Dateien unter "setup+doku/geoip_data_parts/". '.PHP_EOL.PHP_EOL.'Sie benötigen entweder die Komplettdateien oder die Sammlung kleinerer Daten. Führen Sie die SQL-Datei(en) bitte in Ihrer Datenbank aus.', ); /* diff --git a/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl b/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl index d7c1309..768569c 100644 --- a/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl +++ b/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl @@ -2,9 +2,9 @@ -[{ if $readonly }] +[{if $readonly}] [{assign var="readonly" value="readonly disabled"}] [{else}] [{assign var="readonly" value=""}] [{/if}] -
- [{ $oViewConf->getHiddenSid() }] - - + + [{$oViewConf->getHiddenSid()}] + + - +
-
- [{ $oViewConf->getHiddenSid() }] + + [{$oViewConf->getHiddenSid()}] - - - - - + + + + + @@ -85,7 +85,7 @@ window.onload = function ()




- oxcountry__oxtitle->value && !$oxparentid }]disabled[{/if}]>
+ oxcountry__oxtitle->value && !$oxparentid}]disabled[{/if}]>
From 8a8922e82761bccb58b2809ef7aa8d4d360b9509 Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Tue, 21 Jul 2015 19:12:55 +0000 Subject: [PATCH 4/8] add further ip sources, small syntax changes --- .gitattributes | 2 +- .../controllers/admin/d3_country_geoip.php | 18 +- copy_this/modules/d3/d3geoip/metadata.php | 21 +- .../modules/d3/d3geoip/models/d3geoip.php | 23 +- .../modules/components/d3_oxcmp_cur_geoip.php | 2 +- .../components/d3_oxcmp_lang_geoip.php | 2 +- .../{models => setup}/d3geoip_update.php | 196 +++++++++--------- .../d3geoip/views/admin/de/d3_geoip_lang.php | 24 ++- .../views/admin/tpl/d3_cfg_geoipset_main.tpl | 67 ++---- .../views/admin/tpl/d3_country_geoip.tpl | 20 +- 10 files changed, 195 insertions(+), 180 deletions(-) rename copy_this/modules/d3/d3geoip/{models => setup}/d3geoip_update.php (68%) diff --git a/.gitattributes b/.gitattributes index 1bc0150..4994844 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,10 +10,10 @@ 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/models/d3geoip_update.php -text copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php -text copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_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 copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl -text copy_this/modules/d3/d3geoip/views/admin/tpl/d3_country_geoip.tpl -text diff --git a/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php b/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php index 5caa23f..1f00486 100644 --- a/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php +++ b/copy_this/modules/d3/d3geoip/controllers/admin/d3_country_geoip.php @@ -160,8 +160,6 @@ class d3_country_geoip extends oxAdminView */ public function getCurList() { - $aCurrencies = array(); - if ($this->getModCfgValue('blChangeShop') && $this->oCountry->getFieldData('d3geoipshop')) { $sShopId = $this->oCountry->getFieldData('d3geoipshop'); } else { @@ -173,8 +171,20 @@ class d3_country_geoip extends oxAdminView $sCurs = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getOne($sQ); - if ($sCurs) { - foreach (unserialize($sCurs) as $sKey => $sValue) { + return $this->d3ExtractCurList($sCurs); + } + + /** + * @param $sCurrencies + * + * @return array + */ + public function d3ExtractCurList($sCurrencies) + { + $aCurrencies = array(); + + if ($sCurrencies) { + foreach (unserialize($sCurrencies) as $sKey => $sValue) { $aFields = explode('@', $sValue); $aCurrencies[$sKey]->id = $sKey; $aCurrencies[$sKey]->name = $aFields[0]; diff --git a/copy_this/modules/d3/d3geoip/metadata.php b/copy_this/modules/d3/d3geoip/metadata.php index e8faecf..05a5a3f 100644 --- a/copy_this/modules/d3/d3geoip/metadata.php +++ b/copy_this/modules/d3/d3geoip/metadata.php @@ -24,21 +24,26 @@ $aModule = array( 'oxcmp_lang' => 'd3/d3geoip/modules/components/d3_oxcmp_lang_geoip', ), 'files' => array( - 'd3_cfg_geoipset' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset.php', - 'd3_cfg_geoipset_list' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php', - 'd3_cfg_geoipset_main' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php', + 'd3_cfg_geoipset' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset.php', + 'd3_cfg_geoipset_list' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset_list.php', + 'd3_cfg_geoipset_main' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset_main.php', 'd3_cfg_geoipset_licence' => 'd3/d3geoip/controllers/admin/d3_cfg_geoipset_licence.php', - 'd3_country_geoip' => 'd3/d3geoip/controllers/admin/d3_country_geoip.php', - 'd3geoip' => 'd3/d3geoip/models/d3geoip.php', - 'd3geoip_update' => 'd3/d3geoip/models/d3geoip_update.php', + 'd3_country_geoip' => 'd3/d3geoip/controllers/admin/d3_country_geoip.php', + 'd3geoip' => 'd3/d3geoip/models/d3geoip.php', + 'd3geoip_update' => 'd3/d3geoip/setup/d3geoip_update.php', ), 'templates' => array( - 'd3_cfg_geoipset_main.tpl' => 'd3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl', - 'd3_country_geoip.tpl' => 'd3/d3geoip/views/admin/tpl/d3_country_geoip.tpl', + 'd3_cfg_geoipset_main.tpl' => 'd3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl', + 'd3_country_geoip.tpl' => 'd3/d3geoip/views/admin/tpl/d3_country_geoip.tpl', ), 'events' => array( 'onActivate' => 'd3install::checkUpdateStart', ), 'blocks' => array( ), + 'd3FileRegister' => array( + 'd3/d3geoip/IntelliSenseHelper.php', + 'd3/d3geoip/metadata.php', + 'd3/d3geoip/views/admin/de/d3_geoip_lang.php', + ), ); \ No newline at end of file diff --git a/copy_this/modules/d3/d3geoip/models/d3geoip.php b/copy_this/modules/d3/d3geoip/models/d3geoip.php index d71df8b..a5c8a89 100644 --- a/copy_this/modules/d3/d3geoip/models/d3geoip.php +++ b/copy_this/modules/d3/d3geoip/models/d3geoip.php @@ -100,8 +100,25 @@ class d3GeoIP extends oxbase ) { $sIP = $this->_getModConfig()->getValue('sTestCountryIp'); } else { - // ToDo: use $_SERVER['X-Forwared-For'] && Client-IP in case of proxy - $sIP = $_SERVER['REMOTE_ADDR']; + if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { + $sIP = $_SERVER['HTTP_CF_CONNECTING_IP']; + } else if (isset($_SERVER['HTTP_X_REAL_IP'])) { + $sIP = $_SERVER['HTTP_X_REAL_IP']; + } else if (isset($_SERVER['HTTP_CLIENT_IP'])) { + $sIP = $_SERVER['HTTP_CLIENT_IP']; + } else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $sIP = $_SERVER['HTTP_X_FORWARDED_FOR']; + } else if(isset($_SERVER['HTTP_X_FORWARDED'])) { + $sIP = $_SERVER['HTTP_X_FORWARDED']; + } else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) { + $sIP = $_SERVER['HTTP_FORWARDED_FOR']; + } else if(isset($_SERVER['HTTP_FORWARDED'])) { + $sIP = $_SERVER['HTTP_FORWARDED']; + } else if(isset($_SERVER['REMOTE_ADDR'])) { + $sIP = $_SERVER['REMOTE_ADDR']; + } else { + $sIP = 'UNKNOWN'; + } } stopProfile(__METHOD__); @@ -412,7 +429,7 @@ class d3GeoIP extends oxbase $oShoplist->getList(); $aShopUrls = array(); - foreach (array_keys($oShoplist) as $sId) { + foreach ($oShoplist->arrayKeys() as $sId) { $aShopUrls[$sId] = $this->getConfig()->getShopConfVar('sMallShopURL', $sId); } diff --git a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php index 18739c3..9cc7960 100644 --- a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php +++ b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_cur_geoip.php @@ -35,6 +35,6 @@ class d3_oxcmp_cur_geoip extends d3_oxcmp_cur_geoip_parent $oLocation->setCountryCurrency(); } - return parent::init(); + parent::init(); } } diff --git a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php index 7a6e026..6bd21e6 100644 --- a/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php +++ b/copy_this/modules/d3/d3geoip/modules/components/d3_oxcmp_lang_geoip.php @@ -29,6 +29,6 @@ class d3_oxcmp_lang_geoip extends d3_oxcmp_lang_geoip_parent $oLocation->setCountryLanguage(); } - return parent::init(); + parent::init(); } } diff --git a/copy_this/modules/d3/d3geoip/models/d3geoip_update.php b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php similarity index 68% rename from copy_this/modules/d3/d3geoip/models/d3geoip_update.php rename to copy_this/modules/d3/d3geoip/setup/d3geoip_update.php index 7249015..f275063 100644 --- a/copy_this/modules/d3/d3geoip/models/d3geoip_update.php +++ b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php @@ -40,6 +40,8 @@ zQ9'; 'do' => 'fixGeoIpFields'), array('check' => 'checkIndizes', 'do' => 'fixIndizes'), + array('check' => 'hasUnregisteredFiles', + 'do' => 'showUnregisteredFiles'), array('check' => 'checkModCfgSameRevision', 'do' => 'updateModCfgSameRevision'), ); @@ -52,101 +54,101 @@ zQ9'; 'sTableName' => 'oxcountry', 'sFieldName' => 'D3GEOIPSHOP', 'sType' => 'VARCHAR(10)', - 'blNull' => FALSE, + 'blNull' => false, 'sDefault' => 'oxbaseshop', 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3GEOIPLANG' => array( 'sTableName' => 'oxcountry', 'sFieldName' => 'D3GEOIPLANG', 'sType' => 'TINYINT(2)', - 'blNull' => FALSE, + 'blNull' => false, 'sDefault' => '-1', 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3GEOIPCUR' => array( 'sTableName' => 'oxcountry', 'sFieldName' => 'D3GEOIPCUR', 'sType' => 'TINYINT(2)', - 'blNull' => FALSE, + 'blNull' => false, 'sDefault' => '-1', 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3GEOIPURL' => array( 'sTableName' => 'oxcountry', 'sFieldName' => 'D3GEOIPURL', 'sType' => 'VARCHAR(255)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3STARTIP' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3STARTIP', 'sType' => 'VARCHAR(39)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3ENDIP' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3ENDIP', 'sType' => 'VARCHAR(39)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3STARTIPNUM' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3STARTIPNUM', 'sType' => 'DECIMAL(38,0)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3ENDIPNUM' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3ENDIPNUM', 'sType' => 'DECIMAL(38,0)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3ISO' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3ISO', 'sType' => 'CHAR(2)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), 'D3COUNTRYNAME' => array( 'sTableName' => 'd3geoip', 'sFieldName' => 'D3COUNTRYNAME', 'sType' => 'VARCHAR(50)', - 'blNull' => FALSE, - 'sDefault' => FALSE, + 'blNull' => false, + 'sDefault' => false, 'sComment' => '', 'sExtra' => '', - 'blMultilang' => FALSE, + 'blMultilang' => false, ), ); @@ -175,7 +177,7 @@ zQ9'; */ public function checkGeoIpTableExist() { - return $this->_checkTableExist('d3geoip'); + return $this->_checkTableNotExist('d3geoip'); } /** @@ -183,13 +185,9 @@ zQ9'; */ public function updateGeoIpTableExist() { - $blRet = FALSE; - if ($this->checkGeoIpTableExist()) - { - $aRet = $this->_addTable('d3geoip', $this->aFields, $this->aIndizes, 'GeoIP', 'MyISAM'); - $blRet = $aRet['blRet']; - $this->_setActionLog('SQL', $aRet['sql'], __METHOD__); - $this->_setUpdateBreak(TRUE); + $blRet = false; + if ($this->checkGeoIpTableExist()) { + $blRet = $this->_addTable2('d3geoip', $this->aFields, $this->aIndizes, 'GeoIP', 'MyISAM'); } return $blRet; @@ -223,9 +221,8 @@ zQ9'; */ public function checkModCfgItemExist() { - $blRet = FALSE; - foreach ($this->_getShopList() as $oShop) - { + $blRet = false; + foreach ($this->getShopList() as $oShop) { /** @var $oShop oxshop */ $aWhere = array( 'oxmodid' => $this->sModKey, @@ -235,8 +232,7 @@ zQ9'; $blRet = $this->_checkTableItemNotExist('d3_cfg_mod', $aWhere); - if ($blRet) - { + if ($blRet) { return $blRet; } } @@ -249,12 +245,10 @@ zQ9'; */ public function updateModCfgItemExist() { - $blRet = FALSE; + $blRet = false; - if ($this->checkModCfgItemExist()) - { - foreach ($this->_getShopList() as $oShop) - { + if ($this->checkModCfgItemExist()) { + foreach ($this->getShopList() as $oShop) { /** @var $oShop oxshop */ $aWhere = array( 'oxmodid' => $this->sModKey, @@ -262,8 +256,7 @@ zQ9'; 'oxnewrevision' => $this->sModRevision, ); - if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere)) - { + if ($this->_checkTableItemNotExist('d3_cfg_mod', $aWhere)) { // update don't use this property unset($aWhere['oxnewrevision']); @@ -271,103 +264,98 @@ zQ9'; array ( 'fieldname' => 'OXID', 'content' => "md5('" . $this->sModKey . " " . $oShop->getId() . " de')", - 'force_update' => TRUE, - 'use_quote' => FALSE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => false, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXSHOPID', 'content' => $oShop->getId(), - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXMODID', 'content' => $this->sModKey, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXNAME', 'content' => $this->sModName, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXACTIVE', 'content' => "0", - 'force_update' => FALSE, - 'use_quote' => FALSE, - 'use_multilang' => FALSE, + 'force_update' => false, + 'use_quote' => false, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXBASECONFIG', 'content' => $this->sBaseConf, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXSERIAL', 'content' => "", - 'force_update' => FALSE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => false, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXINSTALLDATE', 'content' => "NOW()", - 'force_update' => TRUE, - 'use_quote' => FALSE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => false, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXVERSION', 'content' => $this->sModVersion, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + '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, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array ( 'fieldname' => 'OXREQUIREMENTS', 'content' => $this->sRequirements, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ), array( 'fieldname' => 'OXVALUE', 'content' => $this->sBaseValue, - 'force_update' => FALSE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => false, + 'use_quote' => true, + 'use_multilang' => false, ), array( 'fieldname' => 'OXNEWREVISION', 'content' => $this->sModRevision, - 'force_update' => TRUE, - 'use_quote' => TRUE, - 'use_multilang' => FALSE, + 'force_update' => true, + 'use_quote' => true, + 'use_multilang' => false, ) ); - $aRet = $this->_updateTableItem('d3_cfg_mod', $aInsertFields, $aWhere); - $blRet = $aRet['blRet']; + $blRet = $this->_updateTableItem2('d3_cfg_mod', $aInsertFields, $aWhere); - $this->_setActionLog('SQL', $aRet['sql'], __METHOD__); - $this->_setUpdateBreak(FALSE); - - if ($this->getStepByStepMode()) - { + if ($this->getStepByStepMode()) { break; } } @@ -383,7 +371,7 @@ zQ9'; public function checkGeoIpFields() { /** @var $oShop oxshop */ - $oShop = $this->_getShopList()->current(); + $oShop = $this->getShopList()->current(); $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); return $this->checkFields(); @@ -396,9 +384,25 @@ zQ9'; public function fixGeoIpFields() { /** @var $oShop oxshop */ - $oShop = $this->_getShopList()->current(); + $oShop = $this->getShopList()->current(); $this->aFields['D3GEOIPSHOP']['sDefault'] = $oShop->getId(); return $this->fixFields(); } -} \ No newline at end of file + + /** + * @return bool + */ + public function hasUnregisteredFiles() + { + return $this->_hasUnregisteredFiles('d3geoip', array('d3FileRegister')); + } + + /** + * @return bool + */ + public function showUnregisteredFiles() + { + return $this->_showUnregisteredFiles('d3geoip', array('d3FileRegister')); + } +} diff --git a/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php b/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php index 2548d9f..0420065 100644 --- a/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php +++ b/copy_this/modules/d3/d3geoip/views/admin/de/d3_geoip_lang.php @@ -28,13 +28,16 @@ $aLang = array( 'D3_GEOIP_TRANSL' => 'GeoIP-Kundenumleitungen', - 'D3_GEOIP_SET_DEBUG_DESC' => 'Mit aktiviertem Debug-Modus wird im Frontend die aktuelle IP-Adresse des Shopbesuchers gezeigt. Beachten Sie, dass Umleitungen, die auf Weiterleitungen basieren, dann nicht ausgeführt werden können.', + 'D3_GEOIP_SET_DEBUG_DESC' => 'Mit aktiviertem Debug-Modus wird im Frontend die aktuelle '. + 'IP-Adresse des Shopbesuchers gezeigt. Beachten Sie, dass Umleitungen, die auf Weiterleitungen basieren, dann '. + 'nicht ausgeführt werden können.', 'D3_GEOIP_SET_OPTIONS' => 'Optionen', 'D3_GEOIP_SET_OPTIONS_CHANGESHOP' => 'Mandant wechseln, wenn eingestellt (nur EE)', 'D3_GEOIP_SET_OPTIONS_CHANGECURR' => 'Währung wechseln, wenn eingestellt', 'D3_GEOIP_SET_OPTIONS_CHANGELANG' => 'Sprache wechseln, wenn eingestellt', 'D3_GEOIP_SET_OPTIONS_CHANGEURL' => 'URL wechseln, wenn eingestellt', - 'D3_GEOIP_SET_OPTIONS_NOCOUNTRY' => 'Shop verwendet die Einstellung dieses Landes, wenn IP nicht zuzuordnen ist', + 'D3_GEOIP_SET_OPTIONS_NOCOUNTRY' => 'Shop verwendet die Einstellung dieses Landes, wenn IP nicht '. + 'zuzuordnen ist', 'D3_GEOIP_SET_IP' => 'IP-Einstellungen', 'D3_GEOIP_SET_IP_TESTIP' => 'statt Kunden-IP immer diese IP-Adresse verwenden', 'D3_GEOIP_SET_IP_TESTCOUNTRY' => 'statt Kunden-IP immer eine IP-Adresse dieses Landes verwenden', @@ -52,14 +55,19 @@ $aLang = array( 'D3_GEOIP_OR' => 'oder', 'D3_GEOIP_DISABLED' => '(deaktiviert)', 'D3_GEOIP_SELURL' => 'zu wechselnde URL', - 'D3_GEOIP_SELURL_DESC' => 'Sobald im URL-Feld eine Eingabe vorhanden ist, wird bei passenden Kunden versucht, zur hinterlegten URL zu wechseln. Möchten Sie den Mandanten, die Währung und / oder die Sprache einstellen, entfernen Sie die URL.

Aktivieren / deaktivieren Sie den URL-Wechsel zusätzlich in den Modul-Grundeinstellungen.', + 'D3_GEOIP_SELURL_DESC' => 'Sobald im URL-Feld eine Eingabe vorhanden ist, wird bei '. + 'passenden Kunden versucht, zur hinterlegten URL zu wechseln. Möchten Sie den Mandanten, die Währung und / '. + 'oder die Sprache einstellen, entfernen Sie die URL.

Aktivieren / deaktivieren Sie den URL-Wechsel '. + 'zusätzlich in den Modul-Grundeinstellungen.', 'D3_GEOIP_METADATA_TITLE' => 'D³ GeoIP Vorauswahl', 'D3_GEOIP_METADATA_DESC' => 'Begrüßen Sie Ihre Kunden in seiner Landessprache.', - 'D3_GEOIP_UPDATE_ITEMINSTALL' => 'Die umfangreiche IP-Liste kann leider nicht über die automatische Installation eingebunden werden. Bitte installieren Sie diese manuell. '.PHP_EOL.PHP_EOL.'Die erforderlichen Daten finden Sie im Installationspaket des Moduls unter "setup+doku/geoip-Data_IPv4_*.sql" ("setup+doku/geoip-Data_IPv6_*.sql" für IPv6-Adressen) oder als handlichere SQL-Dateien unter "setup+doku/geoip_data_parts/". '.PHP_EOL.PHP_EOL.'Sie benötigen entweder die Komplettdateien oder die Sammlung kleinerer Daten. Führen Sie die SQL-Datei(en) bitte in Ihrer Datenbank aus.', + 'D3_GEOIP_UPDATE_ITEMINSTALL' => 'Die umfangreiche IP-Liste kann leider nicht über die '. + 'automatische Installation eingebunden werden. Bitte installieren Sie diese manuell. '.PHP_EOL.PHP_EOL. + 'Die erforderlichen Daten finden Sie im Installationspaket des Moduls unter '. + '"setup+doku/geoip-Data_IPv4_*.sql" ("setup+doku/geoip-Data_IPv6_*.sql" für IPv6-Adressen) oder als '. + 'handlichere SQL-Dateien unter "setup+doku/geoip_data_parts/". '.PHP_EOL.PHP_EOL. + 'Sie benötigen entweder die Komplettdateien oder die Sammlung kleinerer Daten. Führen Sie die SQL-Datei(en) '. + 'bitte in Ihrer Datenbank aus.', ); - -/* -[{ oxmultilang ident='ACTIONS_MAIN_YOUWANTTODELETE' }] -*/ \ No newline at end of file diff --git a/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl b/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl index 768569c..e0cf578 100644 --- a/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl +++ b/copy_this/modules/d3/d3geoip/views/admin/tpl/d3_cfg_geoipset_main.tpl @@ -59,33 +59,6 @@ function showFormatSettings(sElemId, visible, blUseOldElem) - - + + EOT; echo "

" . $this->translate('RequCheck') . ' "' . $this->oConfig->sModName . ' ' . $sModVersion . '"

'; echo '

' . $this->translate('ExecNotice') . '

' . PHP_EOL; @@ -599,10 +888,15 @@ EOT; $sTranslDependent

- $sTranslShopPhpInfo + + $sTranslShopPhpInfo +

- + EOT; @@ -610,6 +904,29 @@ EOT; return; } + /** + * @param $aResult + * + * @return bool + */ + protected function hasRemoteVersionDiff($aResult) + { + $blDiff = false; + + if (is_array($aResult) + && isset($aResult[$this->oBase->sVersionTag]) + && is_array($aResult[$this->oBase->sVersionTag]) + ) { + foreach ($aResult[$this->oBase->sVersionTag] as $sRemoteVersion) { + if (version_compare($sRemoteVersion, $this->oBase->getVersion(), '!=')) { + $blDiff = true; + } + } + } + + return $blDiff; + } + /** * @param $aResult * @param $sElementId @@ -618,9 +935,19 @@ EOT; */ public function getNoSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) { - echo "
" . $this->_addToggleScript($aResult, $sElementId) . - $this->translate($sCheckType, $aConfiguration) . "
" . PHP_EOL; + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; $this->getSubDirItems($aResult, $sElementId); } @@ -633,10 +960,44 @@ EOT; */ public function getSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) { - echo "
" . + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . $this->_addToggleScript($aResult, $sElementId) . - $this->translate($sCheckType, $aConfiguration) . "
" . PHP_EOL; + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getUnknownItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; $this->getSubDirItems($aResult, $sElementId); } @@ -647,9 +1008,11 @@ EOT; */ public function getUncheckableItem($sCheckType, $aConfiguration) { - echo "
" . - $this->translate($sCheckType, $aConfiguration) . " (" . $this->translate('RequNotCheckable') . ")
"; + echo '
' . + $this->translate($sCheckType, $aConfiguration) . ' (' . $this->translate('RequNotCheckable') . ')' . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; } /** @@ -659,17 +1022,33 @@ EOT; public function getSubDirItems($aResult, $sElementId) { if (is_array($aResult) && count($aResult)) { - echo "' . PHP_EOL; } } @@ -682,9 +1061,13 @@ EOT; protected function _addToggleScript($aResult, $sElementId) { if (is_array($aResult) && count($aResult)) { - $sScript = "
+
"; + $sScript = "
+
"; } else { $sScript = ""; } @@ -692,6 +1075,22 @@ EOT; return $sScript; } + /** + * @param $sTextIdent + * @param $aConfiguration + * + * @return string + */ + protected function _addDescBox($sTextIdent, $aConfiguration) + { + $sContent = "
?". + "
". + "
".$this->translate($sTextIdent, $aConfiguration)."
". + "
"; + + return $sContent; + } + /** * @param $sIdent * @param array $aConfiguration @@ -708,7 +1107,9 @@ EOT; array_walk($aConfiguration['aParams'], array($this->oBase, 'aTos'), $sIdent); } - if (($sTranslation = $aTransl[$this->oBase->getLang()][$sGenIdent])) { + if (isset($aTransl[$this->oBase->getLang()][$sGenIdent]) + && ($sTranslation = $aTransl[$this->oBase->getLang()][$sGenIdent]) + ) { if (isset($aConfiguration['aParams'])) { return vsprintf($sTranslation, $aConfiguration['aParams']); } else { @@ -721,7 +1122,24 @@ EOT; public function getPngButton() { - $sImg = "iVBORw0KGgoAAAANSUhEUgAABDgAAAAWCAYAAAAl+SzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABMpJREFUeNrs3Y1O4zgUhuFY4hbb2ZthRjtczOz0Ght7cZwfQ5u2E4K0a55XiNDUXyWcT+ZwfGyHw+HQvZI6AACAT+J0OgW9AAAAtnA8Hh/JWYSnbkxuvAYeeg0AAAAAAPynuJevOB6P+ZKe6sYvLy96DgAA7M7z87NOAAAAm7iVq8gxRs5p5CTH03Tz758/uzAUc7x+Hy4pf71ex9fDj2leyxLG1vnNELpmdJPqo21a7afy+/MIj/AIj7zVhS/seWPD4zoAAIAtxJhW44+cy/jx/ftw/2kRxDEQSd0Uraah/RKVlLfK+/kDS0T7eieGZnTdA33QfeF+CpFHeIRHeORSF1Lw3I0Nd3UAAACbEhwprscfadnma05wpL7v8v0Sh4QiLimREqWEt7mSmK9xnLlrSBe6fdq02k9D1oxHeIRHeORCFz13Y8NtHQAAwNYER+zX44+q3Zzg6GOcbw6haqhmXG5MvuQPiw3q9mrTaj/xCI/wCI9c13juxoY/0wEAANxNcPTxbvzxLsHRd7mEo8y+pJIFCWEupy2XMTcSxjKQUMqSl1mb/79urzbN9hOP8AiP8MgV3Zf2vLHhIR0AAMBWcr5iNf6o4owlwdGPCY68hiUsZbRh2DGsWkz7/mUaVl83oxu3R/xwm1b7KfEIj/AIj1zRDfc9d2PDTR0AAMA2hgqOtfijWqOybDKaExzj6pVpzWyYG04zdGn5vByohVC924ou7NSm3X7iER7hER55r/P3w9jw6NgAAADwp+SCjPX442oFR5URWeaY5pKPsmNpmI+SnctN5zKRVnR7tWm1nwKP8AiP8MiKznM3NqzrAAAANic4zuf1+ONaBce576dQZAhMplPepvWzYdn6vSoBCUNJSCkPaUS3V5tm+4lHeIRHeORS97U9b2x4RAcAALA5wZEPRVmJP1K4ckxsPJ/H9SzjOvpuEc11INP805gtWQ6Ka0gXdmrTaD8NGTMe4REe4ZFrOs/d2HBLBwAAsJHzuV+PP6qJlKqCI3ZdvaZliVGm3MiYKZm3EJuvXera0aW0T5tG+2kKYHmER3iER2pdU8/Pc/+0sQEAAGALec/Q9fjjSgVH358v/zFZJNXy6ukYuFQqREZBK7q0U5tm+4lHeIRHeOSqLnnuxoa7YwMAAMAWzvF8M/64THDEOB+xEsYIJlV7d5R1tdNGHsMnlvW2I63opirrj7Zptp86HuERHuGRS92X9ryx4cGxAQAAYBv5mNi1+OP6HhzDMbEVad5JrKoxrdbfzlFa155urzYt9lPgER7hER658bt47saGVR0AAMA28ikqj8QfVQVH3705ceU1KEm5qmM+0y7N8crwOqY5a5Ja0sWd2jTaTykmHuERHuGRS52/H8aGuzoAAIBtxCGIWok/riU4Yl8EZVOwEpSUG9X62XmRS1w+oV5z24RurzaN9tO0QR6P8AiP8MgbnedubLitAwAA2EqfExo34o+LBMevX7+6b9/+KkFItYZlmI0tP1XBS3UE3LhNeju6vdq02k8dj/AIj/DIhW48W8NzNzbcHBsAAAC2MGypsRJ//P7n9/J/yOFwGO6fTie9BgAAPgvrVAAAwFZuzpgcj8fh+jQGHGm6AQAAsDcmUgAAwFYezFeEfwUYAAoCUXB0RZrTAAAAAElFTkSuQmCC"; + $sImg = "iVBORw0KGgoAAAANSUhEUgAABDgAAAAWCAYAAAAl+SzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB". + "MpJREFUeNrs3Y1O4zgUhuFY4hbb2ZthRjtczOz0Ght7cZwfQ5u2E4K0a55XiNDUXyWcT+ZwfGyHw+HQvZI6AACAT+J0OgW9AAAAtn". + "A8Hh/JWYSnbkxuvAYeeg0AAAAAAPynuJevOB6P+ZKe6sYvLy96DgAA7M7z87NOAAAAm7iVq8gxRs5p5CTH03Tz758/uzAUc7x+Hy4". + "pf71ex9fDj2leyxLG1vnNELpmdJPqo21a7afy+/MIj/AIj7zVhS/seWPD4zoAAIAtxJhW44+cy/jx/ftw/2kRxDEQSd0Uraah/RKV". + "lLfK+/kDS0T7eieGZnTdA33QfeF+CpFHeIRHeORSF1Lw3I0Nd3UAAACbEhwprscfadnma05wpL7v8v0Sh4QiLimREqWEt7mSmK9xn". + "LlrSBe6fdq02k9D1oxHeIRHeORCFz13Y8NtHQAAwNYER+zX44+q3Zzg6GOcbw6haqhmXG5MvuQPiw3q9mrTaj/xCI/wCI9c13juxo". + "Y/0wEAANxNcPTxbvzxLsHRd7mEo8y+pJIFCWEupy2XMTcSxjKQUMqSl1mb/79urzbN9hOP8AiP8MgV3Zf2vLHhIR0AAMBWcr5iNf6". + "o4owlwdGPCY68hiUsZbRh2DGsWkz7/mUaVl83oxu3R/xwm1b7KfEIj/AIj1zRDfc9d2PDTR0AAMA2hgqOtfijWqOybDKaExzj6pVp". + "zWyYG04zdGn5vByohVC924ou7NSm3X7iER7hER55r/P3w9jw6NgAAADwp+SCjPX442oFR5URWeaY5pKPsmNpmI+SnctN5zKRVnR7t". + "Wm1nwKP8AiP8MiKznM3NqzrAAAANic4zuf1+ONaBce576dQZAhMplPepvWzYdn6vSoBCUNJSCkPaUS3V5tm+4lHeIRHeORS97U9b2". + "x4RAcAALA5wZEPRVmJP1K4ckxsPJ/H9SzjOvpuEc11INP805gtWQ6Ka0gXdmrTaD8NGTMe4REe4ZFrOs/d2HBLBwAAsJHzuV+PP6q". + "JlKqCI3ZdvaZliVGm3MiYKZm3EJuvXera0aW0T5tG+2kKYHmER3iER2pdU8/Pc/+0sQEAAGALec/Q9fjjSgVH358v/zFZJNXy6ukY". + "uFQqREZBK7q0U5tm+4lHeIRHeOSqLnnuxoa7YwMAAMAWzvF8M/64THDEOB+xEsYIJlV7d5R1tdNGHsMnlvW2I63opirrj7Zptp86H". + "uERHuGRS92X9ryx4cGxAQAAYBv5mNi1+OP6HhzDMbEVad5JrKoxrdbfzlFa155urzYt9lPgER7hER658bt47saGVR0AAMA28ikqj8". + "QfVQVH3705ceU1KEm5qmM+0y7N8crwOqY5a5Ja0sWd2jTaTykmHuERHuGRS52/H8aGuzoAAIBtxCGIWok/riU4Yl8EZVOwEpSUG9X". + "62XmRS1w+oV5z24RurzaN9tO0QR6P8AiP8MgbnedubLitAwAA2EqfExo34o+LBMevX7+6b9/+KkFItYZlmI0tP1XBS3UE3LhNeju6". + "vdq02k8dj/AIj/DIhW48W8NzNzbcHBsAAAC2MGypsRJ//P7n9/J/yOFwGO6fTie9BgAAPgvrVAAAwFZuzpgcj8fh+jQGHGm6AQAAs". + "DcmUgAAwFYezFeEfwUYAAoCUXB0RZrTAAAAAElFTkSuQmCC"; header("Content-type: image/png"); echo base64_decode($sImg); exit; @@ -729,7 +1147,64 @@ EOT; public function getPngLogo() { - $sImg = "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"; + $sImg = "iVBORw0KGgoAAAANSUhEUgAAADMAAAA0CAYAAAAnpACSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE". + "IxJREFUeNq8Wgl4VNXZfu+dLZkkk5BA9kACYQlB2aIga6myuIEtFX+kLW1BJVT/akVrRds+rVqRX2lLRSsal5/nUaCgtmhi8BeaUh". + "Al7EYTIWyGQPZlMsnM3Lnn/865dzJ3biaLVnsfDpk59yzf++3fOSMxxvANPlZqUdQs1FRqXmq+Ac7NpbaI2jxqQ6nZqDVR+z9qr1H". + "71DxB+nfBPHYYSHUCK8fATl+HUZtK7Wpqo1SGeZ0BQCEYFolQETSrhDJ6d4rax9Q+pFa18SQ8HX6aHAcszUUS9T3U0IU1710ASqid". + "dwNuBciMARbSDjcQtDQnnnj7HNYuGvY1gqHnW9RWBBi+f7kT+LwVKG8AjlDj38+0AR1EiJ1kk0XEZFAbO4gQJwOj44F0+m6TsYvWK". + "KKWQOQUvVwFPHCAxNBlZDs1psk30wXsv4XWi8VvqefXXwcYWg6FRPy8racBzsXjjQxtXim4sra5bKCG6X3QCLOR4lxBwGakS1g+Ch". + "hORN5FcttWpSumpCunZADEH5L2iATa71bAaUUW9XzxVcEs4yCq2zD9qaMML1QQXQGdaMmwYW8PM41RQxwvmgu0+yU8Qap7uUMbN59". + "UykUKXF4P0J5hgD4gi5qTjuW6DQkDHehDfMNvLnbgvp/vV7GdpKEGdA5aTMRiAIAQDj6HJHR7rgyHBc+T/a16jaQzNFbYB0FDXa0H". + "C0a+QSrrD82J1qj3G73NQJ6buTT+eppdf+cehuauCCCCLDeDkcwAWM8xjA+T8JcKxp3FKu4oFGLUOZJEpyJNIqKfpP4F/kBI9bLIW". + "UxIErPLvozNFLb5sOmRgwwbj6kaMbIUrjJMJzIIRooAUOpNzwzdAcMX+hfvlFC6UEaCQ8K0N4FGrzbVQuM+InuZNBjruOcLzpL7Ab". + "LSr2LT0lIVG8tpBZnpxDOtwfgX4X2snz5z4y8swaYRfWM2+fhkaS/3gotyqE/RVGnrAgHkz6daQ0D6A8Mlsvm24gDerSYgNhaZiP4". + "avvq4giFCgkdJzZa+MAv442zCQxby9hmgK4C7c+MxZCBgZtJam24tVvBmlS4RhoERaH6nRhpvkg4FKfipKXrj32nPjy+p+NsZ9d4W". + "L16noPvTu/OBuSSt/z1BaUCNoPN2c7phfhJoqbLfk1qVconwEUw3DEm3L1Xq3W0x9Ix0TDLnHTpwzZ5W5MsYP1gCqTSsxN5jFK+KT". + "gbweiW1ChXzhksoXmh7lkx11Vvz8fxsCsaXOsVKI/sD84t3z6pYu5fkaZdCXJUkLSbQd56aWCQz5ZLJ57Juwn3csFV9jaDDCeoEfX". + "+owIbceGmT3qseqmOri44oWjam8vmWoMt4iYJk/Pb5WPdpi/h+vC8wszwKHrpzt08zRE4Ql4LEwqL39httGJckD8in8yleUhs7sfV". + "sG8MFN0PJ2QB2nAp0A/RrXmzrU+VK2YOTrWlXJEmr7y2w4C0ac90wGQ8UWPmwe1+pCCg/GmvZnO7EOovmPZ19gSn8w2E/LraomlRU". + "g6fSmc0lMi1NRopTmjCAeB+UFN80YfQgiUeGoSvzLXMrm9nsxw76sOWYQvmbirxEy3i3j5Vtr1Jqbx1lXbBhtq3wd9Nsi2JteIfmP". + "Per/b53HCKuWZafa2dYuduLD74XtYHo2UKdDeY4c2t1K9s2qsgj7E8I3Kw11AZFEYdXRlOKIZEp4tzsHT4Rdny6vrtINdq8DA76nE". + "BjaygtSaIi4Hu5FhSfU9FFBs6Xeusm+xKyka1PH/LjUJ2KN25w8PlLlhd3bR8WL2Goy4qV4yxxtxd72/laL893pNK0R4/Vq6t/VOL". + "F0Ysqdi6OwndyLb+i/t+ZwXxw127vnBdIMkJXI5kAETwxRcZHy5x8Y/L+8NyyywdKNZBNEfm2kTJON6nYVulHTryMKekyTjWrpGYS". + "8pOtKK9jcJPX4uBHJkhYP8M2nta4Z8Nh/4r9NQG8OM+BeIf0Z+qjZAluPceglBJ5LV62nIeIHxZ3IaDncwUZRMtSJ1dBXn74g2AyP". + "H72Re5LHtS2q707bNLtFRNstGnUe/RtAe96eJ8PWS4Z01IlJJIEslwWzsEMPWequ39P16Wq5gAmJVuQ6LTgIAFqpkienyhhIsWRZW". + "Oskzv87FD28x1IiqHsOd+GkYNkwYxOkmJFYwDnyda2fKrgXLMalkJxs65cGUMZtHw9fS0J2sxtB2oDqG0OaFLpLcOhtaani9WOBrs". + "mEEH5SZoRE5ApRNiHfHOeBA6mdOTpOVH/omGbHz/Q9Wqak+HaDF5sSeRAJMTSmLdPKeWLcq3/s+E6x5of7PTg4fqApgnBPCyo7rJJ". + "9fkQkvLm4z48OSuqkIORdYBPFx33adT2E6XzNS92LLhgLXmnd6sV7D6naA6k3IsrX2xHXlE7xtDfJX/zTP/7aeWVtddEbeK2aJd5c". + "cZQ5w5QUAzgRL1wZe9clWKBhTNS1uOZVU9tJC2ARgzUtNZrn/hBWrWQawOnLLexk2FnpU+P9KrWVL0xHSB9jqINsuPlcP9O72Ta6I". + "GrHXz28rLzCmW8ZOjkEWrIS23/xIuFW9txsFYpXJpnX9alcAdBCkBuKI8YMzpRrFeV5ZIwhNRMeB/VkD2YswlVDX0moLXNCg5fFgy". + "5lq805RSpV1eXakozQh5MW4QhJ0HmBsonng9iibNrHo6e5E4S+4l6xRDhma4aDH85Is4xttwx3i4pKhMSaupUcdktInGHhazYaWEh". + "5jHdylUWYm7QWQXfiX6GDy8KrZjFt5q274ISmsQMC+iDxV/i2NQ0UTy9T3Pag2AoNqDdKzbJqyHCLrUEQioRlC6BO3rJL9IVeuzbK". + "rzYd8GHzFgJmXGCEVHcEfkUfT+oBimo4RIS/dDX1hi274Koz/K5Axj+aYMSLo1IyRZNLEgT/uKk8e2JOiVY3ow7SfrPWITii/ClkA". + "pZtXHKt4dZyVMBu075hI3fMsqeQK6X1C8oDUOKFFbMRfBMNKShQ0xwceoyq5uVUKTv45mcIsB8ZOzjbjR4znW+lajmQUAyJQYEMI3". + "AUHfxmvfdAU5ffLQMa7SkxQyiodFDYDyqyWP1TxN/39wpbIY7R8R+wYmQ+phIxEhESZJTEHnW+CrZKWvSJuY3dhhUwpjpUN+0DMGI". + "E7F2SbzxikyABaU66bNGJZwRPQrSCBWqTm9rl+CIg+9gc3sD4VxgekWJUJYbbZMQL7JoLQ8KPpfd3bXu0MpGv67v4SUCp2/BCB6ks". + "WtyqlW84XbmJ5A6eXNLT3t1G5HCj6UkYwkSQdXoq0870pA5GCWaK7MaiFCHsO4Jg0klXJonazKudY4MftONLhflXNccqfUb0iCdEi". + "L427kOpMeJYHuwneyCM2bEIC2UT820pdPcubsqO00luYEh3bWP2rPaoC82jSMqB+PmXuVMAzOkMSaVI0/GOWrXLLjZCGZ6lk2YTks". + "Xw1kuGWbkHmcbw9oZMVydVq/bx30f6bWdZwxM0EhgZleQO7/YpIiz25DxM5PNs8jaRovEOwThPv5/3XDOpUAf0Z+4Oz5VFEgvw7Cd". + "iHYNQsbjqgiI32+I1Dz4UeBcPT0Gs7MdfMyr1w53YA595mVEdVNASJWeG3dUdA7gnEANxa4wV60iMVqg6+CSqbwy2TpLGxDpiEjrv". + "zpD6Pwhs29QNOv/1t5q0nmeoAU0I3GRY1g3LwF3XhXLpbL4klv1pMVS8kiAp2TYxHYFGfZC8oDLNvyjLfycofusTYrgBGAoxTU3nq". + "w5plYO5vDkdLsehCTzyZwYzA147BBbjxgjDpzH8BsLfD5miBX/PTMOIxKtGE2fx6fakRpneYberW/wqJeaPAGUVXfiDIWBRfkxmDb". + "UMZyEt+mON5vQyYshrviqGgIhzEENnTWHqZehwCKveGWKoO0MB1PGCXGS3/fwRU14eEuLt5BbFnrZ404kWTPs55aMc4LaOPrcoo8r". + "XfxGY+WDM1y42OrDsYteECjUk/smIHzfNa8dcaP0kw5DVduLvZj/Gg2aNGdOjlDjUr7oZ8mxFszKtqOkwoNgmDZG7/GpNsRoLqPRD". + "GZLeTsWXxnbvPGA+4nPyYhvGBklJMklQCUvPr7QiaM1XRgcQw6EjGXr7ckjaNr9JVWdhT/ZWq/t91VvImhabJSM8WnCBMqs+sHR2n". + "uuiXu85AQVdxZTZUa6MGuYgxP4qtn4+fPI2/XYdqwdflKNFkocm1u9WDIhFh2Ur2TGyGij6Gwho+FG/8xNSYXkhje9Wu7Gqh31+jF". + "vX1Ge9X3MQPZ3x4w4Ks/lYl6dBouz12dmRz3u4pt7TekIcW1iukB+JOKC5BaPX/B2B7RaovGmPCc2Lx7CjYnfnUzmHpxaweEa79Sf". + "72rEP6o6Q0cprD+6+5Aa0baiIE4cQRlPZ87EOeR/fndczMxXPmwVV1lBjsmkBukihcN8vYWv91RupN1jKY7MaqE0o5pc9p7TnaRuX". + "uw82aHZRlCVVaPn6hFA+pYKacyEoVEYM0QwusR81PTcfTPjZ76yv8WwicaV1TvqqG6hOtvSvxZwT+4iPa5u8uOzOj/aOgIhB8TVSt". + "bT9+50KZzT3QeO/YmMnFXhVBe3ij/xGGM+neGlkbK2uBG/L2nQ6lvzxVAk8RuPXoMMUAz1u3lymJs1EGrsY4aBkhR+tyOCG9VWOdH". + "YuzqLskspjzsx88F5gKZd//C1gxDH3XBADVV0YOFltKqGru/CxhjuMSVT9A5O6C7F1fCC0Fh4ITzCh0V+vRX9VyoH8mAQSKRbgJJY". + "u/yHjd9NoRw9SDALJ5gZozALVw9jqmGu9LqBm3I/4x1ON1NgcJyGdflDdK2aOQh5yfb3j9d61/d3pfHsD69y4Z7rEvkhsYGDhvMAY". + "3ltrtG736H3iyUjk4xSCkoNxvMIA1hfAFdkReGZRcnCxr1KeKSIBOYUqdt31t+cjGtyozUJhXE/Aje7uWzipvlkxaiW5kOTsLXR82". + "SGCOfZxnuFWbyEeKS6wbeTHyoO5LLpLdLHNcWFw5Cf6dAlFEG/zX2RiOhxCYWBXVIhHAgv6fb8LBtpLutTlXW+x/nhiBLAgMDw5+n". + "4KPnRsp/lYPrIGHHvFvn2DF/t2m+gjVxwOuWGx9fmYmyK49mqOt8veiO4v0uWx0iU979LElo+fZAmIfVrJraPGorvN2loNPbdNxx5". + "KY4n/3nac3dfxA7kxugZCoJLX1qWgUdvTtESTkWNcIJi0vkw2zGU0oz19GbmrEXRwPxgWiL23puDnCT7w6WfuX/Z7y3Ql/i5Cc+vC". + "mta/Mt+vOUCdp9s1wKaBaHAJvXyK4w+k0jDxIBWoU7KceLF72diYmb0Xu61XtjftC070U6GLyMlzhqGe3Sy/d/6VdMqX4A9V/xJO/". + "60pwF7PneD+fXfYMkSvvTDdBA0dSKp1E9IGsunJCIuSv7liwean+QXWLQfvikw4oiZ2l2kCetP13vx+qEWvHygUTvQ0AnrBiYhdDF". + "rVCk9/0uItWJpQYIAcUV6NI/qfxTS+FdTJT+rs1m+eTDBx6ar353tXnXpR2c94O3QeQ9qWv3ooBjVTIkmJ8ZG4FxUzbqiLUgmABMy". + "ojBleAymZDsxJNZayu9wqO3+bfHl1iQq5PgtwX8ajPFJ039IN4faWP36Llb/WaOs5yc+PcNt1a/6+I94PuBnCF8HAf8vwADS7GaT0". + "D4fMwAAAABJRU5ErkJggg=="; header("Content-type: image/png"); echo base64_decode($sImg); exit; @@ -737,7 +1212,12 @@ EOT; public function getGifBg() { - $sImg = "R0lGODlhCgAyANUAANHo+pfK85rM8/X6/vb6/v///5jL85bJ8+Hv/KbS9dzt+87m+qTR9fH4/er1/b7e+MTh+P3+/63V9u/3/dfq+rnc97fa96DP9Nns+53N9LLY9tTp+sHg+Mzl+cfi+OPx/Pv9/7DX9p/O9Oz2/bTZ9uXy/KLQ9Pj7/ujz/bzd9/7+//r8//P5/snj+ZvM897u+6nT9avU9qvU9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKADIAAAbFwINwSAwYj0iDcskUOJ9Ql3RKzVivWJF2y714v2CTeExmmM/ohHrNhrnf8Jh8PpdJ7vh8aM/va/6AgSSDhIUWh4iJFYuMjSmPkJEPk5SVHJeYmRCbnJ0en6ChLaOkpR2nqKkLq6ytAK+wsRuztLUUt7i5GLu8vQq/wMEvw8TFCMfIyR/LzM0lz9DRKNPU1Q7X2Nkj29zdE9/g4Q3j5OUs5+jpA+vs7QTv8PEn8/T1K/f4+SD7/P0R/wADqhhIsGCBgwgTBgEAOw=="; + $sImg = "R0lGODlhCgAyANUAANHo+pfK85rM8/X6/vb6/v///5jL85bJ8+Hv/KbS9dzt+87m+qTR9fH4/er1/b7e+MTh+P3+/63V9u/3/". + "dfq+rnc97fa96DP9Nns+53N9LLY9tTp+sHg+Mzl+cfi+OPx/Pv9/7DX9p/O9Oz2/bTZ9uXy/KLQ9Pj7/ujz/bzd9/7+//r8//P5/s". + "nj+ZvM897u+6nT9avU9qvU9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKADIAAAb". + "FwINwSAwYj0iDcskUOJ9Ql3RKzVivWJF2y714v2CTeExmmM/ohHrNhrnf8Jh8PpdJ7vh8aM/va/6AgSSDhIUWh4iJFYuMjSmPkJEP". + "k5SVHJeYmRCbnJ0en6ChLaOkpR2nqKkLq6ytAK+wsRuztLUUt7i5GLu8vQq/wMEvw8TFCMfIyR/LzM0lz9DRKNPU1Q7X2Nkj29zdE". + "9/g4Q3j5OUs5+jpA+vs7QTv8PEn8/T1K/f4+SD7/P0R/wADqhhIsGCBgwgTBgEAOw=="; header("Content-type: image/Gif"); echo base64_decode($sImg); exit; @@ -745,7 +1225,9 @@ EOT; public function getGifDe() { - $sImg = "R0lGODlhEgANAIQZAAAAABAFBhEGBhIGBhQHBxUHCCYNDZQqH5QrI9c4M+M4M9w9M+g/MuNDM/BFM99tI+t3H+CyDerIB+zIBuzKBurLCPfcAPfgAPjlAP///////////////////////////ywAAAAAEgANAAAFVaARCGRpmoExAGzrvsBAwHRLFHVdIEfv/8ADouEoGo9IR2PBaDqfUMYioahar1hF4gHper9gyKOCKZvPaExFcmm73/CLZGKp2+94yyRCmfj/gIAUESEAOw=="; + $sImg = "R0lGODlhEgANAIQZAAAAABAFBhEGBhIGBhQHBxUHCCYNDZQqH5QrI9c4M+M4M9w9M+g/MuNDM/BFM99tI+t3H+CyDerIB+zIB". + "uzKBurLCPfcAPfgAPjlAP///////////////////////////ywAAAAAEgANAAAFVaARCGRpmoExAGzrvsBAwHRLFHVdIEfv/8ADou". + "EoGo9IR2PBaDqfUMYioahar1hF4gHper9gyKOCKZvPaExFcmm73/CLZGKp2+94yyRCmfj/gIAUESEAOw=="; header("Content-type: image/Gif"); echo base64_decode($sImg); exit; @@ -753,7 +1235,20 @@ EOT; public function getGifEn() { - $sImg = "R0lGODlhEgANAOfRANzd6P9LQP7//93e6ba32v8HB/J4ef//+/85Of8fFVddwP8aFq+13P8aFPr////f3f8XE/n//62s3fQuLAIDj6ys3uHZ5P8uLOjp793f6dbX6uvBxsyasurCx/9fXcadtS88r+Da5EZHr+Hi7A0NlUVGqcjR9MKaunh5x/8REQAAkv9IP/9BPnh6wi4/td3c5uLl7P8PD7vO9aGSw7bM9uDh6UpLsf8hFv/f3PPx9/Dx9DFCuMDE4cHF4/sAANPU3ufp8JSDvuVocf8ODvz8+/xRTPQgG+PM0ZSWzs/R476+4ujp8v8/PurO0uPZ3//u5fQCAOPj6nFxxf8UE8rM4P/w5YGM18PH4/79/ExUuP3//4CAxqmo3KaZxv7+/RcstO3v89XW6fS8waOj2snM7Nra7Ccon+no9v03OFJZvuK2xBEipP89Ov8dE+be4u3u8/w3OOVocv8sKv8EBOjo9+/u+Kap15SFvgwRlba327uXteHh7tvc5yo3q9XX5SQ4uU5MrtjW5qaVxvDS2f8DA+Tj6vr6/j1FtVlgvL+euvHw9v+rqe7u+XKJ1ebn7p2x7CUmnvb2+dPW8P8cEc/P4efn8/38/5Ws66mYx/ccGNfY5vh0d927zSUlov96ev88OgAAjmmA09rb5v+xsPF5eMnR8i0upuuAgvEyLx0rq97f6cunwEBIuO/Aw/9/fuTm6vn5+vTEyM7P5rq63BESlf+Fgv8fF8SWsOfp7+2rrvX1+La23RgmqLe43PPV2vdydhcnqIWQ2BEgoube4wASn82atOHj6uTT2f97etKjuf9dWsSduZyb08fJ4fn5+/z8/f+ZAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAAEgANAAAI/gB/YHCkig+AAVGGuSmUAYCoEbpgGXsFY8kWM7T6JEI14QMIEpBaVNIBRBOSOtEqmAK27EabYqk6jYl2hpksKnjSmIgmqdEqWw2ShSITrZQCFXb8IDpkRdGBCLGmpBDj4ECOYKyyXHFyyoCQX8hceShQQFktT5viGCDV5AgUaHDjypXrI9exIgHYwEHA5MIcQnJYIEDzKcCKVi+63BE0CMeTUTGGLKrywBemIDMCJVnz5ZIWATI4LYCghoaAaI/+EGNAqQQXQ4xQuDiRYBKHHVLoWJIAaFaNZkSU2KAgTI+RTLd4gRKxC0uZPQPAvAnTiwCPEB02WOiRh4CGZ15wAgUEADs="; + $sImg = "R0lGODlhEgANAOfRANzd6P9LQP7//93e6ba32v8HB/J4ef//+/85Of8fFVddwP8aFq+13P8aFPr////f3f8XE/n//62s3fQuL". + "AIDj6ys3uHZ5P8uLOjp793f6dbX6uvBxsyasurCx/9fXcadtS88r+Da5EZHr+Hi7A0NlUVGqcjR9MKaunh5x/8REQAAkv9IP/9BPn". + "h6wi4/td3c5uLl7P8PD7vO9aGSw7bM9uDh6UpLsf8hFv/f3PPx9/Dx9DFCuMDE4cHF4/sAANPU3ufp8JSDvuVocf8ODvz8+/xRTPQ". + "gG+PM0ZSWzs/R476+4ujp8v8/PurO0uPZ3//u5fQCAOPj6nFxxf8UE8rM4P/w5YGM18PH4/79/ExUuP3//4CAxqmo3KaZxv7+/Rcs". + "tO3v89XW6fS8waOj2snM7Nra7Ccon+no9v03OFJZvuK2xBEipP89Ov8dE+be4u3u8/w3OOVocv8sKv8EBOjo9+/u+Kap15SFvgwRl". + "ba327uXteHh7tvc5yo3q9XX5SQ4uU5MrtjW5qaVxvDS2f8DA+Tj6vr6/j1FtVlgvL+euvHw9v+rqe7u+XKJ1ebn7p2x7CUmnvb2+d". + "PW8P8cEc/P4efn8/38/5Ws66mYx/ccGNfY5vh0d927zSUlov96ev88OgAAjmmA09rb5v+xsPF5eMnR8i0upuuAgvEyLx0rq97f6cu". + "nwEBIuO/Aw/9/fuTm6vn5+vTEyM7P5rq63BESlf+Fgv8fF8SWsOfp7+2rrvX1+La23RgmqLe43PPV2vdydhcnqIWQ2BEgoube4wAS". + "n82atOHj6uTT2f97etKjuf9dWsSduZyb08fJ4fn5+/z8/f+ZAP///////////////////////////////////////////////////". + "/////////////////////////////////////////////////////////////////////////////////////////////////////". + "///////////////////////////////////ywAAAAAEgANAAAI/gB/YHCkig+AAVGGuSmUAYCoEbpgGXsFY8kWM7T6JEI14QMIEpB". + "aVNIBRBOSOtEqmAK27EabYqk6jYl2hpksKnjSmIgmqdEqWw2ShSITrZQCFXb8IDpkRdGBCLGmpBDj4ECOYKyyXHFyyoCQX8hceShQ". + "QFktT5viGCDV5AgUaHDjypXrI9exIgHYwEHA5MIcQnJYIEDzKcCKVi+63BE0CMeTUTGGLKrywBemIDMCJVnz5ZIWATI4LYCghoaAa". + "I/+EGNAqQQXQ4xQuDiRYBKHHVLoWJIAaFaNZkSU2KAgTI+RTLd4gRKxC0uZPQPAvAnTiwCPEB02WOiRh4CGZ15wAgUEADs="; header("Content-type: image/Gif"); echo base64_decode($sImg); exit; @@ -772,41 +1267,191 @@ class requTranslations { return array( 'de' => array( - 'RequCheck' => 'Mindestanforderungsprüfung', - 'ExecNotice' => 'Führen Sie diese Prüfung immer aus dem Stammverzeichnis Ihres Shops aus. '. - 'Nur dann können die Prüfungen erfolgreich durchgeführt werden.', - 'RequSucc' => 'Bedingung erfüllt', - 'RequNotSucc' => 'Bedingung nicht erfüllt', - 'RequNotCheckable' => 'Bedingung nicht prüfbar', - 'hasMinPhpVersion' => 'mindestens PHP Version %s', - 'hasMaxPhpVersion' => 'maximal PHP Version %s', - 'hasFromToPhpVersion' => 'Server verwendet PHP Version zwischen %s und %s', - 'hasSoap' => 'SOAP-Erweiterung verfügbar', - 'hasCurl' => 'Curl-Erweiterung verfügbar', - 'hasExtension' => '%s-Erweiterung verfügbar', - 'hasMinShopVersion' => 'mindestens Shop Version %s', - 'hasMaxShopVersion' => 'maximal Shop Version %s', - 'hasMinModCfgVersion' => 'ModCfg-Eintrag "%s" (%s) mit mindestens Version %s', - 'hasMaxModCfgVersion' => 'ModCfg-Eintrag "%s" (%s) mit maximal Version %s', + 'RequCheck' => 'Mindestanforderungsprüfung', + 'ExecNotice' => 'Führen Sie diese Prüfung immer aus dem Stammverzeichnis '. + 'Ihres Shops aus. Nur dann können die Prüfungen erfolgreich durchgeführt werden.', + 'RequSucc' => 'Bedingung erfüllt', + 'RequNotSucc' => 'Bedingung nicht erfüllt', + 'RequUnknown' => 'Bedingung unklar, siehe Hinweise im Hilfetext', + 'RequNotCheckable' => 'Bedingung nicht prüfbar', + 'hasMinPhpVersion' => 'mindestens PHP Version %1$s', + 'hasMinPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht kleiner ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen kleiner als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxPhpVersion' => 'maximal PHP Version %1$s', + 'hasMaxPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht höher ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen höher als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasFromToPhpVersion' => 'Server verwendet PHP Version zwischen %1$s und %2$s', + 'hasFromToPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version zwischen %1$s und %2$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann '. + 'außerhalb der PHP-Versionen nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasExtension' => '%1$s-Erweiterung verfügbar', + 'hasExtension_DESC' => '
Das Modul erfordert die %1$s-Servererweiterung.
'. + '
Die %1$s-Erweiterung ist '. + 'auf Ihrem Server vorhanden.
'. + '
Das Modul kann ohne die '. + '%1$s-Erweiterung nicht ausgeführt werden. Fragen Sie bei Ihrem Serverprovider nach der '. + 'Installation dieser Erweiterung.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinShopVersion' => 'mindestens Shop Version %1$s', + 'hasMinShopVersion_DESC' => '
Das Modul ist ab Shopversion %1$s freigegeben.
'. + '
Die Shopsoftware ist in '. + 'passender Version installiert.
'. + '
Das Modul kann in dieser '. + 'Version der Shopsoftware nicht installiert werden. Fragen Sie nach einer früheren '. + 'Modulversion, die für Ihre Shopversion getestet wurde.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxShopVersion' => 'maximal Shop Version %1$s', + 'hasMaxShopVersion_DESC' => '
Das Modul ist bis zur Shopversion %1$s freigegeben.
'. + '
Die Shopsoftware ist in '. + 'passender Version installiert.
'. + '
Wir können nicht '. + 'garantieren, dass das Modul in Ihrer Shopversion funktioniert. Fragen Sie nach einer aktuelleren '. + 'Modulversion, die für Ihren Shop passt.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") mindestens in Version %3$s', + 'hasMinModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" mindestens in '. + 'Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") maximal in Version %3$s', + 'hasMaxModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" höchstens '. + 'in Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'requireNewLicence' => 'bisheriger Lizenzschlüssel kann verwendet werden', + 'requireNewLicence_DESC' => '
Diese Prüfung versucht zu ermitteln, ob Sie für den '. + 'Einsatz dieses Moduls einen aktuellen Lizenzschlüssel benötigen:
'. + '
Sie haben für dieses '. + 'Modul einen Lizenzschlüssel hinterlegt, der wahrscheinlich auch für die neue '. + 'Modulversion geeignet ist.
'. + '
Sie benötigen '. + 'für dieses Modul wahrscheinlich einen neuen Lizenzschlüssel. Haben Sie diesen schon '. + 'vorliegen, führen Sie die Installation aus und tragen den Lizenzschlüssel dann im '. + 'Adminbereich Ihres Shops ein. Ansonsten können Sie den Lizenzschlüssel in unserem Shop '. + 'www.oxidmodule.com erwerben oder '. + 'sich ebenfalls im Adminbereich Ihres Shops einen kostenfreien Test-Lizenzschlüssel '. + 'erstellen.
'. + '
Für Details wenden Sie sich bitte an '. + 'buchhaltung@shopmodule.com.
', 'hasModCfg' => 'Modul-'. 'Connector installiert', - 'isShopEdition' => 'ist Shopedition %s', - 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) oder Zend Guard Loader (PHP 5.3, 5.4) '. + 'hasModCfg_DESC' => '
Das Modul erfordert zwingend den D3 Modul-Connector.
'. + '
Der Modul-Connector ist '. + 'installiert.
'. + '
Das Modul kann ohne den Modul-'. + 'Connector nicht ausgeführt werden. Bitte laden Sie sich diesen kostenfrei aus unserem Shop '. + 'unter www.oxidmodule.com/'. + 'connector/ und installieren diesen vorab.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'isShopEdition' => 'ist Shopedition %1$s', + 'isShopEdition_DESC' => '
Das Modul erfordert eine dieser Shopeditionen: %1$s
'. + '
Der Shop ist in der '. + 'passenden Edition installiert.
'. + '
Das Modul kann in Ihrer '. + 'Shopedition nicht ausgeführt werden. Bitte fragen Sie nach einer Modulversion für Ihre '. + 'Shopedition.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) oder Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. 'installiert', - 'hasIonCubeLoader' => 'ionCube loader installiert', - 'globalSuccess' => 'Die Prüfung war erfolgreich. Sie können das Modul installieren.*

', - 'globalNotSuccess' => 'Die Prüfung war nicht erfolgreich. Bitte kontrollieren Sie die rot '. - 'markierten Bedingungen.

', - 'deleteFile1' => 'Löschen Sie diese Datei nach der Verwendung bitte unbedingt wieder von '. + 'hasZendLoaderOptimizer_DESC' => '
Das Modul erfordert (je nach PHP-Version) den Zend Optimizer '. + 'bzw. den Zend Guard Loader.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert. Es ist eine zusätzliche Erweiterungen (Zend OPcache) installiert, '. + 'die im Zusammenspiel mit dem Decoder Fehler verursachen kann.
'. + '
Das Modul kann ohne den '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des passenden Zend-Decoders.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasIonCubeLoader' => 'ionCube Loader installiert', + 'hasIonCubeLoader_DESC' => '
Das Modul erfordert den ionCube Loader.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Das Modul kann ohne den '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des ionCube Loaders.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'RemoteVersionDiff' => ' (Remotescript hat abweichende Version, Ergebnis mglw.'. + 'nicht sicher)', + 'globalSuccess' => 'Die technische Prüfung war erfolgreich. Sie können das Modul '. + 'installieren.*

', + 'globalNotSuccess' => 'Die technische Prüfung war nicht erfolgreich. Bitte kontrollieren '. + 'Sie die rot oder orange markierten Bedingungen.

', + 'deleteFile1' => 'Löschen Sie diese Datei nach der Verwendung bitte unbedingt wieder von '. 'Ihrem Server! Klicken Sie hier, um diese Datei zu löschen.', + 'deleteFile2' => '?fnc=deleteme">hier, um diese Datei zu löschen.', 'showPhpInfo' => 'PHPinfo anzeigen', - 'dependentoffurther' => '* abhängig von ungeprüften Voraussetzungen', - 'oneandonedescription' => '** geprüft wurde das Ausführungsverzeichnis, providerabhängig müssen '. - 'Unterverzeichnisse separat geprüft werden (z.B. bei 1&1)', + 'dependentoffurther' => '* abhängig von ungeprüften Voraussetzungen', + 'oneandonedescription' => '** geprüft wurde das Ausführungsverzeichnis, '. + 'providerabhängig müssen Unterverzeichnisse separat geprüft werden (z.B. bei 1&1)', 'or' => ' oder ', - 'toggleswitch' => 'Klick für Details zur Prüfung', - 'unableDeleteFile' => 'Datei konnte nicht gelöscht werden. Bitte löschen Sie diese manuell.', + 'toggleswitch' => 'Klick für Details zur Prüfung', + 'unableDeleteFile' => 'Datei konnte nicht gelöscht werden. Bitte löschen Sie diese '. + 'manuell.', 'goodBye' => 'Auf Wiedersehen.', ), 'en' => array( @@ -815,25 +1460,153 @@ class requTranslations 'case only checks can executed succesfully.', 'RequSucc' => 'condition is fulfilled', 'RequNotSucc' => 'condition isn\'t fulfilled', + 'RequUnknown' => 'condition unclear, see notes in help text', 'RequNotCheckable' => 'condition isn\'t checkable', - 'hasMinPhpVersion' => 'at least PHP version %s', - 'hasMaxPhpVersion' => 'not more than PHP version %s', - 'hasFromToPhpVersion' => 'server use PHP version between %s and %s', - 'hasSoap' => 'SOAP extension available', - 'hasCurl' => 'curl extension available', - 'hasExtension' => '%s extension is available', - 'hasMinShopVersion' => 'at least shop version %s', - 'hasMaxShopVersion' => 'not more than shop version %s', - 'hasMinModCfgVersion' => 'ModCfg item "%s" (%s) has at least version %s', - 'hasMaxModCfgVersion' => 'ModCfg item "%s" (%s) has not more than version %s', + 'hasMinPhpVersion' => 'at least PHP version %1$s', + 'hasMinPhpVersion_DESC' => '
The module requires a PHP version at least %1$s
'. + '
The appropriate version of PHP '. + 'is activated on your server.
'. + '
The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasMaxPhpVersion' => 'not more than PHP version %1$s', + 'hasMaxPhpVersion_DESC' => '
The module requires a PHP version not more than %1$s
'. + '
The appropriate version of PHP '. + 'is activated on your server.
'. + '
The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasFromToPhpVersion' => 'server use PHP version between %1$s and %2$s', + 'hasFromToPhpVersion_DESC'=> '
The module requires a PHP version between %1$s and %2$s
'. + '
The appropriate version of PHP '. + 'is activated on your server.
'. + '
The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasExtension' => '%1$s extension is available', + 'hasExtension_DESC' => '
The module requires the %1$s server extension.
'. + '
The %1$s server extension is '. + 'available on your server.
'. + '
The module can not be executed '. + 'without the %1$s extension. Ask your server provider for installing this extension.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasMinShopVersion' => 'at least shop version %1$s', + 'hasMinShopVersion_DESC' => '
The module is released to shop version %1$s
'. + '
The shop software is installed '. + 'in a suitable version.
'. + '
We can not guarantee, '. + 'that this module works properly in your shop version. Please ask for a matching module version.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasMaxShopVersion' => 'not more than shop version %1$s', + 'hasMaxShopVersion_DESC' => '
The module is released to shop version %1$s
'. + '
The shop software is installed '. + 'in a suitable version.
'. + '
We can not guarantee, '. + 'that this module works properly in your shop version. Please ask for a matching module version.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasMinModCfgVersion' => '%2$s (ModCfg item "%1$s") at least in version %3$s', + 'hasMinModCfgVersion_DESC' => '
The module requires additional software "%2$s" at least '. + 'in version %3$s
'. + '
The software is installed '. + 'in a suitable version.
'. + '
The additional software is '. + 'be installed or in wrong version available. Please install the additional software before '. + 'proceeding this installation.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasMaxModCfgVersion' => '%2$s (ModCfg item "%1$s") not more than in version %3$s', + 'hasMaxModCfgVersion_DESC' => '
The module requires additional software "%2$s" not more than '. + 'in version %3$s
'. + '
The software is installed '. + 'in a suitable version.
'. + '
The additional software is '. + 'be installed or in wrong version available. Please install the additional software before '. + 'proceeding this installation.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'requireNewLicence' => 'former licence key can be used', + 'requireNewLicence_DESC' => '
This test tries to determine whether you need a new licence key '. + 'for the use of this module
'. + '
You have stored a license key '. + 'for this module, which is probably also suitable for the new module version.
'. + '
You need likely a new license '. + 'key for this module. Do you have already one, run the installation and then apply the license '. + 'key in the admin panel of your shop. Otherwise, you can purchase it in our shop '. + 'oxidmodule.com or also create a '. + 'free trial license key in the admin panel of your shop.
'. + '
If you have any questions, please contact us at '. + 'buchhaltung@shopmodule.com.
', 'hasModCfg' => 'Module '. 'Connector installed', - 'isShopEdition' => 'shop edition is %s', - 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) or Zend Guard Loader (PHP 5.3, 5.4) installed', + 'hasModCfg_DESC' => '
The module requires necessarily the D3 Module Connector.
'. + '
The Module Connector is '. + 'installed.
'. + '
The module can not be executed '. + 'without the Module Connector. Please download this free of charge from our shop '. + 'www.oxidmodule.com/'. + 'connector/ and install it beforehand.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'isShopEdition' => 'shop edition is %1$s', + 'isShopEdition_DESC' => '
The module requires one of these shop editions: %1$s
'. + '
The shop is installed '. + 'in the appropriate edition.
'. + '
The module can not be executed '. + 'in your shop edition. Please ask for a module version for your shop edition.
'. + '
If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) or Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) installed', + 'hasZendLoaderOptimizer_DESC' => '
The module requires (depending on the PHP version) the Zend Guard Optimizer '. + 'or the Zend Guard Loader.
'. + '
The appropriate decoder is '. + 'installed on your server.
'. + '
The decoder is '. + 'installed on your server. There is an additional installed extension (Zend OPcache), '. + 'which can cause errors in combination with the decoder.
'. + '
The decoder isn\'t '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', 'hasIonCubeLoader' => 'ionCube loader installed', - 'globalSuccess' => 'The test was successful. Your server is ready for installing the '. - 'module.*

', - 'globalNotSuccess' => 'The test wasn\'t successfull. Please check the red marked '. + 'hasIonCubeLoader_DESC' => '
The module requires the ionCube Loader.
'. + '
The appropriate decoder is '. + 'installed on your server.
'. + '
The decoder isn\'t '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
'. + '
The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories require adaptation.
'. + '
Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
', + 'RemoteVersionDiff' => ' (Remote script has different version, result may not '. + 'be safe)', + 'globalSuccess' => 'The technical test was successful. Your server is ready for installing '. + 'the module.*

', + 'globalNotSuccess' => 'The technical test wasn\'t successfull. Please check the red or orange marked '. 'conditions.

', 'deleteFile1' => 'Please delete this file after use on your server! Click here, to delete this file.', @@ -934,28 +1707,30 @@ class requRemote /** * @param $sUrl * - * @return string + * @return stdClass */ protected function _getRemoteServerData($sUrl) { - if ($this->oModuleData) { - return $this->oModuleData; + if (isset($this->oModuleData[$sUrl])) { + return $this->oModuleData[$sUrl]; } - if ($this->blUseRemote) { - $sUrl = '/serialized/' . $sUrl; + $oFailureData = new stdClass(); + $oFailureData->status = 'NOK'; - $sHost = "http://update.oxidmodule.com"; - $sData = $this->curlConnect($sHost . $sUrl); - $oData = unserialize($sData); - - $this->oModuleData = $oData; - } else { - $oData = new stdClass(); - $oData->status = 'NOK'; + if (false === $this->blUseRemote) { + return $oFailureData; } + $sHost = "http://update.oxidmodule.com"; + $sData = $this->curlConnect($sHost . '/serialized/' . $sUrl); + $oData = unserialize($sData); - return $oData; + if (false == $oData) { + return $oFailureData; + } + $this->oModuleData[$sUrl] = $oData; + + return $this->oModuleData[$sUrl]; } /** @@ -967,10 +1742,7 @@ class requRemote { $sContent = ''; - if (extension_loaded('curl') && - function_exists('curl_init') && function_exists('curl_exec') && - $ch = curl_init() - ) { + if (($ch = $this->_hasCurl())) { $sCurl_URL = preg_replace('@^((http|https)://)@', '', $sFilePath); curl_setopt($ch, CURLOPT_URL, $sCurl_URL); if ($_SERVER['HTTP_USER_AGENT']) { @@ -989,6 +1761,21 @@ class requRemote return $sContent; } + /** + * @return null|resource + */ + protected function _hasCurl() + { + if (extension_loaded('curl') + && function_exists('curl_init') + && function_exists('curl_exec') + ) { + return curl_init(); + } + + return null; + } + /** * @param $sVersion * @@ -1153,8 +1940,8 @@ class requTests if ($this->getDb()) { $sField = 'oxversion'; $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 ORDER BY oxversion ASC LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - $oResult = mysql_fetch_object($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); $oEditionResult = $this->_getShopEdition(); $sEdition = strtoupper($oEditionResult->oxedition); @@ -1189,8 +1976,8 @@ class requTests if ($this->getDb()) { $sField = 'oxversion'; $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 ORDER BY oxversion DESC LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - $oResult = mysql_fetch_object($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); $oEditionResult = $this->_getShopEdition(); $sEdition = strtoupper($oEditionResult->oxedition); @@ -1252,8 +2039,8 @@ class requTests if ($this->getDb()) { $sField = 'oxedition'; $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - $oResult = mysql_fetch_object($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); return $oResult; } @@ -1269,11 +2056,11 @@ class requTests if ($this->getDb()) { $sModId = 'd3modcfg_lib'; $sSelect = "SELECT 1 as result FROM d3_cfg_mod WHERE oxmodid = '" . $sModId . "' LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - if (is_resource($rResult)) { - $oResult = mysql_fetch_object($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); - if ($oResult->result) { + if ((bool) $oResult->result == true) { return true; } } @@ -1298,14 +2085,15 @@ class requTests oxversion != 'basic' ORDER BY oxversion ASC LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - $aResult = mysql_fetch_assoc($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blReturn = (bool)$oResult->result; - if (!(int)$aResult['result']) { + if (false == $blReturn) { $this->setGlobalResult(false); } - return (int)$aResult['result']; + return $blReturn; } $this->setGlobalResult(false); @@ -1328,14 +2116,15 @@ class requTests oxversion != 'basic' ORDER BY oxversion ASC LIMIT 1"; - $rResult = mysql_query($sSelect, $this->getDb()); - $aResult = mysql_fetch_assoc($rResult); + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blResult = (bool)$oResult->result; - if (!(int)$aResult['result']) { + if (false == $blResult) { $this->setGlobalResult(false); } - return (int)$aResult['result']; + return $blResult; } $this->setGlobalResult(false); @@ -1343,6 +2132,58 @@ class requTests return false; } + /** + * @param $aConfiguration + * + * @return bool + */ + public function requireNewLicence(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT + oxversion as oxversion + FROM d3_cfg_mod WHERE + oxmodid = '" . $this->oConfig->sModId . "' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + if (isset($oResult) + && is_object($oResult) + && isset($oResult->oxversion) + && isset($aConfiguration['aParams']['checkVersion']) + ) { + $sInstalledVersion = $this->_getConvertedVersion( + $oResult->oxversion, + $aConfiguration['aParams']['remainingDigits'] + ); + $sNewVersion = $this->_getConvertedVersion( + $this->oConfig->sModVersion, + $aConfiguration['aParams']['remainingDigits'] + ); + if (version_compare($sInstalledVersion, $sNewVersion, '>=')) { + return true; + } + } + } + + return 'notice'; + } + + /** + * cut not used version digits + * @param string $sVersion + * @param int $iRemainingDigits + * + * @return string + */ + protected function _getConvertedVersion($sVersion, $iRemainingDigits) + { + $aInstalledVersion = explode('.', $sVersion); + return implode('.', array_slice($aInstalledVersion, 0, $iRemainingDigits)); + } + /** * @return array */ @@ -1350,16 +2191,22 @@ class requTests { $aResult = array($this->getBasePath() => false); - if ((version_compare(phpversion(), '5.2.0', '>=') && - version_compare(phpversion(), '5.2.900', '<') && - function_exists('zend_optimizer_version') - ) || ( - version_compare(phpversion(), '5.3.0', '>=') && - version_compare(phpversion(), '5.4.900', '<') && - function_exists('zend_loader_version') - ) - ) { - $aResult[$this->getBasePath()] = true; + if ((version_compare(phpversion(), '5.2.0', '>=') + && version_compare(phpversion(), '5.2.900', '<') + && function_exists('zend_optimizer_version') + ) || ( + version_compare(phpversion(), '5.3.0', '>=') + && version_compare(phpversion(), '5.6.900', '<') + && function_exists('zend_loader_version') + )) { + if (function_exists('opcache_get_status') + && ($aOpCacheStatus = opcache_get_status()) + && $aOpCacheStatus['opcache_enabled'] + ) { + $aResult[$this->getBasePath()] = null; + } else { + $aResult[$this->getBasePath()] = true; + } } $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); @@ -1422,9 +2269,10 @@ class requTransformation $sSelect = "SELECT oxversion as result ". "FROM d3_cfg_mod ". "WHERE oxmodid = 'd3modcfg_lib' LIMIT 1"; - $rResult = mysql_query($sSelect, $this->oCheck->getDb()); - if (is_resource($rResult)) { - $oResult = mysql_fetch_object($rResult); + $rResult = mysqli_query($this->oCheck->getDb(), $sSelect); + + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); if ($oResult->result) { $sCheckVersion = $oResult->result; } @@ -1470,4 +2318,4 @@ if (isset($_REQUEST['fnc']) && $_REQUEST['fnc']) { $oRequCheck->{$_REQUEST['fnc']}(); } else { $oRequCheck->startCheck(); -} \ No newline at end of file +} diff --git a/setup+doku/changelog.txt b/setup+doku/changelog.txt index c91f5eb..0ddea11 100644 --- a/setup+doku/changelog.txt +++ b/setup+doku/changelog.txt @@ -1,3 +1,10 @@ +=> 3.0.1.0 +- Kompatibilität mit OXID Dynamic Content Cache hergestellt +- prüft IP-Syntax bei Eingabe im Adminbereich +- weitere Bezugsquellen für Kunden-IP hinzugefügt +- auf Kompatibilität mit Shopversion 4.9.6 / 5.2.6 geprüft +- Precheck aktualisiert + => 3.0.0.2 - auf Kompatibilität mit Shopversion 4.8.3 geprüft - Modulstruktur aktualisiert diff --git a/sources/GeoIP-Installation.docx b/sources/GeoIP-Installation.docx index 0381719a0576fc9b7592e1b9af4f9d6a9c5ea842..63e78018768841e6beb52851c13e9eac4c59896b 100644 GIT binary patch delta 31600 zcmV(?K-a(Hr2~bi1F&KT3A>|55PSjv0L-&%2P*-8yjQ`F(=ZUdBk>QB?;AG(c44*Y zBEcf{zy*rn>L!!K+Sn6pXWQlLaT}7R+r--n!zGd@iT(WE_|5p{b|b3b0hHz_6B30p z5`auGV{F=KzyC9id0XOTJ~r7`t2r8+G^ zFdbrl4br~JQ3+=3P!+Uh={+le#EeKR4z%PvIk` zjR0vzmY_MJk!b85f+bT0n1uA9&>|&t97OcWCkies1A7DlGS28O7>BhiCP8?mqO_!{ zip%=}5XLKm*Se`|ROY=du@;y$6@)2@?z7K-m{~FIHU^YrlZ1KYOEzK!%4TGTAt8Op zrCJ=>AH3yG2`mG(htQ5=7l13D>#t$;6^yYo46=6+bODKCpGZbh=g;9>uh$`Nc(zX) z`T?bc)S#jrb*E)e$T|D@6!LjMy;7St+MxJhov1gcFrEsf3wzXOnv zcI*<%D@`D?C%1_%;(`!)rQk15pzjjxwHw;r&4w*^JML|k9^66azX1RM|NjG%2VD;e z^|r7alt%yn#SfDW3mJduZsW+7=Klfa9XJAJx(ZXawQqB+ZfkL-QJIzQOjlJ;cNH!u zDP-}QBH1KmXL`^;KS-m0-8UGZf7P$aH|Zyt@02g~tPTa^j9g)w_PMH_R2k>#tr z^Yp0&8#OSubw7O*0r+))lA+8km@Was9VvPGIHmM3_N%7FeeKu&3_P^D(`sKa9T|1fkYo+ZtNA zlh&V3;?94qAwIt~ZP34JrQWFKOL=;MDcq&$hadWX(SE%#ZCm(XqE9+5sHbshUV|{| zAN}lD|2!44A5hA;9drvA$XVl}=M2{Xgax3+(@6s&@h|~}#FH5m=ynL*`5B5T{URL)l$g^IjCG()p(IV7^+E6;xyBkS{f)AR5fWK9YuPLMzSn-q!6;AB~B z9jGmwp%@;4r+LB;EfM?;E!}5G9OKj637T$R#*hA~@H^k>kVN8q!B2WO2wh)Xgko~h zJhOmYVJrh7SILRHWPp0 zr9L-ly=3E$}rX>yN^6-U;FR=5&7|*YD}s8z!#C>PM5jB!ZVO)oZ1*22+9bDAOE< z_^{4uXRL&tq*)1I-s)mc8eMTKY}X?lf$5Rtx%{suDHO0uqFu~vP>4yjH}!4S^M->H zVS_P4NIWSV7f$9VFg2E@!i8pNg|^71!JSg4-tN?o&WrWZQMq!~JF3^}XGiU`cCFYb zG>YZ3HE1wUip9AYeX-f1U8a8#jOdo!c(r_`)GZOYV=APPoJylqDa22hDaz$Gs2qwTvkV@0D z{V5fjO_nI-8{uADCdeZokU4b-=Zc0&>Z!}<0Gpyr3H(!%UJ_7>UPga6HT-K-i}_wV z!c4}$Y9(I>CDHINH2W-N<1dEqzcCpt*5x2{GAi#yWORm}%$(Lov_~EnVbX;I zL!B*cP{tH+{4^Ll*fM{(>n~@(;RABovcl1A_$+4e5+uhwObFGawT|6&WI+DJmH`A_z8rj3n z*reXn)fHKMlIiIKOh+InvM(k&K;?RQ;KM-2x+i* z3~xf^d0`n$1`C0s@zjULu|>GG3^?_2savf*;95n@5>{V-(LQ@j7_{EI!>O&DTFYkM z=u}IPx3fgXU5S5B*lI58`7x)zfV?alPOVhS=Ouf3aExq~j`PRMI@eU3hwr?wtmj9a z_R=}GOT}XOA?f36&xNhei8&MNXSqXX8L)1(8(oswnG+{0LeWi4F-X47ior{lXj*My z`h5XAiQhE3pE5uSz=qO*Me;NKl5Ub^8kh#tcCAuAlg58Ud>$*UGd4%w12$<#wCFT9 z6i3})H>RL)nl;5AM5uNXrs2(Ms%$njM>zIw+7ff9L8=#`JNpMf>;Y;j5I8y-qW z_N|aMG^lG8@{6(3))!;g7vT5i7j1WNBZl(Q{Nhf-3#S8x1MTJvXd>?22M}S~^ymf; zFz(0r%wK_K zR)0ygO5)44Z+hc&!^Kj$UMwwb`4?`P-2$O8z(imtuGL__9$-3^JieEX39l(eBQXej z{lSh(5(9Ld(4 z+e?3o?ZmiEpirxa)sm~HFIMyleLzAI{Z4$}w=M77vf+6(n{;jXO)=@ycJnWW1+)o+ z21Ibuw=9QEVkZ1dz6b|n`ecMpKVosHZS4W~Gi#c94cOpjHb0O234IACSZaHkP10Hx zqdGc>KK9`Lgh^{+&;^Ey5dhR?)4Y8bsIh-Uuc%4O?s;4o4UbkKEUmKs8`m+Bqw8i& z`*00R$3GG8!j{Tob2ZvhsM$s=*1V*BYFD|OVaJXLFpptvTU@tXtIdqNA2m*pe8SvS zV-AryG~sFL!__?)`_?G-POI1Y@JUlp6jX1Y+#f_efGbd+n11~E${mzT^>VFLE-8OI zKLd{a)a2&$#gJkd+P*Mvh@`MxX>8g_0}{n^$bMjyjC&zeQ^H2{SRV#Eywxz?xNZ0Z zm}q4*rEJy-M!MK)uBpG7u=+*#_riiL%nDS)kzG+qH?wMyeH0T2%D3=Sbh!B(ygy0Evsa1r4gIV`L z2-*UfN&>roD2%oRbBv3y^P2-PC?R_N6%m6upY=mXFbApNfusTs#N2-aG5E!WpUH=( z3G%>B+yUk+-R$rX$TV+b*r?TQ)PmA0A^_E$*889qq)mJ4xJ=hq3(8~<-U9(Ro9P3A z=YRcUbRY!qPn65Ah!E5cgy0#g1)Q6<2SV_Zm=ec~g1C3WiI*V^R9+DcsPDAi&q)|y zXDNIjt1?BZDsAnX@WX$uvK?@O>mGxUY%0ut_^|d9g{jmr7SA4Pb4}nT|u--xY zGmyP59MqLz@*ON8_^UU@%Mb)>2SRutgk+E59OEYq$Xg`{a^`>M9tdIS#S%g!`rTS^ zkR!VM-Wpj{ywA8eD8^dYUAcashX;E2ZP3HUp3Law7fTO0pVhD?#-}j~YMD2ob$d{d zIf8gpXqpJ5OC-q)> z1UpFvFTzh;c}>{^FNgkpi*;F6skr;f9*{)fu=OjiDPMn}Ko#l|MMgHt%Q|R*Ppk#* zE2H4$1`FfJ4F|>LTp!`WQ2$&T3DpN<81kknuPJBZKnLmA!f)3Pu&<H?yxeHvLzG-}{+N+b zcC_-EGADly#PHiDhWkpLc)20N2$MVd;14O6_7E*64}Pe;rksfvL;+u*lN1GD_7e@a z@F?6!E0hO9ypnAC>TAjrD9jxJxRC|m;3|DuS7~)$sRA$8RVvd*;U*nf*Elro;3lQx zud1&pXW&2sziB-Xr7`y-CcRuY>ASCg<YN5 z7>!F+jQ=1bKwo-Q;q?c?@RUa$uSl(_?kjp;CkzL&(8_YBS6@}M`O6^-FHv>aS1|co z%N~CTV~UgSKTSQ)^$&Ts`L;XdZt;u^gM7GrSB%W59iHa$`QmxG(#hvo zm!W^wabcmAs3mGbHBMjm=|T9#6Q?;3MKeekIQ2rg z>WC38l4zSj_>m6X^u_QJb7}j+yuo}ZlXA)7+)-~m?D(iJ356Z!uRuZr;PHj63&$8* z2w$5RUH4`>!D->ft*i=G5GCW-zd<(_F`8@00P9xMO?vnG?+49R$f2d3h{_ zbkyz)3u26wXOL(k^dEKr=u)*9wmypMsr~h@K52(85q})#ZrTb>6EN4d)XD)40vrHK zs5>$L;`(n1GSNnpQ%TvG0d(G9&$xf#;L8M~93eULH1{j;WQhL)TKB=&1hSmxdyFjv zTiyT0DClWjRH5SrS2KWw$Lgut<$h` z-}@&*Uz(ZP7!2`;-6Wul+AbxM`k(*$?+M6i8-l36f=C3u1Wflbz8|Mpo!fu4Hu7G^ z^Pm6vZx0EtZE4CjYxAu7+LrP>&cqiGqsx&wJYqt`8Js2)BPX%`4?>9&^4QLlD1$p^ zP?vpe>8NWWHvg0WoknUNpRPowE-Oym$`A}ts@V9^HYXF|C)aq71J$AR`_|CfcBijg zhLsI(yRCQcIb5)Z-wWsKAKrh|xe28?pgj#k*GV4Nl(~u9rF^g4BVlL_Eom3YVFgfW za7qe@#jgWw zSS+{W9V~ZEyIrW}yYWp;A!wKM*O?8gTLiL=6@m;l482Ok6*69Acdfs7s?0omi^gNA-L;yw1j_pbj6MYL^t#6xC zS{Yaug3!m3;Y>UOq5OYj5lSo(=x7$|?QD104y0>s>ciOPP;m}!NkUeu6l;ZUE^DDP z5HiB=yXK}u>|uIcBs08)CDper=Vl!QUOKO^l`Uz6eVbr}KWZ=a?N8wsTSWWq3RVx> z7LE^VsPKt7^UJ^D`5jasB45(nYfeKqetf~kPrOjbbBeZnW%z&DjNfRxJ}j#NH-}@2 zlnCIsj-V!kd(}3X4Pofwet3U@EX5t!Vnp^_79KYHvhPCnB8$@&-*Sk|cAp}21Si$K z-R0w7w)q(7jRn?0-nZYuDjv0!FH8H=$O7s7=+e5;DzF8delhs@Ay~t7;%LvK8~lpn zzHOTh%rKHwKK81GOCn3e$OL=rD!J!I-T4 zj70-mm_C6`$5Z?qSvG{*ZiD_$kD14v^Uc0FxViRSI0t_j-tm)9V{-_s$NSPq7OK%C zoF~Z{e_Sp2NH*%6VNXy4y6d~BKwQ7%+MSn%gCJavkUE935da5a-6N4<-tAt?S4v$T(i(73 zFKcV;B?RPm76fC&0S9JyFQr>&I+0jl*|#LvuymlD-FS8pOAOHnXCJWGOk(Y6u2zr{ z&9L=DhDc)sh7dOl59a!eenZ9^qQ=!^t!42t<4TK|Y}nYG%( zE?wE$0$8op{+i?c;Dy!%2L$38M8_dp+HM+aiCl6Xl#y_uT+ri6;Wd?=bE zhw;vZn*VULr}cdT|JI>05{Z)pMz<% z$~gfE@=+#^Dcg`Bf>OC z!VX5JZS#?T=1piV>wWdQQz1-3K13J>oQVO%Bi!R0OTw&+F};!QM6NjLqz3SF8r~z0 z8H;hGG{vOJa2>+6;l{~^8FD{ory%mI`c{aMnbX1e2gB{lywc=e;_ZJ!v%Q6`EB77z zt=GsuO`o^2-4b@&-%gjAr{YGJ0dFGGp%G8OdiE_>e_jN%!B-FLm-_n>Uk;95{% zheV~skTO?iWfTq#lWEvyzS^@|ttV%kH>yyaWE8X*s?7j8g{7gRWwHlmZeAJwjUG(X+ zj@D{wt+Blk?nRnMX7A?tkrAs)Of)^NB}>wxcnzm-IyWSA92nW6 z2e+Mbk3cLLkZ(iy3lvi8>+^gN(5P#~v{ zu2_SmRP%*ul>_e60T9V2yrI-BhRc$@gZ$mAF&t@YO-M&XZnFgp8%_u5K>byCw`4rq z4#aW>_7u@3Yt4USwlI${5^ThG)?6&W6M$rBhUU|QV}SY_q1cpWKEk^6zdSuKwqqbm zfbqk&`^CI9E!*td>6n!#z|)cMrd{B>jA9&yUi0MS?(Xh*Vt$^0Ump+L3G(jOpsbaI)ZfupuZ%cuZ5rU zG-$pWoFRh|LIuZ=k}#}3 z`1^M}D~psl(}8(7HiS@FP-vStFaav)PcT-Xhlv5blj?}zbMDKyw))|-frFH9-(V(F z>-t6@291AIyGG-Oit*p2wSMChrxOEuN&vy$<{Lkgp&zNm!WtsDlyT$i!@HxO10V_6l0pFsk`cJJ z4Y?E+v9wkX^lNGfM*_IwC{U5DPJ@8lI92=ip z8^NAN027;GMhNOpfkCL`giqvlawr)!Fl1bF_(MDf^ba=$_bY2cZAk>kR55`pX0P@A zdIHdlSltPvePOPN#xoV`B%RcizT}fM1&zFdN`z0u>c;7Gq-v&fVB3{qgLPky*hWs$ zEC+vfmYt(AbK2)hS!FL7jbC-QgdG0#^{-<>#tVvKp1@#*TsH@(h_!W$OA>!k89*-k z^CFkVh{CU>@ync!2p93|tveA^;!S4UCKvRsIV;NQbGMeM~WhqxlQMZIoZ+3XUgmX>dvFKS7ncg2H+^xOzLL$BnZAB;eOTJSM?vQk zc$1Z$P+4g1QkL*&XJ`iBQmpIP_#o}XhPVyE7r{OuJ-{A}m*_QY^ci;|4heB81(j^+d|og;8$$YK z&<@6HHL)IBB8z=s5W@=$kE*v5XX<^%z)6bZsb5mPmh`YwMyzVDRB1F4MC%;(^#BXF zqu~gfR&CUkC5s+!5VBT_K9p`rVoHBn<$Dsi{B9imkL&P%87oRU?Grw!ZIr^;r-4#> z5K9D=1SIsDb_Op< zA;9AePlwU(8z2Du`!Rq+CgoQCVAu#-m*OD(oy84kVFQ1pNJ_5a z&m_gv5Moivn8}D-mv_00n309Nz5unV(u@u=O(JwZTSHcg1et(N;wdi^4^V&18LqC;gQ%-G8EfBZarZgEEqnRbAt8?y zh@e#RENw(8>$*0k>F>J-BCvyUrj3=#m1?D4X{bPiD1d;q1&o2Jy4P~J(7&ix^QBr{ zB?f1G!D^=VMFkaT>V<}i!_NAGjry}M%B4CT5R1a}Y*Jz!Y?+RDHp_ou4_N0|M^~)M z#-rgtyNM^vz0N;KO?mc3R8nR>&3h#R=?kqHGnT5I6XSzFbXKyQe4|n*79T@SocF!Y z7n)vA4UJ4D52V}85A1=00`?2bxgyj{6bs#uNZjgx8rV`9RomuK<8nD~+UJsUH0|If zHK6P*G&92}+VN4wt?Ykuycu=U8AV&i#(Q?s1kiL~lpjM^i=8QvLno{72n$3gw#9=QaaM3h`%JesSPl7(28>CP!=Jgn~jgI8%$Yc7Eg4QyDFVe^BVV{hywHamfjmoXZW7T+G-S{oOZ3J)CH zFFl3^A$3=Th&7SX*FFDQ^sz61!uM0($P%mIM7&?PgJ(7Rixs8J+*&zWy|b(mE0i!|EOi}QdH@@ zmTy#hx)krYaBRCHrpO%JaMu)O5S|5=d72xFqi#=m!4%ma`sN*S3P4`GrsbgUEyYy? z;T2;MUA5z@ck$IniDO=&+%z3Hq2OzVD%kCuwYvq<*60DH7|`u%rBkU?i&Yw=*F+gD zupVRZ83%uY6`?BvRR?fQt7{rH-WiR=AneIEQOL8<$XDg>)t zcW@I>CWjL=0XSutBuCrC431q-ICv(b3h>jvK2d*goY*Ht9GrGCF)atfaXVuoiDxM3 zG{E>-$vwdom-WAEui8`)zhW9V)N6|gc-8<>FaoQFt0w+a!@||htvR=s7T1ELrU44I zeppwze#zyEUZPL16aJgV+W6Q^q!x5cC{fDse}fs76m^+UW5&d2j1un-2A zP1JuY7vW$`msBnGBbJBS)*f&_v!wh2(bZB144cXV4F?z_FbUH61}1(ExYG&VKh8ig|f8H`fpsv+nKJL@h-Q<3em+4#7k^qdJ!zah-zNBiEF!z8xp#jfIDFtCpYs06~B0 zPi9@v6`?*#8fN`R%hplK$I>_zpm~lUZ?5YOQSz zEoMi}KAN1>lZ3aVLy-*norJD2E5{z(NAJOu$9piipM5Lu0hBy3{ADoEUqYkJW2hwI zkU)|<9s?z+8G~-Kgu7&Hk?w*^KG}a}HKW-Am>Fl07C^Ffvvp)r<_ICohTyZzr2LbZ z>TZn$I?sBXnSjxsgws6aafnBQcocetNUj4R`GkR>Zt?QTby$Sbvw{lpy;X%#Wfgcp zO;tu+0Y45boSEc{^+K_lFGuxKGeORN=Gi9^$d&PcK^}5KngwclLm7au=d6E*EKih1 zJBQP?cIm8hz9wWV4IGOr3)g27i}{+fh|t8M$;z>H9I2~VAnYpZREnk1(xJ9;nruV@ zIZaL1kFbIy*yNu0D6JA2ja$H=5HHX1BohiEi%nZgJ1P`w`F2i@a2wP8>QV18?{DCG zU;Z2-z9BW`Y+gHWK4s7+Au@kwfL}e~m3gp6l)*bQS8^yI?28DNOIcGuEA%dFy<)A+ zfs{-_Bxb0aauwS`a_`tYs^J18VHxm_F!}$M08-|zN}-`?%N= zO^~EQaY5z^itui}%@kXg97|V^6HIj`uM+9!W0NB;|JZtStx-W%HIaW*U2iVK`&w@l zc_Tiq-VDlo(3>3)yx0VA(3=l>Gt0Fb>dk3|ZX+_Cpi>KI6G*apEsV~{OX||utbw^e zwlcbO$SGoh0suTo+*F93bWUd!gU%{3VB-tS(y=^%-pq*5h-mY1d*o@@0WrY=*}4$ zv1Nqn6`}gc^8Kg_qGVY1km4B5RZdv8!U;8i3k;EE#<&s_&&Gci4UF#`F~y(MCd^)+ z1xz!X zXWZ_XRx=-8vk!m0Yzbn?qupOJeA)3d{PSpPZ<<%E>y{}Dn^S$Iez|@f9A#&Ty3nb% zB+)w6em3T=1qHg4e_4`SI#&Lc63tok8Cm2OK#&t$Pc{fE?ByvMl)(!Z*W*foO>Nf% z#B|{#`MOla=Qv=70gD)|GJ-GJJMYQoi<)|BzHzc5JOY0raFMtSeuB&uFeckZtSzV= z^BH9^r9?lWve`JH5&Q?iBwSd)HzK)F=FN{Yq1342-(H`rdbJFSxGqZ;3;_97bj}Zhe~ab#k?vyNt2bMwCs`j&&R1G z9L}=S4c~t!09qR76O}!ZK~?A_o;<5p^G4fmQ{Y~Z#jK9cQ1pSJmqNM(H`hY>7Z`I% zdm?)v6}hl(*R+r?NqbJD6X*manS!u@fFyknYgx$GBQR(2?4-dG!I=y^6=O+(%qcj| zZC=ok#v(t<88WC7!VZl}49 zi$E{fYkm@U%Gs=RxNiX6TF;1nF{fEkXW{V>eMTk1)}qWrL(enjpqsO4aA%Hf4z!u~ z*gk(B>PuzqQ+sti&i%mV2p!7Xmf(B5AuS-jsC5I?h1NL*!e!<@sbE+yJZ_~> z?^Y}2F4;cxxRn~R`AhXWtGtgJw*nv^;#LlED~Eg!$_3de-(!VLsKpX0saFQmtsj4+ zk`P}I(m_Oh!=@HU#q3(>k)1tpYGArUkmKy&$PGu)N`~7=NsL*}57)!90gg2*9>2n2WlP>gkz zi+zK=P3=|QV5@TFtJRz2N%rfW8FGK{M?w-oGC4X`C#LW-=;`U{>Hem>XV&idUL<~w zrndWGV)qNfW1PGtQ& zcH1G|7O(aufe1x#BlbEcy-_4Q>w_b#z8%=p!3+Ewh8DFMam%t@ZlZ%*);oW{KXom~ zvu47HL_jZ({7Gm%duO}ub4y$aZ-8H+WnV|mjU$2xPX>KFH=c&!3u`*I`XUVR_r=u1 zBfe+#eLQ4Odn4<1YI)P>R(J<70;q#bOw^PAfG8sH$|brcy3^d{daF`7+S8ZL#K4}q zQTooMafus|44iz3KD$D5_ey^RVQ&;TgQ!M)p0&N{SU%^tH?Dq)$AIs>>FaCNsu~#e z#$t%BeE)iE2iG4Wn^@C!`mgq?O(NK{#~7O*Kl;6Tqgt&VRgYWptC_E~;;$Umj}BY) z!-gVe68Qe$JRo_9K2OkWI1#SP-;{0gutpskJKLLJ$fw>=crmVnvzdRboO^w7<5sdb(TYOchG`mGaUBG^}<9o@>_IZT}^ z29Tbk29M`GCL&LmY}TAPfw+z=&xXMFMIdLCo-GycdQ5%JBFFl5RiOiVn>6LlKU zo0zhNhHJ&37iy!}kPmsv7+se&ByQwwz<=V6YZfJY{O zLQGRB47f3Xd@Am;>YQSQ2*6U$dMCWQFB4L(_#-jAq!5e+qF#S*9G@KVtVmLChdsxM zcL48>PP{OEbxBWY8Trp`5ix6D8B8ZqPWodfspYo8lk5Ti`wk3O_<4+R9zcd)?R|o! z(Z~NoT5EbE8%D)NT(eg$%$4j3mzuK zy^1X>Q^}h1GGt9Gg$QEFM zgJn9i-3Vs)lfcETy_n_nByeoPV;&W@fYZw~3!L(c+2Pp%k?Z{Z!9=XE`VV3a|4BUf zw8gljmkBQ}Y340?lU$LmaIDA?gJB??fnaCu?!WL)z({|LWyALy1!Bzbn)U4VpnG7w zcD&muylfyf8h!&LFbRMp;EGTF^gG+@+i(TF=T-eZ3f^u;S0xK#inJJpyu(R)$}f#_e_ zL(vU{ea!%A)cN@C(sD&HR5d{cP`m{Za(M@=oZTX%SjKh~QRW zf_YA8{qf8H#Fia&E)&BxLDBeBYBUb3m9sJ+F^qrAriwbzcv6U344f1wmX4gQoIif~ zRjGfNM4Jg+(L4v}cU(pX7ykE3%&$Bm(q>ly%&$Ch44!1`;8mF4CP;gnb-xJ;b7X#% zJ6RrSX)((M;o|zGJd&P7Exj{Q*jro4yj>EtdqHJS0*49s(EW@pGH;gzF4ySXifxgC zEXat>Ss@PK5eL`olCickAO_FX7%zma>g<#W%q9Q zDp1b+2Y&$IjbnL!aKtRMJovGM!bScV2r+`sD2xtae@+M$hHx>Cq5Yuw2R+7X&qy0S~J?f+q&n~(`H5A;TSn}iTb!zsHMhaEpQVZBX^t+ zwbZKAlf^3#UjSIT7C^Wt0P5l;##y5|3m647@jzzW(eZz2 z?#FrjemVEIgLa2@ze{6wF3gH z1Hy-g0)cKWU}OTe1wqQz$VT`muhTyX86d}|E>Dn8_Qu$=2=TL=F$li_@){vN>#D${Ner8WLl2KyCv|@Y^pePR z{BfR1TN%r27509kh|ncP1XYq8=#aUe*eoUfC8oz}ppA5h3c&(EOORcm zCNSStqhA>E2m+C4Fk!${jvE)<=9bO7@`y;AcLgzt@<>|gRO0$Paqt9p9D3tkRBVtwPz7S|p9GS8T!&}2PBmBDbxZ2X$D~2Ac>3xlz2j} zfEZ5(f>KGWnG?LQq#S=sL-y`h*q*N4N0d!CzWaSh(n}1)vt<3sWVXJ|E(@F#?Et|^ z`QTeuNReargY$6U;`o6xbUd5B6eB?T@p$>}H`>Pcq%a2~_IE4}2MK*Ptdj$2P(c%b zXp(d9{_?IuHg`#l2HWHp+SFSu2FzoBqbVhj+{E=EO=Y{06`irCr)kd4XBqgG}-8a&$GDUQ!!lTZXv8Yk4wJP1Y(l47u zDK9U3RO^2$aK7@!FhyX8jk8qZotCLBi`fc?v^+i;vYtJJxg$s%+pyFvhpDyTtH(v9YE%QBi+I#BqtSLuEy% z_(pmIFVI~!RIoIR|6Eb^J%94~#|SQaLJG32^RykE(fwZ&O)WDy_u(q&e1wDeGM6cD zaSzh;mg15q(KjiaG%T6X7|YQ&7;_9YjBF36)$r9`qp3;^-3yL0QjFkV`j-J}4RIVq zkI;V$ND(6&rxp62^fg_45Z48q^pnuBU+wk9J~F-(;2@3Seqhf)6uLHPJ04INl%xXe z@)5(a$G^JsUvKBX-t({7q&v3ft_M(wBxO06CM9`&2LgJ%W<H_?<@MRe7f)V zE(42@1mG1?V|^Xi1LxWTq6-|aM{iWBKh`S;6K|+q>V12IhbAMZcM+ie6S2Z>4~;8t z{oZv*`rixNVB9E*CheCmDF|Y0hX+2Od)$)<8U750FBKoh?#minoR?$U@j#A$N`rqc zPEZG`2l^H2GHEaS{$sytbOj39wonS^0Uek)y=WSsR@qnh)yDr7S@`wn*1Vfb2ZJV? z1}oI~VO-_-#fOW&PY=;6B)ar>tc5GrnOrz7s*>4l`VAOSjIRVFf{;W=MGqSt5f@-X zj1ftI-43HbM7XDkuQ6?Y4dMHdM6eM^vZf=b0{0!_+E~rExa@#_#!brr+)P zEXQx~UHvC-bIOYAPdsg|QL4P1z9j8hqvl;qPvz()B11dnpD6gw8Mc$kUVndprmxX_ z9?=C}*Da<oXKGgD!^FLHXj_cXsLR)v``YHgLf&<}yWfI+vT#G014dhTSmb5A z;6aR{%tc7qF`6#J=!xHv;I51k%w2>Q;O@Q4=G_nA%q*K%tEe?iTYWJoIj3x%dW9u2 z>R?5~MiUS};`x9h&SLq~F@Aq$Ldo1-5l%}9s8tY?iP;Nbr0R{!*}oQ>lW3E2FZ-PB zVIZ3v3yr1ufqY~gDRw17pA%F$qK=Z3W!gILn=KNdk;5zjk^}3zD@tfbu-TO(C{#-e zw3x@A$rd={IpPho8AP4)rITtPWy(SQjCq`SS=AdM*sTr)q6HJzvMwv!^m52 zFTu3roY;S36z_W(V=}~R-uZ==?-bBP@xV!QD#Y*XmL^K%f$KY-4J2uOdr6)x8`rOLo4or1`a z-Kq}qmztiRoPdI0U^nR6rz%HgC;+kyBkLIrkCY3T3-lxz$h>}W!4-wqWv=dmgpYh)8cv7L5Ndk0j_K?Otbl7^~v{yGN}vAbD&q@_iTHSX%|wGB?hCxN4?9{!UhaMm#$9y<9327kALr=seZq%Q{-=sUF`<%{wXY+7Bpl z2FDg7=~jO^B%2`ZaSq8QD9qU(S>=$FM_Sq;Dd_u_N7AD$!%dL(Bx>s_>|WIO-NdNo zOwT9Xraa;YrCYB!x}v;sP3yL&dVCuMY&SWuPxbiL4aaAD$h%~y6rIdVO5v?>_hLoL z&=Mk+E7e5o2lfTBF#V-%Y`$z>Is!r->WKaA`?=oPBP18Ocb7I@JZQB#uwsB%jd}7;~*tTuko+OiGGD*JN&x`x}z5T~tea@+>Ro$oe zwYq9wyBd5=36PaE+<0S(fuk9^jJ-aUVa)NPZwgHN`RVE+iW+HrVQ|q?d*vNkdjt|? zw*TUS{6&kA)`JN#87s503LJf+yVerR+1iCG<>rUk4RshgVm3)0S{9s!JRNaU7pCI1 zG7Kho1MOV+p%hIpco;4?+_tnh_dLVVIolvNGs`2%G64Mfh6~P8n4UcX>&nyIUqnz; z2FslWl|(tWrtFFMBSveDo-Wp4|M#QDs_1}^muh1 zn`{a==;5n^X1nU23!KL&i6abf_`_<1JmF9?-)XA$>c18YH@^oO`iaqxD*lUK(sDm= zzD3`+#mjdV=aMdFvDqE%*m$!GjBjujiB90HHUX+>{PVPs^B`hP@sra&S5<7PLbAC^ zj2Dt3@prh=V0orWJrgfm1ZM#R|0%|Glb;Ao$tMxkVN3<1VAC>bstOQZFZh?C#JG?^m zDUvLnGj<p*Sy z_{MUYp~_jpchndoPQRIs*rvMw`yO4E75AI~^zu35d5f1Iicpbxh`y+oIxpzS!*~^@urN!%j`BMVgAAwJNIkG_j+}Teoo~1unG10O zqvuG?Kf820&wgR2syawsCy1W6aWQs~!f(rUhx$5}`}!%|qR<;KckEQ&0bXWpmzSG! zeex#@dArTFPtheATa?YJ=B$+3h5JwX-@d}xL-gS4;ccFT+N1aoC4Kf6SP3vrjASJt|$0P&vK&{LsWO{*eKnu&*bX)|xLs za~(@{jQ7WS`Y^Mo>4(L@SKw?yGc!M?^j$P6gZVhtHm(n&226#}IK1yVu05eofDjtF zm@6IAV3V=kyK<3kn_pX?I z;DPL6CXC9IZfm0(r6GplUsg)+hlfSD6Gbb?iyAt+#H5buM=L1NxGwk=aYm|>e=h15am$xUPy%n1|z@+JkU-6}e+ zw$u9lP>Uw#9YvqHF)JCxwnK4U2EN^rUcxf^OYwQz5lti&6}=$}x#} z4p}Pud)v2!&Y{8F*9G7su1z*I_s~=EgxYctX`Ty(x0cAl*cZd!sK)q52Gsm@`m~X4-@14$?9)F%~_6t{H3PKUI zJE3O|h+v7yW)$XFxdL|RbGu_0pip>9zbURsx};!JainkXl`&&YN{WxK#=m_#hgbYN zP|$ToZR1=fSk6I;VA-f^>qZA-TZGPk{$gB|gXYc;FnS=A^)o#uryv5YJ$(dqN>tQw z`2)GMVBD<1lcxm1RznjIAttg^GA!(2u-U=I4Fk6{)_mxDyU`4;ESwxv!>xM-=K<2P zM=v-rjY6_E1@dy}MI#jP>%2H!p+cIIZvA;cv=6MtNwwTdP=ec;`n72sP(ot{UJ*;s zlP#bNs5tyH7xLVeMzj;K#A}DYtWEnkfec^m-~DrN^8sly z(jCIaX9pPOWyW^$s_Gqo|K>3v1>Kj0E$U_DFC5M6*U;h*0tMs@gxGnHLraieQ|z*W z@{ceiEZLs`Dp?WzAlp0Z9sDi;GT&$m zAO{s=?lx$XFUIy!B%GXj+gxM$>ErcxtFpCPXZg=z+GmT6!ezM$fhIMa@=v|o<*?q< z#dTN--kEUyA`e;&mQ!Lxi7PnDNIe zsl0=_KYy1)2CslwMm}&Qy+<6@*QD!PYx9K&!y*U0Ac%tL{Tbed|)3U>HZGYzksZjop_V%C;BilbhHQX;CDJYKem zv3f`3NfXYE3sY`WnJI%CFdYI1)My5b+X;sApJ-nAjn^jJv|*=%$Tgqjm^wm zSQ)+S?V2=o9XC1A1BmKAiOZ27!>J3+MxB$X!w$Jcn9<=EzWJVo2d7eJAxNN-`^$vC zKNBP+9q1*>T|(;?&m8l$#y|F#xladEsAR(BMvQa9fe*l|s0vOF3Na}a8e?090KB6z z_Q;WHqY#A%KK@Mh(`Kd7g4q9TOrihfV<2k6If_ zdx%akCLlurSIE(ZYuYo!Yd5uwR0Au+{ZbiPSwFuiI(>j!RTUP~*D(~XNKYR0=su~Z#^l%^@s7bT4is?`DEq}3)2b7Ke9BOK z>?%TUyE0K@wgA|xg@2{s;QsCfS<=Sw(ziu6PTj3K?MGmYz z8`>$TOU_Z+#rDv$WJie=zAy0ZUpXY|;Y9AA*UT2Myxzd}3TI}uN9oAM4tS>pN0NM= z#Fs;ba!<^eZd3M}0GX#fhi)Mo6x)Nvsb<|v`$dX`vVm7@<$~U#J6b#dZ?T2f#K({0 z6YF}6-kWYKDeM-dP58lR<}OA}X6)yM9HPy1M4kdTInaYu>3`E0Va^Mp?ca!DANKZQ zi)Z|_al`YLfp_()n`(;f2k6P6&aoo()}Z+HWT2NAE5n>gDL4|Bv*Qpq9rp|ho9Ter zQGx$un;rD|@tQUP&-&R&iHzFDEUTBe*O{-kSuUK5TS%X4Zh-*77A6N5bI=!A#m~MX zN5V}NR=@X4xgYq$2;3zCfYzxvkI3A<`p1bXf20#VQ)gu2P94658DK{A@|D>fk~U{u z`Wcf@r!~JY)%amVJ^hhAx4va24QvT~|0 z@3zM!dnUYuBLr8v`O2;u6WMH)T#~nw=keYWYZD0C3amfw)497RuF7Uf+4^ zEuW!ec(p>PH|SksCLopKku({GjWUo2ejs12in*NH6ygsIq5txBV-0XQFPg*d4KYw& zV@dqyK_bdb0F-$IA<3Mcu9Yo(dl2*GxzD%PU}1a5%ZB%R|9G6?jvS!e8J$I^S;~CF z_7(x6$MZtK>}}fG9$7iwoB)ip1Z~GhOi3t5U69aXyX5PrFJS7|7$~u`bC~7OB0%9= zOUt1sHEO>I2!RpxJW*Ci&Sh~U4OVo!YZtxAK%{`2d$t|by_6iHt&kc^ejti6#7Rf} z6UQsG2XIPx5Qe_GiIdpHLfYRWJK_^@r2GEPia$ni!IbW!DEk0sXqc4JiYxcY}3MoUT_WoB+Jl?Qn!*V>-(PHHRNFB7aei z{Nw-r@fFJai#m~4BAARAF{?7MS)nxGB`{+zl=DK*wYxvHs%%7(9{Bw;uu??hTX1bR z`jfE^0F|Q0i8FqlSOMrcdqVqW(8u248`W@HPzEdo>K|QSqCM9?IPArv;Jj7K2XR_D z(HxmCd;=6NhPAJCt*BSy&(`O>ot!V|gO@@eUVNX9>%k-QtyfMHwo0|z_Xvh3M%(jH zSVFxa?teXVLxt$y?S;&v!YTs-g%}0n8Nubyb4s(6g@7wpXg3^*TE>ezgI)YaS2teg zJB+xyJNGjT`vn$@{r+CMzP=Omn-tH|vtobh4RCX%q0ZCMvp0UV-)bV45!|lMTbx3E z1QLB90aY~7VWH&xU4y>h`3&fwi38A8I^;$VFtq*@OZLXLmKY1;O#Wu9z7afU(}Yo{ z)L506#a#nE+G6(%R`h=BYe!X}2l;I=VkOP>b>^NYZ+mbyE7OOL9%G;W`EYyenVHT@ zW{v;(vxgrRs;7+IgrYEef2((7;?wW(%`xKAPDK`}DPv-#aO^#7g%n;)gC5`%yX2q% zH;z&J=+J+epou}_)OOPF4M-h#B`s}WRMNK$Q;(qXgM zfI$Le1#-bml6rpCh)-6RjsH0<$s8d+AKXlx6}tS@n&T*hn(+RTeY8t!CEfaxB{>}o zYGx@oa+7(-20>J>DdGDpWIdqLnywYo`8KGR@hC03U#pMkhhCsrq1HERr}M~-3Q4pH{!&!fVQ{!kMke%^2W)o2Y#3$ZwPvNLpR zhL-5{Jmn_EkIE>?Zxo0lK*`obtl~MTh${IE?8oLlLK@f4P0HX|t{m~GTMYaQl|(!k z+Nee9jr!f5Q8o$?KuZefhxSoGx7c>6Tkz7m9djrIW7Co5+S?4Q8YOK46|P)}WeN`X zj$UCBNRbxvU)ty9dsU|qrvikwtu*Ea6g!cdJ4aJZnI-5u#mm8*K-}A4IumRmHXu2GUYk5~tAP3D8>17Fcfe-_829q1+?e*_J0OoF37`l5(xj)XCH`gWk z6<$UdU_s`fpyn*ai;S&`A&_ZD;cT&17Jmhrakvfi_osq7>7ZLvDIwFD73=)`9#$Yi zQQ28YqY^OyU}d^Jw|*E_UGtzOkbSc@s;SC9oWvtl5vR0`;52kz4J4?Cm8F>7${a>d zvSU7C9F5jB03c?Sq`Y-hgjNpMmQGj7WZ2QRR2%D2c4BAKc5K0ZBKf5)8tWfz9a71} z%fH7dmM}Op8fK)|8Aq%EP6?9l{;evcv2pu*fwv-}(t3&0SmY2>L5N!=GwR8JE-8li zEf6paO{+M9&s8llQ$G5(A09(`~~nht@~5_i?|aO*QM?zd#f;XE<743w`(txz^Z z$a_CCHzDCI74*Hx0^Z1HyLdX9vl|$X`*>)7Xo{LO8w{|ft2bf1Pz2z|YQy7TGj{E@ zghwR?@J&T;{+6ROPj5gDUaHh~d1cLzR{?87xJZGrTZ2#hh*QmO{WUAj=@e=xEq zrIG|XD}bIAsZGt6N+Quh^;};Zb|AZ54n#XdAZ9W*PkPF-T-o4u4Xd=IN_+hj;p}rt zRrzbN-=WJK#Qx1fffv_dUOVzu5CiL*iioy1cxrWW?M9t{NO;<5s2Cnz zdwX|gYgNCOELH)CtZbrHy}dL*eaa64peXdz>5r;pk}Koir2NXg?wIMpGFlNdENt;K^D?0=#Wwu?^(>Yd(sn3-=qmM({VUk`X!Z^CCtChPxia_4MZ-Kx~V(@Epo!_|~c<%@SybLK%zfie%ruQ3@z#u_R zslCo>>Btup2{|lic^oQslScd$Yn>Y6k#M37PC^&91f9pnC12DTO z(L;-@;y6dwh(zo}yS;%{(o=~ts3aVDy*?M&O`e|+pN$%0Z59rVK1(MWZ2$f4?t;7` zGY2_-l1wh@N?o#pakM(yxy~VzZP{VQVWpB#H>9mdGvwT~J)$LNT_G`8al zEUP&5ElAIz8)x7Kl>f~Rku9hs$FhcRk;h^$+D@zQ3vM z*_rOYQ60W=HMNLzNKaF0Nd1Uhd!!u@7QwB02%57aN7wt6J9igN=uvnezqR8E-lZb? z#%N+A5sNR}+09Ocb1NYh^(KApBr_zke6MHQa7?~K{mQ`sSkqcDp-~J(YhxRy_NCHz z_J(;9(0DQ&iZMWCQzsXW!8Z`wzfDh!GEt3ZzLlGvJTj5;I|}%$n@dlOOC%EOT%9HR zZZ*ZlT%@Ug+MRr|1Ho*)Ju1K!Odfsu%!iOFusl{iohs9oXy%WLDUFtdjmq0-I(Q(}0YcFBh?9AZsIyRsC}@qjG9>zI}`+)8-VAD%wL9G8Z( zt$hsnn**_xv({XC)r5z!MZsti7l~ZIc7cnU(o8${}4pML6m`7ng~GMY2-!~Lu_zJgD2y=51@ky zAs~6uVUrnI;u-P}64-MK`Jl8~ze~c9bfW%V6H%XXvV`~%GP(IOV7GvL!oeKdo4#W{ z6-NfQQFP&SAx{w|b)* z!U+z)6@@ix|3J@5!FpV>YJ)z1>*lHB*l~^qET!O&tz(Cnm zW~0P_K8=mP|R~^We>ZM^G6lmnZMbTu6m?A`HneQI~fyGjt4lf-J8eWU)pr=7bd zdjuy_*68)cZg0tR{{`SDQ3K^{WeZJ9)oP*P``vymz#FjfILtiP@DZoQ{$46*r>QjP zv{k+OzF$$^_@VDhk1HzJq@RQE*y^jds{Q=>>IJa6H04ZwYoLu-Z8n;!w&1+>c-rE~ z${6<7C+ui(BnnS7TNLC^jxhPqrtT1GycN%Aia71C3V(>Z{0S(R4sSWnn=tKls`}J) zC_Y#mI696`_Nu5d-;Qb&(&4G{wdwpzH=Kv!NY3qXU2x{>qO7lQv7){1XFj;>8Pk*b zhakg8;JTYo8->U6wD!l5{}X}0-S4B}_~V|*j`3-9kfN`h|HFgnqQ`nqVLq>O^B-Z9 zC*RE#&$8+IGep1rg3JFpA_Xz@;gO2L~Tuo9sk4cHVsgR2fO0}b9g**`>0O~WW zE>xe?(n-ap@p%1=&n1uJTYEOM<(qT@m^S*8zdDbT14jVSYnpolEI1YxA%1gx5A0|M z3v9IKpEao(-fwbzL&*XJJf4_bw=*Zwlr?{lZZ{Q#HmLGIJ(;o&;4>P>CW9JYwNBiB zn|GqhPbLm_WnOIxB5B%6ZMD64L3U3zl92sM^zfIE|5VB7EwQVHw?&i*C~fcGk7$oxBC_3;os%i(71D#4wSr;>VZ%ay`vvSh{qc?6L& zxmd=@G$QSDGjVJ3VKEZ}aaw)=%t_4|5vW)@IVw3nG&IXJXD|&?r_H@)VeB-*#&R~J zlI!k=u^8lW+chahoE6Od{ULX|I>u0U z6<%6k3}t(f?v$Rj$SA)jIK#?jdESh`ou)J3-=-Xdgu=zxG&jeq_poM^DU5qa!bLTN zfa{nMELh^F7%R2~!4@^lz95Ux%@CtV(3AxetE^0fqJwD)YhsTRW3boyQ4phZOY802vF=CQ7r3h(B4N5^-QkUevn}cUn9e26X z8!dNB*4E-2H3@pYr=Lq7nS?maHp!&JUX5mpaurFGs~425A|Kfrb7;Gvj?PB+(G8o@ zo|=XYr^|EMC}VD|xPxj7FBkVlD3bNYxNiqAwEd2k<$yOl3WP^?I?6yGnY^<9Wcb<5`~oo91^nTGzNxk9RDPu7tJqhsKZn1DbFSTs+CSUs5fMZ1fVn;iz1ISx%FrZ~5rE=v$y!|4^ARpU+ruuAQw(ez z(yk$;=g<&@zdpfVmXk+QD}(FaGpV7dE@I@w&vOmEM?DGtK_glRK()AgU!pLxT_b7} zA4MH0e{i!M);4oa9C zQOy~Ck}Tz>BX1D1=p5*}qn0D@QUm+MUrN)s_XVcHLQSB3Nupw9h-1t6h<~?OK8Aua z$YLjfdiT4gLd_K#I9VFuD}x$yk`s{J@?fB7!Bbrfvq9BKCHAjh^eo zT9FSyHz`ewIWUJ*l&GML%teCa%~b5U0V3Y!1pK_ix_h!p zWLf;AlsJ?Ks`)DRF;A^+ct$ZeOWtUHPFR;OAg|=Gv(wzvE=uG1`6`Wg9K@cEZK()w#EF=ab{zwKo0d}BuxK2vDhx$2z# zX@~i@Cm&S#p26a|%P`^j8LhCku~PQ@*jFTbQqe!)wJhSAZSz8HMZn-?hK?7er1ciy zcg&%P7JVa?iH~2lt*Gzuw|yM8%TB6hVyf0IJl?#!@9p&6p}+=U6?umV925%|~0`5f~5)TOp{_{Q_(eUf$5iB4|E4F89UI zT3pOEb@q|4$1hIdE~2G!LoM;M38b~^R=B9!N||kjYOMAU`{a|Oj+<-H$mm`YGm{e| zB5A<+S?881B&}B=SkqkSDw=HCD!hd(W!CX8KnS|uob=Cr??2gkq_)icYMh?9V>k3)xB;%u=K}r?FUrn&JCef5I*aVYfP14hm-R))- zC>hO7T{k|(YvJ}kOYACon7~C`=Yd(w;`HatVmGKfZPc^v?)Qlx$or z0cbqkiBhg}(!-VV%|$-*G2ic^e?k8fZUJ-Bk713RdY_-ahW*<3BZC+epw|Dj!Tu-k z62k7`if*hv1Ctm|FuDx1M?h{BaAnPb0aA#Vgjg5~O&F+pZd(f`#zVY5zR=g^@#^9; zQyy+NR8uZC2$%VrZaHZ0Eax%)oFGMMgR1syqmNIYuzmU+yCqJW};ah4-6ghWMsQokjd(&cm(BTKlq*^Dt>SrkyBFE~s}%0#X;~VD@nkCiK#gY2p-< z;C(fHfbanQb_2gK`(7l)l)c!(C?|PzC1>b&xSt5#L~)xV^%->EV|{tN*3Fa0qk|Afi4Dkb4fXu`gQ;3eqd-XUG=? zwul6<%@I+Qb)9fKU~ z^yTjT2H@G=;eBlWD4JrSDzD-ar6MlDm?mFcdiH7^z#^K+DNZj#1DR9EuzYs%=Q6Fz zM^)O`4dN{<_s%bRWkemwz4DsrQpjX30Z9+QRCPAlE7KXyF5k_%AWiEc4QJ3ApW;+x zA(QI6v;-zaT@~<~KG$BM4=D`vVN9}JLAoxW zJTf7ZvhKI&1kC_V?xCRHhG)3%Z?xeRu^viUwZ>i)Usn-sx>mlbpBXCw1tye+w^vN! zEWX6O#p`gGoIXKiXM}@vIkSnancYjpZ8RZkBt5AYpf*GU~I;sC0b!DZ;X78fg$l92L9Kk<7$oA(=Uoq(4O^I* z4uPzO*{<^!@>R3t?lrT{rZ;ztt{gb+Q9j(}OacAvfckzuRO-1SXSvq`#b{p5}evU ze~|vce%Pw4p@3I75Rkq`y3z_*Kt41h#~^ZWzKLy|@;s)#yB4=>MeU)1mvdcJ^O7-M zI$W|=P_7kj_e;W@aGqc}dJB!7M40pPf`)7FKo zzD;fQtQ7wK*Up8NO)M!Xlrzr@(>V-;{qC`EeNZ$1T*uNp=52@&v4b(t{|bHj5JF-J=FiR?pwsyMLNS6ZA7>{^2->87 z7sRi{;c3g>lpi5C9=~Yq>QWT+zYw zaWtxOs?JG`^2<9WObI{ii$H^kr6Um%XDmEU$5CYRgKlbj9RjURB8Y_SNpH#I8kwWY zLiQIAgGLXCwZreX-JE>c0Kfe9%-e~W-l?P3-R?5XLx>DNo|uIAv&~;mBh3ljkS#5< z07kr8r?0=S&Zyy6><%rJfDAwOPiSSh0uY53JBwoTc5Yjgg3TJA9-L4ljXz$k-2D7l z6Sj+!4U(2=zpa_0UUAaT)W54tke;zbHM+M=NAD0)cMFi8yJS&S4;4`=OEeo1<{aTt8)Kk3rt3Hg_Q3)a>A@mH;3h z`3PRlftRj3>nMtiFI5Vjx*7amEF`;kkQmVIm#S<~Y7nxnMd~AL{2VZYp?D;|pPGO) zDpeQ{kby^s{jvh*J~-l29T4oBhGh-Zt;S<_M6OcsWJoN>-7cj;a>xWlXeI-v45#}{ z`+?Pcm+`jVG27OAUcH9iT5Z3qdVsn2dm2x$;csm6PVR{PylhgqLc7-swZ0bomO1w; zSNPsT1Q2c`Lf<^+SfkJtDQRHMq*+V+vVP+aH7XxJ8`OasFs0D2Lb2sB?8>%j3$2 z-Op;Dj8Cn$@zCF0*WSilQt5?!xvtb|=I;sH3~n)btOE$jJafuq{8lR^BG0zAkxuS4 zv#vL0MaQajrZ_IR^YC(Mya52YLG!9|OR&0T9%I%;?B6?50evenO=i~C$`QYBQEzq3 zC~HCn$9&p)Y6m*qZ}e+fZ!MX!p?tcq?43C^X^5N)7s|%?YvC-OS&Ig?Qm{5 z!)#!1rlKN25iK~y_mH2ftOgX+TRkr6+d!$+kV!`T;nswV|B@27KLcj%<#Bpp455E3 zVfVs#K>v<^S#vbBENu@B`zhs8t7f^|EnP^ie_c2Lt#iJ=v>uWIvw@zSqxGaj8l`55 z^mDGvlMteAqiAnw9g`xSSK65~A|ZH2GVe#D%C`+X-l?&5;qdCjkZK3LOX9H%H=(+C zl3giR1gNnES|NM)(|UjeIC8MG_cK!`x#Mi76z0rVq>na;DL2BO*;GILP`*H(E8gW= z=iJ(NN?fiB;fB1#fX)lkus4|dP@XQ0wIIOFJLXbqjxmhvVP+xdZec+&#sKk%&IS9L zHtc(?RX(Z^jBW|Od`Kx0-RK^pReC@v^4-xHNIZ$kamBg7vkYslI^(Q{Rm=(stZE^Z zK^8n{Sker3`$hRxY96ZJ!)3NS(syn0W7r<)NFm|CE}z#Mt(aSPRB{JG`y~<{^_zC| z1x&*q635{DfUzv%a-uKAi-<1RV4!^~5#Y<(07C3htik8m|D#Q;o>Giz#)CJOQ1Yb& zPvi_5k{q_@k)bYhq>!%ibwOT2@u53ln=70~9Ajk$0pkjP;sa*1Fbl(2o7+9!*EbIJI}bh-*q zy@ec*-CmH`H7`Y&(*>)VjiCM?6PMVbm0$i$e*IcYu0;Vu$ek8@0Au=dw{NawI^;(MuM>C8PcA z`%WJ=0H9w9;4LodGYLmTWw^^%bWSCICcI{TSp!3ED0e~$gCzw2j45+#ItaTz&pq7Y z5;F9vm6(^WArP(f`2|HA_lQbHZ+$Q<$vpG-0dvByW!Tzn2M-@b%n@yLZnuc;2XtVNf|3OBoTn zdeJEb$+lr~f&{(&u3+cf(x4}lOigSgizPe5u?O5;?|GO&VM8d`ojyi6H4Hs|d;|H- zPbvIx+>A7HlC{Biq~+EKnH%@x5bk1>^>0cATq9%%oCNdu5l;^c5YqC+QN@AM@s4QO z1<)ALXqNUcsYz61lCFhDd@!*k4km<{Br9N8Vy-#~3+1}zMsDc|Ol;c$&dWM6HZ}{B<=D(oB;5%lXVbYNA2{NZJ>O&QMQRk}E{1e2NF{vJ&umU`1N2?b)l-*EnrsI5^3x z^)Q4-&N80h&YOc5d?MLTETWM7ah3K735SfNiO+pPJ45_bVN5JWk`xWQ$5e)Hkk3p; z{EqL*NYqL#zop1p4#vsd*!f2ozyU>75=p1yBRhh_(Y&_M`P%->2UK~X`p5SU;O%tD z^S3H*N-<>-%E!yaE-J)kA`lvzzwb5f@UK{vXE_W*(=WfVfpXQ~KRy3~bv#Qcwn!-1 z=5mToXlFnE`@Ja&ZA10GyI78 z5vY0AiDfx2vC$=A(|Wbv2qEYd4EYqv z6CxSCMq66h7{2~2sH}R976?#T=a_f@&8;@YQGVt!u#PtY2}fTmvnsr50BTt+QS{> zwlpoL?is&N*!W}o_)ITGx&zuQ_XUIQ1wM1gUf95aZsE)xOe>ckPY$qUGixL`vL7Gc z#T{NrEwUs5I7Za>XDj9qcbko_v|+!mz4;C1x2#Jwl-5!|+k+GIpwIU49acTM<3P#d zH`O1~5tWcc6eC7ecALxsy7{3Uzvm}It6GCP%{4-q(%h}Yw%<-i?-Q!&aCUDI+VA=y zFVgCKZ|l2kcSwW&Mt6V!$nVCfuwV3Xo3-N_sAQKUT7(*vC1gQ0Dy?th^EVL~_~l3E z99?*_-Xm(0nG<{p7gpNd>ophb);JP$OsEF2j7r00uaEY-&6yF(J}6i((3m7sun5MU z9ta$47>p&Rk=%9gYHFxG%K^1J)g0E9nR+W2;LT5KQ$6X{YkL4B=N}=C%JR@DI9O*ScTMFpvFz6fkL>&(A$qzG1K!e4j2DfS$=>+O42oq)LrRNALV_HCov*^Y?N zI)9V_j`Ux3{|Nz*JqmyF7xV2+MM{y7EPcdrq9VZ(8z?;3tIk;4M`y_`y*oN*J*^pR z3?^==eI4IxVDyg=a2jt%$6l2v2VK{Y#o0C2{- zFbrI+%GYUS4x~8*>l4sV1~m50Z@ZaYN+cMyud=T+a~=Slc~3@-_>u_q6t*lOzPxcY z4#){l-8H%C23M^?;Xg>bshmoT zesDNM?)e+%h;p1;yb|gt`;)kgKp<_f%d&#^nW8oCxV3+BCrj`%wu%68ckug&hDN4C zpl9z#7G5m?3rTqa;_+ItkyuB~s3PT7@^t#H_c+V*?p_CT`L4FdW)l%0P>HLvBv6F@ zy(8TJ{&WTX9~ZQIZ^fPw z#RvJ_aC*I?hVM~Lh3zHJWG`8uOu_jAHpB2HUUYAwr_Yuxx8i;cgvvu1^`@721kpx6yOg)w8RnC1I;orSpz*R=;=vHf7I6=pkNW9H-m3vz5wn6(bGVvqvA%%*4)+T(?uu94j^-O`rDPC<8@gZwlghiDqARj=y-VJ|xY zUN7V@i7yVE*&dp7gRBHQ;X0y%R2c3X#!`OHFniI<=w;v1@3WwCd~VxgkD6U;qUQt# z2`a=JrYfjIkIw0qBJ9D_vKQ-s-k7RV*@&MI#NTCAxQ}U#TIaSHWcjB=>WP>fiSgx< zs2@!eLP2kE2TSz;bmd7D<;}NT8$L8{hR&BK9~mofM^88LZ?$CjtalXyVvYB0LlLe@ zde|id(y3@ZxeNT$=h3+s3A7uq(?9HotXfaAl1)5-j(>1>ZpE$V2XWylwINdQ+x~fV>0I7^uM`1 zB-0pRR0crqX#p@bBcSIrDgJ-R9bXA(c_=4nB&3UlDov^-d;1u)+n z3#cjQ_u>r-1(}#8?JoE=329ehK|=qQn{m zyM0aRf5G4L>&*Q+31v04G Jseiuu{{RW+r&<62 delta 31288 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 From 3e740fdd151f1449263b7526198f326ab806cee1 Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Mon, 21 Dec 2015 14:20:54 +0000 Subject: [PATCH 7/8] add changed requirements --- setup+doku/Installation.pdf | Bin 723939 -> 723950 bytes setup+doku/Precheck/d3precheck.php | 10 +--------- sources/GeoIP-Installation.docx | Bin 54277 -> 54513 bytes 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/setup+doku/Installation.pdf b/setup+doku/Installation.pdf index 969f3d634252e070fae6fe1d65ac6a92a7ca435c..ce74526828ada51d9cb1ebf3c80e0109d11f5d29 100644 GIT binary patch delta 37192 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 delta 37212 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 TtxQbZ3?vi_ array( 'id' => 'd3modcfg_lib', 'name' => 'Modul-Connector', - 'version' => '4.3.0.0', - ), - ), - array( - 'blExec' => 1, - 'aParams' => array( - 'id' => 'd3install_lib', - 'name' => 'Installationsautomatik', - 'version' => '2.5.0.0', + 'version' => '4.3.3.6', ), ), ), diff --git a/sources/GeoIP-Installation.docx b/sources/GeoIP-Installation.docx index 63e78018768841e6beb52851c13e9eac4c59896b..9278cbf989096955552131ef4458afcabaf6cf53 100644 GIT binary patch delta 25006 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 MGgR>3#{QoAe-K7RI{*Lx delta 24772 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 Q>k-KC96d_S*gswW2N(yTJ^%m! From 6bcc9d5b972e35d36bd77e4268b2dfe11642da09 Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Mon, 21 Dec 2015 14:23:45 +0000 Subject: [PATCH 8/8] revision adjusted --- copy_this/modules/d3/d3geoip/setup/d3geoip_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php index 1a183e0..6dc06bd 100644 --- a/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php +++ b/copy_this/modules/d3/d3geoip/setup/d3geoip_update.php @@ -19,7 +19,7 @@ class d3geoip_update extends d3install_updatebase public $sModKey = 'd3_geoip'; public $sModName = 'GeoIP'; public $sModVersion = '3.0.1.0'; - public $sModRevision = '63'; + public $sModRevision = '67'; public $sBaseConf = '5FibjlIQlRvbWMzY29mVi85RXFxbkc5bFI3R24rNkd5Y0lEcXJFOGhtaGExRVcyaEF6a281cVhRUXFMU 0d6dnNDbCtLRVdObFh3bnVEdUNRTFJrVlE5VGtsRkF3Tyt4TU1Pd290WDliOTQ2SUE5Skk0eTcxTGdlT XZna0dhS2ZOekJUSC94ZUd5YmxXZzRXcG5QSWcvZnFJa1l0N1MrdWRZaFU1VG5nUGFwNEF1WTh6azNja