diff --git a/README.md b/README.md index 39c52f9..1e7b213 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -# D³ Content Tabs für OXID eShop -Erweiterung der Produktdetailsseite mit weiteren "Tabs". -Dies ermöglicht es viele Produktionformationen sauber und übersichtlich auszulisten. - -## 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. +# D³ Content Tabs für OXID eShop +Erweiterung der Produktdetailsseite mit weiteren "Tabs". +Dies ermöglicht es viele Produktionformationen sauber und übersichtlich auszulisten. + +## 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. diff --git a/changelog.md b/changelog.md index 0bd591f..dd0015a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,137 +1,137 @@ -# Changelog -All notable changes to this project will be documented in this file. - -## 4.0.0.2 (2018-10-19) -- Freigabe für OXID 6.1.x -- Fehlerhinweise eingefügt, wenn Langtexte nicht ausreichend befüllt sind -- bugfix: Schreibschutz für Langtexte an Artikelvarianten entfernt - -## 4.0.0.1 (2018-03-01) -- Exception im Admin unter /Content Tabs/Tabverwaltung/Stamm/ - -## 4.0.0.0 (2018-03-01) -- Kompatibilität und Support ab Oxid 6.0.0 -- Integration eines eigenen Admin-Bereich "D³ Content Tabs" -- Titel und Langtexte der Tabs werden in einer eigenen Tabelle gespeichert -- Langtexte haben eine "Aktiv" - Option erhalten, welche im Frontend zusätzlich geprüft wird -- Altlasten und unnötige Dateien entfernt -- Umstellung auf Namespaces -- Grundinstallation via Composer - -## 3.2.0.1 (2016-12-19) -- Support für Apache 2.4 -- Paketbereitstellung für ionCube - -## 3.2.0.0 (2016-07-22) -- drop: techn. Support für Shopversionen 4.7.x eingestellt -- add: Freigabe für 4.10.x -- add: Prüfung auf gültige Modul-Dateien implementiert -- add feature: Support für Oxid-Theme Flow - -## 3.1.0.2 (2015-10-07) -- bugfix: "Shop offline" Anzeige nach der Wahl einer Variante im Frontend -- bugfix: gepflegte Tab-Inhalte wurden nicht angezeigt - -## 3.1.0.1 (2015-09-03) -- automatische Installation aufgeteilt, Anlegen der Datenbankfelder erfolgt "step by step" -- Übernahme Moduleigener Templates in copy_this und Verweis zur Überladung siehe FAQ -- fehlende Übersetzungen im Shopadmin nachgetragen -- Modulfreigabe für php5.5 und php5.6 -- Aktualisierung Vorabprüfung und Installationsanleitung - -## 3.1.0.0 (2014-11-12) -- support for mobile-themes -- adjustment of the structure -- update precheck - -## 3.0.1.0 (2014-08-08) -- Module compatible with Shopvesion 4.8.7 -- Show Message in Backend if Module is not active -- rename module-tab-Templates -- adjustment of the structure -- delete deprecated files in autoupdate -- fix module entrys in shopconfiguration - -## 3.0.0.3 (2014-05-05) -- Update Precheck - -## 3.0.0.2 (2014-03-18) -- bugfix for saving longdesc in admin - -## 3.0.0.1 (2013-02-22) -- bugfix when module is inactive, tabs will be shown in frontend - -## 3.0.0.0 (2013-02-19) -- restructured for 4.7 / 5.0 - -## 2.4.6.2 (2013-06-27) -- add funktionality for Edition EE -- add Versioncheck in oxarticle-extension - till 4.5.x other method for getting Longdescription than in 4.6.x - -## 2.4.6.1 (2013-03-12) -- bugfix in update.sql - -## 2.4.6.0 (2013-02-01) -- tab content moved to templates, add extendable blocks - -## 2.4.5.0 (2012-09-05) -- added 4.6.0 functionality - -## 2.4.4 (2012-05-31) -- bug fix: javaScript fallback causes shop-in-tab-problem - -## 2.4.3 (2011-11-02) -- added templates for 451 - 454 -- added javaScript fallback for non js user - -## 2.4.2 (2011-09-19) -- bug fix price doesn't save -- bug fix showed empty tabs - -## 2.4.1 (2011-08-16) -- inheritance implemented -- bug in save function fixed - -## 2.4.0 (2011-07-19) -- restructured -- removed Ajax lib, switched to jQuery -- removed ox_cmp module -- renamed fields (from oxlongdescXXX to d3longdescXXX) in database -- added 4.5.0 templates - -## 2.1 (2009-11-13) -- Xajax-Implementierung au neues Intergrationsschema umgestellt -- langtext- und templatebasierte Versionen zusammengeführt -- Fallback-Funktion für Nicht-JavaScript-Einsatz -- Langtexte in einem Admin-Tab zusammengefaßt -- Langtext mehrsprachig verfügbar - -## 2.0 (2009-08-26) -- auf PE4 portiert - -## 1.1 (2008-09-22) -- Fallback-Funktion für Nicht-JavaScript-Einsatz (tpl) -- Attribute und Bewertungen stehen nun ebenfalls zur Verfügung (tpl) - -## 1.0 (2008-09-12) -- Grundfunktion zum Modul komplettiert -- Scriptbasis ist aktuelles Xajax-Integrationsschema - - -[3.2.0.0]: https://blog.oxidmodule.com/archives/610-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.2.0.0.html -[3.1.0.2]: https://blog.oxidmodule.com/archives/541-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-3.1.0.2.html -[3.1.0.1]: https://blog.oxidmodule.com/archives/539-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.1.0.1.html -[3.1.0.0]: https://blog.oxidmodule.com/archives/473-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.1.0.0.html -[3.0.1.0]: https://blog.oxidmodule.com/archives/441-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.0.1.0.html -[3.0.0.2]: https://blog.oxidmodule.com/archives/389-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-3.0.0.2.html -[3.0.0.0]: https://blog.oxidmodule.com/archives/251-Neues-Upgrade-fuer-Modul-Content-Tabs-auf-Version-3.0.0.0.html -[2.4.6.2]: https://blog.oxidmodule.com/archives/290-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.6.2.html -[2.4.6.0]: https://blog.oxidmodule.com/archives/246-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-2.4.6.0.html -[2.4.5.0]: https://blog.oxidmodule.com/archives/211-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.5.0.html -[2.4.4.0]: https://blog.oxidmodule.com/archives/188-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.4.html -[2.4.3.0]: https://blog.oxidmodule.com/archives/144-Neues-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.3.html -[2.4.2.0]: https://blog.oxidmodule.com/archives/130-Neues-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.2.html -[2.4.0.0]: https://blog.oxidmodule.com/archives/116-Update-Content-Tabs-fuer-OXID-PE-4.5.html -[2.0.0.0]: https://blog.oxidmodule.com/archives/28-Modul-Content-Tabs.html - +# Changelog +All notable changes to this project will be documented in this file. + +## 4.0.0.2 (2018-10-19) +- Freigabe für OXID 6.1.x +- Fehlerhinweise eingefügt, wenn Langtexte nicht ausreichend befüllt sind +- bugfix: Schreibschutz für Langtexte an Artikelvarianten entfernt + +## 4.0.0.1 (2018-03-01) +- Exception im Admin unter /Content Tabs/Tabverwaltung/Stamm/ + +## 4.0.0.0 (2018-03-01) +- Kompatibilität und Support ab Oxid 6.0.0 +- Integration eines eigenen Admin-Bereich "D³ Content Tabs" +- Titel und Langtexte der Tabs werden in einer eigenen Tabelle gespeichert +- Langtexte haben eine "Aktiv" - Option erhalten, welche im Frontend zusätzlich geprüft wird +- Altlasten und unnötige Dateien entfernt +- Umstellung auf Namespaces +- Grundinstallation via Composer + +## 3.2.0.1 (2016-12-19) +- Support für Apache 2.4 +- Paketbereitstellung für ionCube + +## 3.2.0.0 (2016-07-22) +- drop: techn. Support für Shopversionen 4.7.x eingestellt +- add: Freigabe für 4.10.x +- add: Prüfung auf gültige Modul-Dateien implementiert +- add feature: Support für Oxid-Theme Flow + +## 3.1.0.2 (2015-10-07) +- bugfix: "Shop offline" Anzeige nach der Wahl einer Variante im Frontend +- bugfix: gepflegte Tab-Inhalte wurden nicht angezeigt + +## 3.1.0.1 (2015-09-03) +- automatische Installation aufgeteilt, Anlegen der Datenbankfelder erfolgt "step by step" +- Übernahme Moduleigener Templates in copy_this und Verweis zur Überladung siehe FAQ +- fehlende Übersetzungen im Shopadmin nachgetragen +- Modulfreigabe für php5.5 und php5.6 +- Aktualisierung Vorabprüfung und Installationsanleitung + +## 3.1.0.0 (2014-11-12) +- support for mobile-themes +- adjustment of the structure +- update precheck + +## 3.0.1.0 (2014-08-08) +- Module compatible with Shopvesion 4.8.7 +- Show Message in Backend if Module is not active +- rename module-tab-Templates +- adjustment of the structure +- delete deprecated files in autoupdate +- fix module entrys in shopconfiguration + +## 3.0.0.3 (2014-05-05) +- Update Precheck + +## 3.0.0.2 (2014-03-18) +- bugfix for saving longdesc in admin + +## 3.0.0.1 (2013-02-22) +- bugfix when module is inactive, tabs will be shown in frontend + +## 3.0.0.0 (2013-02-19) +- restructured for 4.7 / 5.0 + +## 2.4.6.2 (2013-06-27) +- add funktionality for Edition EE +- add Versioncheck in oxarticle-extension + till 4.5.x other method for getting Longdescription than in 4.6.x + +## 2.4.6.1 (2013-03-12) +- bugfix in update.sql + +## 2.4.6.0 (2013-02-01) +- tab content moved to templates, add extendable blocks + +## 2.4.5.0 (2012-09-05) +- added 4.6.0 functionality + +## 2.4.4 (2012-05-31) +- bug fix: javaScript fallback causes shop-in-tab-problem + +## 2.4.3 (2011-11-02) +- added templates for 451 - 454 +- added javaScript fallback for non js user + +## 2.4.2 (2011-09-19) +- bug fix price doesn't save +- bug fix showed empty tabs + +## 2.4.1 (2011-08-16) +- inheritance implemented +- bug in save function fixed + +## 2.4.0 (2011-07-19) +- restructured +- removed Ajax lib, switched to jQuery +- removed ox_cmp module +- renamed fields (from oxlongdescXXX to d3longdescXXX) in database +- added 4.5.0 templates + +## 2.1 (2009-11-13) +- Xajax-Implementierung au neues Intergrationsschema umgestellt +- langtext- und templatebasierte Versionen zusammengeführt +- Fallback-Funktion für Nicht-JavaScript-Einsatz +- Langtexte in einem Admin-Tab zusammengefaßt +- Langtext mehrsprachig verfügbar + +## 2.0 (2009-08-26) +- auf PE4 portiert + +## 1.1 (2008-09-22) +- Fallback-Funktion für Nicht-JavaScript-Einsatz (tpl) +- Attribute und Bewertungen stehen nun ebenfalls zur Verfügung (tpl) + +## 1.0 (2008-09-12) +- Grundfunktion zum Modul komplettiert +- Scriptbasis ist aktuelles Xajax-Integrationsschema + + +[3.2.0.0]: https://blog.oxidmodule.com/archives/610-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.2.0.0.html +[3.1.0.2]: https://blog.oxidmodule.com/archives/541-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-3.1.0.2.html +[3.1.0.1]: https://blog.oxidmodule.com/archives/539-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.1.0.1.html +[3.1.0.0]: https://blog.oxidmodule.com/archives/473-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.1.0.0.html +[3.0.1.0]: https://blog.oxidmodule.com/archives/441-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-3.0.1.0.html +[3.0.0.2]: https://blog.oxidmodule.com/archives/389-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-3.0.0.2.html +[3.0.0.0]: https://blog.oxidmodule.com/archives/251-Neues-Upgrade-fuer-Modul-Content-Tabs-auf-Version-3.0.0.0.html +[2.4.6.2]: https://blog.oxidmodule.com/archives/290-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.6.2.html +[2.4.6.0]: https://blog.oxidmodule.com/archives/246-Neues-Update-fuer-Modul-Content-Tabs-auf-Version-2.4.6.0.html +[2.4.5.0]: https://blog.oxidmodule.com/archives/211-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.5.0.html +[2.4.4.0]: https://blog.oxidmodule.com/archives/188-Neuer-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.4.html +[2.4.3.0]: https://blog.oxidmodule.com/archives/144-Neues-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.3.html +[2.4.2.0]: https://blog.oxidmodule.com/archives/130-Neues-Patch-fuer-Modul-Content-Tabs-auf-Version-2.4.2.html +[2.4.0.0]: https://blog.oxidmodule.com/archives/116-Update-Content-Tabs-fuer-OXID-PE-4.5.html +[2.0.0.0]: https://blog.oxidmodule.com/archives/28-Modul-Content-Tabs.html + diff --git a/composer.json b/composer.json index 50a761e..1df3234 100644 --- a/composer.json +++ b/composer.json @@ -12,10 +12,10 @@ ], "authors": [ { - "name": "D3 Data Development (Inh. Thomas Dartsch)", - "email": "info@shopmodule.com", - "homepage": "http://www.d3data.de", - "role": "Owner" + "name": "D3 Data Development (Inh. Thomas Dartsch)", + "email": "info@shopmodule.com", + "homepage": "http://www.d3data.de", + "role": "Owner" } ], "support": { @@ -32,13 +32,13 @@ } }, "require": { - "php": "5.6 - 7.0", "ext-ionCube-Loader": "*", - "oxid-esales/oxideshop-metapackage-ce": "~6.0.1 || ~6.1.0", - "d3/modcfg": "^5.1.0.000" - }, - "autoload": { - "psr-4": { - "D3\\Contenttabs\\": "../../../source/modules/d3/contenttabs" - } + "php": "5.6 - 7.0", "ext-ionCube-Loader": "*", + "oxid-esales/oxideshop-metapackage-ce": "~6.0.1 || ~6.1.0", + "d3/modcfg": "^5.1.0.000" + }, + "autoload": { + "psr-4": { + "D3\\Contenttabs\\": "../../../source/modules/d3/contenttabs" + } } } diff --git a/docs/Precheck/d3precheck.php b/docs/Precheck/d3precheck.php index 8262a2c..aad3a6d 100644 --- a/docs/Precheck/d3precheck.php +++ b/docs/Precheck/d3precheck.php @@ -1,2605 +1,2605 @@ - - * @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³ Content Tabs'; - - public $sModId = 'd3contenttabs'; - - public $sModVersion = '4.0.0.2'; - - /********************** 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' => '7.1.200' - ) - ), - - // PHP-Version zwischen 'from' und 'to' - 'hasFromToPhpVersion' => array( - 'blExec' => 1, - 'aParams' => array( - 'from' => '5.6.0', - 'to' => '7.2.900', - ) - ), - - // 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 Compilationversion (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 Compilationversion (editionsgetrennt), wird (sofern möglich) Remote aktualisiert - 'hasMaxShopVersion' => array( - 'blExec' => 0, - '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 = '5.0.0'; - - 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()) { - require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; - $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); - - $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($shopVersion, $aConfiguration['aParams']['version'], '>=')) { - return true; - } - } - - return false; - } - - /** - * @param $aConfiguration - * - * @return bool - */ - public function hasMaxShopVersion(&$aConfiguration) - { - if ($this->getDb()) { - require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; - $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); - - $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($shopVersion, $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(); -} + + * @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³ Content Tabs'; + + public $sModId = 'd3contenttabs'; + + public $sModVersion = '4.0.0.2'; + + /********************** 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' => '7.1.200' + ) + ), + + // PHP-Version zwischen 'from' und 'to' + 'hasFromToPhpVersion' => array( + 'blExec' => 1, + 'aParams' => array( + 'from' => '5.6.0', + 'to' => '7.2.900', + ) + ), + + // 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 Compilationversion (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 Compilationversion (editionsgetrennt), wird (sofern möglich) Remote aktualisiert + 'hasMaxShopVersion' => array( + 'blExec' => 0, + '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 = '5.0.0'; + + 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 '
      '; + foreach ($this->oBase->getMessages() as $sMessage) { + echo '
    • '.$sMessage.'
    • '; + } + 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()) { + require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; + $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); + + $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($shopVersion, $aConfiguration['aParams']['version'], '>=')) { + return true; + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function hasMaxShopVersion(&$aConfiguration) + { + if ($this->getDb()) { + require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; + $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); + + $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($shopVersion, $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(); +} diff --git a/docs/changelog.txt b/docs/changelog.txt deleted file mode 100644 index 62f070f..0000000 --- a/docs/changelog.txt +++ /dev/null @@ -1,98 +0,0 @@ -4.0.0.0 -- Kompatibilität und Support ab Oxid 6.0.0 -- Integration eines eigenen Admin-Bereich "D³ Content Tabs" -- Titel und Langtexte der Tabs werden in einer eigenen Tabelle gespeichert -- Langtexte haben eine "Aktiv" - Option erhalten, welche im Frontend zusätzlich geprüft wird -- Altlasten und unnötige Dateien entfernt - -3.2.0.1 -- Support für Apache 2.4 -- Paketbereitstellung für ionCube - -3.2.0.0 -- drop: techn. Support für Shopversionen 4.7.x eingestellt -- add: Freigabe für 4.10.x -- add: Prüfung auf gültige Modul-Dateien implementiert -- add feature: Support für Oxid-Theme Flow - -3.1.0.2 -- bugfix: "Shop offline" Anzeige nach der Wahl einer Variante im Frontend -- bugfix: gepflegte Tab-Inhalte wurden nicht angezeigt - -3.1.0.1 -- automatische Installation aufgeteilt, Anlegen der Datenbankfelder erfolgt "step by step" -- Übernahme Moduleigener Templates in copy_this und Verweis zur Überladung siehe FAQ -- fehlende Übersetzungen im Shopadmin nachgetragen -- Modulfreigabe für php5.5 und php5.6 -- Aktualisierung Vorabprüfung und Installationsanleitung - -3.1.0.0 -- support for mobile-themes -- adjustment of the structure -- update precheck - -3.0.1.0 -- Module compatible with Shopvesion 4.8.7 -- Show Message in Backend if Module is not active -- rename module-tab-Templates -- adjustment of the structure -- delete deprecated files in autoupdate -- fix module entrys in shopconfiguration - -3.0.0.3 -- Update Precheck - -3.0.0.2 -- bugfix for saving longdesc in admin - -3.0.0.1 -- bugfix when module is inactive, tabs will be shown in frontend - -3.0.0.0 -- restructured for 4.7 / 5.0 - -2.4.6.0 -- tab content moved to templates, add extendable blocks - -2.4.5.0 2012-09-05 -- added 4.6.0 functionality - -2.4.4 2012-05-31 -- bug fix: javaScript fallback causes shop-in-tab-problem - -2.4.3 2011-11-02 -- added templates for 451 - 454 -- added javaScript fallback for non js user - -2.4.2 2011-09-19 -- bug fix price doesn't save -- bug fix showed empty tabs - -2.4.1 2011-08-16 -- inheritance implemented -- bug in save function fixed - -2.4.0 2011-07-19 -- restructured -- removed Ajax lib, switched to jQuery -- removed ox_cmp module -- renamed fields (from oxlongdescXXX to d3longdescXXX) in database -- added 4.5.0 templates - -2.1 2009-11-13 -- Xajax-Implementierung au neues Intergrationsschema umgestellt -- langtext- und templatebasierte Versionen zusammengeführt -- Fallback-Funktion für Nicht-JavaScript-Einsatz -- Langtexte in einem Admin-Tab zusammengefaßt -- Langtext mehrsprachig verfügbar - -2.0 2009-08-26 -- auf PE4 portiert - -1.1 PE3 (tpl) 2008-09-22 -- Fallback-Funktion für Nicht-JavaScript-Einsatz -- Attribute und Bewertungen stehen nun ebenfalls zur Verfügung - -1.0 PE3 2008-09-12 -- Grundfunktion zum Modul komplettiert -- Scriptbasis ist aktuelles Xajax-Integrationsschema diff --git a/src/Modules/Application/Component/Widget/d3_oxwarticledetails_contenttabs.php b/src/Modules/Application/Component/Widget/d3_oxwarticledetails_contenttabs.php new file mode 100644 index 0000000..2d982f6 --- /dev/null +++ b/src/Modules/Application/Component/Widget/d3_oxwarticledetails_contenttabs.php @@ -0,0 +1,41 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Contenttabs\Modules\Application\Component\Widget; + +/** + * Class d3_oxwarticledetails_contenttabs + */ +use D3\Contenttabs\Application\Model\contentTabs as TabsModel; +use OxidEsales\Eshop\Application\Model\Article; + +class d3_oxwarticledetails_contenttabs extends d3_oxwarticledetails_contenttabs_parent +{ + + /** + * @return array|null + */ + public function d3GetTabs() + { + /** + * @var Article + */ + $oArticle = $this->getProduct(); + + return oxNew(TabsModel::class, $oArticle)->getTabs(); + } +} diff --git a/src/Modules/Application/Model/d3_oxarticle_longtexts.php b/src/Modules/Application/Model/d3_oxarticle_longtexts.php new file mode 100644 index 0000000..965d9aa --- /dev/null +++ b/src/Modules/Application/Model/d3_oxarticle_longtexts.php @@ -0,0 +1,53 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Contenttabs\Modules\Application\Model; + +use D3\Contenttabs\Application\Model\contentTabs as TabsModel; + +/** + * Article manager. + * Creates fully detailed article object, with such information as VAT, + * discounts, etc. + * + */ +class d3_oxarticle_longtexts extends d3_oxarticle_longtexts_parent +{ + /** + * Deletes record and other information related to this article such as images from DB, + * also removes variants. Returns true if entry was deleted. + * + * @param string $sOXID Article id + * + * @throws \Exception + * + * @return bool + */ + public function delete($sOXID = null) + { + if (!$sOXID) { + $sOXID = $this->getId(); + } + if (!$sOXID) { + return parent::delete($sOXID); + } + + oxNew(TabsModel::class, $this)->deleteAllLongtexts($sOXID); + + return parent::delete($sOXID); + } +}