diff --git a/Sources/UsersOnline-Installation.docx b/Sources/UsersOnline-Installation.docx index 9763618..b3b8428 100644 Binary files a/Sources/UsersOnline-Installation.docx and b/Sources/UsersOnline-Installation.docx differ diff --git a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php index aded1eb..5969a1e 100644 --- a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php +++ b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_licence.php @@ -20,6 +20,4 @@ class d3_cfg_usersonline_licence extends d3_cfg_mod_licence protected $_hasNewsletterForm = false; protected $_sLogType = 2; - - //protected $_sBlogFeed = "http://blog.oxidmodule.com/feeds/categories/46-Angebotsanfrage.rss"; } diff --git a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php index 3f64ebf..8f94d21 100644 --- a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php +++ b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_cfg_usersonline_main.php @@ -25,5 +25,9 @@ class d3_cfg_usersonline_Main extends d3_cfg_mod_main protected $_blHasTestModeSwitch = false; + protected $_sMenuItemTitle = 'd3mxusersonline'; + + protected $_sMenuSubItemTitle = 'd3mxusersonline_settings'; + //protected $_sDebugHelpTextIdent = 'D3_INQUIRY_MAIN_DEBUGACTIVE_DESC'; } diff --git a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_statistic.php b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_statistic.php index 234a961..5671239 100644 --- a/copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_statistic.php +++ b/copy_this/modules/d3/d3usersonline/controllers/admin/d3_usersonline_statistic.php @@ -14,9 +14,21 @@ class d3_usersonline_statistic extends d3_cfg_mod_main { protected $_blUseOwnOxid = false; - protected $_iExpTime = 600; // (in seconds) protected $_sThisTemplate = 'd3_usersonline_statistic.tpl'; + protected $_sMenuItemTitle = 'd3mxusersonline'; + + protected $_sMenuSubItemTitle = 'd3mxusersonline_analysis'; + + public $blGroupByClass = false; + + public function render() + { + $this->blGroupByClass = oxRegistry::getConfig()->getRequestParameter('groupbyclass') == 'true'; + $this->addTplParam('blGroupByClass', $this->blGroupByClass); + return parent::render(); + } + /** * @return array */ @@ -24,7 +36,34 @@ class d3_usersonline_statistic extends d3_cfg_mod_main { /** @var d3usersonline $oUsersOnline */ $oUsersOnline = oxNew('d3usersonline'); - $oUsersOnline->clearOldItems($this->_iExpTime); - return $oUsersOnline->getUserCount(); + $oUsersOnline->clearOldItems(); + return $oUsersOnline->getUserCount($this->blGroupByClass); + } + + public function getControllerTitle($sControllerIdent) + { + $oLang = oxRegistry::getLang(); + $sTranslationIdent = 'D3_USERSONLINE_CLASS_'.strtoupper($sControllerIdent); + $sTranslation = $oLang->translateString( + $sTranslationIdent, + null, + false + ); + + if ($sTranslation !== $sTranslationIdent) { + return $sTranslation; + } else { + $sTranslationIdent = 'PAGE_TITLE_'.strtoupper($sControllerIdent); + $sTranslation = $oLang->translateString( + $sTranslationIdent, + null, + true + ); + if ($sTranslation !== $sTranslationIdent) { + return $sTranslation; + } + } + + return ucfirst($sControllerIdent); } } diff --git a/copy_this/modules/d3/d3usersonline/metadata.php b/copy_this/modules/d3/d3usersonline/metadata.php index 25323f7..7bf91ee 100644 --- a/copy_this/modules/d3/d3usersonline/metadata.php +++ b/copy_this/modules/d3/d3usersonline/metadata.php @@ -36,7 +36,7 @@ $aModule = array( 'en' => '', ), 'thumbnail' => 'picture.png', - 'version' => '2.0.1.1', + 'version' => '2.1.0.0', 'author' => 'D³ Data Development (Inh.: Thomas Dartsch)', 'email' => 'support@shopmodule.com', 'url' => 'http://www.oxidmodule.com/', @@ -61,13 +61,6 @@ $aModule = array( 'events' => array( 'onActivate' => 'd3install::checkUpdateStart', ), - 'blocks' => array( - array( - 'template' => 'layout/sidebar.tpl', - 'block' => 'sidebar_categoriestree', - 'file' => 'views/blocks/layout/d3usersonline_sidebar.tpl' - ), - ), 'd3FileRegister' => array( 'd3/d3usersonline/IntelliSenseHelper.php', 'd3/d3usersonline/metadata.php', diff --git a/copy_this/modules/d3/d3usersonline/models/d3usersonline.php b/copy_this/modules/d3/d3usersonline/models/d3usersonline.php index e4b8e8f..e7a83d2 100644 --- a/copy_this/modules/d3/d3usersonline/models/d3usersonline.php +++ b/copy_this/modules/d3/d3usersonline/models/d3usersonline.php @@ -32,6 +32,9 @@ class d3usersonline extends oxbase protected $_httpXComingFrom = null; protected $_httpComingFrom = null; + protected $_iDeleteThreshold = 30; // Zeitdifferenz zwischen 2 Löschaufträgen + protected $_iExpTime = 600; // Ablaufzeit für inaktive Benutzer + /** * constructor */ @@ -44,12 +47,19 @@ class d3usersonline extends oxbase /** * @param $iExpTime */ - public function clearOldItems($iExpTime) + public function clearOldItems() { startProfile(__METHOD__); - $iExptime = time() - $iExpTime; - oxDb::getDb()->Execute("delete from ".$this->getViewName()." where timevisit < $iExptime"); + $iTime = time(); + $iLastDeleteTime = oxRegistry::getConfig()->getShopConfVar('iLastDeleteTime', null, 'd3usersonline'); + + if ($iTime > $iLastDeleteTime + $this->_iDeleteThreshold) { + $iExptime = $iTime - $this->_iExpTime; + oxDb::getDb()->Execute("delete from " . $this->getViewName() . " where timevisit < $iExptime"); + + oxRegistry::getConfig()->saveShopConfVar('int', 'iLastDeleteTime', $iTime, null, 'd3usersonline'); + } stopProfile(__METHOD__); } @@ -57,13 +67,18 @@ class d3usersonline extends oxbase /** * @return array */ - public function getUserCount() + public function getUserCount($blGroupByClass = false) { startProfile(__METHOD__); - $sSelect = "select count(oxid) AS counter, oxclass from ". - $this->getViewName()." GROUP BY oxclass ORDER BY counter desc"; - $aRecords = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getArray($sSelect); + if ($blGroupByClass) { + $sSelect = "SELECT count(oxid) AS counter, oxclass FROM " . + $this->getViewName() . " GROUP BY oxclass ORDER BY counter DESC"; + } else { + $sSelect = "select count(oxid) AS counter, oxclass, oxpage from ". + $this->getViewName()." GROUP BY oxclass, oxpage ORDER BY counter desc"; + } + $aRecords = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($sSelect); $iAllCounter = 0; $aUserClasses = array(); @@ -73,6 +88,7 @@ class d3usersonline extends oxbase $oTmp = new stdClass; $oTmp->classname = $aRecord['OXCLASS']; + $oTmp->page = $aRecord['OXPAGE']; $oTmp->counter = $aRecord['COUNTER']; $iAllCounter += $aRecord['COUNTER']; $aUserClasses['classes'][] = $oTmp; @@ -94,7 +110,8 @@ class d3usersonline extends oxbase $aValues = array( 'timevisit' => time(), - 'oxclass' => oxRegistry::getConfig()->getActiveView()->getClassName() + 'oxclass' => oxRegistry::getConfig()->getActiveView()->getClassName(), + 'oxpage' => $this->getPageIdent(), ); $this->assign($aValues); @@ -103,6 +120,51 @@ class d3usersonline extends oxbase stopProfile(__METHOD__); } + /** + * @return null|string + */ + public function getPageIdent() + { + switch (strtolower(oxRegistry::getConfig()->getActiveView()->getClassName())) + { + case 'details': + case 'oxwarticledetails': + if (($oView = oxRegistry::getConfig()->getActiveView()) + && method_exists($oView, 'getProduct') + ) { + return $oView->getProduct()->getFieldData('oxtitle'); + } + return null; + case 'alist': + case 'manufacturerlist': + case 'vendorlist': + if (($oView = oxRegistry::getConfig()->getActiveView()) + && method_exists($oView, 'getTitle') + ) { + return $oView->getTitle(); + } + return null; + case 'search': + return oxRegistry::getConfig()->getRequestParameter('searchparam'); + case 'content': + if (($oView = oxRegistry::getConfig()->getActiveView()) + && method_exists($oView, 'getContent') + ) { + return $oView->getContent()->getFieldData('oxtitle'); + } + return null; + case 'tag': + if (($oView = oxRegistry::getConfig()->getActiveView()) + && method_exists($oView, 'getTag') + ) { + return $oView->getTag(); + } + return null; + } + + return null; + } + /** * @return string */ diff --git a/copy_this/modules/d3/d3usersonline/modules/components/d3_oxcmp_utils_usersonline.php b/copy_this/modules/d3/d3usersonline/modules/components/d3_oxcmp_utils_usersonline.php index e706c4a..4ed9fdb 100644 --- a/copy_this/modules/d3/d3usersonline/modules/components/d3_oxcmp_utils_usersonline.php +++ b/copy_this/modules/d3/d3usersonline/modules/components/d3_oxcmp_utils_usersonline.php @@ -20,7 +20,6 @@ class d3_oxcmp_utils_usersonline extends d3_oxcmp_utils_usersonline_parent { protected $_blIsComponent = true; - protected $_iExpTime = 600; // (in seconds) protected $_sD3UsersOnlineModId = 'd3usersonline'; /** @@ -33,7 +32,7 @@ class d3_oxcmp_utils_usersonline extends d3_oxcmp_utils_usersonline_parent if (d3_cfg_mod::get($this->_sD3UsersOnlineModId)->isActive()) { /** @var d3usersonline $oUsersOnline */ $oUsersOnline = oxNew('d3usersonline'); - $oUsersOnline->clearOldItems($this->_iExpTime); + $oUsersOnline->clearOldItems(); $oUsersOnline->setActTimeVisit(); $oUser = $this->getUser(); diff --git a/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php b/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php index 47327b9..5ba8c80 100644 --- a/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php +++ b/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php @@ -22,20 +22,24 @@ class d3usersonline_update extends d3install_updatebase { public $sModKey = 'd3usersonline'; public $sModName = 'Users Online'; - public $sModVersion = '2.0.1.1'; - public $sModRevision = '43'; - public $sBaseConf = 'Nv6RXZkcTl5NmIybDdzQldqUWo5dURBTXB4Tld3aHN3N2pmNmZacUljL0R4WUg2a1o4QUxLeVUrdjBSZ -WFud2VjRFJDa2ZvTHVaS2tpczAyZ0NGOGxwV3ZISHB3c0xRLzQ4Ny9kcTdDSjVQZDBYZ3VUMHFNaVg1R -3ZudGMzOGhsb01Sd1dTRG4xd0xscCtORC93VXJsWngrV200YktMSk93UENWNzJuT2NaT0U0UkJaQWdqa -nVKT0RwVFFzclYrT2JnckNGZjNieVRDSzcyV2Z2QktDR3RqNWJsemd6WURVMm1tbWl5cEJNMDFvR3JiS -2F5OHIvb0VoMUw1Nm9XdWdTc2FwVWpCVWFkZEllT1lGTzdiY2I0YUdNMmV3K3kyakZQMVRuUVJyUjhKO -DQ9'; + public $sModVersion = '2.1.0.0'; + public $sModRevision = '2100'; + public $sBaseConf = 'qWOv2==Y0dBTjQ4SGQ5Z0wwRVduakMxL01XL1c2dWlpK0p0bEJQeGZEcldMN3hINm5jOTJCWmV6MWhyV +FVDVS9KQ3hwWUtUQmM3d1RVLzBVNGZISCsxVG0wWmVlNTlYOUNGQ0g2b2Z0NGlYQWZXZGprUXdZTzE0c +zRHbGJKaEx0aWZNc3ZSTC9FdU10eHhadDA1c3NZdFlaNmZGQWF0VzUzVWxRQllhTFYxdmQyQTBLekRRM +jhrdDB5M0RnWWJQM3NMSVhBQ2RkS1l2WWJPV3lTNlNWOEwrSGxHdElTMmhoZ2FPYUhQN0lVOEpDZmVwY +0JLWndPRjVidU4rQzM3V29lcXBuaFFGdEdQZGxZZUFyWjFIZkVXVnZpT0NzTkhjV2drRzJCVStIOHVRb +0xLMGJvTTN5Z2ZYV0ZMY2NtY1dCVGkra0M='; public $sRequirements = ''; public $sBaseValue = ''; + public $sMinModCfgVersion = '4.4.0.0'; + protected $_aUpdateMethods = array( array('check' => 'checkUsersOnlineTableExist', 'do' => 'updateUsersOnlineTableExist'), + array('check' => 'checkUsersOnlineTableEngine', + 'do' => 'updateUsersOnlineTableEngine'), array('check' => 'checkRenameFields', 'do' => 'fixRenameFields'), array('check' => 'checkDeleteFields', @@ -89,6 +93,16 @@ DQ9'; 'sExtra' => '', 'blMultilang' => false, ), + 'OXPAGE' => array( + 'sTableName' => 'd3usersonline', + 'sFieldName' => 'OXPAGE', + 'sType' => 'VARCHAR(32)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), ); public $aIndizes = array( @@ -107,6 +121,23 @@ DQ9'; 'OXCLASS' => 'OXCLASS', ), ), + 'CLASSPAGE' => array( + 'sTableName' => 'd3usersonline', + 'sType' => '', + 'sName' => 'CLASSPAGE', + 'aFields' => array( + 'OXCLASS' => 'OXCLASS', + 'OXPAGE' => 'OXPAGE', + ), + ), + 'TIMEVISIT' => array( + 'sTableName' => 'd3usersonline', + 'sType' => '', + 'sName' => 'TIMEVISIT', + 'aFields' => array( + 'TIMEVISIT' => 'TIMEVISIT', + ), + ), ); public $aRenameFields = array( @@ -162,12 +193,39 @@ DQ9'; $blRet = true; if ($this->checkUsersOnlineTableExist()) { - $blRet = $this->_addTable2('d3usersonline', $this->aFields, $this->aIndizes, 'users online', 'MyISAM'); + $blRet = $this->_addTable2('d3usersonline', $this->aFields, $this->aIndizes, 'users online', 'InnoDB'); } return $blRet; } + /** + * @return bool true, if table has wrong engine + */ + public function checkUsersOnlineTableEngine() + { + /** @var d3installdbtable $oDbTable */ + $oDbTable = oxNew('d3installdbtable', $this); + $aData = $oDbTable->getTableData('d3usersonline'); + + if (isset($aData) && count($aData) && isset($aData['ENGINE']) && $aData['ENGINE'] == 'InnoDB') { + return false; + } + + return true; + } + + /** + * @return bool + */ + public function updateUsersOnlineTableEngine() + { + /** @var d3installdbtable $oDbTable */ + $oDbTable = oxNew('d3installdbtable', $this); + $blRet = $oDbTable->changeTableEngine('d3usersonline', 'InnoDB'); + return $blRet; + } + /** * @return bool */ diff --git a/copy_this/modules/d3/d3usersonline/views/admin/de/d3usersonline_lang.php b/copy_this/modules/d3/d3usersonline/views/admin/de/d3usersonline_lang.php index f67ea15..e45bb8c 100644 --- a/copy_this/modules/d3/d3usersonline/views/admin/de/d3usersonline_lang.php +++ b/copy_this/modules/d3/d3usersonline/views/admin/de/d3usersonline_lang.php @@ -25,14 +25,24 @@ $iLangNr = 0; $aLang = array( 'charset' => 'ISO-8859-15', - 'd3mxusersonline' => 'Benutzer online', + 'd3mxusersonline' => ' Benutzer online', 'd3mxusersonline_settings' => 'Einstellungen', 'd3tbclussersonline_settings_main' => 'Grundeinstellungen', 'd3mxusersonline_analysis' => 'Auswertungen', 'd3tbclusersonline_currvisitors' => 'aktuelle Besucher', 'D3USERSONLINE_NOTACTIVE' => 'Modul ist nicht aktiv', + 'D3_USERSONLINE_GROUPBYCLASS' => 'Besuche nur nach Shopseiten gruppieren', 'D3_USERSONLINE_USERSONLINE' => 'Benutzer online', 'D3_USERSONLINE_USER' => 'Benutzer', 'D3_USERSONLINE_USERS' => 'Benutzer', 'D3_USERSONLINE_ALL' => 'gesamt', + 'D3_USERSONLINE_SAVE' => 'Speichern', + 'D3_USERSONLINE_CLASS_ALIST' => 'Artikelliste aus Kategorie', + 'D3_USERSONLINE_CLASS_MANUFACTURERLIST' => 'Artikelliste aus Hersteller', + 'D3_USERSONLINE_CLASS_VENDORLIST' => 'Artikelliste aus Lieferant', + 'D3_USERSONLINE_CLASS_CONTENT' => 'Informationstext', + 'D3_USERSONLINE_CLASS_OXWARTICLEDETAILS' => 'Detailseite', + 'D3_USERSONLINE_CLASS_DETAILS' => 'Detailseite', + 'D3_USERSONLINE_CLASS_START' => 'Startseite', + 'D3_USERSONLINE_CLASS_TAGS' => 'Stichwort', ); diff --git a/copy_this/modules/d3/d3usersonline/views/admin/en/d3usersonline_lang.php b/copy_this/modules/d3/d3usersonline/views/admin/en/d3usersonline_lang.php index a5a3c60..abbdbb5 100644 --- a/copy_this/modules/d3/d3usersonline/views/admin/en/d3usersonline_lang.php +++ b/copy_this/modules/d3/d3usersonline/views/admin/en/d3usersonline_lang.php @@ -25,14 +25,24 @@ $iLangNr = 0; $aLang = array( 'charset' => 'ISO-8859-15', - 'd3mxusersonline' => 'Users Online', + 'd3mxusersonline' => ' Users online', 'd3mxusersonline_settings' => 'Settings', 'd3tbclussersonline_settings_main' => 'Main Settings', 'd3mxusersonline_analysis' => 'Analysis', 'd3tbclusersonline_currvisitors' => 'current visitors', 'D3USERSONLINE_NOTACTIVE' => "Module isn't active", + 'D3_USERSONLINE_GROUPBYCLASS' => 'group visitors by shop pages only', 'D3_USERSONLINE_USERSONLINE' => 'Users online', 'D3_USERSONLINE_USER' => 'user', 'D3_USERSONLINE_USERS' => 'users', 'D3_USERSONLINE_ALL' => 'all', + 'D3_USERSONLINE_SAVE' => 'save', + 'D3_USERSONLINE_CLASS_ALIST' => 'article list from category', + 'D3_USERSONLINE_CLASS_MANUFACTURERLIST' => 'article list from manufacturer', + 'D3_USERSONLINE_CLASS_VENDORLIST' => 'article list from vendor', + 'D3_USERSONLINE_CLASS_CONTENT' => 'information text', + 'D3_USERSONLINE_CLASS_OXWARTICLEDETAILS' => 'details page', + 'D3_USERSONLINE_CLASS_DETAILS' => 'details page', + 'D3_USERSONLINE_CLASS_START' => 'start page', + 'D3_USERSONLINE_CLASS_TAGS' => 'tag', ); diff --git a/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl b/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl index 3574879..2c23747 100644 --- a/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl +++ b/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_cfg_usersonline_main.tpl @@ -128,7 +128,7 @@
- +

