diff --git a/Sources/UsersOnline-Installation.docx b/Sources/UsersOnline-Installation.docx index 13914c7..b3b8428 100644 Binary files a/Sources/UsersOnline-Installation.docx and b/Sources/UsersOnline-Installation.docx differ diff --git a/copy_this/modules/d3/d3usersonline/metadata.php b/copy_this/modules/d3/d3usersonline/metadata.php index 6730929..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/', diff --git a/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php b/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php index d2f8df4..5ba8c80 100644 --- a/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php +++ b/copy_this/modules/d3/d3usersonline/setup/d3usersonline_update.php @@ -22,18 +22,18 @@ 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.3.7.0'; + public $sMinModCfgVersion = '4.4.0.0'; protected $_aUpdateMethods = array( array('check' => 'checkUsersOnlineTableExist', diff --git a/setup+doku/Installation.pdf b/setup+doku/Installation.pdf index 5c22da7..17142da 100644 Binary files a/setup+doku/Installation.pdf and b/setup+doku/Installation.pdf differ diff --git a/setup+doku/Precheck/d3precheck.php b/setup+doku/Precheck/d3precheck.php index 8e75852..79f87fc 100644 --- a/setup+doku/Precheck/d3precheck.php +++ b/setup+doku/Precheck/d3precheck.php @@ -43,7 +43,7 @@ class requConfig public $sModId = 'd3usersonline'; - public $sModVersion = '2.0.1.1'; + public $sModVersion = '2.1.0.0'; /********************** check configuration section ************************/ @@ -68,7 +68,7 @@ class requConfig 'hasFromToPhpVersion' => array( 'blExec' => 1, 'aParams' => array( - 'from' => '5.2.0', + 'from' => '5.3.0', 'to' => '5.6.200', ) ), @@ -83,7 +83,12 @@ class requConfig 'blExec' => 0, ), - // benötigt PHP-Extension (kaskadierbar (siehe "Desc1")) + // benötigt Zend Decoder oder IonCubeLoader + 'hasIonCubeOrZendLoader' => array( + 'blExec' => 1, + ), + + // benötigte PHP-Extension (kaskadierbar (siehe "Desc1")) 'hasExtension' => array( array( 'blExec' => 0, @@ -99,13 +104,29 @@ class requConfig ), ), + // benötigte cURL-Version + 'hasMinCurlVersion' => array( + 'blExec' => 0, + 'aParams' => array( + 'version' => '7.26.0', + ), + ), + + // benötigte OpenSSL-Version (Angabe in Versionsformat) + 'hasMinOpenSSLVersion' => array( + 'blExec' => 0, + 'aParams' => array( + 'version' => '1.0.1.5', + ), + ), + // minimal benötigte Shopversion (editionsgetrennt), wird (sofern möglich) Remote aktualisiert 'hasMinShopVersion' => array( 'blExec' => 1, 'aParams' => array( - 'PE' => '4.7.0', - 'CE' => '4.7.0', - 'EE' => '5.0.0' + 'PE' => '4.9.0', + 'CE' => '4.9.0', + 'EE' => '5.2.0' ), ), @@ -113,9 +134,9 @@ class requConfig 'hasMaxShopVersion' => array( 'blExec' => 1, 'aParams' => array( - 'PE' => '4.9.2', - 'CE' => '4.9.2', - 'EE' => '5.2.2' + 'PE' => '4.10.5', + 'CE' => '4.10.5', + 'EE' => '5.3.5' ), ), @@ -143,7 +164,7 @@ class requConfig 'aParams' => array( 'id' => 'd3modcfg_lib', 'name' => 'Modul-Connector', - 'version' => '4.3.7.0', + 'version' => '4.4.0.0', ), ), ), @@ -155,7 +176,7 @@ class requConfig 'aParams' => array( 'id' => 'd3modcfg_lib', 'name' => 'Modul-Connector', - 'version' => '4.3.1.0', + 'version' => '5.0.0.0', ), ), ), @@ -182,7 +203,7 @@ date_default_timezone_set('Europe/Berlin'); */ class requCheck { - public $sVersion = '4.3'; + public $sVersion = '4.10.2'; protected $_db = false; @@ -202,6 +223,8 @@ class requCheck protected $_sInFolderFileName = 'd3precheckinfolder.php'; + public $sVersionTag = '@@version@@'; + /********************** functional section ************************/ public $blGlobalResult = true; @@ -285,19 +308,41 @@ class requCheck $aIgnoreDirItems = array('.', '..'); $aCheckScripts = array(); - /** @var SplFileInfo $oFileInfo */ - foreach (new RecursiveDirectoryIterator($sFolder) as $oFileInfo) { - if (!in_array($oFileInfo->getFileName(), $aIgnoreDirItems) && $oFileInfo->isDir()) { - $aCheckScripts = array_merge($aCheckScripts, $this->_walkThroughDirs($oFileInfo->getRealPath())); - } elseif ($oFileInfo->isFile()) { - if (strtolower($oFileInfo->getFilename()) == $this->_sInFolderFileName) { - $aCheckScripts[] = str_replace('\\', '/', $oFileInfo->getRealPath()); + try { + /** @var SplFileInfo $oFileInfo */ + $oIterator = new RecursiveDirectoryIterator($sFolder); + + foreach ($oIterator as $oFileInfo) { + if (in_array($oFileInfo->getFileName(), $aIgnoreDirItems)) { + continue; + } + if ($oFileInfo->isDir()) { + $aCheckScripts = array_merge($aCheckScripts, $this->_walkThroughDirs($oFileInfo->getRealPath())); + } elseif ($oFileInfo->isFile()) { + if (strtolower($oFileInfo->getFilename()) == $this->_sInFolderFileName) { + $aCheckScripts[] = str_replace('\\', '/', $oFileInfo->getRealPath()); + } } } + } catch (UnexpectedValueException $oEx) { + sprintf($this->oLayout->translate('unableExecuteDirectoryIterator'), $oEx->getMessage()); + $this->addMessage( + sprintf($this->oLayout->translate('unableExecuteDirectoryIterator'), $oEx->getMessage()) + ); } return $aCheckScripts; } + + public function addMessage($sMessage) + { + $this->aMessages[md5($sMessage)] = $sMessage; + } + + public function getMessages() + { + return $this->aMessages; + } /** * @param $aScriptList @@ -317,15 +362,26 @@ class requCheck $aArguments ); + $sVersionUrl = $this->_getFolderCheckUrl( + $sScriptPath, + 'getVersion', + array() + ); + $sContent = serialize(null); + $sVersion = serialize(null); if ($this->_hasCurl()) { $sContent = $this->_getContentByCurl($sUrl); + $sVersion = $this->_getContentByCurl($sVersionUrl); } elseif ($this->_hasAllowUrlFopen()) { $sContent = file_get_contents($sUrl); + $sVersion = file_get_contents($sVersionUrl); } - $aReturn[$this->getBasePath($sScriptPath)] = unserialize($sContent); + $sBasePath = $this->getBasePath($sScriptPath); + $aReturn[$sBasePath] = unserialize($sContent); + $aReturn[$this->sVersionTag][$sBasePath] = unserialize($sVersion); } return $aReturn; @@ -362,15 +418,17 @@ class requCheck */ protected function _getContentByCurl($sUrl) { + $iTimeOut = 5; $ch = curl_init(); $sCurl_URL = preg_replace('@^((http|https)://)@', '', $sUrl); + curl_setopt($ch, CURLOPT_URL, $sCurl_URL); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); - curl_setopt($ch, CURLOPT_TIMEOUT, 5); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $iTimeOut); + curl_setopt($ch, CURLOPT_TIMEOUT, $iTimeOut); curl_setopt($ch, CURLOPT_POST, 0); $sContent = curl_exec($ch); curl_close($ch); @@ -431,14 +489,22 @@ class requCheck } /** - * @param $aResult + * @return string + */ + public function getVersion() + { + return $this->sVersion; + } + + /** + * @param $mResult * * @return bool */ - protected function _hasFalseInResult($aResult) + protected function _hasFalseInResult($mResult) { - if (is_array($aResult)) { - foreach ($aResult as $blResult) { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { if (false === $blResult) { $this->blGlobalResult = false; @@ -449,22 +515,24 @@ class requCheck return false; } - if (false === $aResult) { + if (false === $mResult) { $this->blGlobalResult = false; + + return true; } - return !$aResult; + return false; } /** - * @param $aResult + * @param $mResult * * @return bool */ - protected function _hasNullInResult($aResult) + protected function _hasNullInResult($mResult) { - if (is_array($aResult)) { - foreach ($aResult as $blResult) { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { if ($blResult === null) { $this->blGlobalResult = false; @@ -475,22 +543,23 @@ class requCheck return false; } - if ($aResult === null) { + if ($mResult === null) { $this->blGlobalResult = false; + return true; } - return !$aResult; + return false; } /** - * @param $aResult + * @param $mResult * * @return bool */ - protected function _hasNoticeInResult($aResult) + protected function _hasNoticeInResult($mResult) { - if (is_array($aResult)) { - foreach ($aResult as $blResult) { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { if ($blResult === 'notice') { return true; } @@ -499,7 +568,7 @@ class requCheck return false; } - if ($aResult === 'notice') { + if ($mResult === 'notice') { return true; } @@ -538,8 +607,8 @@ class requCheck if (!$this->_db) { if (file_exists('config.inc.php')) { require_once('config.inc.php'); - $this->_db = mysql_connect($this->dbHost, $this->dbUser, $this->dbPwd); - mysql_select_db($this->dbName, $this->_db); + ini_set('error_reporting', E_ALL^E_NOTICE); + $this->_db = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName); } } @@ -627,7 +696,6 @@ class requCheck { $sGenCheckType = preg_replace("@(\_[0-9]$)@", "", $sCheckType); $oTests = new requTests($this, $this->oConfig, $this->getDb(), $this->oRemote); - if (method_exists($oTests, $sGenCheckType)) { $this->_checkResult($oTests, $sGenCheckType, $sCheckType, $aConfiguration); } else { @@ -644,17 +712,17 @@ class requCheck */ protected function _checkResult($oTests, $sGenCheckType, $sCheckType, $aConfiguration) { - $aResult = $oTests->{$sGenCheckType}($aConfiguration); + $mResult = $oTests->{$sGenCheckType}($aConfiguration); $sElementId = (md5($sGenCheckType . serialize($aConfiguration))); - if ($this->_hasNoticeInResult($aResult)) { - $this->oLayout->getUnknownItem($aResult, $sElementId, $sCheckType, $aConfiguration); - } elseif ($this->_hasNullInResult($aResult)) { - $this->oLayout->getUnknownItem($aResult, $sElementId, $sCheckType, $aConfiguration); - } elseif ($this->_hasFalseInResult($aResult)) { - $this->oLayout->getNoSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration); + if ($this->_hasNoticeInResult($mResult)) { + $this->oLayout->getUnknownItem($mResult, $sElementId, $sCheckType, $aConfiguration); + } elseif ($this->_hasNullInResult($mResult)) { + $this->oLayout->getUnknownItem($mResult, $sElementId, $sCheckType, $aConfiguration); + } elseif ($this->_hasFalseInResult($mResult)) { + $this->oLayout->getNoSuccessItem($mResult, $sElementId, $sCheckType, $aConfiguration); } else { - $this->oLayout->getSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration); + $this->oLayout->getSuccessItem($mResult, $sElementId, $sCheckType, $aConfiguration); } } @@ -696,12 +764,27 @@ class requLayout $sTranslRequCheck "$sModName" $sModVersion + - - - - - - - - + +
+ + + + + + +
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