diff --git a/README.md b/README.md new file mode 100644 index 00000000..c06d1c72 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# D³ Auftragsmanager für OXID eShop +Lassen Sie wiederkehrende Aufgaben automatisch nach frei definierbaren Regeln ausführen + +## Systemanforderungen: +- installierter OXID eShop +- PHP-Version, für die Installationspakete verfügbar sind +- Installation via Composer +- ionCubeLoader +- D3 Modul Connector + +Die jeweils geforderten Versionen und sonstige Anforderungen entnehmen Sie bitte der Dokumentation im docs-Verzeichnis dieses Paketes. + +## Installation: + +Verwenden Sie zur Installation bitte immer unser Quellenverzeichnis unter https://satis.oxidmodule.com. +Eine detaillierte Installationsanleitung finden Sie im docs-Verzeichnis dieses Pakets. \ No newline at end of file diff --git a/docs/Installation.pdf b/docs/Installation.pdf index e0eb8e4d..39091f9e 100644 Binary files a/docs/Installation.pdf and b/docs/Installation.pdf differ diff --git a/docs/Precheck/d3precheck.php b/docs/Precheck/d3precheck.php index d751cff5..f21c7d76 100644 --- a/docs/Precheck/d3precheck.php +++ b/docs/Precheck/d3precheck.php @@ -1,1213 +1,2609 @@ -1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); -?> -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 -/nKR46rTqK03i/IGiTXq8vO= \ No newline at end of file + + * @link http://www.oxidmodule.com + */ + +/** + * Alle Anforderungen sind über $this->_aCheck konfigurierbar. Manche Anforderungen haben dazu noch weitergehende + * Informationen. Die Struktur dieser Requirementbeschreibungen: + * + * array( + * 'blExec' => 1, // obligatorisch: 0 = keine Prüfung, 1 = Püfung wird ausgeführt + * 'aParams' => array(...), // optional, Inhalt ist von jeweiliger Prüfung abhängig + * ) + * + * "Desc1": Diese Struktur kann allein eine Bedingung beschreiben. Wenn mehrere dieser Bedingungen + * nötig sind (z.B. bei unterschiedlichen Bibliotheksanforderungen), kann diese Struktur als + * Arrayelemente auch mehrfach genannt werden (kaskadierbar). Grundsätzlich sind alle Requirements + * kaskadierbar, jedoch ergibt dies nicht bei allen Sinn. :) Eine Kaskadierung sieht so aus: + * + * array( + * array( + * 'blExec' => 1, + * ... + * ), + * array( + * 'blExec' => 1, + * ... + * ) + * ) + * + * Unbedingt zu vermeiden sind Änderungen in der Scriptlogik, da diese bei Updates nur schwer zu übernehmen sind. + */ + +class requConfig +{ + public $sModName = 'D³ Auftragsmanager / Order Manager'; + + public $sModId = 'd3ordermanager'; + + public $sModVersion = '3.0.0.0'; + + /********************** check configuration section ************************/ + + public $aCheck = array( + // kleinste erlaubte PHP-Version + 'hasMinPhpVersion' => array( + 'blExec' => 0, + 'aParams' => array( + 'version' => '5.6.0' + ) + ), + + // größte erlaubte PHP-Version + 'hasMaxPhpVersion' => array( + 'blExec' => 0, + 'aParams' => array( + 'version' => '5.6.200' + ) + ), + + // PHP-Version zwischen 'from' und 'to' + 'hasFromToPhpVersion' => array( + 'blExec' => 1, + 'aParams' => array( + 'from' => '5.6.0', + 'to' => '7.0.200', + ) + ), + + // benötigt Zend Optimizer (PHP 5.2) bzw. Zend Guard Loader (> PHP 5.2) + 'hasZendLoaderOptimizer' => array( + 'blExec' => 0, + ), + + // benötigt IonCubeLoader + 'hasIonCubeLoader' => array( + 'blExec' => 1, + ), + + // benötigt Zend Decoder oder IonCubeLoader + 'hasIonCubeOrZendLoader' => array( + 'blExec' => 0, + ), + + // benötigte PHP-Extension (kaskadierbar (siehe "Desc1")) + 'hasExtension' => array( + array( + 'blExec' => 0, + 'aParams' => array( + 'type' => 'curl', + ), + ), + array( + 'blExec' => 0, + 'aParams' => array( + 'type' => 'soap' + ), + ), + ), + + // 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' => '6.0.0', + 'CE' => '6.0.0', + 'EE' => '6.0.0' + ), + ), + + // maximal verwendbare Shopversion (editionsgetrennt), wird (sofern möglich) Remote aktualisiert + 'hasMaxShopVersion' => array( + 'blExec' => 1, + 'aParams' => array( + 'PE' => '6.0.0', + 'CE' => '6.0.0', + 'EE' => '6.0.0' + ), + ), + + // verfügbar für diese Shopeditionen, wird (sofern möglich) Remote aktualisiert + 'isShopEdition' => array( + 'blExec' => 1, + 'aParams' => array( + array( + 'PE', + 'EE', + 'CE', + ), + ), + ), + + // benötigt Modul-Connector + 'hasModCfg' => array( + 'blExec' => 1 + ), + + // benötigt mindestens diese Erweiterungen / Version lt. d3_cfg_mod (kaskadierbar (siehe "Desc1")) + 'hasMinModCfgVersion' => array( + array( + 'blExec' => 1, + 'aParams' => array( + 'id' => 'd3modcfg_lib', + 'name' => 'Modul-Connector', + 'version' => '5.1.0.0', + ), + ), + ), + + // verwendbar bis zu diesen Erweiterungen / Version lt. d3_cfg_mod (kaskadierbar (siehe "Desc1")) + 'hasMaxModCfgVersion' => array( + array( + 'blExec' => 0, + 'aParams' => array( + 'id' => 'd3modcfg_lib', + 'name' => 'Modul-Connector', + 'version' => '5.1.0.0', + ), + ), + ), + + // benötigt neuen Lizenzschlüssel + 'requireNewLicence' => array( + array( + 'blExec' => 1, + 'aParams' => array( + 'checkVersion' => true, // soll Versionsnummer des installierten Moduls gegengeprüft werden? + 'remainingDigits' => 2, // zu prüfende Stellen für neue Lizenz + ), + ), + ), + ); +} + +/********* don't change content from here **********************/ + +date_default_timezone_set('Europe/Berlin'); + +/** + * Class requcheck + */ +class requCheck +{ + public $sVersion = '4.10.2'; + + protected $_db = false; + + public $dbHost; + + public $dbUser; + + public $dbPwd; + + public $dbName; + + /** @var requConfig */ + public $oConfig; + + /** @var requLayout */ + public $oLayout; + + protected $_sInFolderFileName = 'd3precheckinfolder.php'; + + public $sVersionTag = '@@version@@'; + + /********************** functional section ************************/ + + public $blGlobalResult = true; + + /** + * + */ + public function __construct() + { + $this->oConfig = new requConfig(); + $this->oLayout = new requLayout($this, $this->oConfig); + $this->oRemote = new requRemote(); + } + + /** + * @param string $sName + * @param array $aArguments + */ + public function __call ($sName, $aArguments) + { + $this->oLayout->{$sName}($aArguments); + } + + public function startCheck() + { + $this->oLayout->getHTMLHeader(); + + $oCheckTransformation = new requTransformation($this); + $this->oConfig->aCheck = $oCheckTransformation->transformCheckList($this->oConfig->aCheck); + + $this->_runThroughChecks($this->oConfig->aCheck); + + $this->oLayout->getHTMLFooter(); + } + + /** + * traversable requirement check + * + * @param $aCheckList + * @param string $sForceCheckType + */ + protected function _runThroughChecks($aCheckList, $sForceCheckType = '') + { + foreach ($aCheckList as $sCheckType => $aConf) { + if (array_key_exists('blExec', $aConf)) { + if ($aConf['blExec']) { + if (strlen($sForceCheckType)) { + $sCheckType = $sForceCheckType; + } + $this->displayCheck($sCheckType, $aConf); + } + } else { + $this->_runThroughChecks($aConf, $sCheckType); + } + } + } + + /** + * @param $sMethodName + * @param null $aArguments + * + * @return array + */ + public function checkInSubDirs($sMethodName, $aArguments = null) + { + $sFolder = '.'; + + $aCheckScripts = $this->_walkThroughDirs($sFolder); + $aReturn = $this->_checkScripts($aCheckScripts, $sMethodName, $aArguments); + + return $aReturn; + } + + /** + * @param $sFolder + * + * @return array + */ + protected function _walkThroughDirs($sFolder) + { + $aIgnoreDirItems = array('.', '..'); + $aCheckScripts = array(); + + 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 + * @param $sMethodName + * @param $aArguments + * + * @return array + */ + protected function _checkScripts($aScriptList, $sMethodName, $aArguments) + { + $aReturn = array(); + + foreach ($aScriptList as $sScriptPath) { + $sUrl = $this->_getFolderCheckUrl( + $sScriptPath, + $sMethodName, + $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); + } + + $sBasePath = $this->getBasePath($sScriptPath); + $aReturn[$sBasePath] = unserialize($sContent); + $aReturn[$this->sVersionTag][$sBasePath] = unserialize($sVersion); + } + + return $aReturn; + } + + /** + * @return bool + */ + protected function _hasCurl() + { + if (extension_loaded('curl') && function_exists('curl_init')) { + return true; + } + + return false; + } + + /** + * @return bool + */ + protected function _hasAllowUrlFopen() + { + if (ini_get('allow_url_fopen')) { + return true; + } + + return false; + } + + /** + * @param $sUrl + * + * @return bool|mixed + */ + 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, $iTimeOut); + curl_setopt($ch, CURLOPT_TIMEOUT, $iTimeOut); + curl_setopt($ch, CURLOPT_POST, 0); + $sContent = curl_exec($ch); + curl_close($ch); + + if (false == $sContent || + strstr(strtolower($sContent), strtolower('Request Entity Too Large')) || + strstr(strtolower($sContent), strtolower('not allow request data with POST requests')) + ) { + return false; + } + + return $sContent; + } + + /** + * @param $sScriptPath + * @param $sMethodName + * @param $aArguments + * + * @return string + */ + protected function _getFolderCheckUrl($sScriptPath, $sMethodName, $aArguments) + { + $sBaseDir = str_replace( + array(basename($_SERVER['SCRIPT_FILENAME']), '\\'), + array('', '/'), + realpath($_SERVER['SCRIPT_FILENAME']) + ); + $sUrlAdd = str_replace($sBaseDir, '', $sScriptPath); + $sBaseUrl = 'http://' . $_SERVER['HTTP_HOST'] . str_replace( + basename($_SERVER['SCRIPT_NAME']), + '', + $_SERVER['SCRIPT_NAME'] + ); + + $sUrl = $sBaseUrl . $sUrlAdd . '?fnc=' . $sMethodName . '¶ms=' . urlencode(serialize($aArguments)); + + return $sUrl; + } + + /** + * @param null $sFolder + * + * @return mixed + */ + public function getBasePath($sFolder = null) + { + if (!$sFolder) { + $sFolder = $_SERVER['SCRIPT_FILENAME']; + } + + $sScriptFileName = str_replace('\\', '/', realpath($_SERVER['SCRIPT_FILENAME'])); + $sSearch = substr(str_replace(basename($sScriptFileName), '', $sScriptFileName), 0, -1); + + $sFolder = str_replace('\\', '/', realpath($sFolder)); + + return str_replace(array(basename($sFolder), $sSearch), '', $sFolder); + } + + /** + * @return string + */ + public function getVersion() + { + return $this->sVersion; + } + + /** + * @param $mResult + * + * @return bool + */ + protected function _hasFalseInResult($mResult) + { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { + if (false === $blResult) { + $this->blGlobalResult = false; + + return true; + } + } + + return false; + } + + if (false === $mResult) { + $this->blGlobalResult = false; + + return true; + } + + return false; + } + + /** + * @param $mResult + * + * @return bool + */ + protected function _hasNullInResult($mResult) + { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { + if ($blResult === null) { + $this->blGlobalResult = false; + + return true; + } + } + + return false; + } + + if ($mResult === null) { + $this->blGlobalResult = false; + return true; + } + + return false; + } + + /** + * @param $mResult + * + * @return bool + */ + protected function _hasNoticeInResult($mResult) + { + if (is_array($mResult)) { + foreach ($mResult as $blResult) { + if ($blResult === 'notice') { + return true; + } + } + + return false; + } + + if ($mResult === 'notice') { + return true; + } + + return false; + } + + /********************** conversion function section ************************/ + + /** + * @param $mParam + */ + public function aTos(&$mParam) + { + if (is_array($mParam)) { + $mParam = implode($this->oLayout->translate('or'), $mParam); + } + } + + /** + * @return string + */ + public function getLang() + { + if (isset($_REQUEST['lang'])) { + return strtolower($_REQUEST['lang']); + } + + return 'de'; + } + + /** + * @return bool|resource + */ + public function getDb() + { + if (!$this->_db) { + if (file_exists('config.inc.php')) { + require_once('config.inc.php'); + ini_set('error_reporting', E_ALL^E_NOTICE); + $this->_db = mysqli_connect($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName); + } + } + + return $this->_db; + } + + /** + * @param $version + * @param int $iUnsetPart + * + * @return string + */ + public function versionToInt($version, $iUnsetPart = 0) + { + $match = explode('.', $version); + + return sprintf( + '%d%03d%03d%03d', + $this->_getVersionDigit($match[0], $iUnsetPart), + $this->_getVersionDigit($match[1], $iUnsetPart), + $this->_getVersionDigit($match[2], $iUnsetPart), + $this->_getVersionDigit($match[3], $iUnsetPart) + ); + } + + /** + * @param $sMatch + * @param $iUnsetPart + * + * @return int + */ + protected function _getVersionDigit($sMatch, $iUnsetPart) + { + return intval($sMatch !== null ? $sMatch : $iUnsetPart); + } + + /********************** layout function section ************************/ + + public function deleteme() + { + $sFolder = '.'; + + $this->_checkDelFilesInDir($sFolder); + $this->_delFile($_SERVER['SCRIPT_FILENAME']); + + if (is_file($_SERVER['SCRIPT_FILENAME'])) { + exit($this->oLayout->translate('unableDeleteFile')); + } else { + exit($this->oLayout->translate('goodBye')); + } + } + + /** + * @param $sFolder + */ + protected function _checkDelFilesInDir($sFolder) + { + $aIgnoreDirItems = array('.', '..'); + + /** @var SplFileInfo $oFileInfo */ + foreach (new RecursiveDirectoryIterator($sFolder) as $oFileInfo) { + if (!in_array($oFileInfo->getFileName(), $aIgnoreDirItems) && $oFileInfo->isDir()) { + $this->_checkDelFilesInDir($oFileInfo->getRealPath()); + } elseif ($oFileInfo->isFile()) { + if (strtolower($oFileInfo->getFilename()) == $this->_sInFolderFileName) { + $this->_delFile(str_replace('\\', '/', $oFileInfo->getRealPath())); + } + } + } + } + + /** + * @param $sPath + */ + protected function _delFile($sPath) + { + unlink($sPath); + } + + /** + * @param $sCheckType + * @param $aConfiguration + */ + public function displayCheck($sCheckType, &$aConfiguration) + { + $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 { + $this->oLayout->getUncheckableItem($sCheckType, $aConfiguration); + $this->blGlobalResult = false; + } + } + + /** + * @param $oTests + * @param $sGenCheckType + * @param $sCheckType + * @param $aConfiguration + */ + protected function _checkResult($oTests, $sGenCheckType, $sCheckType, $aConfiguration) + { + $mResult = $oTests->{$sGenCheckType}($aConfiguration); + $sElementId = (md5($sGenCheckType . serialize($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($mResult, $sElementId, $sCheckType, $aConfiguration); + } + } + + public function showinfo() + { + phpinfo(); + } +} + +/** + * Class requLayout + */ +class requLayout +{ + public $oBase; + public $oConfig; + + /** + * @param requCheck $oBase + * @param requConfig $oConfig + */ + public function __construct(requCheck $oBase, requConfig $oConfig) + { + $this->oBase = $oBase; + $this->oConfig = $oConfig; + } + + public function getHTMLHeader() + { + $sScriptName = $_SERVER['SCRIPT_NAME']; + $sTranslRequCheck = $this->translate('RequCheck'); + $sModName = $this->oConfig->sModName; + $sModVersion = $this->oConfig->sModVersion; + + echo <<< EOT + + + + + $sTranslRequCheck "$sModName" $sModVersion + + + + + + +
+ + + + + + +
+EOT; + echo "

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