@@ -142,13 +142,3 @@ [{include file="d3_cfg_mod_inc.tpl"}] - - \ No newline at end of file diff --git a/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl b/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl index ac39bfa..ca46114 100644 --- a/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl +++ b/copy_this/modules/d3/d3usersonline/views/admin/tpl/d3_usersonline_statistic.tpl @@ -39,6 +39,10 @@ - - - - - - - - + +
+ + + + + + +
EOT; echo "

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

'; echo '

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

' . PHP_EOL; @@ -777,6 +923,14 @@ EOT; $sScriptName = $_SERVER['SCRIPT_NAME']; $sTranslShopPhpInfo = $this->translate('showPhpInfo'); $sTranslDependent = $this->translate('dependentoffurther'); + + if (count($this->oBase->getMessages())) { + echo ''; + } if ($this->oBase->blGlobalResult) { echo '

' . $this->translate('globalSuccess') . '' . @@ -806,6 +960,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 @@ -814,12 +991,19 @@ EOT; */ public function getNoSuccessItem($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) . $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . - "
" . PHP_EOL; + '
' . PHP_EOL; $this->getSubDirItems($aResult, $sElementId); } @@ -832,12 +1016,19 @@ 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) . $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . - "
" . PHP_EOL; + '
' . PHP_EOL; $this->getSubDirItems($aResult, $sElementId); } @@ -850,12 +1041,19 @@ EOT; */ public function getUnknownItem($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) . $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . - "
" . PHP_EOL; + '
' . PHP_EOL; $this->getSubDirItems($aResult, $sElementId); } @@ -866,11 +1064,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; + '
' . PHP_EOL; } /** @@ -880,20 +1078,33 @@ EOT; public function getSubDirItems($aResult, $sElementId) { if (is_array($aResult) && count($aResult)) { - echo "' . PHP_EOL; } } @@ -929,6 +1140,7 @@ EOT; protected function _addDescBox($sTextIdent, $aConfiguration) { $sContent = "
?". + "
". "
".$this->translate($sTextIdent, $aConfiguration)."
". "
"; @@ -1116,7 +1328,7 @@ class requTranslations '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 nicht prüfbar', + '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 '. @@ -1125,12 +1337,14 @@ class requTranslations '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.
'. + '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".'. - '
', + '
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.
'. @@ -1138,24 +1352,28 @@ class requTranslations '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.
'. + '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".'. - '
', + '
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.
'. + '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".'. - '
', + '
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 '. @@ -1166,8 +1384,35 @@ class requTranslations '
Ü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".'. - '
', + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinCurlVersion' => 'mindestens cURL Version %1$s', + 'hasMinCurlVersion_DESC' => '
Das Modul benötigt cURL ab der Version %1$s.
'. + '
cURL ist in '. + 'passender Version installiert.
'. + '
cURL ist nicht oder in einer '. + 'älteren Version installiert. Fragen Sie Ihren Serverprovider nach einer passenden '. + 'cURL-Version.
'. + '
Ü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.
', + 'hasMinOpenSSLVersion' => 'mindestens OpenSSL Version %1$s', + 'hasMinOpenSSLVersion_DESC' => '
Das Modul benötigt OpenSSL ab der Version %1$s.
'. + '
OpenSSL ist in '. + 'passender Version installiert.
'. + '
OpenSSL ist nicht oder in '. + 'einer älteren Version installiert. Fragen Sie Ihren Serverprovider nach einer passenden '. + 'OpenSSL-Version.
'. + '
Ü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 '. @@ -1175,16 +1420,16 @@ class requTranslations '
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 wenden Sie sich bitte an '. + '
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.
'. - '
Das Modul kann in dieser '. - 'Version der Shopsoftware nicht installiert werden. Fragen Sie nach einer aktuelleren '. + '
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 wenden Sie sich bitte an '. + '', 'hasMinModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") mindestens in Version %3$s', 'hasMinModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" mindestens in '. @@ -1194,7 +1439,7 @@ class requTranslations '
Die Zusatzsoftware ist '. 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. - '
Bei Fragen wenden Sie sich bitte an '. + '', 'hasMaxModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") maximal in Version %3$s', 'hasMaxModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" höchstens '. @@ -1204,7 +1449,7 @@ class requTranslations '
Die Zusatzsoftware ist '. 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. - '
Bei Fragen wenden Sie sich bitte an '. + '', 'requireNewLicence' => 'bisheriger Lizenzschlüssel kann verwendet werden', 'requireNewLicence_DESC' => '
Diese Prüfung versucht zu ermitteln, ob Sie für den '. @@ -1230,7 +1475,7 @@ class requTranslations '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 wenden Sie sich bitte an '. + '', 'isShopEdition' => 'ist Shopedition %1$s', 'isShopEdition_DESC' => '
Das Modul erfordert eine dieser Shopeditionen: %1$s
'. @@ -1239,39 +1484,67 @@ class requTranslations '
Das Modul kann in Ihrer '. 'Shopedition nicht ausgeführt werden. Bitte fragen Sie nach einer Modulversion für Ihre '. 'Shopedition.
'. - '
Bei Fragen wenden Sie sich bitte an '. + '', 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) oder Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. - 'installiert', + 'installiert (auf passendes Zend-Installationspaket achten!)', 'hasZendLoaderOptimizer_DESC' => '
Das Modul erfordert (je nach PHP-Version) den Zend Optimizer '. - 'bzw. den Zend Guard Loader.
'. + 'bzw. den Zend Guard Loader. Achten Sie darauf, ein für den verfügbaren Decoder '. + 'erstelltes Installationspaket zu verwenden.
'. '
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".'. - '
', - 'hasIonCubeLoader' => 'ionCube Loader installiert', - 'hasIonCubeLoader_DESC' => '
Das Modul erfordert den IonCube Loader.
'. + '
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 (auf passendes ionCube-Installationspaket achten!)', + 'hasIonCubeLoader_DESC' => '
Das Modul erfordert den ionCube Loader. Achten Sie darauf, ein '. + 'für den verfügbaren Decoder erstelltes Installationspaket zu verwenden.
'. '
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.
'. + '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".'. - '
', + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasIonCubeOrZendLoader' => 'ionCube Loader oder Zend Optimizer / Guard Loader installiert '. + '(%1$s)', + 'hasIonCubeOrZendLoader_DESC' => '
Das Modul erfordert den ionCube Loader oder den Zend '. + 'Optimizer / Guard Loader. Achten Sie darauf, ein für die verfügbaren Decoder erstelltes '. + 'Installationspaket zu verwenden (%1$s).
'. + '
Ein passender Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Ein passender Decoder ist '. + 'auf Ihrem Server installiert. Es ist jedoch ein Abbruchgrund festgestellt worden, der zu Fehlern '. + 'führen kann. Details entnehmen Sie bitte den folgenden Hinweisen.
'. + '
Das Modul kann ohne einen '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des ionCube Loaders oder des Zend Optimizers / Guard Loaders.
'. + '%2$s'. + '
Ü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 oder ist nicht '. + 'prüfbar, 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 '. - 'markierten Bedingungen.

', + '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.', @@ -1284,6 +1557,20 @@ class requTranslations 'unableDeleteFile' => 'Datei konnte nicht gelöscht werden. Bitte löschen Sie diese '. 'manuell.', 'goodBye' => 'Auf Wiedersehen.', + 'unableExecuteDirectoryIterator' => 'Es können nicht alle Unterverzeichnisse auf weitere Prüfungen '. + 'kontrolliert werden. (%1$s)', + 'availableDecoder' => 'verfügbar: %1$s - auf passendes Installationspaket achten!', + 'noDecoderAvailable' => 'kein verwendbarer Decoder verfügbar', + 'availableDecoder_hasZendLoaderOptimizer' => 'Zend Guard Loader / Optimizer', + 'notAvailableDecoder_hasZendLoaderOptimizer' => '
  • Der Zend Guard Loader / Optimizer ist nicht '. + 'installiert.
  • ', + 'decoderIssue_hasZendLoaderOptimizer' => '
  • Der Zend-Decoder ist '. + 'auf Ihrem Server installiert. Es ist jedoch eine zusätzliche Erweiterungen (Zend OPcache) '. + 'installiert, die im Zusammenspiel mit dem Zend-Decoder Fehler verursachen kann.
  • ', + 'availableDecoder_hasIonCubeLoader' => 'ionCube Loader', + 'notAvailableDecoder_hasIonCubeLoader' => '
  • Der ionCube Loader ist nicht installiert.
  • ', + 'decoderIssue_hasIonCubeLoader' => '
  • Es wurde ein nicht definierter Abbruchgrund bei der '. + 'Verwendung des ionCube-Decoders festgestellt.
  • ', ), 'en' => array( 'RequCheck' => 'Requirement check', @@ -1291,116 +1578,193 @@ class requTranslations 'case only checks can executed succesfully.', 'RequSucc' => 'condition is fulfilled', 'RequNotSucc' => 'condition isn\'t fulfilled', - 'RequUnknown' => 'condition isn\'t checkable', + 'RequUnknown' => 'condition unclear, see notes in help text', 'RequNotCheckable' => 'condition isn\'t checkable', 'hasMinPhpVersion' => 'at least PHP version %1$s', - 'hasMinPhpVersion_DESC' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 requires 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 requires 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'=> '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 requires 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 requires 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.
    ', + 'hasMinCurlVersion' => 'at least cURL version %1$s', + 'hasMinCurlVersion_DESC' => '
    The module requires at least cURL version %1$s.
    '. + '
    cURL is available '. + 'in a compatible version.
    '. + '
    cURL is not installed or '. + 'installed in an older version. Ask your server provider for an appropriate version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires 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.
    ', + 'hasMinOpenSSLVersion' => 'at least OpenSSL version %1$s', + 'hasMinOpenSSLVersion_DESC' => '
    The module requires at least OpenSSL version %1$s.
    '. + '
    OpenSSL is availabe '. + 'in a compatible version.
    '. + '
    OpenSSL is not installed or '. + 'installed in an older version. Ask your server provider for an appropriate version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + 'hasMinShopVersion_DESC' => '
    The module is released to shop version %1$s
    '. + '
    The shop software is installed '. + 'in a compatible 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', - 'hasMinModCfgVersion' => '%2$s (ModCfg item "%1$s") has at least version %3$s', - 'hasMinModCfgVersion_DESC' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', - 'hasMaxModCfgVersion' => '%2$s (ModCfg item "%1$s") has not more than version %3$s', - 'hasMaxModCfgVersion_DESC' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + 'hasMaxShopVersion_DESC' => '
    The module is released to shop version %1$s
    '. + '
    The shop software is installed '. + 'in a compatible 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 compatible version.
    '. + '
    The additional software is '. + 'not 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 compatible 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 compatible 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', - 'hasModCfg_DESC' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. 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' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', - 'hasIonCubeLoader' => 'ionCube loader installed', - 'hasonCubeLoader_DESC' => '
    requirement check result
    '. - '
    This requirement is '. - 'fulfilled.
    '. - '
    This requirement isn\'t '. - 'fulfilled. The module can\'t installed or executed.
    '. - '
    The [+] button show details for all tested directories. If you have any questions, please '. - 'contact us at support@shopmodule.com.
    ', + '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 (pay attention to the compatible Zend installation package!)', + '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 requires 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 (pay attention to the compatible ionCube installation package!)', + '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 requires 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.
    ', + 'hasIonCubeOrZendLoader' => 'ionCube Loader or Zend Optimizer / Guard Loader installed '. + '(%1$s)', + 'hasIonCubeOrZendLoader_DESC' => '
    The module requires the ionCube Loader or the Zend '. + 'Optimizer / Guard Loader. Pay attention to use a compatible installation package (%1$s).
    '. + '
    One of the appropriate '. + 'decoders is installed on your server.
    '. + '
    One of the appropriate '. + 'decoder is installed on your server. An undefined abort reason has been found, which can cause '. + 'to errors. For details, please refer to the following notes.
    '. + '
    None of the decoders is '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
    '. + '%2$s'. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires 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 or isn\'t '. + 'callable, 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 marked '. + '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.', @@ -1412,6 +1776,19 @@ class requTranslations 'toggleswitch' => 'click for details', 'unableDeleteFile' => 'Unable to delete file. Please delete it manually.', 'goodBye' => 'Good Bye.', + 'unableExecuteDirectoryIterator' => 'Unable to check subdirectories for further checks. (%1$s)', + 'availableDecoder' => 'available: %1$s - pay attention to the compatible installation package!', + 'noDecoderAvailable' => 'no usable decoder available', + 'availableDecoder_hasZendLoaderOptimizer' => 'Zend Guard Loader / Optimizer', + 'notAvailableDecoder_hasZendLoaderOptimizer' => '
  • Zend Guard Loader / Optimizer isn\'t '. + 'available.
  • ', + 'decoderIssue_hasZendLoaderOptimizer' => '
  • The Zend decoder is '. + 'installed on your server. There is an additional installed extension (Zend OPcache), '. + 'which can cause errors in combination with the decoder.
  • ', + 'availableDecoder_hasIonCubeLoader' => 'ionCube Loader', + 'notAvailableDecoder_hasIonCubeLoader' => '
  • ionCube Loader isn\'t available.
  • ', + 'decoderIssue_hasIonCubeLoader' => '
  • An undefined abort reason has been found when using the '. + 'ionCube decoder.
  • ', ), ); } @@ -1657,7 +2034,7 @@ class requTests */ public function hasMinPhpVersion(&$aConfiguration) { - $aResult[$this->getBasePath()] = false; + $aResult = array($this->getBasePath() => false); if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '>=')) { $aResult[$this->getBasePath()] = true; @@ -1675,7 +2052,7 @@ class requTests */ public function hasFromToPhpVersion(&$aConfiguration) { - $aResult[$this->getBasePath()] = false; + $aResult = array($this->getBasePath() => false); if ((version_compare(phpversion(), $aConfiguration['aParams']['from'], '>=')) && (version_compare(phpversion(), $aConfiguration['aParams']['to'], '<')) @@ -1695,7 +2072,7 @@ class requTests */ public function hasMaxPhpVersion(&$aConfiguration) { - $aResult[$this->getBasePath()] = false; + $aResult = array($this->getBasePath() => false); if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '<=')) { $aResult[$this->getBasePath()] = true; @@ -1713,7 +2090,7 @@ class requTests */ public function hasExtension(&$aConfiguration) { - $aResult[$this->getBasePath()] = false; + $aResult = array($this->getBasePath() => false); if (extension_loaded($aConfiguration['aParams']['type'])) { $aResult[$this->getBasePath()] = true; @@ -1724,6 +2101,69 @@ class requTests return $aResult; } + /** + * @param $aConfiguration + * @return array + */ + public function hasMinCurlVersion(&$aConfiguration) + { + $aCurlVersion = curl_version(); + $aResult = array( + $this->getBasePath() => version_compare($aCurlVersion['version'], $aConfiguration['aParams']['version'], '>=') + ); + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * @return array + */ + public function hasMinOpenSSLVersion(&$aConfiguration) + { + $aResult = array( + $this->getBasePath() => version_compare($this->get_openssl_version_number(true), $aConfiguration['aParams']['version'], '>=') + ); + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param bool $patch_as_number + * @param null $openssl_version_number + * @return bool|string + */ + protected function get_openssl_version_number($patch_as_number=false,$openssl_version_number=null) { + if (is_null($openssl_version_number)) $openssl_version_number = OPENSSL_VERSION_NUMBER; + $openssl_numeric_identifier = str_pad((string)dechex($openssl_version_number),8,'0',STR_PAD_LEFT); + + $openssl_version_parsed = array(); + $preg = '/(?[[:xdigit:]])(?[[:xdigit:]][[:xdigit:]])(?[[:xdigit:]][[:xdigit:]])'; + $preg.= '(?[[:xdigit:]][[:xdigit:]])(?[[:xdigit:]])/'; + preg_match_all($preg, $openssl_numeric_identifier, $openssl_version_parsed); + $openssl_version = false; + if (!empty($openssl_version_parsed)) { + $alphabet = array(1=>'a',2=>'b',3=>'c',4=>'d',5=>'e',6=>'f',7=>'g',8=>'h',9=>'i',10=>'j',11=>'k', + 12=>'l',13=>'m',14=>'n',15=>'o',16=>'p',17=>'q',18=>'r',19=>'s',20=>'t',21=>'u', + 22=>'v',23=>'w',24=>'x',25=>'y',26=>'z'); + $openssl_version = intval($openssl_version_parsed['major'][0]).'.'; + $openssl_version.= intval($openssl_version_parsed['minor'][0]).'.'; + $openssl_version.= intval($openssl_version_parsed['fix'][0]); + $patchlevel_dec = hexdec($openssl_version_parsed['patch'][0]); + if (!$patch_as_number && array_key_exists($patchlevel_dec, $alphabet)) { + $openssl_version.= $alphabet[$patchlevel_dec]; // ideal for text comparison + } + else { + $openssl_version.= '.'.$patchlevel_dec; // ideal for version_compare + } + } + return $openssl_version; + } + /** * @param $aConfiguration * @@ -1734,8 +2174,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); @@ -1770,8 +2210,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); @@ -1833,8 +2273,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; } @@ -1850,11 +2290,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; } } @@ -1879,14 +2319,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); @@ -1909,14 +2350,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); @@ -1938,17 +2380,16 @@ class requTests oxmodid = '" . $this->oConfig->sModId . "' 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); - if (isset($aResult) - && is_array($aResult) - && count($aResult) - && isset($aResult['oxversion']) - && $aConfiguration['aParams']['checkVersion'] + if (isset($oResult) + && is_object($oResult) + && isset($oResult->oxversion) + && isset($aConfiguration['aParams']['checkVersion']) ) { $sInstalledVersion = $this->_getConvertedVersion( - $aResult['oxversion'], + $oResult->oxversion, $aConfiguration['aParams']['remainingDigits'] ); $sNewVersion = $this->_getConvertedVersion( @@ -1980,23 +2421,31 @@ class requTests /** * @return array */ - public function hasZendLoaderOptimizer() + public function hasZendLoaderOptimizer(&$aConfiguration, $blCheckBasePathOnly = false) { $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.6.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__)); + if ($blCheckBasePathOnly == false) { + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + } return $aResult; } @@ -2004,7 +2453,7 @@ class requTests /** * @return array */ - public function hasIonCubeLoader() + public function hasIonCubeLoader(&$aConfiguration, $blCheckBasePathOnly = false) { $aResult = array($this->getBasePath() => false); @@ -2012,7 +2461,59 @@ class requTests $aResult[$this->getBasePath()] = true; } - $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + if ($blCheckBasePathOnly == false) { + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + } + + return $aResult; + } + + /** + * @return array + */ + public function hasIonCubeOrZendLoader(&$aConfiguration) + { + $oLayout = $this->getBase()->oLayout; + + $aDecoderTexts = array(); + $aDecoderErrorTexts = array(); + foreach (array('hasZendLoaderOptimizer', 'hasIonCubeLoader') as $sDecoderCheck) { + $aReturn = call_user_func_array(array($this, $sDecoderCheck), array($aConfiguration, true)); + if ($aReturn[$this->getBasePath()]) { + $aDecoderTexts[$sDecoderCheck] = $oLayout->translate('availableDecoder_'.$sDecoderCheck); + } elseif ($aReturn[$this->getBasePath()] === null) { + $aDecoderErrorTexts[$sDecoderCheck] = $oLayout->translate('decoderIssue_'.$sDecoderCheck); + } else { + $aDecoderErrorTexts[$sDecoderCheck] = $oLayout->translate('notAvailableDecoder_'.$sDecoderCheck); + } + } + + $sDecoderText = count($aDecoderTexts) ? + sprintf($oLayout->translate('availableDecoder'), implode(' + ', $aDecoderTexts)) : + $oLayout->translate('noDecoderAvailable'); + $aConfiguration['aParams'][1] = $sDecoderText; + + $sDecoderErrorText = count($aDecoderErrorTexts) ? + '
      '.implode('', $aDecoderErrorTexts).'
    ' : + ''; + $aConfiguration['aParams'][2] = $sDecoderErrorText; + + $aZendLoaderResults = $this->hasZendLoaderOptimizer($aConfiguration); + $aIonCubeLoaderResults = $this->hasIonCubeLoader($aConfiguration); + + $aResult = array(); + foreach (array_keys($aZendLoaderResults) as $sPath) { + // transfer meta data + if (strstr($sPath, '@@')) { + $aResult[$sPath] = $aZendLoaderResults[$sPath]; + } elseif ($aIonCubeLoaderResults[$sPath] || $aZendLoaderResults[$sPath]) { + $aResult[$sPath] = true; + } elseif ($aIonCubeLoaderResults[$sPath] === null || $aZendLoaderResults[$sPath] === null) { + $aResult[$sPath] = null; + } else { + $aResult[$sPath] = false; + } + } return $aResult; } @@ -2056,9 +2557,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; } @@ -2104,4 +2606,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 b1e8647..dca5570 100644 --- a/setup+doku/changelog.txt +++ b/setup+doku/changelog.txt @@ -1,3 +1,12 @@ +=> 2.1.0.0 +- Datenbank-Tabelle auf InnoDb geändert +- Tabellenindizes für optimierte Abfragen ergänzt +- Löschabfragen wegen mglw. hoher Datenbanklast begrenzt +- Besuchereinträge wurden um Seitendetails ergänzt +- Auswertung im Backend lässt sich zwischen bisheriger und neuer Gruppierung umschalten +- Auswertung im Frontend entfernt (#6828) +- fehlerhafte Übersetzung korrigiert (#6827) + => 2.0.1.1 - Precheck für PHP 5.5 und 5.6 angepasst