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 '';
- 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 '';
- foreach ($aResult as $sPath => $blResult) {
- if ($sPath != $this->oBase->sVersionTag) {
- $sText = '';
- $sDesc = '';
- if (is_array($aResult[$this->oBase->sVersionTag]) && isset($aResult[$this->oBase->sVersionTag][$sPath])) {
- $blDiff = version_compare($aResult[$this->oBase->sVersionTag][$sPath], $this->oBase->getVersion(), '!=');
- $sText = $blDiff ? '!' : '';
- $sDesc = $blDiff ? $this->translate('RemoteVersionDiff') : '';
- }
-
- if (false === $blResult) {
- echo '
'.
- $sText.'
' . $sPath . $sDesc . '
';
- } elseif (null === $blResult) {
- echo '
'.
- $sText.'
' . $sPath . $sDesc . '
';
- } else {
- echo '
'.
- $sText.'
' . $sPath . $sDesc . '
';
- }
- }
- }
- 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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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.
'.
- '',
- '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 '';
+ foreach ($aResult as $sPath => $blResult) {
+ if ($sPath != $this->oBase->sVersionTag) {
+ $sText = '';
+ $sDesc = '';
+ if (is_array($aResult[$this->oBase->sVersionTag]) && isset($aResult[$this->oBase->sVersionTag][$sPath])) {
+ $blDiff = version_compare($aResult[$this->oBase->sVersionTag][$sPath], $this->oBase->getVersion(), '!=');
+ $sText = $blDiff ? '!' : '';
+ $sDesc = $blDiff ? $this->translate('RemoteVersionDiff') : '';
+ }
+
+ if (false === $blResult) {
+ echo '
'.
+ $sText.'
' . $sPath . $sDesc . '
';
+ } elseif (null === $blResult) {
+ echo '
'.
+ $sText.'
' . $sPath . $sDesc . '
';
+ } else {
+ echo '
'.
+ $sText.'
' . $sPath . $sDesc . '
';
+ }
+ }
+ }
+ 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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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.
'.
+ '',
+ '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);
+ }
+}