'; + echo '

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

' . PHP_EOL; + + return; + } + + public function getHTMLFooter() + { + $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') . '' . + $this->translate('deleteFile1') . $sScriptName . $this->translate('deleteFile2') . '

'; + } else { + echo '

' . $this->translate('globalNotSuccess') . '' . + $this->translate('deleteFile1') . $sScriptName . $this->translate('deleteFile2') . '

'; + } + + echo <<< EOT + $sTranslDependent
+

+ + + $sTranslShopPhpInfo + + +

+ + + +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 + * @param $sCheckType + * @param $aConfiguration + */ + public function getNoSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getUnknownItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $sCheckType + * @param $aConfiguration + */ + public function getUncheckableItem($sCheckType, $aConfiguration) + { + echo '
' . + $this->translate($sCheckType, $aConfiguration) . ' (' . $this->translate('RequNotCheckable') . ')' . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + } + + /** + * @param $aResult + * @param $sElementId + */ + public function getSubDirItems($aResult, $sElementId) + { + if (is_array($aResult) && count($aResult)) { + echo '' . PHP_EOL; + } + } + + /** + * @param $aResult + * @param $sElementId + * + * @return string + */ + protected function _addToggleScript($aResult, $sElementId) + { + if (is_array($aResult) && count($aResult)) { + $sScript = "
+
"; + } else { + $sScript = ""; + } + + return $sScript; + } + + /** + * @param $sTextIdent + * @param $aConfiguration + * + * @return string + */ + protected function _addDescBox($sTextIdent, $aConfiguration) + { + $sContent = "
?". + "
". + "
".$this->translate($sTextIdent, $aConfiguration)."
". + "
"; + + return $sContent; + } + + /** + * @param $sIdent + * @param array $aConfiguration + * + * @return mixed|string + */ + public function translate($sIdent, $aConfiguration = array()) + { + $sGenIdent = preg_replace("@(\_[0-9]$)@", "", $sIdent); + $oTranslations = new requTranslations(); + $aTransl = $oTranslations->getTranslations(); + + if (isset($aConfiguration['aParams']) && is_array($aConfiguration['aParams'])) { + array_walk($aConfiguration['aParams'], array($this->oBase, 'aTos'), $sIdent); + } + + if (isset($aTransl[$this->oBase->getLang()][$sGenIdent]) + && ($sTranslation = $aTransl[$this->oBase->getLang()][$sGenIdent]) + ) { + if (isset($aConfiguration['aParams'])) { + return vsprintf($sTranslation, $aConfiguration['aParams']); + } else { + return $sTranslation; + } + } else { + return $sGenIdent; + } + } + + public function getPngButton() + { + $sImg = "iVBORw0KGgoAAAANSUhEUgAABDgAAAAWCAYAAAAl+SzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB". + "MpJREFUeNrs3Y1O4zgUhuFY4hbb2ZthRjtczOz0Ght7cZwfQ5u2E4K0a55XiNDUXyWcT+ZwfGyHw+HQvZI6AACAT+J0OgW9AAAAtn". + "A8Hh/JWYSnbkxuvAYeeg0AAAAAAPynuJevOB6P+ZKe6sYvLy96DgAA7M7z87NOAAAAm7iVq8gxRs5p5CTH03Tz758/uzAUc7x+Hy4". + "pf71ex9fDj2leyxLG1vnNELpmdJPqo21a7afy+/MIj/AIj7zVhS/seWPD4zoAAIAtxJhW44+cy/jx/ftw/2kRxDEQSd0Uraah/RKV". + "lLfK+/kDS0T7eieGZnTdA33QfeF+CpFHeIRHeORSF1Lw3I0Nd3UAAACbEhwprscfadnma05wpL7v8v0Sh4QiLimREqWEt7mSmK9xn". + "LlrSBe6fdq02k9D1oxHeIRHeORCFz13Y8NtHQAAwNYER+zX44+q3Zzg6GOcbw6haqhmXG5MvuQPiw3q9mrTaj/xCI/wCI9c13juxo". + "Y/0wEAANxNcPTxbvzxLsHRd7mEo8y+pJIFCWEupy2XMTcSxjKQUMqSl1mb/79urzbN9hOP8AiP8MgV3Zf2vLHhIR0AAMBWcr5iNf6". + "o4owlwdGPCY68hiUsZbRh2DGsWkz7/mUaVl83oxu3R/xwm1b7KfEIj/AIj1zRDfc9d2PDTR0AAMA2hgqOtfijWqOybDKaExzj6pVp". + "zWyYG04zdGn5vByohVC924ou7NSm3X7iER7hER55r/P3w9jw6NgAAADwp+SCjPX442oFR5URWeaY5pKPsmNpmI+SnctN5zKRVnR7t". + "Wm1nwKP8AiP8MiKznM3NqzrAAAANic4zuf1+ONaBce576dQZAhMplPepvWzYdn6vSoBCUNJSCkPaUS3V5tm+4lHeIRHeORS97U9b2". + "x4RAcAALA5wZEPRVmJP1K4ckxsPJ/H9SzjOvpuEc11INP805gtWQ6Ka0gXdmrTaD8NGTMe4REe4ZFrOs/d2HBLBwAAsJHzuV+PP6q". + "JlKqCI3ZdvaZliVGm3MiYKZm3EJuvXera0aW0T5tG+2kKYHmER3iER2pdU8/Pc/+0sQEAAGALec/Q9fjjSgVH358v/zFZJNXy6ukY". + "uFQqREZBK7q0U5tm+4lHeIRHeOSqLnnuxoa7YwMAAMAWzvF8M/64THDEOB+xEsYIJlV7d5R1tdNGHsMnlvW2I63opirrj7Zptp86H". + "uERHuGRS92X9ryx4cGxAQAAYBv5mNi1+OP6HhzDMbEVad5JrKoxrdbfzlFa155urzYt9lPgER7hER658bt47saGVR0AAMA28ikqj8". + "QfVQVH3705ceU1KEm5qmM+0y7N8crwOqY5a5Ja0sWd2jTaTykmHuERHuGRS52/H8aGuzoAAIBtxCGIWok/riU4Yl8EZVOwEpSUG9X". + "62XmRS1w+oV5z24RurzaN9tO0QR6P8AiP8MgbnedubLitAwAA2EqfExo34o+LBMevX7+6b9/+KkFItYZlmI0tP1XBS3UE3LhNeju6". + "vdq02k8dj/AIj/DIhW48W8NzNzbcHBsAAAC2MGypsRJ//P7n9/J/yOFwGO6fTie9BgAAPgvrVAAAwFZuzpgcj8fh+jQGHGm6AQAAs". + "DcmUgAAwFYezFeEfwUYAAoCUXB0RZrTAAAAAElFTkSuQmCC"; + header("Content-type: image/png"); + echo base64_decode($sImg); + exit; + } + + public function getPngLogo() + { + $sImg = "iVBORw0KGgoAAAANSUhEUgAAADMAAAA0CAYAAAAnpACSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE". + "IxJREFUeNq8Wgl4VNXZfu+dLZkkk5BA9kACYQlB2aIga6myuIEtFX+kLW1BJVT/akVrRds+rVqRX2lLRSsal5/nUaCgtmhi8BeaUh". + "Al7EYTIWyGQPZlMsnM3Lnn/865dzJ3biaLVnsfDpk59yzf++3fOSMxxvANPlZqUdQs1FRqXmq+Ac7NpbaI2jxqQ6nZqDVR+z9qr1H". + "71DxB+nfBPHYYSHUCK8fATl+HUZtK7Wpqo1SGeZ0BQCEYFolQETSrhDJ6d4rax9Q+pFa18SQ8HX6aHAcszUUS9T3U0IU1710ASqid". + "dwNuBciMARbSDjcQtDQnnnj7HNYuGvY1gqHnW9RWBBi+f7kT+LwVKG8AjlDj38+0AR1EiJ1kk0XEZFAbO4gQJwOj44F0+m6TsYvWK". + "KKWQOQUvVwFPHCAxNBlZDs1psk30wXsv4XWi8VvqefXXwcYWg6FRPy8racBzsXjjQxtXim4sra5bKCG6X3QCLOR4lxBwGakS1g+Ch". + "hORN5FcttWpSumpCunZADEH5L2iATa71bAaUUW9XzxVcEs4yCq2zD9qaMML1QQXQGdaMmwYW8PM41RQxwvmgu0+yU8Qap7uUMbN59". + "UykUKXF4P0J5hgD4gi5qTjuW6DQkDHehDfMNvLnbgvp/vV7GdpKEGdA5aTMRiAIAQDj6HJHR7rgyHBc+T/a16jaQzNFbYB0FDXa0H". + "C0a+QSrrD82J1qj3G73NQJ6buTT+eppdf+cehuauCCCCLDeDkcwAWM8xjA+T8JcKxp3FKu4oFGLUOZJEpyJNIqKfpP4F/kBI9bLIW". + "UxIErPLvozNFLb5sOmRgwwbj6kaMbIUrjJMJzIIRooAUOpNzwzdAcMX+hfvlFC6UEaCQ8K0N4FGrzbVQuM+InuZNBjruOcLzpL7Ab". + "LSr2LT0lIVG8tpBZnpxDOtwfgX4X2snz5z4y8swaYRfWM2+fhkaS/3gotyqE/RVGnrAgHkz6daQ0D6A8Mlsvm24gDerSYgNhaZiP4". + "avvq4giFCgkdJzZa+MAv442zCQxby9hmgK4C7c+MxZCBgZtJam24tVvBmlS4RhoERaH6nRhpvkg4FKfipKXrj32nPjy+p+NsZ9d4W". + "L16noPvTu/OBuSSt/z1BaUCNoPN2c7phfhJoqbLfk1qVconwEUw3DEm3L1Xq3W0x9Ix0TDLnHTpwzZ5W5MsYP1gCqTSsxN5jFK+KT". + "gbweiW1ChXzhksoXmh7lkx11Vvz8fxsCsaXOsVKI/sD84t3z6pYu5fkaZdCXJUkLSbQd56aWCQz5ZLJ57Juwn3csFV9jaDDCeoEfX". + "+owIbceGmT3qseqmOri44oWjam8vmWoMt4iYJk/Pb5WPdpi/h+vC8wszwKHrpzt08zRE4Ql4LEwqL39httGJckD8in8yleUhs7sfV". + "sG8MFN0PJ2QB2nAp0A/RrXmzrU+VK2YOTrWlXJEmr7y2w4C0ac90wGQ8UWPmwe1+pCCg/GmvZnO7EOovmPZ19gSn8w2E/LraomlRU". + "g6fSmc0lMi1NRopTmjCAeB+UFN80YfQgiUeGoSvzLXMrm9nsxw76sOWYQvmbirxEy3i3j5Vtr1Jqbx1lXbBhtq3wd9Nsi2JteIfmP". + "Per/b53HCKuWZafa2dYuduLD74XtYHo2UKdDeY4c2t1K9s2qsgj7E8I3Kw11AZFEYdXRlOKIZEp4tzsHT4Rdny6vrtINdq8DA76nE". + "BjaygtSaIi4Hu5FhSfU9FFBs6Xeusm+xKyka1PH/LjUJ2KN25w8PlLlhd3bR8WL2Goy4qV4yxxtxd72/laL893pNK0R4/Vq6t/VOL". + "F0Ysqdi6OwndyLb+i/t+ZwXxw127vnBdIMkJXI5kAETwxRcZHy5x8Y/L+8NyyywdKNZBNEfm2kTJON6nYVulHTryMKekyTjWrpGYS". + "8pOtKK9jcJPX4uBHJkhYP8M2nta4Z8Nh/4r9NQG8OM+BeIf0Z+qjZAluPceglBJ5LV62nIeIHxZ3IaDncwUZRMtSJ1dBXn74g2AyP". + "H72Re5LHtS2q707bNLtFRNstGnUe/RtAe96eJ8PWS4Z01IlJJIEslwWzsEMPWequ39P16Wq5gAmJVuQ6LTgIAFqpkienyhhIsWRZW". + "Oskzv87FD28x1IiqHsOd+GkYNkwYxOkmJFYwDnyda2fKrgXLMalkJxs65cGUMZtHw9fS0J2sxtB2oDqG0OaFLpLcOhtaani9WOBrs". + "mEEH5SZoRE5ApRNiHfHOeBA6mdOTpOVH/omGbHz/Q9Wqak+HaDF5sSeRAJMTSmLdPKeWLcq3/s+E6x5of7PTg4fqApgnBPCyo7rJJ". + "9fkQkvLm4z48OSuqkIORdYBPFx33adT2E6XzNS92LLhgLXmnd6sV7D6naA6k3IsrX2xHXlE7xtDfJX/zTP/7aeWVtddEbeK2aJd5c". + "cZQ5w5QUAzgRL1wZe9clWKBhTNS1uOZVU9tJC2ARgzUtNZrn/hBWrWQawOnLLexk2FnpU+P9KrWVL0xHSB9jqINsuPlcP9O72Ta6I". + "GrHXz28rLzCmW8ZOjkEWrIS23/xIuFW9txsFYpXJpnX9alcAdBCkBuKI8YMzpRrFeV5ZIwhNRMeB/VkD2YswlVDX0moLXNCg5fFgy". + "5lq805RSpV1eXakozQh5MW4QhJ0HmBsonng9iibNrHo6e5E4S+4l6xRDhma4aDH85Is4xttwx3i4pKhMSaupUcdktInGHhazYaWEh". + "5jHdylUWYm7QWQXfiX6GDy8KrZjFt5q274ISmsQMC+iDxV/i2NQ0UTy9T3Pag2AoNqDdKzbJqyHCLrUEQioRlC6BO3rJL9IVeuzbK". + "rzYd8GHzFgJmXGCEVHcEfkUfT+oBimo4RIS/dDX1hi274Koz/K5Axj+aYMSLo1IyRZNLEgT/uKk8e2JOiVY3ow7SfrPWITii/ClkA". + "pZtXHKt4dZyVMBu075hI3fMsqeQK6X1C8oDUOKFFbMRfBMNKShQ0xwceoyq5uVUKTv45mcIsB8ZOzjbjR4znW+lajmQUAyJQYEMI3". + "AUHfxmvfdAU5ffLQMa7SkxQyiodFDYDyqyWP1TxN/39wpbIY7R8R+wYmQ+phIxEhESZJTEHnW+CrZKWvSJuY3dhhUwpjpUN+0DMGI". + "E7F2SbzxikyABaU66bNGJZwRPQrSCBWqTm9rl+CIg+9gc3sD4VxgekWJUJYbbZMQL7JoLQ8KPpfd3bXu0MpGv67v4SUCp2/BCB6ks". + "WtyqlW84XbmJ5A6eXNLT3t1G5HCj6UkYwkSQdXoq0870pA5GCWaK7MaiFCHsO4Jg0klXJonazKudY4MftONLhflXNccqfUb0iCdEi". + "L427kOpMeJYHuwneyCM2bEIC2UT820pdPcubsqO00luYEh3bWP2rPaoC82jSMqB+PmXuVMAzOkMSaVI0/GOWrXLLjZCGZ6lk2YTks". + "Xw1kuGWbkHmcbw9oZMVydVq/bx30f6bWdZwxM0EhgZleQO7/YpIiz25DxM5PNs8jaRovEOwThPv5/3XDOpUAf0Z+4Oz5VFEgvw7Cd". + "iHYNQsbjqgiI32+I1Dz4UeBcPT0Gs7MdfMyr1w53YA595mVEdVNASJWeG3dUdA7gnEANxa4wV60iMVqg6+CSqbwy2TpLGxDpiEjrv". + "zpD6Pwhs29QNOv/1t5q0nmeoAU0I3GRY1g3LwF3XhXLpbL4klv1pMVS8kiAp2TYxHYFGfZC8oDLNvyjLfycofusTYrgBGAoxTU3nq". + "w5plYO5vDkdLsehCTzyZwYzA147BBbjxgjDpzH8BsLfD5miBX/PTMOIxKtGE2fx6fakRpneYberW/wqJeaPAGUVXfiDIWBRfkxmDb". + "UMZyEt+mON5vQyYshrviqGgIhzEENnTWHqZehwCKveGWKoO0MB1PGCXGS3/fwRU14eEuLt5BbFnrZ404kWTPs55aMc4LaOPrcoo8r". + "XfxGY+WDM1y42OrDsYteECjUk/smIHzfNa8dcaP0kw5DVduLvZj/Gg2aNGdOjlDjUr7oZ8mxFszKtqOkwoNgmDZG7/GpNsRoLqPRD". + "GZLeTsWXxnbvPGA+4nPyYhvGBklJMklQCUvPr7QiaM1XRgcQw6EjGXr7ckjaNr9JVWdhT/ZWq/t91VvImhabJSM8WnCBMqs+sHR2n". + "uuiXu85AQVdxZTZUa6MGuYgxP4qtn4+fPI2/XYdqwdflKNFkocm1u9WDIhFh2Ur2TGyGij6Gwho+FG/8xNSYXkhje9Wu7Gqh31+jF". + "vX1Ge9X3MQPZ3x4w4Ks/lYl6dBouz12dmRz3u4pt7TekIcW1iukB+JOKC5BaPX/B2B7RaovGmPCc2Lx7CjYnfnUzmHpxaweEa79Sf". + "72rEP6o6Q0cprD+6+5Aa0baiIE4cQRlPZ87EOeR/fndczMxXPmwVV1lBjsmkBukihcN8vYWv91RupN1jKY7MaqE0o5pc9p7TnaRuX". + "uw82aHZRlCVVaPn6hFA+pYKacyEoVEYM0QwusR81PTcfTPjZ76yv8WwicaV1TvqqG6hOtvSvxZwT+4iPa5u8uOzOj/aOgIhB8TVSt". + "bT9+50KZzT3QeO/YmMnFXhVBe3ij/xGGM+neGlkbK2uBG/L2nQ6lvzxVAk8RuPXoMMUAz1u3lymJs1EGrsY4aBkhR+tyOCG9VWOdH". + "YuzqLskspjzsx88F5gKZd//C1gxDH3XBADVV0YOFltKqGru/CxhjuMSVT9A5O6C7F1fCC0Fh4ITzCh0V+vRX9VyoH8mAQSKRbgJJY". + "u/yHjd9NoRw9SDALJ5gZozALVw9jqmGu9LqBm3I/4x1ON1NgcJyGdflDdK2aOQh5yfb3j9d61/d3pfHsD69y4Z7rEvkhsYGDhvMAY". + "3ltrtG736H3iyUjk4xSCkoNxvMIA1hfAFdkReGZRcnCxr1KeKSIBOYUqdt31t+cjGtyozUJhXE/Aje7uWzipvlkxaiW5kOTsLXR82". + "SGCOfZxnuFWbyEeKS6wbeTHyoO5LLpLdLHNcWFw5Cf6dAlFEG/zX2RiOhxCYWBXVIhHAgv6fb8LBtpLutTlXW+x/nhiBLAgMDw5+n". + "4KPnRsp/lYPrIGHHvFvn2DF/t2m+gjVxwOuWGx9fmYmyK49mqOt8veiO4v0uWx0iU979LElo+fZAmIfVrJraPGorvN2loNPbdNxx5". + "KY4n/3nac3dfxA7kxugZCoJLX1qWgUdvTtESTkWNcIJi0vkw2zGU0oz19GbmrEXRwPxgWiL23puDnCT7w6WfuX/Z7y3Ql/i5Cc+vC". + "mta/Mt+vOUCdp9s1wKaBaHAJvXyK4w+k0jDxIBWoU7KceLF72diYmb0Xu61XtjftC070U6GLyMlzhqGe3Sy/d/6VdMqX4A9V/xJO/". + "60pwF7PneD+fXfYMkSvvTDdBA0dSKp1E9IGsunJCIuSv7liwean+QXWLQfvikw4oiZ2l2kCetP13vx+qEWvHygUTvQ0AnrBiYhdDF". + "rVCk9/0uItWJpQYIAcUV6NI/qfxTS+FdTJT+rs1m+eTDBx6ar353tXnXpR2c94O3QeQ9qWv3ooBjVTIkmJ8ZG4FxUzbqiLUgmABMy". + "ojBleAymZDsxJNZayu9wqO3+bfHl1iQq5PgtwX8ajPFJ039IN4faWP36Llb/WaOs5yc+PcNt1a/6+I94PuBnCF8HAf8vwADS7GaT0". + "D4fMwAAAABJRU5ErkJggg=="; + header("Content-type: image/png"); + echo base64_decode($sImg); + exit; + } + + public function getGifBg() + { + $sImg = "R0lGODlhCgAyANUAANHo+pfK85rM8/X6/vb6/v///5jL85bJ8+Hv/KbS9dzt+87m+qTR9fH4/er1/b7e+MTh+P3+/63V9u/3/". + "dfq+rnc97fa96DP9Nns+53N9LLY9tTp+sHg+Mzl+cfi+OPx/Pv9/7DX9p/O9Oz2/bTZ9uXy/KLQ9Pj7/ujz/bzd9/7+//r8//P5/s". + "nj+ZvM897u+6nT9avU9qvU9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKADIAAAb". + "FwINwSAwYj0iDcskUOJ9Ql3RKzVivWJF2y714v2CTeExmmM/ohHrNhrnf8Jh8PpdJ7vh8aM/va/6AgSSDhIUWh4iJFYuMjSmPkJEP". + "k5SVHJeYmRCbnJ0en6ChLaOkpR2nqKkLq6ytAK+wsRuztLUUt7i5GLu8vQq/wMEvw8TFCMfIyR/LzM0lz9DRKNPU1Q7X2Nkj29zdE". + "9/g4Q3j5OUs5+jpA+vs7QTv8PEn8/T1K/f4+SD7/P0R/wADqhhIsGCBgwgTBgEAOw=="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } + + public function getGifDe() + { + $sImg = "R0lGODlhEgANAIQZAAAAABAFBhEGBhIGBhQHBxUHCCYNDZQqH5QrI9c4M+M4M9w9M+g/MuNDM/BFM99tI+t3H+CyDerIB+zIB". + "uzKBurLCPfcAPfgAPjlAP///////////////////////////ywAAAAAEgANAAAFVaARCGRpmoExAGzrvsBAwHRLFHVdIEfv/8ADou". + "EoGo9IR2PBaDqfUMYioahar1hF4gHper9gyKOCKZvPaExFcmm73/CLZGKp2+94yyRCmfj/gIAUESEAOw=="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } + + public function getGifEn() + { + $sImg = "R0lGODlhEgANAOfRANzd6P9LQP7//93e6ba32v8HB/J4ef//+/85Of8fFVddwP8aFq+13P8aFPr////f3f8XE/n//62s3fQuL". + "AIDj6ys3uHZ5P8uLOjp793f6dbX6uvBxsyasurCx/9fXcadtS88r+Da5EZHr+Hi7A0NlUVGqcjR9MKaunh5x/8REQAAkv9IP/9BPn". + "h6wi4/td3c5uLl7P8PD7vO9aGSw7bM9uDh6UpLsf8hFv/f3PPx9/Dx9DFCuMDE4cHF4/sAANPU3ufp8JSDvuVocf8ODvz8+/xRTPQ". + "gG+PM0ZSWzs/R476+4ujp8v8/PurO0uPZ3//u5fQCAOPj6nFxxf8UE8rM4P/w5YGM18PH4/79/ExUuP3//4CAxqmo3KaZxv7+/Rcs". + "tO3v89XW6fS8waOj2snM7Nra7Ccon+no9v03OFJZvuK2xBEipP89Ov8dE+be4u3u8/w3OOVocv8sKv8EBOjo9+/u+Kap15SFvgwRl". + "ba327uXteHh7tvc5yo3q9XX5SQ4uU5MrtjW5qaVxvDS2f8DA+Tj6vr6/j1FtVlgvL+euvHw9v+rqe7u+XKJ1ebn7p2x7CUmnvb2+d". + "PW8P8cEc/P4efn8/38/5Ws66mYx/ccGNfY5vh0d927zSUlov96ev88OgAAjmmA09rb5v+xsPF5eMnR8i0upuuAgvEyLx0rq97f6cu". + "nwEBIuO/Aw/9/fuTm6vn5+vTEyM7P5rq63BESlf+Fgv8fF8SWsOfp7+2rrvX1+La23RgmqLe43PPV2vdydhcnqIWQ2BEgoube4wAS". + "n82atOHj6uTT2f97etKjuf9dWsSduZyb08fJ4fn5+/z8/f+ZAP///////////////////////////////////////////////////". + "/////////////////////////////////////////////////////////////////////////////////////////////////////". + "///////////////////////////////////ywAAAAAEgANAAAI/gB/YHCkig+AAVGGuSmUAYCoEbpgGXsFY8kWM7T6JEI14QMIEpB". + "aVNIBRBOSOtEqmAK27EabYqk6jYl2hpksKnjSmIgmqdEqWw2ShSITrZQCFXb8IDpkRdGBCLGmpBDj4ECOYKyyXHFyyoCQX8hceShQ". + "QFktT5viGCDV5AgUaHDjypXrI9exIgHYwEHA5MIcQnJYIEDzKcCKVi+63BE0CMeTUTGGLKrywBemIDMCJVnz5ZIWATI4LYCghoaAa". + "I/+EGNAqQQXQ4xQuDiRYBKHHVLoWJIAaFaNZkSU2KAgTI+RTLd4gRKxC0uZPQPAvAnTiwCPEB02WOiRh4CGZ15wAgUEADs="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } +} + +/** + * Class requTranslations + */ +class requTranslations +{ + /** + * @return array + */ + public function getTranslations() + { + return array( + 'de' => array( + 'RequCheck' => 'Mindestanforderungsprüfung', + 'ExecNotice' => 'Führen Sie diese Prüfung immer aus dem Stammverzeichnis '. + 'Ihres Shops aus. Nur dann können die Prüfungen erfolgreich durchgeführt werden.', + 'RequSucc' => 'Bedingung erfüllt', + 'RequNotSucc' => 'Bedingung nicht erfüllt', + 'RequUnknown' => 'Bedingung unklar, siehe Hinweise im Hilfetext', + 'RequNotCheckable' => 'Bedingung nicht prüfbar', + 'hasMinPhpVersion' => 'mindestens PHP Version %1$s', + 'hasMinPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht kleiner ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen kleiner als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxPhpVersion' => 'maximal PHP Version %1$s', + 'hasMaxPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht höher ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen höher als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasFromToPhpVersion' => 'Server verwendet PHP Version zwischen %1$s und %2$s', + 'hasFromToPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version zwischen %1$s und %2$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann '. + 'außerhalb der PHP-Versionen nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasExtension' => '%1$s-Erweiterung verfügbar', + 'hasExtension_DESC' => '
Das Modul erfordert die %1$s-Servererweiterung.
'. + '
Die %1$s-Erweiterung ist '. + 'auf Ihrem Server vorhanden.
'. + '
Das Modul kann ohne die '. + '%1$s-Erweiterung nicht ausgeführt werden. Fragen Sie bei Ihrem Serverprovider nach der '. + 'Installation dieser Erweiterung.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + '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 '. + 'passender Version installiert.
'. + '
Das Modul kann in dieser '. + 'Version der Shopsoftware nicht installiert werden. Fragen Sie nach einer früheren '. + 'Modulversion, die für Ihre Shopversion getestet wurde.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxShopVersion' => 'maximal Shop Version %1$s', + 'hasMaxShopVersion_DESC' => '
Das Modul ist bis zur Shopversion %1$s freigegeben.
'. + '
Die Shopsoftware ist in '. + 'passender Version installiert.
'. + '
Wir können nicht '. + 'garantieren, dass das Modul in Ihrer Shopversion funktioniert. Fragen Sie nach einer aktuelleren '. + 'Modulversion, die für Ihren Shop passt.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") mindestens in Version %3$s', + 'hasMinModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" mindestens in '. + 'Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") maximal in Version %3$s', + 'hasMaxModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" höchstens '. + 'in Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'requireNewLicence' => 'bisheriger Lizenzschlüssel kann verwendet werden', + 'requireNewLicence_DESC' => '
Diese Prüfung versucht zu ermitteln, ob Sie für den '. + 'Einsatz dieses Moduls einen aktuellen Lizenzschlüssel benötigen:
'. + '
Sie haben für dieses '. + 'Modul einen Lizenzschlüssel hinterlegt, der wahrscheinlich auch für die neue '. + 'Modulversion geeignet ist.
'. + '
Sie benötigen '. + 'für dieses Modul wahrscheinlich einen neuen Lizenzschlüssel. Haben Sie diesen schon '. + 'vorliegen, führen Sie die Installation aus und tragen den Lizenzschlüssel dann im '. + 'Adminbereich Ihres Shops ein. Ansonsten können Sie den Lizenzschlüssel in unserem Shop '. + 'www.oxidmodule.com erwerben oder '. + 'sich ebenfalls im Adminbereich Ihres Shops einen kostenfreien Test-Lizenzschlüssel '. + 'erstellen.
'. + '
Für Details wenden Sie sich bitte an '. + 'buchhaltung@shopmodule.com.
', + 'hasModCfg' => 'Modul-'. + 'Connector installiert', + 'hasModCfg_DESC' => '
Das Modul erfordert zwingend den D3 Modul-Connector.
'. + '
Der Modul-Connector ist '. + 'installiert.
'. + '
Das Modul kann ohne den Modul-'. + 'Connector nicht ausgeführt werden. Bitte laden Sie sich diesen kostenfrei aus unserem Shop '. + 'unter www.oxidmodule.com/'. + 'connector/ und installieren diesen vorab.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'isShopEdition' => 'ist Shopedition %1$s', + 'isShopEdition_DESC' => '
Das Modul erfordert eine dieser Shopeditionen: %1$s
'. + '
Der Shop ist in der '. + 'passenden Edition installiert.
'. + '
Das Modul kann in Ihrer '. + 'Shopedition nicht ausgeführt werden. Bitte fragen Sie nach einer Modulversion für Ihre '. + 'Shopedition.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) oder Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. + 'installiert (auf passendes Zend-Installationspaket achten!)', + 'hasZendLoaderOptimizer_DESC' => '
Das Modul erfordert (je nach PHP-Version) den Zend Optimizer '. + '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". '. + '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.
'. + '
Ü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.
', + '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 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.', + 'showPhpInfo' => 'PHPinfo anzeigen', + 'dependentoffurther' => '* abhängig von ungeprüften Voraussetzungen', + 'oneandonedescription' => '** geprüft wurde das Ausführungsverzeichnis, '. + 'providerabhängig müssen Unterverzeichnisse separat geprüft werden (z.B. bei 1&1)', + 'or' => ' oder ', + 'toggleswitch' => 'Klick für Details zur Prüfung', + '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', + 'ExecNotice' => 'Execute this check script in the root directory of your shop. In this '. + 'case only checks can executed succesfully.', + 'RequSucc' => 'condition is fulfilled', + 'RequNotSucc' => 'condition isn\'t fulfilled', + 'RequUnknown' => 'condition unclear, see notes in help text', + 'RequNotCheckable' => 'condition isn\'t checkable', + 'hasMinPhpVersion' => 'at least PHP version %1$s', + 'hasMinPhpVersion_DESC' => '
    The module requires a PHP version at least %1$s
    '. + '
    The appropriate version of PHP '. + 'is activated on your server.
    '. + '
    The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories 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' => '
    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'=> '
    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' => '
    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' => '
    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' => '
    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' => '
    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' => '
    The module requires necessarily the D3 Module Connector.
    '. + '
    The Module Connector is '. + 'installed.
    '. + '
    The module can not be executed '. + 'without the Module Connector. Please download this free of charge from our shop '. + 'www.oxidmodule.com/'. + 'connector/ and install it beforehand.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'isShopEdition' => 'shop edition is %1$s', + 'isShopEdition_DESC' => '
    The module requires one of these shop editions: %1$s
    '. + '
    The shop is installed '. + 'in the appropriate edition.
    '. + '
    The module can not be executed '. + 'in your shop edition. Please ask for a module version for your shop edition.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) or Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. + 'installed (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 or orange marked '. + 'conditions.

    ', + 'deleteFile1' => 'Please delete this file after use on your server! Click here, to delete this file.', + 'showPhpInfo' => 'show PHPinfo', + 'dependentoffurther' => '* dependent of further unchecked conditions', + 'oneandonedescription' => '** this check use execution directory only, provider dependend '. + 'subdirectories have to check separately (e.g. at 1&1)', + 'or' => ' or ', + '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.
  • ', + ), + ); + } +} + +/** + * Class requRemote + */ +class requRemote +{ + public $blUseRemote = true; + + public $oModuleData; + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|array + */ + public function getShopEdition($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return explode(',', $oModuleData->moduleversion->compatible_release->shopedition); + } + + return false; + } + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|string + */ + public function getMinShopVersion($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return $this->shortenVersion($oModuleData->moduleversion->compatible_release->fromshopversion); + } + + return false; + } + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|string + */ + public function getMaxShopVersion($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return $this->shortenVersion($oModuleData->moduleversion->compatible_release->toshopversion); + } + + return false; + } + + /** + * @param $sUrl + * + * @return stdClass + */ + protected function _getRemoteServerData($sUrl) + { + if (isset($this->oModuleData[$sUrl])) { + return $this->oModuleData[$sUrl]; + } + + $oFailureData = new stdClass(); + $oFailureData->status = 'NOK'; + + if (false === $this->blUseRemote) { + return $oFailureData; + } + $sHost = "http://update.oxidmodule.com"; + $sData = $this->curlConnect($sHost . '/serialized/' . $sUrl); + $oData = unserialize($sData); + + if (false == $oData) { + return $oFailureData; + } + $this->oModuleData[$sUrl] = $oData; + + return $this->oModuleData[$sUrl]; + } + + /** + * @param $sFilePath + * + * @return string + */ + public function curlConnect($sFilePath) + { + $sContent = ''; + + if (($ch = $this->_hasCurl())) { + $sCurl_URL = preg_replace('@^((http|https)://)@', '', $sFilePath); + curl_setopt($ch, CURLOPT_URL, $sCurl_URL); + if ($_SERVER['HTTP_USER_AGENT']) { + curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); + } + 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_TIMEOUT, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); + curl_setopt($ch, CURLOPT_POST, 0); + $sContent = curl_exec($ch); + } + + return $sContent; + } + + /** + * @return null|resource + */ + protected function _hasCurl() + { + if (extension_loaded('curl') + && function_exists('curl_init') + && function_exists('curl_exec') + ) { + return curl_init(); + } + + return null; + } + + /** + * @param $sVersion + * + * @return string + */ + public function shortenVersion($sVersion) + { + $aVersion = explode('.', $sVersion); + + unset($aVersion[3]); + + return implode('.', $aVersion); + } +} + +/** + * Class requTests + * contains test functions + */ +class requTests +{ + public $oBase; + public $oDb; + public $oConfig; + public $blGlobalResult = false; + + /** + * @param requCheck $oCheckInstance + * @param requConfig $oConfig + * @param $oDb + * @param requRemote $oRemote + */ + public function __construct(requCheck $oCheckInstance, requConfig $oConfig, $oDb, requRemote $oRemote) + { + $this->oBase = $oCheckInstance; + $this->oConfig = $oConfig; + $this->oDb = $oDb; + $this->oRemote = $oRemote; + } + + /** + * @return requCheck + */ + public function getBase() + { + return $this->oBase; + } + + public function getDb() + { + return $this->oDb; + } + + /** + * @return string + */ + public function getBasePath() + { + return $this->getBase()->getBasePath(); + } + + /** + * @param bool $blResult + */ + public function setGlobalResult($blResult) + { + $this->getBase()->blGlobalResult = $blResult; + } + + /** + * @param $sMethodName + * @param null $aArguments + * + * @return array + */ + public function checkInSubDirs($sMethodName, $aArguments = null) + { + return $this->getBase()->checkInSubDirs($sMethodName, $aArguments); + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasMinPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '>=')) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasFromToPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if ((version_compare(phpversion(), $aConfiguration['aParams']['from'], '>=')) && + (version_compare(phpversion(), $aConfiguration['aParams']['to'], '<')) + ) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasMaxPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '<=')) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasExtension(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (extension_loaded($aConfiguration['aParams']['type'])) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + 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 + * + * @return bool + */ + public function hasMinShopVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sField = 'oxversion'; + $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 ORDER BY oxversion ASC LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + $oEditionResult = $this->_getShopEdition(); + $sEdition = strtoupper($oEditionResult->oxedition); + + $mMinRemoteVersion = $this->oRemote->getMinShopVersion( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $sEdition + ); + + if ($mMinRemoteVersion) { + $aConfiguration['aParams'] = array('version' => $mMinRemoteVersion); + } else { + $aConfiguration['aParams'] = array('version' => $aConfiguration['aParams'][$sEdition]); + } + + if (version_compare($oResult->oxversion, $aConfiguration['aParams']['version'], '>=')) { + return true; + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function hasMaxShopVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sField = 'oxversion'; + $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 ORDER BY oxversion DESC LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + $oEditionResult = $this->_getShopEdition(); + $sEdition = strtoupper($oEditionResult->oxedition); + + $mMaxRemoteVersion = $this->oRemote->getMaxShopVersion( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $sEdition + ); + + if ($mMaxRemoteVersion) { + $aConfiguration['aParams'] = array('version' => $mMaxRemoteVersion); + } else { + $aConfiguration['aParams'] = array('version' => $aConfiguration['aParams'][$sEdition]); + } + + if (version_compare($oResult->oxversion, $aConfiguration['aParams']['version'], '<=')) { + return true; + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function isShopEdition(&$aConfiguration) + { + if ($this->getDb()) { + $oResult = $this->_getShopEdition(); + + $mRemoteShopEditions = $this->oRemote->getShopEdition( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $oResult->oxedition + ); + + if (is_array($mRemoteShopEditions)) { + $aConfiguration['aParams'][0] = $mRemoteShopEditions; + } + + if (in_array(strtoupper($oResult->oxedition), $aConfiguration['aParams'][0])) { + $aConfiguration['aParams'][0] = strtoupper($oResult->oxedition); + return true; + } + } + + return false; + } + + /** + * @return bool|object|stdClass + */ + protected function _getShopEdition() + { + if ($this->getDb()) { + $sField = 'oxedition'; + $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + return $oResult; + } + + return false; + } + + /** + * @return bool + */ + public function hasModCfg() + { + if ($this->getDb()) { + $sModId = 'd3modcfg_lib'; + $sSelect = "SELECT 1 as result FROM d3_cfg_mod WHERE oxmodid = '" . $sModId . "' LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); + + if ((bool) $oResult->result == true) { + return true; + } + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool|int + */ + public function hasMinModCfgVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT IF ". + "(INET_ATON(oxversion) >= INET_ATON('" . $aConfiguration['aParams']['version'] . "'), 1, 0) AS result ". + "FROM d3_cfg_mod ". + "WHERE + oxmodid = '" . $aConfiguration['aParams']['id'] . "' AND + oxversion != 'basic' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blReturn = (bool)$oResult->result; + + if (false == $blReturn) { + $this->setGlobalResult(false); + } + + return $blReturn; + } + + $this->setGlobalResult(false); + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool|int + */ + public function hasMaxModCfgVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT + IF (INET_ATON(oxversion) <= INET_ATON('" . $aConfiguration['aParams']['version'] . "'), 1, 0) AS result + FROM d3_cfg_mod WHERE + oxmodid = '" . $aConfiguration['aParams']['id'] . "' AND + oxversion != 'basic' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blResult = (bool)$oResult->result; + + if (false == $blResult) { + $this->setGlobalResult(false); + } + + return $blResult; + } + + $this->setGlobalResult(false); + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function requireNewLicence(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT + oxversion as oxversion + FROM d3_cfg_mod WHERE + oxmodid = '" . $this->oConfig->sModId . "' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + if (isset($oResult) + && is_object($oResult) + && isset($oResult->oxversion) + && isset($aConfiguration['aParams']['checkVersion']) + ) { + $sInstalledVersion = $this->_getConvertedVersion( + $oResult->oxversion, + $aConfiguration['aParams']['remainingDigits'] + ); + $sNewVersion = $this->_getConvertedVersion( + $this->oConfig->sModVersion, + $aConfiguration['aParams']['remainingDigits'] + ); + if (version_compare($sInstalledVersion, $sNewVersion, '>=')) { + return true; + } + } + } + + return 'notice'; + } + + /** + * cut not used version digits + * @param string $sVersion + * @param int $iRemainingDigits + * + * @return string + */ + protected function _getConvertedVersion($sVersion, $iRemainingDigits) + { + $aInstalledVersion = explode('.', $sVersion); + return implode('.', array_slice($aInstalledVersion, 0, $iRemainingDigits)); + } + + /** + * @return array + */ + 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') + )) { + if (function_exists('opcache_get_status') + && ($aOpCacheStatus = opcache_get_status()) + && $aOpCacheStatus['opcache_enabled'] + ) { + $aResult[$this->getBasePath()] = null; + } else { + $aResult[$this->getBasePath()] = true; + } + } + + if ($blCheckBasePathOnly == false) { + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + } + + return $aResult; + } + + /** + * @return array + */ + public function hasIonCubeLoader(&$aConfiguration, $blCheckBasePathOnly = false) + { + $aResult = array($this->getBasePath() => false); + + if (function_exists('ioncube_loader_version')) { + $aResult[$this->getBasePath()] = true; + } + + 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; + } +} + +/** + * Class requTransformation + */ +class requTransformation +{ + public $oCheck; + + /** + * @param requCheck $oCheck + */ + public function __construct(requCheck $oCheck) + { + $this->oCheck = $oCheck; + } + + /** + * @param $aCheckList + */ + public function transformCheckList($aCheckList) + { + $this->_removeDeprecatedLibs($aCheckList['hasMinModCfgVersion']); + $this->_removeDeprecatedLibs($aCheckList['hasMaxModCfgVersion']); + + return $aCheckList; + } + + /** + * @param array $aCheck + */ + protected function _removeDeprecatedLibs(&$aCheck) + { + $blDelOldLibs = false; + $sCheckVersion = 0; + + if (is_array($aCheck)) { + $sSelect = "SELECT oxversion as result ". + "FROM d3_cfg_mod ". + "WHERE oxmodid = 'd3modcfg_lib' LIMIT 1"; + $rResult = mysqli_query($this->oCheck->getDb(), $sSelect); + + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); + if ($oResult->result) { + $sCheckVersion = $oResult->result; + } + } + + foreach ($aCheck as $aModCfgCheck) { + if (isset($aModCfgCheck['aParams']['id']) && + strtolower($aModCfgCheck['aParams']['id']) == 'd3modcfg_lib' && + version_compare($sCheckVersion, '4.0.0.0', '>=') + ) { + $blDelOldLibs = true; + } + } + + reset($aCheck); + + if ($blDelOldLibs) { + $aOldLibs = array('d3install_lib', 'd3log_lib', 'd3clrtmp_lib'); + foreach ($aCheck as $sKey => $aModCfgCheck) { + if (isset($aModCfgCheck['aParams']['id']) && + in_array(strtolower($aModCfgCheck['aParams']['id']), $aOldLibs) + ) { + unset($aCheck[$sKey]); + } + } + } + } + } +} + +/** + * @param $mVar + */ +function dumpvar($mVar) +{ + echo "
    ";
    +    print_r($mVar);
    +    echo "
    "; +} + +$oRequCheck = new requcheck; +if (isset($_REQUEST['fnc']) && $_REQUEST['fnc']) { + $oRequCheck->{$_REQUEST['fnc']}(); +} else { + $oRequCheck->startCheck(); +}