From 82fb335ab052fbfd69c351dd9f154a94af2fc0c6 Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Wed, 29 Aug 2018 11:01:49 +0200 Subject: [PATCH] add 5.0.0.0 (ionCube for PHP 5.6 - 7.0) --- CHANGELOG.md | 71 + README.md | 15 + composer.json | 41 + docs/Documentation/changelog/Changelog.html | 189 + docs/Documentation/index.html | 100 + .../Anforderungen/Anforderungspruefung.html | 122 + .../Anforderungen/Systemanforderungen.html | 140 + .../Deinstallation/Dateien_loeschen.html | 119 + .../Deinstallation/Datenbank_bereinigen.html | 130 + .../Modul_aus_der_Installation_entfernen.html | 122 + .../Deinstallation/Modul_deaktivieren.html | 114 + ...eiterungen_deaktivieren_und_entfernen.html | 114 + .../Deinstallation/TMP-Ordner_leeren.html | 118 + .../installation/Installationspruefung.html | 130 + .../Neuinstallation/Cronjob_einrichten.html | 121 + .../Neuinstallation/Lizenz_eintragen.html | 115 + .../Neuinstallation/Modul_hinzufuegen.html | 119 + .../Modul_im_Shop_aktivieren.html | 117 + .../Paketquelle_hinzufuegen.html | 122 + .../Providerspezifische_Installation.html | 114 + .../Shopanpassungen_installieren.html | 117 + .../Neuinstallation/TMP-Ordner_leeren.html | 118 + .../Neuinstallation/Updatefaehigkeit.html | 115 + .../Neuinstallation/Vorbereitung.html | 117 + .../installation/Neuinstallation/index.html | 119 + .../installation/Schnellstart.html | 114 + .../installation/Update/Dateien_erneuern.html | 123 + .../Update/Erweiterungen_anpassen.html | 114 + .../Lizenzschluessel_aktualisieren.html | 114 + .../Update/Modul_deaktivieren.html | 114 + .../Modulinformationen_aktualisieren.html | 114 + .../Providerspezifische_Installation.html | 114 + .../Update/Shopanpassungen_installieren.html | 117 + .../Update/TMP-Ordner_leeren.html | 118 + docs/Documentation/installation/index.html | 128 + .../support/Hilfe-und-Support.html | 123 + docs/Documentation/themes/d3/css/d3.css | 198 ++ .../themes/d3/css/theme-blue.min.css | 10 + .../themes/d3/css/theme-blue.min.css.map | 1 + .../themes/d3/fonts/robotoslab-bold.eot | Bin 0 -> 39370 bytes .../themes/d3/fonts/robotoslab-bold.svg | 688 ++++ .../themes/d3/fonts/robotoslab-bold.ttf | Bin 0 -> 39120 bytes .../themes/d3/fonts/robotoslab-bold.woff | Bin 0 -> 23812 bytes .../themes/d3/fonts/robotoslab-bold.woff2 | Bin 0 -> 18720 bytes .../themes/d3/fonts/robotoslab-light.eot | Bin 0 -> 40646 bytes .../themes/d3/fonts/robotoslab-light.svg | 687 ++++ .../themes/d3/fonts/robotoslab-light.ttf | Bin 0 -> 40392 bytes .../themes/d3/fonts/robotoslab-light.woff | Bin 0 -> 24224 bytes .../themes/d3/fonts/robotoslab-light.woff2 | Bin 0 -> 19112 bytes .../themes/d3/fonts/robotoslab-regular.eot | Bin 0 -> 39066 bytes .../themes/d3/fonts/robotoslab-regular.svg | 687 ++++ .../themes/d3/fonts/robotoslab-regular.ttf | Bin 0 -> 38804 bytes .../themes/d3/fonts/robotoslab-regular.woff | Bin 0 -> 23624 bytes .../themes/d3/fonts/robotoslab-regular.woff2 | Bin 0 -> 18620 bytes docs/Documentation/themes/d3/img/favicon.png | Bin 0 -> 4694 bytes docs/Documentation/themes/d3/js/README.md | 12 + docs/Documentation/themes/d3/js/daux.js | 98 + .../themes/d3/js/fontawesome-all.js | 3082 +++++++++++++++++ .../themes/d3/js/highlight.pack.js | 3 + .../themes/d3/js/html5shiv-3.7.3.min.js | 4 + .../themes/d3/js/jquery-1.11.3.min.js | 5 + .../Documentation/tipuesearch/tipuesearch.css | 177 + docs/Documentation/tipuesearch/tipuesearch.js | 365 ++ .../tipuesearch/tipuesearch_content.json | 1 + docs/Precheck/d3precheck.php | 2605 ++++++++++++++ .../public/d3precheckinfolder.php | 198 ++ .../Controller/Admin/d3_cfg_fileuploadlog.php | 38 + .../Admin/d3_cfg_fileuploadlog_list.php | 24 + .../Controller/Admin/d3fileupload_licence.php | 35 + .../Controller/Admin/d3fileupload_list.php | 30 + .../Controller/Admin/d3fileupload_main.php | 37 + .../Admin/d3fileupload_orderupload.php | 298 ++ .../Admin/d3fileupload_settings.php | 315 ++ .../Controller/d3fileupload_response.php | 239 ++ .../Controller/d3uploadmanager.php | 798 +++++ .../Exceptions/d3fileuploadException.php | 45 + .../d3fileupload_cronunavailableexception.php | 38 + src/Application/Model/d3fileupload.php | 281 ++ src/Application/Model/d3fileupload_db.php | 132 + src/Application/Model/d3fileupload_file.php | 226 ++ .../Model/d3fileupload_setting.php | 124 + .../translations/de/d3fileupload_lang.php | 143 + .../translations/en/d3fileupload_lang.php | 124 + .../admin/blocks/admin_article_main_form.tpl | 55 + .../views/admin/de/d3fileupload_lang.php | 166 + .../views/admin/en/d3fileupload_lang.php | 139 + .../admin/tpl/d3fileupload_orderupload.tpl | 172 + .../views/admin/tpl/d3fileupload_settings.tpl | 336 ++ .../html/email_html_order_cust_orderemail.tpl | 15 + .../email_plain_order_cust_orderemail.tpl | 13 + .../account_order_history_cart_items.tpl | 15 + .../page/checkout/checkout_thankyou_info.tpl | 26 + src/Application/views/tpl/d3uploadmanager.tpl | 332 ++ .../email/html/d3fileupload_notification.tpl | 42 + .../email/plain/d3fileupload_notification.tpl | 19 + src/IntelliSenseHelper.php | 25 + .../Model/d3_oxarticle_fileupload.php | 88 + .../Model/d3_oxemail_fileupload.php | 65 + .../Model/d3_oxorder_fileupload.php | 59 + src/Setup/Events.php | 46 + src/Setup/d3fileupload_update.php | 520 +++ src/build/Gruntfile.js | 13 + src/build/grunt/aliases.yaml | 13 + src/build/grunt/jshint.js | 18 + src/build/grunt/less.js | 54 + src/build/grunt/uglify.js | 22 + src/build/grunt/watch.js | 8 + src/build/package.json | 18 + src/files/.htaccess | 15 + src/menu.xml | 22 + src/metadata.php | 146 + src/out/src/css/d3fileupload.css | 38 + src/picture.png | Bin 0 -> 17796 bytes src/public/.htaccess | 11 + src/public/d3_fileupload_cron.php | 74 + 115 files changed, 18445 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 composer.json create mode 100644 docs/Documentation/changelog/Changelog.html create mode 100644 docs/Documentation/index.html create mode 100644 docs/Documentation/installation/Anforderungen/Anforderungspruefung.html create mode 100644 docs/Documentation/installation/Anforderungen/Systemanforderungen.html create mode 100644 docs/Documentation/installation/Deinstallation/Dateien_loeschen.html create mode 100644 docs/Documentation/installation/Deinstallation/Datenbank_bereinigen.html create mode 100644 docs/Documentation/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html create mode 100644 docs/Documentation/installation/Deinstallation/Modul_deaktivieren.html create mode 100644 docs/Documentation/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html create mode 100644 docs/Documentation/installation/Deinstallation/TMP-Ordner_leeren.html create mode 100644 docs/Documentation/installation/Installationspruefung.html create mode 100644 docs/Documentation/installation/Neuinstallation/Cronjob_einrichten.html create mode 100644 docs/Documentation/installation/Neuinstallation/Lizenz_eintragen.html create mode 100644 docs/Documentation/installation/Neuinstallation/Modul_hinzufuegen.html create mode 100644 docs/Documentation/installation/Neuinstallation/Modul_im_Shop_aktivieren.html create mode 100644 docs/Documentation/installation/Neuinstallation/Paketquelle_hinzufuegen.html create mode 100644 docs/Documentation/installation/Neuinstallation/Providerspezifische_Installation.html create mode 100644 docs/Documentation/installation/Neuinstallation/Shopanpassungen_installieren.html create mode 100644 docs/Documentation/installation/Neuinstallation/TMP-Ordner_leeren.html create mode 100644 docs/Documentation/installation/Neuinstallation/Updatefaehigkeit.html create mode 100644 docs/Documentation/installation/Neuinstallation/Vorbereitung.html create mode 100644 docs/Documentation/installation/Neuinstallation/index.html create mode 100644 docs/Documentation/installation/Schnellstart.html create mode 100644 docs/Documentation/installation/Update/Dateien_erneuern.html create mode 100644 docs/Documentation/installation/Update/Erweiterungen_anpassen.html create mode 100644 docs/Documentation/installation/Update/Lizenzschluessel_aktualisieren.html create mode 100644 docs/Documentation/installation/Update/Modul_deaktivieren.html create mode 100644 docs/Documentation/installation/Update/Modulinformationen_aktualisieren.html create mode 100644 docs/Documentation/installation/Update/Providerspezifische_Installation.html create mode 100644 docs/Documentation/installation/Update/Shopanpassungen_installieren.html create mode 100644 docs/Documentation/installation/Update/TMP-Ordner_leeren.html create mode 100644 docs/Documentation/installation/index.html create mode 100644 docs/Documentation/support/Hilfe-und-Support.html create mode 100644 docs/Documentation/themes/d3/css/d3.css create mode 100644 docs/Documentation/themes/d3/css/theme-blue.min.css create mode 100644 docs/Documentation/themes/d3/css/theme-blue.min.css.map create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-bold.eot create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-bold.svg create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-bold.ttf create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-bold.woff create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-bold.woff2 create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-light.eot create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-light.svg create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-light.ttf create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-light.woff create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-light.woff2 create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-regular.eot create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-regular.svg create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-regular.ttf create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-regular.woff create mode 100644 docs/Documentation/themes/d3/fonts/robotoslab-regular.woff2 create mode 100644 docs/Documentation/themes/d3/img/favicon.png create mode 100644 docs/Documentation/themes/d3/js/README.md create mode 100644 docs/Documentation/themes/d3/js/daux.js create mode 100644 docs/Documentation/themes/d3/js/fontawesome-all.js create mode 100644 docs/Documentation/themes/d3/js/highlight.pack.js create mode 100644 docs/Documentation/themes/d3/js/html5shiv-3.7.3.min.js create mode 100644 docs/Documentation/themes/d3/js/jquery-1.11.3.min.js create mode 100644 docs/Documentation/tipuesearch/tipuesearch.css create mode 100644 docs/Documentation/tipuesearch/tipuesearch.js create mode 100644 docs/Documentation/tipuesearch/tipuesearch_content.json create mode 100644 docs/Precheck/d3precheck.php create mode 100644 docs/Precheck/modules/d3/d3fileupload/public/d3precheckinfolder.php create mode 100644 src/Application/Controller/Admin/d3_cfg_fileuploadlog.php create mode 100644 src/Application/Controller/Admin/d3_cfg_fileuploadlog_list.php create mode 100644 src/Application/Controller/Admin/d3fileupload_licence.php create mode 100644 src/Application/Controller/Admin/d3fileupload_list.php create mode 100644 src/Application/Controller/Admin/d3fileupload_main.php create mode 100644 src/Application/Controller/Admin/d3fileupload_orderupload.php create mode 100644 src/Application/Controller/Admin/d3fileupload_settings.php create mode 100644 src/Application/Controller/d3fileupload_response.php create mode 100644 src/Application/Controller/d3uploadmanager.php create mode 100644 src/Application/Model/Exceptions/d3fileuploadException.php create mode 100644 src/Application/Model/Exceptions/d3fileupload_cronunavailableexception.php create mode 100644 src/Application/Model/d3fileupload.php create mode 100644 src/Application/Model/d3fileupload_db.php create mode 100644 src/Application/Model/d3fileupload_file.php create mode 100644 src/Application/Model/d3fileupload_setting.php create mode 100644 src/Application/translations/de/d3fileupload_lang.php create mode 100644 src/Application/translations/en/d3fileupload_lang.php create mode 100644 src/Application/views/admin/blocks/admin_article_main_form.tpl create mode 100644 src/Application/views/admin/de/d3fileupload_lang.php create mode 100644 src/Application/views/admin/en/d3fileupload_lang.php create mode 100644 src/Application/views/admin/tpl/d3fileupload_orderupload.tpl create mode 100644 src/Application/views/admin/tpl/d3fileupload_settings.tpl create mode 100644 src/Application/views/blocks/email/html/email_html_order_cust_orderemail.tpl create mode 100644 src/Application/views/blocks/email/plain/email_plain_order_cust_orderemail.tpl create mode 100644 src/Application/views/blocks/page/account/account_order_history_cart_items.tpl create mode 100644 src/Application/views/blocks/page/checkout/checkout_thankyou_info.tpl create mode 100644 src/Application/views/tpl/d3uploadmanager.tpl create mode 100644 src/Application/views/tpl/email/html/d3fileupload_notification.tpl create mode 100644 src/Application/views/tpl/email/plain/d3fileupload_notification.tpl create mode 100644 src/IntelliSenseHelper.php create mode 100644 src/Modules/Application/Model/d3_oxarticle_fileupload.php create mode 100644 src/Modules/Application/Model/d3_oxemail_fileupload.php create mode 100644 src/Modules/Application/Model/d3_oxorder_fileupload.php create mode 100644 src/Setup/Events.php create mode 100644 src/Setup/d3fileupload_update.php create mode 100644 src/build/Gruntfile.js create mode 100644 src/build/grunt/aliases.yaml create mode 100644 src/build/grunt/jshint.js create mode 100644 src/build/grunt/less.js create mode 100644 src/build/grunt/uglify.js create mode 100644 src/build/grunt/watch.js create mode 100644 src/build/package.json create mode 100644 src/files/.htaccess create mode 100644 src/menu.xml create mode 100644 src/metadata.php create mode 100644 src/out/src/css/d3fileupload.css create mode 100644 src/picture.png create mode 100644 src/public/.htaccess create mode 100644 src/public/d3_fileupload_cron.php diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d742251 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,71 @@ +# Changelog +All notable changes to this project will be documented in this file. + +## Unreleased + +## 5.0.0.0 +### Added +- modulspezifische Logauswertung eingefgt + +### Changed +- Freigabe fr OXID eShop 6.0 bis 6.3 + +## 4.1.0.1 +### Added +- #7137: Exception beim Datei hochladen - Prfung auf Enterprise-exklusive Methoden + +## 4.1.0.0 +- individuelle Uploads mit Beschreibung pro Artikel definierbar (#3093) +- Umsetzung fr Flow-Theme +- zustzliche Template-Blcke ergnzt +- nderungen fr Apache 2.4 integriert +- Fehlermeldungen przisiert +- Dokumentation aktualisiert +- Installation optimiert (#4014) +- Aufrufe in falschem Shopmandanten wird verhindert +- ungeprfte Login-Flle korrigiert + +## 4.0.1.0 +- Umarbeitung fr OXID 4.9.x/5.2.x +- Shell-Script-Generator integriert +- Installationsautomatik angepasst +- kleine Verbesserungen eingefgt + +## 4.0.0.0 +- Refactoring +- Dateien knnen direkt im Adminbereich geladen werden +- #2452 - Upload-Daten werden in Datenbank abgelegt +- #2453 - Upload-Bestellungen knnen fixiert werden (optional) +- #1958 - Cronjob schickt Aktualisierungsbenachrichtigung ber neue Fixierung und Uploads +- #1957 - jeder Upload kann mit Kommentar versehen werden +- #2427 - automatische Installation eingefgt +- PDF-Installationsanleitung eingefgt + +## 3.0.0.2 +- Anpassung fr die 4.8 / 5.1 + +## 3.0.0.1 +- Bugfix fr Anzeige in der Bestellhistorie +- kleine Templateanpassung fr den Modul-Connector + +## 3.0.0.0 +-Version fr PE/CE ab 4.7.0 und EE ab 5.0.0 +- Komplette berarbeitung des Moduls fr die neue Verzeichnisstruktur +- Konsequente Nutzung von Blocks +- Lizenzierung integriert + +## 2.1.2 +- nderungen fr 4.6.x eingebaut + +## 2.1.1 PE4 / EE4 +-Bugfix fuer nicht registrierte Benutzer + +## 2.1.0 PE4 / EE4 +-Anpassung fr 4.5.x +-Konfiguration im Admin + +## 2.0.0 PE4 / EE4 +-Komplette Neuprogrammierung fr OXID PE4 + +## 1.0.0 PE3 / EE3 +-Finale Version fr OXID PE3 diff --git a/README.md b/README.md new file mode 100644 index 0000000..425e86c --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# D³ File Upload für OXID eShop + +## 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/composer.json b/composer.json new file mode 100644 index 0000000..0b03372 --- /dev/null +++ b/composer.json @@ -0,0 +1,41 @@ +{ + "name": "d3/fileupload", + "description": "file upload module for OXID eShop.", + "type": "oxideshop-module", + "keywords": [ + "oxid", + "modules", + "eShop", + "d3", + "file upload", + "orders" + ], + "authors": [ + { + "name": "D3 Data Development (Inh. Thomas Dartsch)", + "email": "info@shopmodule.com", + "homepage": "http://www.d3data.de", + "role": "Owner" + } + ], + "homepage": "https://www.oxidmodule.com/", + "license": [ + "proprietary" + ], + "extra": { + "oxideshop": { + "source-directory": "/src", + "target-directory": "d3/fileupload" + } + }, + "require": { + "php": "5.6 - 7.0", "ext-ionCube-Loader": "*", + "oxid-esales/oxideshop-ce": "6.0 - 6.3", + "d3/modcfg": ">=5.1.0.0" + }, + "autoload": { + "psr-4": { + "D3\\Fileupload\\": "../../../source/modules/d3/fileupload" + } + } +} diff --git a/docs/Documentation/changelog/Changelog.html b/docs/Documentation/changelog/Changelog.html new file mode 100644 index 0000000..b175c53 --- /dev/null +++ b/docs/Documentation/changelog/Changelog.html @@ -0,0 +1,189 @@ + + + + Changelog - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Fileupload - Changelog

+

All notable changes to this project will be documented in this file.

+

Unreleased

+

5.0.0.0

+

Added

+
    +
  • modulspezifische Logauswertung eingefügt
  • +
+

Changed

+
    +
  • Freigabe für OXID eShop 6.0 bis 6.3
  • +
+

4.1.0.1

+

Added

+
    +
  • #7137: Exception beim Datei hochladen - Prüfung auf Enterprise-exklusive Methoden
  • +
+

4.1.0.0

+
    +
  • individuelle Uploads mit Beschreibung pro Artikel definierbar (#3093)
  • +
  • Umsetzung für Flow-Theme
  • +
  • zusätzliche Template-Blöcke ergänzt
  • +
  • Änderungen für Apache 2.4 integriert
  • +
  • Fehlermeldungen präzisiert
  • +
  • Dokumentation aktualisiert
  • +
  • Installation optimiert (#4014)
  • +
  • Aufrufe in falschem Shopmandanten wird verhindert
  • +
  • ungeprüfte Login-Fälle korrigiert
  • +
+

4.0.1.0

+
    +
  • Umarbeitung für OXID 4.9.x/5.2.x
  • +
  • Shell-Script-Generator integriert
  • +
  • Installationsautomatik angepasst
  • +
  • kleine Verbesserungen eingefügt
  • +
+

4.0.0.0

+
    +
  • Refactoring
  • +
  • Dateien können direkt im Adminbereich geladen werden
  • +
  • #2452 - Upload-Daten werden in Datenbank abgelegt
  • +
  • #2453 - Upload-Bestellungen können fixiert werden (optional)
  • +
  • #1958 - Cronjob schickt Aktualisierungsbenachrichtigung über neue Fixierung und Uploads
  • +
  • #1957 - jeder Upload kann mit Kommentar versehen werden
  • +
  • #2427 - automatische Installation eingefügt
  • +
  • PDF-Installationsanleitung eingefügt
  • +
+

3.0.0.2

+
    +
  • Anpassung für die 4.8 / 5.1
  • +
+

3.0.0.1

+
    +
  • Bugfix für Anzeige in der Bestellhistorie
  • +
  • kleine Templateanpassung für den Modul-Connector
  • +
+

3.0.0.0

+

-Version für PE/CE ab 4.7.0 und EE ab 5.0.0

+
    +
  • Komplette Überarbeitung des Moduls für die neue Verzeichnisstruktur
  • +
  • Konsequente Nutzung von Blocks
  • +
  • Lizenzierung integriert
  • +
+

2.1.2

+
    +
  • Änderungen für 4.6.x eingebaut
  • +
+

2.1.1 PE4 / EE4

+

-Bugfix fuer nicht registrierte Benutzer

+

2.1.0 PE4 / EE4

+

-Anpassung für 4.5.x +-Konfiguration im Admin

+

2.0.0 PE4 / EE4

+

-Komplette Neuprogrammierung für OXID PE4

+

1.0.0 PE3 / EE3

+

-Finale Version für OXID PE3

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/index.html b/docs/Documentation/index.html new file mode 100644 index 0000000..5af8bcf --- /dev/null +++ b/docs/Documentation/index.html @@ -0,0 +1,100 @@ + + + + Fileupload + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

Fileupload

für den Oxid eShop
+ + +
+
Autor: D³ Data Development
Stand: 27.08.2018
Version: 5.0.0.0
+ +
Bearbeiter: DS
+
+ + +
+ +
+
+
+
+

Weitere Informationen zum Modul Fileupload finden Sie in unserem Shop: +https://www.oxidmodule.com/OXID-eShop/Module/File-Upload-fuer-Oxid-PE.html

+
+
+
+
+ +
+ +
+ + + + + + + + + + + + diff --git a/docs/Documentation/installation/Anforderungen/Anforderungspruefung.html b/docs/Documentation/installation/Anforderungen/Anforderungspruefung.html new file mode 100644 index 0000000..af18d3d --- /dev/null +++ b/docs/Documentation/installation/Anforderungen/Anforderungspruefung.html @@ -0,0 +1,122 @@ + + + + Anforderungsprüfung - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Im Ordner docs finden Sie den Ordner Precheck. Mit dessen Inhalt können Sie die Mindestanforderungen auf Ihrem +Server direkt prüfen. Kopieren Sie die enthaltenen Dateien und Ordner unverändert in das source-Verzeichnis Ihres +installierten OXID-Shops. Rufen Sie nun über Ihren Browser die folgende Adresse auf:

+

http://www.ihreadresse.de/d3precheck.php

+

Ihnen werden nun Details und Ergebnisse zur Anforderungsprüfung angezeigt.

+
+

Löschen Sie diese Scripte mit Hilfe der in der Übersicht enthaltenen Funktion bitte unbedingt nach der Prüfung +wieder von Ihrem Server.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Anforderungen/Systemanforderungen.html b/docs/Documentation/installation/Anforderungen/Systemanforderungen.html new file mode 100644 index 0000000..25de6ca --- /dev/null +++ b/docs/Documentation/installation/Anforderungen/Systemanforderungen.html @@ -0,0 +1,140 @@ + + + + Systemanforderungen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+
    +
  • PHP Version +
      +
    • 5.6.x bis PHP 7.1.x
    • +
    +
  • +
  • PHP Decoder +
      +
    • installierter ionCube Loader
    • +
    +
  • +
  • Shopversionen / -editionen +
      +
    • OXID eShop Community Edition (CE), Professional Edition (PE) oder Enterprise Edition (EE) in Compilation Version +
        +
      • 6.0.0
      • +
      • 6.0.1
      • +
      • 6.0.2
      • +
      • 6.0.3
      • +
      +
    • +
    +
  • +
  • Installation via Composer +
  • +
+

Beachten Sie, dass die Ihnen vorliegende Modulversion entsprechend für PHP 5.6, PHP 7.0 oder PHP 7.1 sowie dem auf Ihrem Server vorhandenen Decoder (ionCube Loader) kompatibel ist. Im Zweifelsfall kontaktieren Sie uns und nennen den für Ihren Shop genutzten Decoder und die PHP-Version.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/Dateien_loeschen.html b/docs/Documentation/installation/Deinstallation/Dateien_loeschen.html new file mode 100644 index 0000000..97be353 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/Dateien_loeschen.html @@ -0,0 +1,119 @@ + + + + Dateien löschen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Löschen Sie den Ordner fileupload und seine enthaltenen Elemente aus dem Verzeichnis source/modules/d3 Ihres Shops. +Bestätigen Sie anschließend im Shopadmin unter Erweiterungen -> Module -> Installierte Shop-Module die Nachricht:

+
+

Es gibt registrierte Erweiterungen im eShop, deren Verzeichnis nicht vorhanden ist.
+Möchten Sie alle Modulinformationen einschließlich Konfigurationseinstellungen und Blockinformationen für Templates löschen?

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/Datenbank_bereinigen.html b/docs/Documentation/installation/Deinstallation/Datenbank_bereinigen.html new file mode 100644 index 0000000..9c060e8 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/Datenbank_bereinigen.html @@ -0,0 +1,130 @@ + + + + Datenbank bereinigen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul legt Informationen in der Datenbank ab. Sofern diese Daten nicht mehr benötigt werden, können diese gelöscht werden.

+
+

Legen Sie sich vorab bitte unbedingt eine Sicherung an, um die Daten im Zweifelsfall wiederherstellen zu können.

+
+

Für das Modul Fileupload sind dies die folgende Tabellen und Felder:

+
    +
  • das Feld D3ISUPLOAD in der Tabelle oxorderarticles +
  • +
  • das Feld D3UPLOADFIXED in der Tabelle oxorder +
  • +
  • das Feld D3ISUPLOAD in der Tabelle oxarticles +
  • +
  • das Feld D3FILEUPLOADS in der Tabelle oxarticles +
  • +
  • die komplette Tabelle d3fileupload +
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html b/docs/Documentation/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html new file mode 100644 index 0000000..5c60a86 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html @@ -0,0 +1,122 @@ + + + + Modul aus der Installation entfernen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses). Führen Sie Sie dort diesen Befehl aus:

+
php composer remove d3/fileupload --no-update
+
+
+

Achten Sie darauf, dass die Installation über Composer mit derselben PHP-Version erfolgt, in der auch Ihr Shop installiert ist. Sie erhalten sonst unpassende Modulpakete.

+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/Modul_deaktivieren.html b/docs/Documentation/installation/Deinstallation/Modul_deaktivieren.html new file mode 100644 index 0000000..3d4e359 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/Modul_deaktivieren.html @@ -0,0 +1,114 @@ + + + + Modul deaktivieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Deaktivieren Sie den Fileupload über den Shopadmin Erweiterungen -> Module. Klicken Sie nach Auswahl von FileUpload auf den Button Deaktivieren.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html b/docs/Documentation/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html new file mode 100644 index 0000000..6ddaab3 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html @@ -0,0 +1,114 @@ + + + + Modulerweiterungen deaktivieren und entfernen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Deinstallation/TMP-Ordner_leeren.html b/docs/Documentation/installation/Deinstallation/TMP-Ordner_leeren.html new file mode 100644 index 0000000..0059ac0 --- /dev/null +++ b/docs/Documentation/installation/Deinstallation/TMP-Ordner_leeren.html @@ -0,0 +1,118 @@ + + + + TMP-Ordner leeren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Installationspruefung.html b/docs/Documentation/installation/Installationspruefung.html new file mode 100644 index 0000000..64cca4b --- /dev/null +++ b/docs/Documentation/installation/Installationspruefung.html @@ -0,0 +1,130 @@ + + + + Installationsprüfung - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Um die erfolgreiche Installation zu prüfen, können Sie die folgende(n) Checkliste(n) verwenden:

+

Einstellungsunabhängige Prüfungen

+

Backend

+
    +
  • Modul ist unter Erweiterungen -> Module aktiv geschaltet
  • +
  • Modul ist unter Module -> Modul-Connector -> Modulverwaltung aktiv geschaltet
  • +
  • Modul zeigt unter Module -> FileUpload einen eigenen Bereich für Einstellungen
  • +
  • Modul zeigt unter Bestellungen verwalten -> Bestellungen den Tab FileUpload +
  • +
  • Modul zeigt unter Artikel verwalten -> Artikel -> Stamm die Option Upload nach Bestellungen nötig +
  • +
+

Einstellungsabhängige Prüfungen

+

Frontend

+
    +
  • Modul zeigt je nach Artikel in der Bestellhistorie den Uploadmanager
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Cronjob_einrichten.html b/docs/Documentation/installation/Neuinstallation/Cronjob_einrichten.html new file mode 100644 index 0000000..ce9a1dd --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Cronjob_einrichten.html @@ -0,0 +1,121 @@ + + + + Cronjob einrichten - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Legen Sie den Cronjob für die automatische Benachrichtigung über Upload-Aktionen an. Die für die Anlage benötigten Daten finden Sie im Adminbereich des Moduls unter Module -> FileUpload -> Konfiguration -> Cronjob. Weitere Informationen zum Anlegen von Cronjobs finden Sie in unserer FAQ.

+
+

Sie sollten unbedingt den Aufruf von .sh-Dateien via Browser verhindern, so dass kein Unbefugter die Datei von außen aufrufen kann. Dazu können Sie z.B. die .htaccess-Datei des Shops um folgende Zeilen erweitern:

+
+
    <Files *.sh>
+      Require all denied
+    </Files>
+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Lizenz_eintragen.html b/docs/Documentation/installation/Neuinstallation/Lizenz_eintragen.html new file mode 100644 index 0000000..aa636c2 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Lizenz_eintragen.html @@ -0,0 +1,115 @@ + + + + Lizenzschlüssel eintragen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul verwendet Lizenzschlüssel, um die Lizenzverwaltung für Sie und auch für uns einfacher zu gestalten. Hierbei haben Sie je nach Modul die Wahl zwischen einer kostenfreien Testlizenz und einer Lizenz für den Einsatz im Livebetrieb.

+

Rufen Sie zum Anfordern des Lizenzschlüssels die Modulverwaltung im Adminbereich unter Module -> Modul-Connector -> Modulverwaltung auf. Klappen Sie den Eintrag des jeweiligen Moduls aus. Sofern erforderlich, können Sie hier den Lizenzassistenten starten, der schnell und einfach ihr Modul aktiviert.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Modul_hinzufuegen.html b/docs/Documentation/installation/Neuinstallation/Modul_hinzufuegen.html new file mode 100644 index 0000000..142a988 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Modul_hinzufuegen.html @@ -0,0 +1,119 @@ + + + + Modul zur Installation hinzufügen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Führen Sie in der Konsole im selben Verzeichnis diesen Befehl aus, um das Modul Fileupload zur Installation hinzuzufügen:

+
php composer require d3/fileupload --update-no-dev
+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Modul_im_Shop_aktivieren.html b/docs/Documentation/installation/Neuinstallation/Modul_im_Shop_aktivieren.html new file mode 100644 index 0000000..f22e551 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Modul_im_Shop_aktivieren.html @@ -0,0 +1,117 @@ + + + + Modul im Shop aktivieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Aktivieren Sie das Modul über den Shopadmin unter Erweiterungen -> Module. Klicken Sie nach Auswahl von FileUpload auf den Button Aktivieren.

+
+

Enterprise Editon: Achten Sie darauf, dass das Modul in weiteren Shops (Mall) ebenfalls aktiviert werden muss, um dessen Funktion dort auch zu nutzen.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Paketquelle_hinzufuegen.html b/docs/Documentation/installation/Neuinstallation/Paketquelle_hinzufuegen.html new file mode 100644 index 0000000..2ab9ff6 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Paketquelle_hinzufuegen.html @@ -0,0 +1,122 @@ + + + + Paketquelle hinzufügen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses). Senden Sie dort diesen Befehl ab:

+
php composer config repositories.d3 composer https://satis.oxidmodule.com
+
+
+

Achten Sie darauf, dass die Installation über Composer mit derselben PHP-Version erfolgt, in der auch Ihr Shop installiert ist. Sie erhalten sonst unpassende Modulpakete.

+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Providerspezifische_Installation.html b/docs/Documentation/installation/Neuinstallation/Providerspezifische_Installation.html new file mode 100644 index 0000000..4301776 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Providerspezifische_Installation.html @@ -0,0 +1,114 @@ + + + + Providerspezifische Installation - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Shopanpassungen_installieren.html b/docs/Documentation/installation/Neuinstallation/Shopanpassungen_installieren.html new file mode 100644 index 0000000..cd0037a --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Shopanpassungen_installieren.html @@ -0,0 +1,117 @@ + + + + Shopanpassungen installieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Direkt nach der Modulaktivierung startet der Assistent, der Sie durch die Shopanpassung führt. Darin können Sie verschiedene Optionen der Installation wählen.

+

Den Installationsassistenten finden Sie auch unter den Menüpunkten Admin -> Module -> Modul-Connector -> Modulverwaltung -> Modulinstallation.

+

Bei tiefgreifenden Änderungen an Ihrem Shop (z.B. Hinzufügen weiterer Sprachen oder Mandanten) rufen Sie den Installationsassistenten bitte erneut auf, um dann eventuell notwendige Nacharbeiten für das Modul ausführen zu lassen.

+

Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/TMP-Ordner_leeren.html b/docs/Documentation/installation/Neuinstallation/TMP-Ordner_leeren.html new file mode 100644 index 0000000..87042b4 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/TMP-Ordner_leeren.html @@ -0,0 +1,118 @@ + + + + TMP-Ordner leeren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Updatefaehigkeit.html b/docs/Documentation/installation/Neuinstallation/Updatefaehigkeit.html new file mode 100644 index 0000000..4ee450d --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Updatefaehigkeit.html @@ -0,0 +1,115 @@ + + + + Updatefaehigkeit - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Bei individuellen Änderungen von Moduldateien empfehlen wir, jeweils die Überladungsmöglichkeiten des Shops dafür zu verwenden. So brauchen Sie die originalen Moduldateien nicht verändern und erhalten sich so die Updatefähigkeit des Shops und des Moduls. Beachten Sie, dass Moduldateien bei Updateinstallationen überschrieben werden.

+

Weitere Informationen zu den Überladungsmöglichkeiten verschiedener Dateien finden Sie in unserer FAQ.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/Vorbereitung.html b/docs/Documentation/installation/Neuinstallation/Vorbereitung.html new file mode 100644 index 0000000..f144b2c --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/Vorbereitung.html @@ -0,0 +1,117 @@ + + + + Vorbereitungen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Installieren Sie bitte zuerst unseren Modul-Connector in der erforderlichen Version. Ob dies evtl. schon geschehen ist, können Sie im Adminbereich Ihres Shops prüfen. +Existiert der Punkt Module -> Modul-Connector, können Sie die installierte Version unter Bibliotheksverwaltung ablesen. +Fehlt dieser Eintrag, laden Sie den Connector kostenfrei von unserer Homepage http://www.oxidmodule.com/Connector/.

+

Klicken Sie auf den Reiter Download und dort auf den Link Download Erstinstallation Modul-Connector.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Neuinstallation/index.html b/docs/Documentation/installation/Neuinstallation/index.html new file mode 100644 index 0000000..779b402 --- /dev/null +++ b/docs/Documentation/installation/Neuinstallation/index.html @@ -0,0 +1,119 @@ + + + + Neuinstallation - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Schnellstart per Composer

+
php composer config repositories.d3 composer https://satis.oxidmodule.com
+
+php composer require d3/fileupload –-update-no-dev
+
+

Detailliertere Angaben zur Installation entnehmen Sie bitte den folgenden Schritten.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Schnellstart.html b/docs/Documentation/installation/Schnellstart.html new file mode 100644 index 0000000..e25ed3a --- /dev/null +++ b/docs/Documentation/installation/Schnellstart.html @@ -0,0 +1,114 @@ + + + + Schnellstart - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul Fileupload bringt einen umfangreichen Adminbereich mit, in dem Sie die Konfigurationseinstellungen des Moduls setzen können. Über das Menü Module -> FileUpload -> Einstellungen erreichen Sie die Einstellseiten. Arbeiten Sie idealerweise die Optionen einmal durch. Hinweise zu den einzelnen Einstellungen finden Sie in dem dahinter stehenden Fragezeichenfeld. Durch einen Klick darauf öffnet sich der Hinweistext.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Dateien_erneuern.html b/docs/Documentation/installation/Update/Dateien_erneuern.html new file mode 100644 index 0000000..7fb5362 --- /dev/null +++ b/docs/Documentation/installation/Update/Dateien_erneuern.html @@ -0,0 +1,123 @@ + + + + Dateien erneuern - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres +Shops (oberhalb des source- und vendor-Verzeichnisses). Führen Sie dort diesen Befehl aus:

+
php composer update d3/fileupload --no-dev
+
+
+

Achten Sie darauf, dass die Installation über Composer mit derselben PHP-Version erfolgt, in der auch Ihr Shop installiert ist. Sie erhalten sonst unpassende Modulpakete.

+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Erweiterungen_anpassen.html b/docs/Documentation/installation/Update/Erweiterungen_anpassen.html new file mode 100644 index 0000000..03dfac2 --- /dev/null +++ b/docs/Documentation/installation/Update/Erweiterungen_anpassen.html @@ -0,0 +1,114 @@ + + + + Erweiterungen anpassen - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Haben Sie für dieses Modul eigene Erweiterung entwickelt, gleichen Sie dies bitte mit der neuen Fassung des Moduls ab.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Lizenzschluessel_aktualisieren.html b/docs/Documentation/installation/Update/Lizenzschluessel_aktualisieren.html new file mode 100644 index 0000000..950124f --- /dev/null +++ b/docs/Documentation/installation/Update/Lizenzschluessel_aktualisieren.html @@ -0,0 +1,114 @@ + + + + Lizenzschlüssel aktualisieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Wird für die neue Modulversion ein aktualisierter Lizenzschlüssel benötigt, tragen Sie diesen im Adminbereich unter Module -> Modul-Connector -> Modulverwaltung ein. Klappen Sie dazu den Eintrag des jeweiligen Moduls aus und starten den Lizenzassistent.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Modul_deaktivieren.html b/docs/Documentation/installation/Update/Modul_deaktivieren.html new file mode 100644 index 0000000..b4a532d --- /dev/null +++ b/docs/Documentation/installation/Update/Modul_deaktivieren.html @@ -0,0 +1,114 @@ + + + + Modul deaktivieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Deaktivieren Sie das Modul über den Shopadmin unter Erweiterungen -> Module. Klicken Sie nach Auswahl von FileUpload auf den Button Deaktivieren.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Modulinformationen_aktualisieren.html b/docs/Documentation/installation/Update/Modulinformationen_aktualisieren.html new file mode 100644 index 0000000..d196b3d --- /dev/null +++ b/docs/Documentation/installation/Update/Modulinformationen_aktualisieren.html @@ -0,0 +1,114 @@ + + + + Modulinformationen aktualisieren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Providerspezifische_Installation.html b/docs/Documentation/installation/Update/Providerspezifische_Installation.html new file mode 100644 index 0000000..050e3e7 --- /dev/null +++ b/docs/Documentation/installation/Update/Providerspezifische_Installation.html @@ -0,0 +1,114 @@ + + + + Providerspezifische Installation - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Manche Provider erfordern besondere Einstellungen für installierte Module. Ob Ihr Anbieter spezielle Anforderungen stellt und wie diese aussehen, kontrollieren Sie bitte in unserer FAQ.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/Shopanpassungen_installieren.html b/docs/Documentation/installation/Update/Shopanpassungen_installieren.html new file mode 100644 index 0000000..14c915c --- /dev/null +++ b/docs/Documentation/installation/Update/Shopanpassungen_installieren.html @@ -0,0 +1,117 @@ + + + + Shopanpassungen installierren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Ob Shopanpassungen notwendig sind, ist von der Versionsänderung des Moduls abhängig.

+

Möglicherweise sehen Sie nach dem Neuaktivieren des Moduls den Installationsassistent, der Sie durch die Änderungen führt. Folgen Sie dann den einzelnen Schritten. Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen.

+

Wird der Assistent nicht gezeigt (Sie sehen wieder die Modulübersicht), waren keine Anpassungen am Shop notwendig.

+

Ob erforderliche Updates ausgeführt werden sollen, können Sie jederzeit im Adminbereich unter Module -> Modul-Connector -> Modulverwaltung -> Modulinstallation prüfen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/Update/TMP-Ordner_leeren.html b/docs/Documentation/installation/Update/TMP-Ordner_leeren.html new file mode 100644 index 0000000..299c5b3 --- /dev/null +++ b/docs/Documentation/installation/Update/TMP-Ordner_leeren.html @@ -0,0 +1,118 @@ + + + + TMP-Ordner leeren - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/installation/index.html b/docs/Documentation/installation/index.html new file mode 100644 index 0000000..6de1eff --- /dev/null +++ b/docs/Documentation/installation/index.html @@ -0,0 +1,128 @@ + + + + Installation / Update / Deinstallation - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/support/Hilfe-und-Support.html b/docs/Documentation/support/Hilfe-und-Support.html new file mode 100644 index 0000000..b91c7f8 --- /dev/null +++ b/docs/Documentation/support/Hilfe-und-Support.html @@ -0,0 +1,123 @@ + + + + Hilfe und Support - Fileupload + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Bei Bedarf bieten wir Ihnen auch gern die Installation des Moduls in Ihrem Shop an. Geben Sie uns bitte unter den unten genannten Kontaktdaten Bescheid.

+

Haben Sie Fragen oder Unklarheiten in Verbindung mit diesem Modul oder dessen Installation, stehen Ihnen Hilfetexte in unserer Modul-FAQ zur Verfügung. Finden Sie darin die benötigten Antworten nicht, kontaktieren Sie uns bitte unter den folgenden Möglichkeiten:

+
    +
  1. per E-Mail: support@shopmodule.com oder
  2. +
  3. über das Kontaktformular auf Oxidmodule.com oder
  4. +
  5. per Telefon: (+49) 37 21 / 26 80 90 zu unseren Bürozeiten
  6. +
+

Geben Sie bitte an, wo und wie wir gegebenenfalls vorhandene Schwierigkeiten nachvollziehen können. Sind Ihre Fragen shopspezifisch, benötigen wir möglicherweise Zugangsdaten zum betreffenden Shop.

+

Wir wünschen Ihnen mit Ihrem Shop und dem Modul viel Erfolg!

+

Ihr -Team.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/Documentation/themes/d3/css/d3.css b/docs/Documentation/themes/d3/css/d3.css new file mode 100644 index 0000000..c08b7f5 --- /dev/null +++ b/docs/Documentation/themes/d3/css/d3.css @@ -0,0 +1,198 @@ +.s-content table th{ + //background-color: #336ed6; +} + +.Brand{ + color: #fff; +} + +.s-content p { + margin-bottom: 1.0em; +} + +body, +.Homepage { + background-color: #f7f7f7; +} + +.HomepageFooter{ + color : #fff; +} + +.HomepageFooter__links a{ + color : #fff; +} + +.HomepageFooter__links li{ + color : #fff; +} + +.SearchResults .SearchResults__url a, +a{ + color: #028fe8; +} + +.s-content pre { + background : #f5f5f5; +} + +.svg-inline--fa.d3fa-color-blue, .fa.fa-d3color-blue { + color: #028fe8; +} + +.Navbar .svg-inline--fa.d3fa-color-blue, .Navbar .fa.fa-d3color-blue, +.Brand .svg-inline--fa.d3fa-color-blue, .Brand .fa.fa-d3color-blue{ + color: white; +} + +.HomepageFooter__links li{ + float: left; + min-width: 70px; +} + +.HomepageFooter__links li a { + padding-right: 40px; +} + +blockquote.alert a { + text-decoration: none !important; + font-weight: 700; +} + +blockquote.alert.alert-danger { + color: #ce2c2c; + background-color: #f2dede; + border-color: #ce2c2c; + +} + +blockquote.alert.alert-danger a { + color: #843534; +} + +blockquote.alert.alert-warning { + color: #e39c37; + background-color: #fcf8e3; + border-color: #e39c37; +} + +blockquote.alert.alert-warning a { + color: #66512c; +} + +blockquote.alert.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #31708f; +} + +blockquote.alert.alert-info a { + color: #245269; +} + +blockquote.alert.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +blockquote.alert.alert-success a { + color: #2b542c; +} + +.s-content blockquote.alert svg { + float: left; + margin: 4px 12px 0 0; +} + +.HomepageTitle .title, +.HomepageTitle .details { + width: 80%; + margin: 40px auto; + max-width: 500px; +} + +.HomepageTitle h2, +.HomepageTitle div { + width: auto; + margin: unset; + text-align: left; +} + +.HomepageTitle h2 { + font-size: 43px; +} + +.HomepageTitle div { + font-size: 24px; +} + +.HomepageTitle .details div { + font-size: 15px; +} + +aside .Links a { + font-size: 14px; +} + +.Navbar, +.Brand, +.Links, +.Columns__left.Collapsible { + background-color: #028fe8; +} + +.Navbar { + height: auto; + min-height: 50px; + display: inline-table; + width: 100%; +} + +span.navi_element { + border: 1px #c5c5cb; + border-style: solid solid none; + border-radius: 5px 5px 0 0; + padding: 0 5px; + background-color: #f7f7f7; +} + +.Nav { + background-color: #f7f7f7; +} + +.Links a{ + color: #f7f7f7; +} + +.Links a:hover { + text-decoration: underline; +} + +.Links hr { + border-color: #028fe8; +} + +.HomepageFooter, +.Search { + background-color: #028fe8; +} + +.Search { + margin: 10px; +} + +li { + margin-bottom: 7px; +} + +.Search__field { + border-radius: 4px; +} + +.versionselector { + padding: 0 20px; + font-family: "Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif; + font-size: 14px; + color: #f7f7f7; +} diff --git a/docs/Documentation/themes/d3/css/theme-blue.min.css b/docs/Documentation/themes/d3/css/theme-blue.min.css new file mode 100644 index 0000000..322943a --- /dev/null +++ b/docs/Documentation/themes/d3/css/theme-blue.min.css @@ -0,0 +1,10 @@ +/*! + * DAUX.IO + * https://dauxio.github.io/ + * MIT License + */ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress,sub,sup{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,hr,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio],legend{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */ +@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:300;src:url(../fonts/robotoslab-light.eot);src:url(../fonts/robotoslab-light.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-light.woff2) format("woff2"),url(../fonts/robotoslab-light.woff) format("woff"),url(../fonts/robotoslab-light.ttf) format("truetype"),url(../fonts/robotoslab-light.svg#roboto_slablight) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url(../fonts/robotoslab-regular.eot);src:url(../fonts/robotoslab-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-regular.woff2) format("woff2"),url(../fonts/robotoslab-regular.woff) format("woff"),url(../fonts/robotoslab-regular.ttf) format("truetype"),url(../fonts/robotoslab-regular.svg#roboto_slabregular) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url(../fonts/robotoslab-bold.eot);src:url(../fonts/robotoslab-bold.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-bold.woff2) format("woff2"),url(../fonts/robotoslab-bold.woff) format("woff"),url(../fonts/robotoslab-bold.ttf) format("truetype"),url(../fonts/robotoslab-bold.svg#roboto_slabbold) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;padding:0}html{font-size:14px}@media (min-width:850px){html{font-size:16px}}body,html{height:100%;background-color:#fff;color:#222}.Columns__left{background-color:#f7f7f7}.Columns__right__content{padding:10px;background-color:#fff}.Collapsible__content,.s-content pre code:after,.s-content pre code:before{display:none}.Collapsible__trigger{margin:12px;padding:7px 10px;background-color:transparent;border:0;float:right;background-image:none;-webkit-filter:none;filter:none;-webkit-box-shadow:none;box-shadow:none}.Collapsible__trigger__bar{display:block;width:18px;height:2px;margin-top:2px;margin-bottom:3px;background-color:#82becd}.Collapsible__trigger:hover{background-color:#82becd;-webkit-box-shadow:none;box-shadow:none}.Collapsible__trigger:hover .Collapsible__trigger__bar{background-color:#3f4657}@media screen and (min-width:769px){body{background-color:#82becd}.Navbar{position:fixed;z-index:1030;width:100%}.Collapsible__trigger{display:none!important}.Collapsible__content{display:block!important}.Columns{height:100%}.Columns:after,.Columns:before{content:" ";display:table}.Columns:after{clear:both}.Columns__left,.Columns__right{position:relative;min-height:1px;float:left;overflow:auto;height:100%}.Columns__left{width:25%;border-right:1px solid #e7e7e9;overflow-x:hidden}.Columns__right{width:75%}.Columns__right__content{padding:0 20px 20px;min-height:100%}}body{line-height:1.5;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-font-feature-settings:"kern" 1,"kern";-moz-font-feature-settings:"kern" 1,"kern";font-feature-settings:"kern" 1,"kern";-webkit-font-kerning:normal;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:300}.s-content h1,.s-content h2,.s-content h3,.s-content h4,.s-content h5,.s-content h6{cursor:text;line-height:1.4em;margin:2em 0 .5em}.s-content h1 code,.s-content h1 tt,.s-content h2 code,.s-content h2 tt,.s-content h3 code,.s-content h3 tt,.s-content h4 code,.s-content h4 tt,.s-content h5 code,.s-content h5 tt,.s-content h6 code,.s-content h6 tt{font-size:inherit}.s-content h1 i,.s-content h2 i,.s-content h3 i,.s-content h4 i,.s-content h5 i,.s-content h6 i{font-size:.7em}.s-content h1 p,.s-content h2 p,.s-content h3 p,.s-content h4 p,.s-content h5 p,.s-content h6 p{margin-top:0}.s-content h1{margin-top:0;font-size:21.881px;font-size:1.563rem}.s-content h2{font-size:17.5px;font-size:1.25rem}.s-content h3{font-size:14px;font-size:1rem}.s-content h4,.s-content h5,.s-content h6,.s-content small{font-size:10.5px;font-size:.75rem}.s-content a{text-decoration:underline}.s-content p{margin-bottom:1.3em}.s-content ol,.s-content ul{padding-left:2em}.s-content ul p,.s-content ul ul{margin:0}.s-content dl{padding:0}.s-content dl dt{font-weight:700;font-style:italic;padding:0;margin:15px 0 5px}.s-content dl dt:first-child{padding:0}.s-content dl dd{margin:0 0 15px;padding:0 15px}.s-content blockquote{margin:.75em 2em;padding:.5em 1em;font-style:italic;border-left:.25em solid #3f4657}.s-content blockquote cite{font-style:italic}.s-content blockquote cite:before{content:"\2014";padding-right:.5em}.s-content table{width:100%;padding:0;margin-bottom:1em;border-collapse:collapse;font-size:10.5px;font-size:.75rem}.s-content table+table{margin-top:1em}.s-content table tr{border-top:1px solid #eee;background-color:#fff;margin:0;padding:0}.s-content table tr:nth-child(2n){background-color:#f2f3f3}.s-content table th{font-weight:700;border:1px solid #bdc1c4;background:#d7dadb;margin:0;padding:.5em}.s-content table td{border:1px solid #d7dadb;margin:0;padding:.5em}.s-content blockquote>:first-child,.s-content dl dd>:first-child,.s-content dl dt>:first-child,.s-content ol>:first-child,.s-content table td>:first-child,.s-content table th>:first-child,.s-content ul>:first-child{margin-top:0}.s-content blockquote>:last-child,.s-content dl dd>:last-child,.s-content dl dt>:last-child,.s-content ol>:last-child,.s-content table td>:last-child,.s-content table th>:last-child,.s-content ul>:last-child{margin-bottom:0}.s-content img{max-width:100%;display:block;margin:0 auto}.s-content code{font-family:Monaco,Menlo,Consolas,"Lucida Console","Courier New",monospace;padding-top:1.4px;padding-top:.1rem;padding-bottom:1.4px;padding-bottom:.1rem;background:#fafafa;border:1px solid #bdc1c4;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.125);box-shadow:0 1px 1px rgba(0,0,0,.125)}.s-content code:after,.s-content code:before{letter-spacing:-.2em;content:"\00a0"}.s-content pre{background:#fdf6e3;color:#657b83;line-height:1.5em;overflow:auto;border:0;border-radius:0;padding:.75em 2em;margin:0 -20px 20px}.s-content pre code{margin:0;padding:0;white-space:pre;-webkit-box-shadow:none;box-shadow:none}.s-content pre code,.s-content pre tt{background-color:transparent;border:0}.s-content ins,.s-content u{text-decoration:none;border-bottom:1px solid #222}.s-content del a,.s-content ins a,.s-content u a{color:inherit}@media (min-width:1150px){.Columns__right--float .Columns__right__content{height:100%;overflow:auto;padding:0!important;background-color:transparent!important;position:relative}.Columns__right--float .Columns__right__content article{width:100%;min-height:100%;overflow:auto;position:relative;z-index:1}.Columns__right--float .Columns__right__content article:before{content:"";width:50%;min-height:100%;overflow:auto;background-color:#fff;display:block;margin:0;position:absolute;z-index:-1}.Columns__right--float .Page__header,.Columns__right--float .Pager,.Columns__right--float .s-content blockquote,.Columns__right--float .s-content dl,.Columns__right--float .s-content h2,.Columns__right--float .s-content h3,.Columns__right--float .s-content h4,.Columns__right--float .s-content h5,.Columns__right--float .s-content h6,.Columns__right--float .s-content hr,.Columns__right--float .s-content ol,.Columns__right--float .s-content p,.Columns__right--float .s-content table,.Columns__right--float .s-content ul{float:left;clear:left;width:47%;margin-left:1.5%;margin-right:1.5%}.Columns__right--float .s-content table{background-color:#fff;white-space:normal}.Columns__right--float .s-content table code,.Columns__right--float .s-content table pre{white-space:normal}.Columns__right--float .s-content blockquote:before,.Columns__right--float .s-content dl:before,.Columns__right--float .s-content h2:before,.Columns__right--float .s-content h3:before,.Columns__right--float .s-content h4:before,.Columns__right--float .s-content h5:before,.Columns__right--float .s-content h6:before,.Columns__right--float .s-content hr:before,.Columns__right--float .s-content ol:before,.Columns__right--float .s-content p:before,.Columns__right--float .s-content ul:before{width:100%;height:10px;display:block;clear:both}.Columns__right--float .s-content blockquote p,.Columns__right--float .s-content blockquote pre{float:none;display:block}.Columns__right--float .s-content blockquote dl,.Columns__right--float .s-content blockquote h2,.Columns__right--float .s-content blockquote h3,.Columns__right--float .s-content blockquote h4,.Columns__right--float .s-content blockquote h5,.Columns__right--float .s-content blockquote h6,.Columns__right--float .s-content blockquote hr,.Columns__right--float .s-content blockquote ol,.Columns__right--float .s-content blockquote ul,.Columns__right--float .s-content dl dl,.Columns__right--float .s-content dl h2,.Columns__right--float .s-content dl h3,.Columns__right--float .s-content dl h4,.Columns__right--float .s-content dl h5,.Columns__right--float .s-content dl h6,.Columns__right--float .s-content dl hr,.Columns__right--float .s-content dl ol,.Columns__right--float .s-content dl p,.Columns__right--float .s-content dl pre,.Columns__right--float .s-content dl ul,.Columns__right--float .s-content h2 dl,.Columns__right--float .s-content h2 h2,.Columns__right--float .s-content h2 h3,.Columns__right--float .s-content h2 h4,.Columns__right--float .s-content h2 h5,.Columns__right--float .s-content h2 h6,.Columns__right--float .s-content h2 hr,.Columns__right--float .s-content h2 ol,.Columns__right--float .s-content h2 p,.Columns__right--float .s-content h2 pre,.Columns__right--float .s-content h2 ul,.Columns__right--float .s-content h3 dl,.Columns__right--float .s-content h3 h2,.Columns__right--float .s-content h3 h3,.Columns__right--float .s-content h3 h4,.Columns__right--float .s-content h3 h5,.Columns__right--float .s-content h3 h6,.Columns__right--float .s-content h3 hr,.Columns__right--float .s-content h3 ol,.Columns__right--float .s-content h3 p,.Columns__right--float .s-content h3 pre,.Columns__right--float .s-content h3 ul,.Columns__right--float .s-content h4 dl,.Columns__right--float .s-content h4 h2,.Columns__right--float .s-content h4 h3,.Columns__right--float .s-content h4 h4,.Columns__right--float .s-content h4 h5,.Columns__right--float .s-content h4 h6,.Columns__right--float .s-content h4 hr,.Columns__right--float .s-content h4 ol,.Columns__right--float .s-content h4 p,.Columns__right--float .s-content h4 pre,.Columns__right--float .s-content h4 ul,.Columns__right--float .s-content h5 dl,.Columns__right--float .s-content h5 h2,.Columns__right--float .s-content h5 h3,.Columns__right--float .s-content h5 h4,.Columns__right--float .s-content h5 h5,.Columns__right--float .s-content h5 h6,.Columns__right--float .s-content h5 hr,.Columns__right--float .s-content h5 ol,.Columns__right--float .s-content h5 p,.Columns__right--float .s-content h5 pre,.Columns__right--float .s-content h5 ul,.Columns__right--float .s-content h6 dl,.Columns__right--float .s-content h6 h2,.Columns__right--float .s-content h6 h3,.Columns__right--float .s-content h6 h4,.Columns__right--float .s-content h6 h5,.Columns__right--float .s-content h6 h6,.Columns__right--float .s-content h6 hr,.Columns__right--float .s-content h6 ol,.Columns__right--float .s-content h6 p,.Columns__right--float .s-content h6 pre,.Columns__right--float .s-content h6 ul,.Columns__right--float .s-content hr dl,.Columns__right--float .s-content hr h2,.Columns__right--float .s-content hr h3,.Columns__right--float .s-content hr h4,.Columns__right--float .s-content hr h5,.Columns__right--float .s-content hr h6,.Columns__right--float .s-content hr hr,.Columns__right--float .s-content hr ol,.Columns__right--float .s-content hr p,.Columns__right--float .s-content hr pre,.Columns__right--float .s-content hr ul,.Columns__right--float .s-content ol dl,.Columns__right--float .s-content ol h2,.Columns__right--float .s-content ol h3,.Columns__right--float .s-content ol h4,.Columns__right--float .s-content ol h5,.Columns__right--float .s-content ol h6,.Columns__right--float .s-content ol hr,.Columns__right--float .s-content ol ol,.Columns__right--float .s-content ol p,.Columns__right--float .s-content ol pre,.Columns__right--float .s-content ol ul,.Columns__right--float .s-content p dl,.Columns__right--float .s-content p h2,.Columns__right--float .s-content p h3,.Columns__right--float .s-content p h4,.Columns__right--float .s-content p h5,.Columns__right--float .s-content p h6,.Columns__right--float .s-content p hr,.Columns__right--float .s-content p ol,.Columns__right--float .s-content p p,.Columns__right--float .s-content p pre,.Columns__right--float .s-content p ul,.Columns__right--float .s-content ul dl,.Columns__right--float .s-content ul h2,.Columns__right--float .s-content ul h3,.Columns__right--float .s-content ul h4,.Columns__right--float .s-content ul h5,.Columns__right--float .s-content ul h6,.Columns__right--float .s-content ul hr,.Columns__right--float .s-content ul ol,.Columns__right--float .s-content ul p,.Columns__right--float .s-content ul pre,.Columns__right--float .s-content ul ul{width:auto;float:none;display:block}.Columns__right--float .s-content hr{border-color:#ddd}.Columns__right--float .s-content blockquote p,.Columns__right--float .s-content blockquote pre,.Columns__right--float .s-content li p,.Columns__right--float .s-content li pre{width:100%}.Columns__right--float .s-content pre{float:left;clear:right;width:50%;border:0;border-left:10px solid #fff;margin:0 0 10px;padding:0}.Columns__right--float .s-content pre code{padding:0 .5em}}a{text-decoration:none;color:#82becd}a.Link--external:after{content:" " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=)}a.Link--broken{color:red}p{margin:0 0 1em}hr{clear:both;margin:1em 0;border:0;border-top:1px solid #ddd}.Button{display:inline-block;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;border-radius:4px}.Button--small{font-size:12px;line-height:1.5;border-radius:3px}.Button--default{color:#333;background-color:#fff;border-color:#ccc}.Button--default.Button--active{color:#333;background-color:#e6e6e6;border-color:#adadad}.ButtonGroup{position:relative;display:inline-block;vertical-align:middle}.ButtonGroup .Button+.Button{margin-left:-1px}.ButtonGroup>.Button{position:relative;float:left}.ButtonGroup>.Button:focus,.ButtonGroup>.Button:hover{z-index:2}.ButtonGroup>.Button.Button--active,.ButtonGroup>.Button:active{z-index:3}.ButtonGroup>.Button:not(:first-child):not(:last-child){border-radius:0}.ButtonGroup>.Button:first-child{margin-left:0}.ButtonGroup>.Button:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ButtonGroup>.Button:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.Brand,.Navbar{background-color:#3f4657}.Brand{display:block;padding:.75em .6em;font-size:17.5px;font-size:1.25rem;text-shadow:none;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:700;color:#82becd}.Navbar{height:50px;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.25);box-shadow:0 1px 5px rgba(0,0,0,.25);margin-bottom:0}.Navbar .Brand{float:left;line-height:20px;height:50px}.CodeToggler{padding:0 20px}.CodeToggler__text{font-size:12px;line-height:1.5;padding:6px 10px 6px 0;display:inline-block;vertical-align:middle}.Nav,.Page__header h1{margin:0;padding:0}.Nav__arrow{display:inline-block;position:relative;width:16px;margin-left:-16px}.Nav__arrow:before{position:absolute;display:block;content:"";margin:-.25em 0 0 -.4em;left:50%;top:50%;width:.5em;height:.5em;border-right:.15em solid #3f4657;border-top:.15em solid #3f4657;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.Nav__item,.Nav__item a{display:block}.Nav__item a{margin:0;padding:6px 15px 6px 20px;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:400;text-shadow:none}.Nav__item a:hover{color:#3f4657;text-shadow:none}.Nav .Nav{display:none;margin-left:15px}.Nav .Nav .Nav__item a{margin:0 0 0 -15px;padding:3px 30px;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#222;opacity:.7}.Nav .Nav .Nav__item a:hover{opacity:1}.Nav .Nav .Nav__item--active a,.Nav__item a{color:#3f4657}.Nav__item a:hover,.Nav__item--active>a,.Nav__item--open>a{background-color:#c5c5cb}.Nav__item--open>.Nav{display:block}.Nav__item--open>a>.Nav__arrow:before{margin-left:-.25em;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.Page__header{margin:0 0 10px;padding:0;border-bottom:1px solid #eee}.Page__header:after,.Page__header:before{content:" ";display:table}.Page__header:after{clear:both}.Page__header h1{line-height:57px}.Page__header--separator{height:.6em}.Page__header a,ul.TableOfContents a{text-decoration:none}.Page__header .EditOn,.Page__header .ModifiedDate{float:left;font-size:10px;color:gray}.Page__header .EditOn{float:right}.Links,.PoweredBy,.Twitter{padding:0 20px}.Links a{font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:400;color:#3f4657;line-height:2em}.PoweredBy{font-size:10.5px;font-size:.75rem}.Search{position:relative}.Search__field{display:block;width:100%;height:34px;padding:6px 30px 6px 20px;color:#555;border-width:0 0 1px;border-bottom:1px solid #ccc;background:#fff;-webkit-transition:border-color ease-in-out .15s;-o-transition:border-color ease-in-out .15s;transition:border-color ease-in-out .15s}.Search__field:focus{border-color:#82becd;outline:0}.Search__icon{position:absolute;right:9px;top:9px;width:16px;height:16px}.Navbar .Search{float:right;margin:8px 20px}.Navbar .Search__field{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-width:0;border-radius:4px;padding-left:10px}.TableOfContentsContainer__title{border-bottom:4px solid #efefef;margin-bottom:0!important}.TableOfContentsContainer__content>.TableOfContents{margin-top:0}ul.TableOfContents{float:none;font-size:16px;padding-left:1.5em;border-left:6px solid #efefef}ul.TableOfContents p{margin-bottom:0}ul.TableOfContents .TableOfContents{border-left-width:0}.Columns__right--full .TableOfContentsContainer{float:right;min-width:300px;max-width:25%;padding-left:1em}.Columns__right--full .TableOfContentsContainer .TableOfContentsContainer__content>.TableOfContents{border-right:2px solid #efefef}.Columns__right--full .TableOfContentsContainer .TableOfContents{list-style-type:none;padding-left:0}.Columns__right--full .TableOfContentsContainer a{display:block;border-bottom:1px solid #ddd;padding:.2em 0}.Columns__right--full .TableOfContentsContainer li a{padding-left:.75em}.Columns__right--full .TableOfContentsContainer li li a{padding-left:1.5em}.Columns__right--full .TableOfContentsContainer li li li a{padding-left:2.25em}.Columns__right--full .TableOfContentsContainer li li li li a{padding-left:3em}.Pager{padding-left:0;margin:1em 0;list-style:none;text-align:center}.Pager:after,.Pager:before{content:" ";display:table}.Pager,.Pager:after{clear:both}.Pager li{display:inline}.Pager li>a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.Pager li>a:focus,.Pager li>a:hover{text-decoration:none;background-color:#eee}.Pager--next>a{float:right}.Pager--prev>a{float:left}.Checkbox{position:relative;display:block;padding-left:30px;cursor:pointer}.Checkbox input{position:absolute;z-index:-1;opacity:0}.Checkbox__indicator{position:absolute;top:50%;left:0;width:20px;height:20px;margin-top:-10px;background:#e6e6e6}.Checkbox__indicator:after{position:absolute;display:none;content:""}.Checkbox input:focus~.Checkbox__indicator,.Checkbox:hover input~.Checkbox__indicator{background:#ccc}.Checkbox input:checked~.Checkbox__indicator{background:#3f4657}.Checkbox input:checked~.Checkbox__indicator:after{display:block}.Checkbox input:checked:focus~.Checkbox__indicator,.Checkbox:hover input:not([disabled]):checked~.Checkbox__indicator{background:#82becd}.Checkbox input:disabled~.Checkbox__indicator{pointer-events:none;opacity:.6;background:#e6e6e6}.Checkbox .Checkbox__indicator:after{top:4px;left:8px;width:5px;height:10px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border:solid #fff;border-width:0 2px 2px 0}.Checkbox input:disabled~.Checkbox__indicator:after{border-color:#7b7b7b}.Collapsible__content{padding-bottom:14px;padding-bottom:1rem}.Hidden{display:none}.Container{margin-right:auto;margin-left:auto}.Container--inner{width:80%;margin:0 auto}@media (min-width:1200px){.Container{width:1170px}}@media (min-width:992px){.Container{width:970px}}@media (min-width:769px){.Container{width:750px}}@media (min-width:1200px){.Container{width:1170px}}.Homepage{padding-top:60px!important;background-color:#82becd;border-radius:0;border:0;color:#3f4657;overflow:hidden;padding-bottom:0;margin-bottom:0;-webkit-box-shadow:none;box-shadow:none}.HomepageTitle h2{width:80%;font-size:30px;margin:20px auto;text-align:center}.HomepageImage img{display:block;max-width:80%;margin:0 auto;height:auto}.HomepageButtons{padding:20px 0;background-color:#c5c5cb;text-align:center}.HomepageButtons:after,.HomepageButtons:before{content:" ";display:table}.HomepageButtons:after{clear:both}.HomepageButtons .Button--hero{padding:20px 30px;border-radius:0;text-shadow:none;opacity:.8;margin:0 10px;text-transform:uppercase;border:5px solid #3f4657;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:700;background-image:none;-webkit-filter:none;filter:none;-webkit-box-shadow:none;box-shadow:none}@media (max-width:768px){.HomepageButtons .Button--hero{display:block;margin-bottom:10px}}.HomepageButtons .Button--hero:hover{opacity:1}.HomepageButtons .Button--hero.Button--secondary{background-color:#c5c5cb;color:#3f4657}.HomepageButtons .Button--hero.Button--primary{background-color:#3f4657;color:#f7f7f7}.HomepageContent{background-color:#fff;padding:40px 0}.HomepageContent ol li,.HomepageContent ul li{list-style:none;margin-bottom:.5em;position:relative}.HomepageContent ol li:before,.HomepageContent ul li:before{position:absolute;top:50%;left:-1.5em;content:"";width:0;height:0;border:.5em solid transparent;border-left:.5em solid #82becd;float:left;display:block;margin-top:-.5em}.HomepageContent .HeroText,.HomepageFooter__links li a{font-size:16px;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.HomepageContent .HeroText{margin-bottom:20px;font-weight:300;line-height:1.4}@media (min-width:769px){.HomepageContent{padding:40px 20px}.HomepageContent .HeroText{font-size:21px}.HomepageContent .Row{margin:0 -15px}.HomepageContent .Row__half,.HomepageContent .Row__quarter,.HomepageContent .Row__third{float:left;position:relative;min-height:1px;padding-left:15px;padding-right:15px}.HomepageContent .Row__third{width:33.333333%}.HomepageContent .Row__half{width:50%}.HomepageContent .Row__quarter{width:25%}}.HomepageFooter{background-color:#3f4657;color:#82becd;border:0;-webkit-box-shadow:none;box-shadow:none}.HomepageFooter:after,.HomepageFooter:before{content:" ";display:table}.HomepageFooter:after{clear:both}@media (max-width:768px){.HomepageFooter{padding:0 20px;text-align:center}.HomepageFooter .HomepageFooter__links{padding-left:0;list-style-type:none}}@media (min-width:769px){.HomepageFooter .HomepageFooter__links{float:left}.HomepageFooter .HomepageFooter__twitter{float:right}}.HomepageFooter__links,.HomepageFooter__twitter{margin:40px 0}.HomepageFooter__links li a{line-height:32px;font-weight:700}.HomepageFooter__links li a:hover{text-decoration:underline}.HomepageFooter .Twitter{margin-bottom:20px}.hljs{display:block;overflow-x:auto;padding:.5em;background:#fdf6e3;color:#657b83}.hljs-comment,.hljs-quote{color:#93a1a1}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#859900}.hljs-doctag,.hljs-literal,.hljs-meta .hljs-meta-string,.hljs-number,.hljs-regexp,.hljs-string{color:#2aa198}.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-title{color:#268bd2}.hljs-attr,.hljs-attribute,.hljs-class .hljs-title,.hljs-template-variable,.hljs-type,.hljs-variable{color:#b58900}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-subst,.hljs-symbol{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} +/*# sourceMappingURL=theme-blue.min.css.map */ diff --git a/docs/Documentation/themes/d3/css/theme-blue.min.css.map b/docs/Documentation/themes/d3/css/theme-blue.min.css.map new file mode 100644 index 0000000..ff53a9a --- /dev/null +++ b/docs/Documentation/themes/d3/css/theme-blue.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["theme.scss","vendor/normalize.scss","_fonts.scss","_structure.scss","_mixins.scss","_typography.scss","_components.scss","","_homepage.scss","vendor/highlight.scss"],"names":[],"mappings":"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","file":"theme-blue.min.css","sourcesContent":["/*!\n * DAUX.IO\n * https://dauxio.github.io/\n * MIT License\n */\n\n// Daux Style\n@import \"vendor/normalize.scss\";\n@import \"_fonts.scss\";\n@import \"_variables.scss\";\n@import \"_mixins.scss\";\n\n// Layout\n@import \"_structure.scss\";\n\n// Content presentation\n@import \"_typography.scss\";\n@import \"_components.scss\";\n@import \"_homepage.scss\";\n@import \"vendor/highlight.scss\";\n\n@media print {\n @import \"_print.scss\";\n}\n","/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n font: inherit; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n color: inherit;\n opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n","\n:root {\n --font-family-text: -apple-system,\n \".SFNSText-Regular\",\n \"San Francisco\",\n \"Roboto\",\n \"Segoe UI\",\n \"Helvetica Neue\",\n \"Lucida Grande\",\n Arial,\n sans-serif;\n --font-family-monospace: Monaco, Menlo, Consolas, \"Lucida Console\", \"Courier New\", monospace;\n --font-family-heading: \"Roboto Slab\", var(--font-family-text);\n}\n\n/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 300;\n src: url(\"../fonts/robotoslab-light.eot\");\n src:\n url(\"../fonts/robotoslab-light.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-light.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-light.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-light.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-light.svg#roboto_slablight\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/robotoslab-regular.eot\");\n src:\n url(\"../fonts/robotoslab-regular.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-regular.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-regular.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-regular.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-regular.svg#roboto_slabregular\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 700;\n src: url(\"../fonts/robotoslab-bold.eot\");\n src:\n url(\"../fonts/robotoslab-bold.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-bold.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-bold.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-bold.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-bold.svg#roboto_slabbold\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n","\n*, *:after, *:before {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n padding: 0;\n}\n\n/* ============================================================================\nDocs Body & Page Structure\n============================================================================ */\n\nhtml {\n font-size: 14px;\n\n @media (--viewport-large) {\n font-size: 16px;\n }\n}\n\nhtml, body {\n height: 100%;\n background-color: #fff;\n color: var(--text);\n}\n\n.Columns {\n &__left {\n background-color: var(--sidebar-background);\n }\n\n &__right {\n &__content {\n padding: 10px;\n background-color: #fff;\n }\n }\n}\n\n// mobile friendly sub-nav\n.Collapsible__content {\n display: none;\n}\n\n.Collapsible__trigger {\n margin: 12px;\n padding: 7px 10px;\n background-color: transparent;\n border: none;\n float: right;\n\n @include kill-background-image;\n @include kill-box-shadow;\n\n &__bar {\n display: block;\n width: 18px;\n height: 2px;\n margin-top: 2px;\n margin-bottom: 3px;\n background-color: var(--sidebar-collapsible--hamburger-color);\n }\n\n &:hover {\n background-color: var(--sidebar-collapsible--hamburger-hover-background);\n\n @include kill-box-shadow;\n\n .Collapsible__trigger__bar {\n background-color: var(--sidebar-collapsible--hamburger-hover-color);\n }\n }\n}\n\n@media screen and (min-width: 769px) {\n body {\n //Needed only for floating code blocks\n background-color: var(--content-floating-blocks-background);\n }\n\n .Navbar {\n position: fixed;\n z-index: 1030;\n width: 100%;\n }\n\n .Collapsible {\n &__trigger {\n display: none !important;\n }\n\n &__content {\n display: block !important;\n }\n }\n\n .Columns {\n height: 100%;\n\n &:after,\n &:before {\n content: \" \";\n display: table;\n }\n\n &:after {\n clear: both;\n }\n\n &__left, &__right {\n position: relative;\n min-height: 1px;\n float: left;\n overflow: auto;\n height: 100%;\n }\n\n &__left {\n width: 25%;\n border-right: 1px solid var(--sidebar-border);\n overflow-x: hidden;\n }\n\n &__right {\n width: 75%;\n\n &__content {\n padding: 0 20px 20px;\n min-height: 100%;\n }\n }\n }\n}\n","/* ============================================================================\nMixins\n============================================================================ */\n\n@mixin kill-background-image {\n background-image: none;\n filter: none;\n}\n\n@mixin kill-box-shadow {\n box-shadow: none;\n}\n\n// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n\n &:after {\n clear: both;\n }\n}\n","/* ============================================================================\nBase CSS\n============================================================================ */\n\nbody {\n line-height: 1.5;\n\n font-family: var(--font-family-text);\n font-feature-settings: \"kern\" 1;\n font-kerning: normal;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: var(--font-family-heading);\n font-weight: 300;\n}\n\n.s-content {\n h1, h2, h3, h4, h5, h6 {\n cursor: text;\n line-height: 1.4em;\n margin: 2em 0 0.5em;\n\n tt, code {\n font-size: inherit;\n }\n\n i {\n font-size: 0.7em;\n }\n\n p {\n margin-top: 0;\n }\n }\n\n h1 {\n margin-top: 0;\n font-size: var(--type-size-3);\n }\n\n h2 {\n font-size: var(--type-size-4);\n }\n\n h3 {\n font-size: var(--type-size-5);\n }\n\n h4 {\n font-size: var(--type-size-6);\n }\n\n h5 {\n font-size: var(--type-size-6);\n }\n\n h6 {\n font-size: var(--type-size-6);\n }\n\n a {\n text-decoration: underline;\n }\n\n small {\n font-size: var(--type-size-6);\n }\n\n p {\n margin-bottom: 1.3em;\n }\n\n ul, ol {\n padding-left: 2em;\n }\n\n ul p {\n margin: 0;\n }\n\n ul ul {\n margin: 0;\n }\n\n dl {\n padding: 0;\n\n dt {\n font-weight: bold;\n font-style: italic;\n padding: 0;\n margin: 15px 0 5px;\n }\n\n dt:first-child {\n padding: 0;\n }\n\n dd {\n margin: 0 0 15px;\n padding: 0 15px;\n }\n }\n\n blockquote {\n margin: 0.75em 2em;\n padding: 0.5em 1em;\n font-style: italic;\n border-left: 0.25em solid var(--blockquote-border-color);\n\n cite {\n font-style: italic;\n }\n\n cite:before {\n content: \"\\2014\";\n padding-right: 0.5em;\n }\n }\n\n table {\n width: 100%;\n padding: 0;\n margin-bottom: 1em;\n border-collapse: collapse;\n\n font-size: var(--type-size-6);\n\n + table {\n margin-top: 1em;\n }\n\n tr {\n border-top: 1px solid #eee;\n background-color: white;\n margin: 0;\n padding: 0;\n }\n\n tr:nth-child(2n) {\n background-color: var(--lightest-gray);\n }\n\n th {\n font-weight: bold;\n border: 1px solid var(--light-gray);\n background: var(--lighter-gray);\n margin: 0;\n padding: 0.5em;\n }\n\n td {\n border: 1px solid var(--lighter-gray);\n margin: 0;\n padding: 0.5em;\n }\n }\n\n ul,\n ol,\n blockquote,\n dl dt,\n dl dd,\n table th,\n table td {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n max-width: 100%;\n display: block;\n margin: 0 auto;\n }\n\n code {\n font-family: var(--font-family-monospace);\n padding-top: 0.1rem;\n padding-bottom: 0.1rem;\n background: var(--code-tag-background-color);\n border: 1px solid var(--light-gray);\n border-radius: var(--code-tag-border-radius);\n box-shadow: var(--code-tag-box-shadow);\n\n &:before,\n &:after {\n letter-spacing: -0.2em;\n content: \"\\00a0\"; /* non-breaking space*/\n }\n }\n\n pre {\n background: #fdf6e3;\n color: #657b83;\n line-height: 1.5em;\n overflow: auto;\n border: none;\n border-radius: 0;\n padding: 0.75em 2em;\n margin: 0 -20px 20px -20px;\n\n code {\n margin: 0;\n padding: 0;\n white-space: pre;\n box-shadow: none;\n }\n\n code:before,\n code:after {\n display: none;\n }\n\n code, tt {\n background-color: transparent;\n border: none;\n }\n }\n\n u,\n ins {\n text-decoration: none;\n border-bottom: 1px solid var(--text);\n\n a {\n color: inherit;\n }\n }\n\n del a {\n color: inherit;\n }\n}\n\n//Content pages float view\n@media (min-width: 1150px) {\n .Columns__right--float .Columns__right__content {\n height: 100%;\n overflow: auto;\n padding: 0 !important;\n background-color: transparent !important;\n position: relative;\n\n article {\n width: 100%;\n min-height: 100%;\n overflow: auto;\n position: relative;\n z-index: 1;\n }\n\n article:before {\n content: \"\";\n width: 50%;\n min-height: 100%;\n overflow: auto;\n background-color: white;\n display: block;\n margin: 0;\n position: absolute;\n z-index: -1;\n }\n }\n\n .Columns__right--float {\n .Pager,\n .Page__header,\n .s-content blockquote,\n .s-content p,\n .s-content ul,\n .s-content ol,\n .s-content dl,\n .s-content h2,\n .s-content h3,\n .s-content h4,\n .s-content h5,\n .s-content h6,\n .s-content hr,\n .s-content table {\n float: left;\n clear: left;\n width: 47%;\n margin-left: 1.5%;\n margin-right: 1.5%;\n }\n }\n\n .Columns__right--float .s-content {\n table {\n background-color: white;\n white-space: normal;\n\n pre, code {\n white-space: normal;\n }\n }\n\n blockquote, p, ul, ol, dl, h2, h3, h4, h5, h6, hr {\n &:before {\n width: 100%;\n height: 10px;\n display: block;\n clear: both;\n }\n\n p, ul, ol, dl, h2, h3, h4, h5, h6, pre, hr {\n width: auto;\n float: none;\n display: block;\n }\n }\n\n hr {\n border-color: #ddd;\n }\n\n // Paragraphs and code inside lists and\n // blockquotes should have 100% width\n li, blockquote {\n p, pre {\n width: 100%;\n }\n }\n\n pre {\n float: left;\n clear: right;\n width: 50%;\n border: none;\n border-left: 10px solid white;\n margin: 0 0 10px;\n padding: 0;\n\n code {\n padding: 0 0.5em;\n }\n }\n }\n}\n","/* ============================================================================\nBase tags\n============================================================================ */\n\na {\n text-decoration: none;\n color: var(--link-color);\n\n &.Link--external:after {\n content: \" \" url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=);\n }\n\n &.Link--broken {\n color: red;\n }\n}\n\np {\n margin: 0 0 1em;\n}\n\nhr {\n clear: both;\n margin: 1em 0;\n border: 0;\n border-top: 1px solid #ddd;\n}\n\n/* ============================================================================\nComponents\n============================================================================ */\n\n.Button {\n display: inline-block;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n border-radius: 4px;\n\n &--small {\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n }\n\n &--default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n\n &.Button--active {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n }\n }\n}\n\n.ButtonGroup {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .Button alignment given font-size hack above\n\n .Button + .Button {\n margin-left: -1px;\n }\n\n > .Button {\n position: relative;\n float: left;\n\n // Bring the \"active\" button to the front\n &:hover,\n &:focus {\n z-index: 2;\n }\n\n &:active,\n &.Button--active {\n z-index: 3;\n }\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n\n // Set corners individually because sometimes \n // a single button can be in a .ButtonGroup\n // and we need :first-child and :last-child to both match\n &:first-child {\n margin-left: 0;\n }\n\n &:first-child:not(:last-child) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n }\n\n &:last-child:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n }\n }\n}\n\n.Brand {\n display: block;\n background-color: var(--brand-background);\n padding: 0.75em 0.6em;\n font-size: var(--type-size-4);\n text-shadow: none;\n font-family: var(--font-family-heading);\n font-weight: 700;\n color: var(--brand-color);\n}\n\n.Navbar {\n height: 50px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);\n background-color: var(--homepage-navbar-background);\n margin-bottom: 0;\n\n .Brand {\n float: left;\n line-height: 20px;\n height: 50px;\n }\n}\n\n.CodeToggler {\n padding: 0 20px;\n\n &__text {\n font-size: 12px;\n line-height: 1.5;\n padding: 6px 10px 6px 0;\n display: inline-block;\n vertical-align: middle;\n }\n}\n\n// Sidebar navigation\n.Nav {\n margin: 0;\n padding: 0;\n\n &__arrow {\n display: inline-block;\n position: relative;\n width: 16px;\n margin-left: -16px;\n\n &:before {\n position: absolute;\n display: block;\n content: \"\";\n margin: -0.25em 0 0 -0.4em;\n left: 50%;\n top: 50%;\n width: 0.5em;\n height: 0.5em;\n border-right: 0.15em solid var(--sidebar-link-arrow-color);\n border-top: 0.15em solid var(--sidebar-link-arrow-color);\n transform: rotate(45deg);\n transition-duration: 0.3s;\n }\n }\n\n &__item {\n display: block;\n\n a {\n display: block;\n margin: 0;\n padding: 6px 15px 6px 20px;\n font-family: var(--font-family-heading);\n font-weight: 400;\n color: var(--sidebar-link-color);\n text-shadow: none;\n }\n\n a:hover {\n color: var(--sidebar-link-color);\n text-shadow: none;\n background-color: var(--sidebar-link-hover-background);\n }\n }\n}\n\n.Nav .Nav {\n display: none;\n margin-left: 15px;\n\n .Nav__item a {\n margin: 0;\n margin-left: -15px;\n padding: 3px 30px;\n font-family: var(--font-family-text);\n color: var(--sidebar-link-secondary-color);\n opacity: 0.7;\n\n &:hover {\n opacity: 1;\n }\n }\n\n .Nav__item--active a {\n color: var(--sidebar-link-color);\n }\n}\n\n.Nav__item {\n &--open,\n &--active {\n > a {\n background-color: var(--sidebar-link-active-background);\n }\n }\n\n &--open {\n > .Nav {\n display: block;\n }\n\n > a > .Nav__arrow:before {\n margin-left: -0.25em;\n transform: rotate(135deg);\n }\n }\n}\n\n.Page__header {\n margin: 0 0 10px;\n padding: 0;\n border-bottom: 1px solid #eee;\n\n @include clearfix();\n\n h1 {\n margin: 0;\n padding: 0;\n line-height: 57px;\n }\n\n &--separator {\n height: 0.6em;\n }\n\n a {\n text-decoration: none;\n }\n\n .ModifiedDate {\n float: left;\n font-size: 10px;\n color: gray;\n }\n\n .EditOn {\n float: right;\n font-size: 10px;\n color: gray;\n }\n}\n\n.Links {\n padding: 0 20px;\n\n a {\n font-family: var(--font-family-heading);\n font-weight: 400;\n color: var(--sidebar-link-color);\n line-height: 2em;\n }\n}\n\n.Twitter {\n padding: 0 20px;\n}\n\n.PoweredBy {\n padding: 0 20px;\n font-size: var(--type-size-6);\n}\n\n.Search {\n position: relative;\n\n &__field {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 30px 6px 20px;\n color: var(--search-field-color);\n border-width: 0 0 1px;\n border-bottom: 1px solid var(--search-field-border-color);\n background: var(--search-field-background);\n transition: border-color ease-in-out 0.15s;\n\n &:focus {\n border-color: var(--search-field-hover-border-color);\n outline: 0;\n }\n }\n\n &__icon {\n position: absolute;\n right: 9px;\n top: 9px;\n width: 16px;\n height: 16px;\n }\n}\n\n.Navbar .Search {\n float: right;\n margin: 8px 20px;\n\n &__field {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n border-width: 0;\n border-radius: 4px;\n padding-left: 10px;\n }\n}\n\n.TableOfContentsContainer {\n &__title {\n border-bottom: 4px solid #efefef;\n margin-bottom: 0 !important;\n }\n\n &__content > .TableOfContents {\n margin-top: 0;\n }\n}\n\nul.TableOfContents {\n float: none;\n font-size: 16px;\n padding-left: 1.5em;\n border-left: 6px solid #efefef;\n\n p {\n margin-bottom: 0;\n }\n\n a {\n text-decoration: none;\n }\n\n .TableOfContents {\n border-left-width: 0;\n }\n}\n\n.Columns__right--full .TableOfContentsContainer {\n float: right;\n min-width: 300px;\n max-width: 25%;\n padding-left: 1em;\n\n .TableOfContentsContainer__content > .TableOfContents {\n border-right: 2px solid #efefef;\n }\n\n .TableOfContents {\n list-style-type: none;\n padding-left: 0;\n }\n\n a {\n display: block;\n border-bottom: 1px solid #ddd;\n padding: 0.2em 0;\n }\n\n li a {\n padding-left: 0.75em;\n }\n\n li li a {\n padding-left: 1.5em;\n }\n\n li li li a {\n padding-left: 2.25em;\n }\n\n li li li li a {\n padding-left: 3em;\n }\n}\n\n.Pager {\n padding-left: 0;\n margin: 1em 0;\n list-style: none;\n text-align: center;\n clear: both;\n\n @include clearfix();\n\n li {\n display: inline;\n\n > a {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: #eee;\n }\n }\n\n &--next > a {\n float: right;\n }\n\n &--prev > a {\n float: left;\n }\n}\n\n.Checkbox {\n position: relative;\n display: block;\n padding-left: 30px;\n cursor: pointer;\n\n input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n }\n}\n\n.Checkbox__indicator {\n position: absolute;\n top: 50%;\n left: 0;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n background: var(--checkbox-background);\n\n /* Check mark */\n &:after {\n position: absolute;\n display: none;\n content: \"\";\n }\n\n /* Hover and focus states */\n .Checkbox:hover input ~ &,\n .Checkbox input:focus ~ & {\n background: var(--checkbox-hover-background);\n }\n\n /* Checked state */\n .Checkbox input:checked ~ & {\n background: var(--checkbox-checked-background);\n\n /* Show check mark */\n &:after {\n display: block;\n }\n }\n\n /* Hover state whilst checked */\n .Checkbox:hover input:not([disabled]):checked ~ &, .Checkbox input:checked:focus ~ & {\n background: var(--checkbox-checked-hover-background);\n }\n\n /* Disabled state */\n .Checkbox input:disabled ~ & {\n pointer-events: none;\n opacity: 0.6;\n background: var(--checkbox-disabled-background);\n }\n\n /* Checkbox tick */\n .Checkbox &:after {\n top: 4px;\n left: 8px;\n width: 5px;\n height: 10px;\n transform: rotate(45deg);\n border: solid var(--checkbox-tick-color);\n border-width: 0 2px 2px 0;\n }\n\n /* Disabled tick colour */\n .Checkbox input:disabled ~ &:after {\n border-color: var(--checkbox-disabled-tick-color);\n }\n}\n\n.Collapsible__content {\n padding-bottom: 1rem;\n}\n\n.Hidden {\n display: none;\n}\n",null,"/* ============================================================================\nHomepage\n============================================================================ */\n\n.Container {\n margin-right: auto;\n margin-left: auto;\n\n &--inner {\n width: 80%;\n margin: 0 auto;\n }\n}\n\n@media (min-width: 1200px) {\n .Container {\n width: 1170px;\n }\n}\n\n@media (min-width: 992px) {\n .Container {\n width: 970px;\n }\n}\n\n@media (min-width: 769px) {\n .Container {\n width: 750px;\n }\n}\n\n@media (min-width: 1200px) {\n .Container {\n width: 1170px;\n }\n}\n\n.Homepage {\n padding-top: 60px !important;\n background-color: var(--homepage-hero-background);\n border-radius: 0;\n border: none;\n color: var(--homepage-hero-color);\n overflow: hidden;\n padding-bottom: 0;\n margin-bottom: 0;\n\n @include kill-box-shadow;\n}\n\n.HomepageTitle {\n h2 {\n width: 80%;\n font-size: 30px;\n margin: 20px auto;\n text-align: center;\n }\n}\n\n.HomepageImage {\n img {\n display: block;\n max-width: 80%;\n margin: 0 auto;\n height: auto;\n }\n}\n\n.HomepageButtons {\n padding: 20px 0;\n background-color: var(--hero-button-block-background);\n text-align: center;\n\n @include clearfix;\n\n .Button--hero {\n padding: 20px 30px;\n border-radius: 0;\n text-shadow: none;\n opacity: 0.8;\n margin: 0 10px;\n text-transform: uppercase;\n border: 5px solid var(--hero-button-border-color);\n font-family: var(--font-family-heading);\n font-weight: 700;\n\n @include kill-background-image;\n @include kill-box-shadow;\n\n @media (max-width: 768px) {\n display: block;\n margin-bottom: 10px;\n }\n\n &:hover {\n opacity: 1;\n }\n\n &.Button--secondary {\n background-color: var(--hero-button-secondary-background);\n color: var(--hero-button-secondary-color);\n }\n\n &.Button--primary {\n background-color: var(--hero-buttom-primary-background);\n color: var(--hero-button-primary-color);\n }\n }\n}\n\n.HomepageContent {\n background-color: white;\n padding: 40px 0;\n\n ul, ol {\n li {\n list-style: none;\n margin-bottom: 0.5em;\n position: relative;\n }\n\n li:before {\n position: absolute;\n top: 50%;\n left: -1.5em;\n content: \"\";\n width: 0;\n height: 0;\n border: 0.5em solid transparent;\n border-left: 0.5em solid var(--homepage-bullet-color);\n float: left;\n display: block;\n margin-top: -0.5em;\n }\n }\n\n .HeroText {\n font-family: var(--font-family-heading);\n font-weight: 300;\n font-size: 16px;\n margin-bottom: 20px;\n line-height: 1.4;\n }\n\n @media (min-width: 769px) {\n padding: 40px 20px;\n\n .HeroText {\n font-size: 21px;\n }\n\n .Row {\n margin: 0 -15px;\n }\n\n .Row__third, .Row__half, .Row__quarter {\n float: left;\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n }\n\n .Row__third {\n width: 33.333333%;\n }\n\n .Row__half {\n width: 50%;\n }\n\n .Row__quarter {\n width: 25%;\n }\n }\n}\n\n.HomepageFooter {\n background-color: var(--homepage-footer-background);\n color: var(--homepage-footer-color);\n border: none;\n\n @include kill-box-shadow;\n @include clearfix;\n\n @media (max-width: 768px) {\n padding: 0 20px;\n text-align: center;\n\n .HomepageFooter__links {\n padding-left: 0;\n list-style-type: none;\n }\n }\n\n @media (min-width: 769px) {\n .HomepageFooter__links {\n float: left;\n }\n\n .HomepageFooter__twitter {\n float: right;\n }\n }\n\n &__links {\n margin: 40px 0;\n\n li a {\n line-height: 32px;\n font-size: 16px;\n font-family: var(--font-family-heading);\n font-weight: 700;\n }\n\n li a:hover {\n text-decoration: underline;\n }\n }\n\n &__twitter {\n margin: 40px 0;\n }\n\n .Twitter {\n margin-bottom: 20px;\n }\n}\n","/* ===========================================================================================\nCode Highlighting\n============================================================================================== */\n\n/*\n\nOrginal Style from ethanschoonover.com/solarized (c) Jeremy Hull \n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #fdf6e3;\n color: #657b83;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #93a1a1;\n}\n\n/* Solarized Green */\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-addition {\n color: #859900;\n}\n\n/* Solarized Cyan */\n.hljs-number,\n.hljs-string,\n.hljs-meta .hljs-meta-string,\n.hljs-literal,\n.hljs-doctag,\n.hljs-regexp {\n color: #2aa198;\n}\n\n/* Solarized Blue */\n.hljs-title,\n.hljs-section,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n color: #268bd2;\n}\n\n/* Solarized Yellow */\n.hljs-attribute,\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-class .hljs-title,\n.hljs-type {\n color: #b58900;\n}\n\n/* Solarized Orange */\n.hljs-symbol,\n.hljs-bullet,\n.hljs-subst,\n.hljs-meta,\n.hljs-meta .hljs-keyword,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-link {\n color: #cb4b16;\n}\n\n/* Solarized Red */\n.hljs-built_in,\n.hljs-deletion {\n color: #dc322f;\n}\n\n.hljs-formula {\n background: #eee8d5;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n"]} \ No newline at end of file diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-bold.eot b/docs/Documentation/themes/d3/fonts/robotoslab-bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..4e88b6cfeb0c6dcef692a784ed7a62e322634273 GIT binary patch literal 39370 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 J_r)5b{{l>b;dlT5 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-bold.svg b/docs/Documentation/themes/d3/fonts/robotoslab-bold.svg new file mode 100644 index 0000000..f8bda55 --- /dev/null +++ b/docs/Documentation/themes/d3/fonts/robotoslab-bold.svg @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-bold.ttf b/docs/Documentation/themes/d3/fonts/robotoslab-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b5120e7f3caa028717c7440eaaf6edd7846ce08c GIT binary patch literal 39120 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%0A0+ao8+W(Tg8N8ykwxbQ$0a#nur&_ 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 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-bold.woff b/docs/Documentation/themes/d3/fonts/robotoslab-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..9e98b2d356be062c31c97ec55f36eabafe514c44 GIT binary patch literal 23812 zcmZsB1B|FW5bfHwZQHhO+qUn{yoBdz%fBpZrh>5Al0ssJ({jxa!!JZJ!Ph3P)?3Ww-l_`Ef1q2VY zEUqB0{L5Ve0D$8H0Kk7js!AM+E2|0t06@b0>PY=U8qU?8!Fv#=m-MzrFzO{5MC?LBe-iLyzC@ zYW(LL!G8ei1RSt4v^D+Ze)WJLe|AA@ocePD4$EteBIG%B;fX6wXLriP(O+w3ZQsQ zpppb)-BUzUWc8c_XjiW#cJ5Q|_R`K8C`0WxFQ-clXBi2+Ry27adi0soGw_8Ce>~Cq)yV4vgbB^mT$3N=w=PKYs<2A65f&= z>w>o)xT}o52j{j*?Q-Uk?!ngS*6~)TuF~~zx9~D~2xb#yKMwuK6=HZP=y+kwU<9iRd#v&GPC;KvQ;6b{N@dOY5^KQMq!!^5BjdTYFbD?lO~h z0k;k1L(Obqv+T^qFoBjRi>j!GXp@8?`@O5!JtpUn1YlwqT^)7f$}Ea?sI9m+$c$V& z=R|AIfS%zIY}ID}_=n5l_puLWEWNrWb~ATdt*|go`(icn zQfd1A(MZFQ`?b_C;|KOuC^Ra6>e=LwU#me>CoAe-RG|GAdR-WhCjr%i-s;rs8EHW# zG>t(m0I2(@>aeOzvp;&jb^&h*EI?!pkgfS)*n((x5$jNShSxWG4-B|h0WhO3#*Z|m^mrG_#Lw8*?HzB(L7*-H-Zp z$Y@QW%+FuI*+Zs3`(1xKi8|3cG#@!`NISN2>aIjM;e=0L{X%7Ex>7kw#^~Mx$(naQ%RWRO}SptQj&v#aoj~E z@!bdWe^y*xMHgJ0>ff2l6XDB!;9BGmV{7ZmeGhgYh+$pDy#BmyB{cVsL~JMJ$)32Z z)imVXd0Mf#KJ!Vw(41+%ze$>fvgRJu=odYnyqM0({ynr(Em+Aho6GsmlKaR)lcdP^ z<({j&aEj%V(=Oz2T&M-FH7hljt~0-vHKISqsa<4OrbqLu&3NWJdA3S;p7x=TT^MV} zJzd>m^Ig(r{_f)xl~ubP{?V#y@Ll{m1pTSy{c>Mhi0H_DX?I&;&Jt8jk4aX1I9@;_ zBrcB`XhbK#Q@y323Yn82Te`(?Iw8`X?5vmIYr5k&Qo`5oUzsjmRKQdjN3QFH87suA zCeo)9zh5&)a#dqxQrHoKDzhbju*(fZQB+*1J5e1aSRz7{6_Qi#A?Z-%Om)VcXp22!Ft12^GbBG66&P_1w;zUD|Fg3fJB5&9NqQw>Qg+bTbHK9U zxIW{^)$6Er$uT9l=YpXlN1l@|F<8&puNpwC#4+WP1-HB;A+kasjMLy5yGAo&6Jg9Y z!N@JqLQw4URyBO`=P2HoxrmJ9kYma%>zG3>tnU;~P3~X%+3KXTjTt9ig9`xUovt^+ z#GeJ6u0sDh>0X-}W46n*Dc8wR+y=um-2Jo^<7MYbGY&CkLl>9}JrT0w{xy`<@_-nn zznTNwZE2#1rgWLp#QR>|{I#V0_N}X8h?>N0-LVp69TGJT2{Od7Tkm*`mtkGKD_)&8 zg*9+KT95wAe0A%;vGo7MQKNX{SwjOC#|KEmT>}HaNQTd!8GuB?$uSvukVr-W4*^az zhAF^7C4-EJfS7==J=%CU6AxgLuRjIRFxvob-4MSgqW{J+b2MHb=pFCv=ZacN3kXoe z6JpjkkuWwA0E5R!`vzyA5CKkyBJdM5Rb-4Gddv)=z0$`51{OzB&IJNK@cCUdFf{6A zSOZrXfWM(|WB+SR0|T=^zwum*V61l(=#Vk+jRuDPPa|d!P(0~y?_lp(?}Wn0ZSGt= zV_JRS8O8!_2{)7u6cLmXloON`loixFlo}Kr)E$&HN=kCD%Fn0S+Yf#jet~>|A)taj zf)0LA;Ge+YKp2%=(nvnBJig(do*)0OpU0nspQIo3pO>GJ$Cs}icX&B|j_2LmAYu4t z{?!MAiJ&ETG~QDW1LvRDF6@@=hVIbTT%6ufu)$pcfDimbGZs)7m@1n~oGhJ9o=%@n zpg^I1q5`9Rq(r58rhiWNP?1vOR25d|SQ%RDToG`^OFzG1%+0Uj{Ze-EwybL|B{qsL+31=3uBfq^qYqELYcdO%`}dek-JzWt|4CiY)` zp7`w%a{EG55di4>;G2KXW~!F%3t}iKog}eIv!u|Vu9(b@d2^$|v=|JQR6}lrx;PNk zAi6~~E=Sz>ADTVKl#M5k#QfDSv44Y8a~9ah#c!rFD_eBBFr$n`isgYFW4KiAod{Bv zMwHI@BCy-{j_MQp2<%4H_9-oqo03GvY}mPzrFEv=QmT-vlJ1-kDod$mm`R@mv-%5L z)ydZh)+M@FB$4EC_$3=Tf?g>kfhaLUI8w|)kt*g0QY+w0rNZ_liIoultWt6+Vu2|Q zDTQf86b{JvZHY6LSAjB_qEJ)0!Vg|umu@tNpXD#yxhht&C@)R9ip|-?#fsyKc#g8k zksp;zH;2)$$S7934NWxzr!zWGk}}WvA_2OjNn}@oYb@1671=G~qnhW&0h1)IQK))C zT`AfVG?efaMZR=2Op4SFy6_VH?}G&ZtYtUP#W0;SaqipSlxi?r}h4 zRg3T2;C0kkAMpigRcv*wCUD|bpg8*H=DKHVlEXYSrq#aRPrlIQy|D}M9Dv`KQ0lC= z$S4;0ZlIX1gDR_7pyyLvB~q4H{FP;t^gqgh)=*?Eo8S2=Cq(EV5b$c*+?zsdI`Y-J3n1Y6_{sf@-)y|UBwEd$vXd7 z95L1rPIys?jO)6*Oy!UAvlKy(Gg=&xbNx?82ie_ntNC{C%uRnwi}^gXdYC;nIqZ&M z{$MtE`raPyr zNzd43w*z!iRkiJ?d8;=cqr9RfFb}_l3N94B*jV)|Atrr1! zRD9W43DqgacE)jx7*pA|%s+I)@x_192Lh+h7E8ON+#Vu?sJ&a;;@nS<#F>vCm{cruFy?b?a;sH2V zoG{4>*mTQEy;|ExtZcBSQ$+sgI$v_&{=xerJ;!?AC|oBF*GKHc2G~s!woB~G!0b0oy}r@P^lOu?!YEQ$>+J;56JnGZeH*8p)X3@yRSPzbUFZbH8+TwS^1Ox#5`2m3c z-2;8WeUe2Vex~`3t`nu{-2YA#lmDGKnkOLn3kJfGI7^5i1PutYB!OHMSpei#d#W|>ji+itaYY{%wN4xe1)%~RetX^@k;S@1ncXSFDb|A-#%YnF8C#0$Bgld%7aS+ zBzq*8?PYF9#gaM(+*m3jn0BKXr=1l8q(4{_Ot01uO2`V+bfHJnmR+1;w&x$?S^iZb zzCfAx;GN{3PfjR{ENfNl9?dv&s)o8`gMv_gpt3`O14;mdsfsJOj_goI&nv)#i9y6l zy^sK6I!{sNpFY}s4!`{R&**aN_!5%T;flb%Q;8Z4&e+mAFXq$srg5}BRn^L-wAPZf ziUNmMiZVHASxGr5nQ-@!Hlu8glsiOZCql3-z-N+?bI(td?Q}CSCRsluI zAG`bhft&7^+1Ra*HX^=EHFi6juYbb7%x&z5U!P?Xebzh!DqT%>ivGub5ciIA_lw|u z+>C`ZeL7#enN{B_`gO+(>q=9pXKdV$F7h1SA6UC|@(Qz;h+%uXwSQL@c z0UBGG393l(jW2-4rnl%l3!l4moz@G-+&7yp1JmX~s9k|y-Y?hSJy*Z7?rUL3F0R6M z56@~xL9RpX0ey|Ky^iZl%@VQN*M)wiR}9XYwMgyyx*oZH+hLAwrC8PXN{uS7b=VX3 zTtjp7$<4sxLnvVz)Wx!wOvAnxFHP=~320Qo@Jgt*b}0ar zSPEPPme*8e7v@nh=G(SUEj8oDVbM_P8110xUTnU=BdE?_JEu&ZZ;M+q6D!eTQ-jFi zuV`fl-qEeKp;u?;viyEH*c$K{GRd1>Rd%Iy`*F=YR%&1fbZINjemJZs6`W zMNiLz@h@So7kmhHx-C}E`559G->Wz4(yjGUB_2&j+o>ge*-z0*dg>1yX{kU-MP97- z6?!GLBi7^;bGREd73LhtwJtGExWeM?VQ}47f0gw*Sb~%$XKy@;qRK+>8ZX5tl-viK zH=VB23HqflW^QSSVNKR#b1#Hd8=qOYB}h4+SAw*tIZM*&ytlJM#qSLYeclnOwDvJt{IGa|?IIYUadP_X6-To5 zTGI)AmC2+Q)&-hQ41`?cSeS;4nJ%C!$V2aY+*MUvXh!$F>LrwbLnq5wB@(v-6nAFw zqmDdy(A!RT=iO5sH(iRJ`F=B?vjlE5{&{+z?tCWU^yb(X6ecT`c29(8V?KQ_i}W=y z3IX}5gQ!b|CJEU~uK)vj3Gd!I^RubDJ;yR3}>83;@)}=pRPR;k(>wLUWh=%e@EEmkPd5za;^vGhv z-2u=+z6f#KBU%PW%3rpf9(smMr`UHkZEg$c>8w%atqsrmP?F$eNF$b2rUMP@#qbZD z2%f%ruW9erw&>)4cD{GVda^$q-7D_QEg$KQ%{*Q#wIgc})R75IpRcThCybXApB8VGH;^Kwe$BMWMq`mj~qg@TKiA z87#+CPtIn7zB0T1`hEU+)!86m8+}4K_%=E4a$3tXXhP*^1?U4h#ab6t^4T6`NwS-N zB=hNzG(Lp_Nai9@Z3k+KEw7NSo}P3#_QFj+JB9l5Tp2SxiI9D`q0$&_I1+j@3asJj zy%3FQ9;5fCL>zo1pb(+yGwXpKEsT$s04{$^Qj5>>I8hYZPJMVXlgrS}IHvpJ_TyuE zeTn#{yZD38|Ay0dvJ*5W>R6&GDdK}k=e#}175

GOHY|Ayf>GgJYyIC8S#(-52>#5FcdEu~{R&R6<3pivOf4@^+t~|+Z+_L{UgS}tZ#Tn7d>>ivg0VUk^3Z)&)&p4Q zo9M*L$Drb&_UGrj=0e7FO{F^&qZnq{bQ)QP@>gDXl71Iu_uH){t=D!_RVm>T1oS0jFszbO4%dj%y6#@wZpdk(tfLfTA2psYq>{y_5xttu( z@e|2g(idGR?RZs#hy=^VeICWM?KzxCRR?_}SPgO2k=$oGbtjhJ#;G+J*!vV-ofkGm zNGACWFHJZ9YX}ESP)-#uy{+lOpyxx=$%4{OgfstJ8QLjnY}ZQy2NbWO4rX%iYii)W zo$}4s46gKa524N9bS%=(QiXXu{%+T5`qm_VDq>b(gS3`$T8(q2vfY^TD+#m zOx3OqUZ}t~wva+7 zwM1$Kmcf7uuZq5j!MIHuq%OD&#raq&6$oP?li2yarg8Kc9iO(>?^(mUEz>CTY;rw+ z+%$wJEG#sdw9PsO9PxNC3zB7V}w8{wcJCC4aL09HKDBQcdSwf&N$E+LBW>B&0f#+TBK zXAA3%<`0N{M3jBfA(Lt3BFCBgzr}&b^@@@nvbPtBup#Qpou8xR4&~}NoV5Q^lbk8(-g%Xd;D+({rAvYyr#%? z#gGFozg;48toaV;h%^0#avXIavtA8t(CQ@grZH@hV?gC;4T^{%OsOOmyw4)K4^AvY zov3ENHg!Fz$&S#(g(Z=YHT&bX^Ea#SnuZw9Fo_%BKsloYiD9a=1k6JMJlpA@0 z066}(;Ly!}_+9!h(qP6S-T?lJw4D(b1vcofCN58MNqG~+ydsqrRpi)hn@BD3#^I>& z%_5kyEG`UxpaHoO3~>JQr=W4E9F7-TUXqf4=a=zvyQN?*4ISSfnpMB6^RX_v+RQ~3 z!>aGciQMb1*Dpd)^Q8z&f1()Cf|l=8H&*C6DmF5WjTU)&T~*@GyapQq9`%UH$XzKB zBSez&V=gl`?Mj;PeNEh&h_+Gf^z+$mva|~7prhjS?n#+iW@ct$q#%jxB!|RK zv;1<{_$ep~E=!&CAkTS6pyR$3J0Ec_=W+aiyNmsKq*509cfE<1ouw@F+#a+3^{MIL zn;Si!D-BWTG$&?sUE^59+6eQ(3!{c9z@R*f%b>4@3cXA^v?#6)V7@;S2Cz1~ghXCo z6WC0IJGuz|*G6#o;U{F#IK1y4Cm<-Oe=BIcOJUx3>C(Vf!X5W>jWW|xvftx2fnFh> zd+Fea%8v$ztfj!5n8Oap9+*d?abRBA3Sk@bMzHbGkiNp2$i^$i~V#brcY#BjX&Z&2#5L70q7LLlQ`^;uO+H)4wXW7Cmw{ELS1! zG&iEyul)mMBDA`TECJo0&6K8Ve=YFUdgw+szaEwIJN#td-pH#Wm9BNT{&F@p4FsB`$h<*NtD)ai$W z9Barhu5QT>vFeH%0%?qmLJLF4$C;MVQt~~fuJ=9D`t-dRggglE9tA(NREP2DE-dpK zN*X*x_csOt2KF-xI?abh8m7ar^Xv(S0onB!7G_QNUArGW@2Yq-jA9OF%%K57F=I1^MS@HTHB}oOJAnbrbTQ6HCa`9AO|xo`#PqJR~@0*v&VIrHc#2*$C~+ zT09`gEn@+|`aW8)_$flInd4*f1EpHLBV2^KZ5Y42-+_;t_e0)@;qo~`&KLQ-J0_pP z?c7O=9P|u%f(aV!^$a~Z;YZ|@#^Z52g2U37H(R*aVn8UMfxFiuf~GQP@&1$Gf}qyq z5jl`^LatXLcetKi#2C$2OSWGt&WLgy(=7pVx)jt=(26jc{^|ev3s_8>gyF;D++uM}%>3 zqakp8yoQuZN`973oQvqcMgu0Whjz1B(giFfD~jmC#!$vCMommPv82(x7(+`A9D39j zQ`*=QBMe(kTnk9SdH_(EfsAU5>7l~F!Wx$SIMi~sy)OwUve{aNfB2qSdM@)Lo?>mQhI;gM zSqWpN3sjn@*yy~^5J(M}`HVD#6DI&>N)pl1ofwYN23@O!M1av7w1KK1c9PysyMrMF z{@9ltx^Ku8{hj+ok-H^ZY;7T|m`o=?n`Sn4@`&hEb0oK$=6+lwJqkRs>~@X!w0#4^ zU{TRI1CtfW3E^|xb!^i{tN0N9I>yW`&A>~@;N*0Z;N%V+Ewtol+Bxz5hFk>rC}$z( z^mE4=6*V*(w-HhCd}2ipDJP*$)_EJILR>P6KTtys+8pG34v_ac79#tj#R2%822NOW zIawG$vt(4H>p|@rcUi3p@?@SOQfmD~xT*IdNO`nYkXas*w1KIrx!6L<>puIeO$;-L%suPN9c`z=r85$#d*+cH2~N zO+0yF5aWjfPw`b*5~|ywN&cadoau2Eu%cjXv5XOHC-x^gJcL1sa-8VfW^y>B>o|^G z9{93jWN9(c6QRyS`6KwAhkarAevka0sCSKNKrKQHZ~;44Mu{G&_#wZ4)%;FBoStwm zs*ayY+B;KXJ_=6X6hz2GMh*gbC>V%DtuzD|dHARo>A)D5;tZ=n7{;@RC{&LRe%%w; z7Vf))zmGWf^G!RAx2Ia8&1uN~G+9gEUpSn+f70^Ie{JnV$MkkM-&S~=V-D*Cq+v7w zyFAa&+(?~5D!6gDH~?CZj?<;* z#RbN9&s{>tYr7&u^DRAdgVy^MnzosnH zx0{I0()dwScALNhGI&_vDm;DNnV?P2+)jLQ(Tz>W zY|$Qm*E&eYpKlmD-849-=9_`~;(cynMW^Xugn#gZe~Y?1$A^X1|Kae6`mZe#?LPbH zj|=&roMP-{)Jztq)u|?_D*o2b>c>N=P}~X=bV&>zbLB>z`pwQm1d}z*d``^g4XLdb z!K!dOW}`_;GKS~>!aI!(9C?}~4f|CbXt?tEBz3S(`rlaTTef0}O zlqqO?ZbFitS6c_lH5mT$3-@~&7+bN$CKI-hkZNZKE;B^QsMzjo_ z9`UFd*ORlyRVW@0vaye3g)7F5U^tiL>GlY&PktK2QlrU&fI^^zQlY@G6aI{iISp8~ z>x`OPPFk|nG8Rr8x)f5AttN1Q|Mm`;^|Pl5Ywm8!sFsH&fVVvfD(q9018o&uOXnL zp9rx%0!Il-Dv^_8OYZQX_fk17LFv_9CKXD1>_IuA>NHiD-t61Q(pq}Dy7Ra@OA9$W zC$9oA7iMH4YkhCr$2>Mb4}w+hnKLJpBp_9yfOT+BWl+5g;TboGiJhK4$aM%hI?9D@ z5}5Z|+Q>`L9g)FmyQ%QECx6hRL_y+5K-2B|HMS7}!);_{8fzO3Q6mMZ-V4`Hi3}(_ zK5@r~QY@3NLgTiZfpIbu!He1^gTpFQgyE{eC9lufVj&F`oW`#TV(kMxK1G&-OeL+9 z(^*pnA>V}^$ngy5BZOQNJ8C^Vk>}W=LEEWJWbC!iYNlEoqrRsqq>32c4`TeCJX!-Y zmCWOn-fsdwO%747(xn#b$Fse`pXssZA{(i1u2HP9DIPyiMp_eg;;LjvX7D1`?^|H@<>fnZQ}gn)4feJ5 zDrnlt6C@#a8?F@d$etjQYn+wM(O*=E;*Hv~0#dIpw7n7ka)fKPH3)zIqUB_uEe00D zTJD;69}`_O zP{9XRL3c2gZ!z#u$vQdF-jL9@XV3M|1tH#bO$B|*Rmp6< z>5xy+-nN#$<-6rbP`h$A^(Z=c?AacaU{6U&cZDm3z1FKO#<|bI^&}{MRG2ng_w(7h zl#gm}wRyKnzhjrdkzYo({e~FrWjpkZoVVDrsm{snx^OrwD9Ni#6}sJVHq33l674)f z!>7mf_!cJe6a1-haoxrHaE-B3T18(|`Gl>rqQR?Y1TaX7K}5|1r9w)XU`>U^!?kq6 zli`ynL_aN&wAX;v`u7NwcupxPX%4HwfvDw=6ebSWA%h)h=j{FyVANx=_H8kPq^PFSdEm9qJm@%X zKl-Cmk?ioN#NseeVTVQF%N~kShXV8_)pD&a6ChO}U#l@hs6|DBbu8H?Vg$F;n;E0s zUrdtDe6$aVVYkb=1VGGfKO%Q97vX6nV+Fiy=P4ZeSck)UJRo%M{VFW))Z-jpL5Eoa zr)?wswzqxp;u*sed_2Hj+;2EPr2^tPIU<{4mVh;+QmZN{@SH)MRn~~6CED&H89|(} zowZ*(o$(r&kqOjX{Uc6_u2ANncD?0}%tE*EF z=K>wB8gTl^nMU49-nWCL)k7|P$#v+mYYQrRf53i@{Pv<)!+i%AlBFDR^wFRL9hwP< zA<6ZHEW-F^2P{t+cH?jdC7fI7Q0dy-V}>glxTBeNjv2#}?xBQWA(?ybzYr)~Z;w+C z<6icC>N=da+tO6jO`p5Y^1m?nnorZs>y!yllUO%_pY#p>!A=N0{{Mt?otyYy0uuYi z&!Nq&B9dlUAJM16jg~s{<*6XiG!xc?Jz(Bkn0g|K5|njP$f%uETmaa{-Neq8!iN$=fmLd(Uz{X9WjFgk5a9xfk4l}O7RHO2%@YX@96B7Uld=n~+Nd_wV zgUK8;Irm-72z2F)YZ)JjJ;>o9fUeBJbL6=7y-oZFmO|(V{rK446EfxlR+cBzw~U|C z(BlNm4mK;s#>SF9X42(0AiAu=bUpW@+_gL2^d+Ba^mxkT5q$WoI;!gcwrOcZ5dl(T zyDxhv8Yoeum6GWR#g&W#2k>w~VPpe^G(%1+9E65-i?Ob^kDNV?n^qmDC`{^Lda&mG zKIQwgU>1O|$-ghst+ls1%lw3LLmQ*Cwnb)Jkea@R4PA3_kOzv~eP0Wl?;Eu7689Pv z@rTd}b{a7eI%S4@el`gwX+6dfwqWOr_gMLND8r=MHNlp=rRz39TkK;V?ekl9N(B6 z)-q@gAg_`@a-fP|dVJ5mvnnP}TdyU%J`OIqrn0^ct<5G7b!)LpZDef0t_;F&e)`&w zDbZ6UJdp=iIDARU;t_5ln?^*^QJB#4gG1}VMWn-uLV1&o{(+B^R4Kxg6$i&UUY*^l z{A8Qotx7)!e(4xiw>p#F`&BP5`Z&G0hu10%(i@fhUdTYyebWWJN(qm|v+>E_>*YMh zpDhZn6`vyXWanQd^770rlu@%VX<{0a0MEpV;X=ln_ImxG>( zQuhf<&tSa=T*B?L9?3582*G@jq*X=DqC*TSd+x4+-jK04zUB2@&t1u zbA8UEMZp&{?*Ug~2L{Oeem{k;h)kJi^gQOzo+qr1Kk^Dhdf#hLQ68W`JvN;`0sgIQ zJdd+r!s5;%h3$|hZp`=>*q2ws6r!e<ub0={rgiwuF>Y>@G8Y_xIxlS zi^z+MSn`tCqFttTm;Aql8ig!H@m!AAylH}10t%{E447%lhN zi_5$x?#xL-3mA)RyBX@eCiz&Y$1`YPD%XBW(cTH zumjFTwyPU>k>}IQ%3Y`B%&)8Wd9dYnvrygd`F+iMsa|nrzh>jk*V~{E2t71i_LsiA zOM#j(HO`f5(qeVCju>o^R~g1aXv}Hpk1|K?BUSgT4$^(dAqC7&^8S8i$(5Je8q+9_ zCbNOrJLzA6W32l7ioHVqPox|n_jZS~wJoPNf`KtYSWAmaG$L64lz}?eDMOB}04DPh z9I?TwC%LVrX2@7s#F_Bgp#|mLG^ZwIl9>$9++jBM4LQ9M9fQK(q@0Z}!1Re(ai74+ zC+J%p8Ox&yp_wGMJ@g4RS-4@U91kzhLvbRU5c}N>5!jrT-q?MOx48 z!kqoP%qUXsR4{$%j^BjLt5?P=m`_8n@B6gwf#~@)MjGJ3<&?X&zWWSOPaGZ$vnzI{`0cutg$L0*;h<2I(#V7S~?%D~Enbf=VJ0A`sRWLGqC#uu*io zaS2DQ!G@du&u8@M;wT|2U0ka-nR`~xT*-}AAMW^4GjcB7nq7=fSY?ou7&ZDJ3;Rf< zA}c_3z1XxR(0VF-LJ38`zha)nJEjw6^!O}y5z}Sz5W&?mW>^BjMTpKVjY|t2XImom zeoq2E^#b2E0o&%ljV3(wP2$7bP|T-K7yPi(w?T>a^8WBD2Z-|6-?1~X@pdY&8v<_} z(4#FuuX3cb>LRWZ0d2gMsgIj3V;|vxSMKN3IBW()ez0g{_Eg**SA+M@uLm={)hFS# z=0;p;c$TgC>fKaL@YHJwW|IS@J7kb`Yxa$M05MGpRA6wo8#Mki`SHz>7@x$V^!TzW zn7-9m#Hrah#5Q8fU@oab7$U}lW*&Ccl5r`rbYnW^GT2s=`0`Am5tu9%)A6DJ-55tv!^oQq}Tt9=AJEovx%sL@orL&0nIoh;LfhPt< zHM>03#v$UftO&*G_5eT>Hj0J6l<@2@Wmc;OJ%*OT0dGm(H5eWFB^Dljce`INda5m+ z8hf{$y$atOwD`~1X}P@C3j5VJs;X`e?6CRmd9z`{BdhVBr&f-vn<4*@uPZrdjb;5JG5Kyp7jwLBl$=lKl^wTM+kC;H1gO&mNrC-N~6{faPQi{=?8M{=k8*G_|5 z0b?+~y^3I-t;?}20kArM69O9K+1>Rrqn8L5%FKdjV2eX=g&TR!gZvo8eo+OTjlMev z^w-`tJ6YaTT%w=Y+fM$TG{~K`rFa1L&nNg|Fc%Aq_u$LOSCb}Jo<;r|4h}$RlNR?f zW>YpoUy66IF=(@8e-QpE&Pn~9t&`t$dwz}%co`4ObKdw7y*RjBoM<(@7gnu9gME+;a~ml<@k+7@31VWbR8p9y zK)R_Y){ZGCQaxD2#}9B|pXcOeqoQZ#4+nSt-8p23dL92XCA?HTX2X=lwL^9(+fa!T z`?{!bV!!K>2^q+sO zG`kM#=eH#@KJHr_>`IF2Bjt|A)^SFdxy%-`&6VqCpt#mhAv|;dh*B4PcAS@{tV0?( zFDYlh86p~&oI*KXil{~!X&`I<9_yIZYJ|lDLq$L6ig@4<5wv3AqLsavmX%V$mV>+- zxNQU^5MA6SdPNfJx8SP&o_qDT+}#!ZzGE3$oc_lBE}A3#;+}cY>$4o5{#W$33~Stq zhR(zox7xOz_@D0U=M;Ab*4X)N<=y2nGhl7~*ypnhg_%TliJa)m>D9VeO-VDE_E5MK zN;g`v8Os-v_(WZ}432*M$WW%J$=!zjHx|ud;ufxev4Sf$SDuHB^Pq&cwzY4Wr~f_Nd_QF}7J|Y2DZ23k3>zLo zKbhgR-)o!t`6@Z8zdUcG+4TyICNo!O~~75sBM1W<+#Ma1{1ljHQbWFGdd{BZ6ly%cZ;!{y;=`X=eA; z|+wUz?!sk!kj@xL~}}z2dz8stS&QkBulPVnju1QSBBHD0?KW zGP2-yNnvG3l1#lD6LOxwFspB+Y5f=yE%LxT<1mS&2L?1Tp;?C+x1O&rF{J2BETkmN ze!#>9{nsVH2xot!?h2uv*|PPUM`E|%D7=qBCYMWRG#(#(N5hW(c|ymazy3aAzpF*9 z!~NF>&n;5;D$q$^a>w|7Y-@j`=XTS<&32|dtk>o6R#174MUUJQHRS-8rl?+4egJ<8 zJ7tvYp~pjRwaZ7jq5KN`2{LZXHBl&6)T$Bv#Vojh3S~((m50c;uZ1M>#y(U>bV#F!*`t8GX=Glg$KURsD*vKQYRziui zW>fRMlZXaNQ`zqa>ksgEcU|78Ap24K(8@g1GE}U^KIR>toZO?NtB#2OvT0y$b+!=z z9>d^I!rV}YP;o&~@pfP!Gk>-!JJlm7jiN-WvAVy;1sAMJYL3CVCx}#B5|+G&>`Wh1 z(4Vk!Q@QLdJmvh=qbu23Toj&;P>+JV3H@tUs>XS2XD}Iv>;3ei;{3}rZy0P|ZI0ah zILA5f>V)mc7WKu)c=C`uh}n^?3JS+J;P9NDr=XARcigV~aepwBba)&T@;t)5egd`a zbse^wub`#DU}%yYD%wehmvOI zFAoshSx_Ut3_zePY$nN5rHp^+N2og7sWY6+$nz6(az@$jfj6OR5*-oG#*UF`sJfw* zshk!i0>s!}#06McZAJ8*qM6?|vEF!mY1+mF*}?O#I^ia(c|b!=jK4Vh&J4qD{3bf$ z21L3|C&mgYaQr1j1Nc5dm!!pOdA$GG?e5L_@bZ^*^*XJc?v6?n5u?e_6kE^0p=uCC z&n-dXa=FQnshO7?#+GB<1@2r3s^=O+Mb@RUq(Zl$RiIJwhA1d=c+bHDU2SobI_U0f z9~}kU`|8+t`#j_b`hvlB{FGeat-N*np&l&(Q=^wfL3Nme-Y-0+qtj&SFUKSJt33rm ztJ5tyLwg;fr|6Nb6!1-pH)TtQ-ZE#0Vf{M-qbCu7MBni%?8=Kua{4kYP<$Z#mMeLO zDWdNW^dn&mV8HIjSqi6+JY^}o)pn!h($%YNxQeHoz^9V4k!Qnb3uS$St^_{l+(%F) zUzW$=Ble``X;Pako4z@YL>6YXwsM{rmUSMN@=&DM>D8pX_O7q$aE&)vr5tP)15%E0 z_Kc42cf~<^T(@Bho7$V4oW=3%X5uC#jnX_VnlPmb2-3djMx)L1ft_e>-0Z_{zLXOM zRonJ}Ww8=2M2b}>#jiOyy3JF%`|ImRu???8hqogYpS2W$FYVr%5clx@xtF*GHV*VON zuu-*H%|r49+$|>m{D!~Cc+Xii!k!EUT!!A>UrfG0ks^$fO26Kjz6N6u%O-x{mf4F^ zNq)4~Dvc0!Gn+&F(;ECP5!=AyN9^|#=sP;e@jdhDgyXN`5DdB&2nX`?HysI?1GS+d z5^^s-*2q{%MnK%o z83-xM9m1$NVm*rG27!})lm6sO^K2%(l)veFtfg+LFA9}GlZT2u(}_?D{tp%=ETUCa zQUe5C2PJ13b^2OS=41>FlawkkwkC)&v6$=W9&s;Q&H5K)fby$Iv zyG{=u?}St&G_=q5V`FkrYaX`+!+2^=n9`CgjVfH>m&Ju=K5U5@`fM`X$oW0NjImV9UW zFvz9#qLtj5(gDIk&QfIdO54k5I%E29EHJ8!Tpr zXoBp}HPZ#`S$6AHGPxtxGB|rv*17Bz6P?a$Net;v@Xx%kH#Er@oCnh+L6w0i+b9*rPG~yv`tm4)u`BR zkosaM*GUmhYKOMij@Z3L33vS8OSs|z>`)StF@==jRUl3 zd?D$oB6l%YOJ#@#^<~D<6`+H0$*oeel}UlVa=tjNrpr4%-Fy}=9z47}yhc}${}@N{ z&PcNpe3?RP{w{Di!RnfeE37bn*NHjl784aKbDPs}G=RDv)N)xMAz$W`VR=i0#=J4L zPqyID34Z-tyiHCPWYGS!yp8`-alDaihDHuPPC{8mu@C(g{l;+ zq?B`rIb2L80u=wvbp^gcgI074qel@hn~IDzf}MM}Egk09kFSqtO^XQ+lp8x@ z$#O1eRI3szb{TVSYdOkOw_t83`Y7KBT~|w)UzbBq&og2=d|n$WYmn0@PZDE82u6Ku zXq8Ozag83AHHHu}LE(lrU}-1@aj{N^Y`oB!9qg9QO>K0X=`W$94g)pPnJ53eLvP#O zy<7OEcV&0mGw*ilZ-bY&z`qgpe=P>d9yc*FEMw?M>f2;2VE7{Nq4`7^O8}GZMGTjL z9tfiqTQv1Rm=tbh=#lb452E!($fq@+psC!XHkdngi2&qg`+e!SEQklU&lPJ)3CV@* z^Dtzrismg2VT59oF+}&|9AxVKbd3!TCzW6!%iG5BbQxzkyo2&Z(bQ$v{_6?jxU4<#gTR#$)1&Ew0 zdvswYATv)pg~#WSC1?g_G3Ky#nPV>d56W+TFb4rSLhv(klDv0lEV|c*y{7!Eu4R!- zzu!VV*iH+SS-_1R(gJ;;L>$-!J)p-faR5qoiPy#Jun2>@-nWaFp!9a}ym1Xm zy|aT`Z_yTL-=lx_u|hUA7!&8@8c)OJT6E6Zd|HxG#!T(`bed{(4%US`)zXaL%DS<( z4*m}BsDC&&-|06BT4R_;7POYpnGy9EQjLcx&f)SEXB7a@*_ngNJkkJUi4P|r)kV&qg2F zGgz7sPnGZrmt7NK!Pigeof6CY)W%&OayR6ID z`=CGiK9pZWCpyf)JF182G?Vx;GdyXjp=r!1d2Mq`wo3vzhFft`rC!se44>C zy&0bLw6;}{rNQxK?}5ReOd7v$$UeM?{OKJmkG1F;r+lx&9)m`=Q#V4GT^+j;9QL?4 zr&C&c&TxM9PubTXV==Oe7@m? zu1*z`#SA0FP=*b@5dF6RKl0#rvmx(`gCjQiN;BtF3?C=nou1oM(9dK@hcW;=W;n#$T~S%9yOv*S?_r8A|&zFoYksuypoL&=!w= zCmUlSuPW>Ihc#Q!XcV1NzHc^LYB8#gu4*sjkCcV{5urlulc=jhz#mRT}7lsJ0UgDqRT_p+=b1rc;QCi0H@*tE3~c10CgM zCB;RBT_}l?_{*R}cXgrTrP^e6L2!8wh>Yk3W=l^{&7G*xE2|(Pcp9!m)EU&6&5?C1 zGO{Coq9k3`4s`YJ*SCU5>q1#{XCCeELfc$V0-GLe{2x1n_#4F}bTs`JG?bw}1&U7D zr_MC!wO!<7Kl`0sKs$9NDk3o0iNKgT%$dkYc^nz{m$VG54)*O;eg=M^Pao2HOy8;2 zAja*9@%O^u{A5tHI0P?!kcy%_pJF!UD;$GtDn&wz(`c0`LNhlt*dn>2Xm!+F<*tgh zaI=}!L6k9d?_NC$fc5L!tFm`xNuZ!-kDfXHOmBK>V!SKX5fc?@(pY!s9z%@^S*M;D z`s8&jMxAlz28IsjhY;>%Q2$u9zpCQEHBY}GetvND(Ar6Kdlzecd)Ch0eQuln_D?NK zxq9J+lP;_o(f8exTY6pOyMNleIwj+*DJBlH$GU2VSJywdZO1*mM>Y&Acjy})FDouC z6Tctbt}nPOJLi!eLtgEZ+dQFP?*aUQ3(nD!r<`kGT@j#Om^O?yI27wwVXXgfFxm;4 zLbci+F!L}j>eHoyCIV2n83y~@#4%WJ>zg3~3s>iM4EFn;=6Q`#wEwpTs1K&5r*lXz zNH6H#EhpQbMSEelMbP1B8c(w(=7li4^1JqB+q#BI{TOh*hw{U*pm0~Gt`xe&hAs_@ zmRH+!>`yTp1(gZ$TtbAD(*=?;(cd(ykCL#`9keGL@V9s)WsfyVU~xk-l$BcN+i1UmqkF3s{D|^h7Pe8 z^}1(fsrEdGL%Ssp(o2liwzBSE)MF9ua+kT4a3wZjFy)5%%f<7@z87zU^~+&b7OAl{ zC12J&=^f&mGmz>1ST*7N%dR?a$yFL(BA$O@xcF7v3kk0u1$(|<9k#mUl7;6u z)1p3b4J=%|uqBXPynWTV|9tN*+BexJVff;7;!RyBUcH1RvkAemX<#G~G1kXj#v)vmD8~vNjadKwSig1}i!hRj>Tbgs0gXCNbrr=< z*Uv;@TT+0vkE^@8jQdh;D%~;Fo)uu>tbnFTyDXbJC3nw2eTU3I2l@|mnP;viN%kZF zvDIXBJD+Z}j=2H43+r~ZLVZZqQbkg2HZu-h2|<&Gsb?CFHzLGeP3?GVYzY!(-2J9j zoH(hf;=1rf-Mr7I_kMli`>zdrF}!t=Iz)XclrzBS&!VGqj&pJ@bNY0_uBvOgsu2WL z=Ey7>3-#%>H!#FgMu58WLdp~{ic*--?@Fa>KDs~xjF3iV1dLnIT*JZkL$@(GRku!? zIZyofeMw{9&|BwDnZ`eeb?V|zN4La<=ZK+E(OOGPhCS406BT*Y{=q-qK)p6Gw#|nI ze|?>+@0`q*uPv4b{!un54Na1&KePe&LiQFIGVY81r$5F=1gC(w5Ct4m3i3uRP z4QS76<({9~ci^Cohj5O`8295Y<1WYOIq|gP>ble=>)#vq*DmAkV>jUbR|SJ4{hF!s z=t?ERI};tpHc1O`ni(7pIYsE))tKWzr#VnQE0ZXi?n*gHs$Of{vwrHx@*IkW4xh2f zx_#{p8at83o)Y5AaFpJXU{P|CJI+bxP!^+gu+1!-Qq%9S$H)16ZT3DxG^*?Lc-cQS zAXw?9q7?-Y6?JK$(n6hg?XLJQ+NkXRyNxOXo+?;9_6%KAT2ph&p5TD4ZB%;l$(K5{ zQMK{q@lJd}o)=mvThxUs9Zke3d?Ah#XQZ)_{Z9OPwb$wT4{fLKKO89gJgJ|LN>Pkn zJAG za%M(yPD&0{13P>fWQ?NX+wNhLx8Wp&@`Rx~(V)En%pM!3KW<#kc5>XLRaN3Au^UE0 z^ni6Em7T^tZ6_moEh_K5sOQEzcZRNPi-?5bV1XX^IoxWISGTpyu~?L!&5=($C|-T& zNwRU1FoyaSW2g+)1EZ*c!72>TmS5`p~+kHSXFS(+z)?hIiH&^o;U}cWNwDcGgabr?T$i+R2FaOk-^jpuG;vu6GE zbBwMn`VsEZ%iHgh4~FlPcZPe5yp8A7Y{<^}O}%gWM}ukxZkqfI-8-PX39DpJv^^Ld zzK1@VRnwCYzKK2nt7Z@1;LrV4tDkXb;K%`+raUF@uMkhb)sXgAci0EuD*5DZRnrd* zq$}(X;TmTuKk^p6T&@vc$7Hb&HInuZVH^(N493`^5h$@BDfZNagf`v`QQqXA>hbb9 ze2ve26iv^41k)&72s(`C`q6W^gwT`J7yAVNP}1q7(W9eOCG@VT81UIUP^+CnH;n2+ z|3~2$2H%&%F+N6(U{T@vMp6YERQoc>kasF%TfS=U{8g*w&0D2p&A8;^nG4C~9aUfBC zd(AQ8+Pqv!!%(Ly;hY$1Z1K1{^t!S>KzC%wdoozZdopC}i?UUWxng;*a|5oPEBgK_ z-nh5E3(J>Y0r!Y8a1VTLzI2`4{;4enqCYd=bi++i-$P1_?eiGt_N#3- z-5~MLaOEHBNO`}Qo0%VsbC@~L&I7;VRZMoTU3P!ky;LD-_m+5+SM_s-%-2`#Sf(%k z=PF^nWWz|U;xlWn3pXtn&rKKg9C1I(d!V;(|h#ACFtJUz|0{?n|=GGiV(05Q|w>0z~s3{45_ z$g8305_>8%LS9=iia6!s5l@#3K{Iao<7mx|GjfM48!>Yx->{|Sfwf}e+LrsbD)U|$ z`tqT)lrQ4qC)E!Pft;J^E)x1~^xkTdkybBNUwKg`GCZj%blzo_$44@XMp>lTFHVNe zP^(GgYYtr};qX$QlQY8-p9h_9$L&1# z9(f5wzBPKmynPpC8G4A|nAF~H`JYJPQ_Mh@yx5|x8ddVvMwqA&)m9Z1$z^qWN=i!K zl)k-tl_94Ky65G19mef1&X{mr8O=Yn^ZaNFa7lix{A^6H}MB%&U{PE zih{e|5|dxoknfh5ZoXweEWDB8@R=iamMKi_wb`a}uxIN#;<7KYo-Z+7VV)hio%QhI5Y&b(OX1 zAq#XjX(mdx^MibyMXMUeLG>y2!E{rr+gWI~kYU!4V-7LHl*o4rm9kd0sU%{WDR3T8 z>D1RxHlbCJq60}i5Hj5nFD(WX>zKE8SAyt8W{6%EJs^G0skODt^d%CoeWbZJm}<{6-R_i{`iZJyI`k^Wt2`3*4ym`4 zDz%M5vyrGd7yD>(rPe+nLPY%{EPGpSCzGm95m2jRugzO&carLEmvtwSYW7iJo)VNj zM|3r%CWTt{hjj67x;eo#U!(YWQO5O=Y%*D+juUXM(55;_w6oaYd9TKENc>u6&X8wM zv%>Bss2q-%7pxSIPWn=a>N=|R9gO(jfkrcdVx3EkE@Fjhllc+xs)2bb zNSE`C3N?j#$!@EDLZLlOv%OBeua0tkos78e|G|w>9M8f(l*KUWQS7Uih3I?Xp}j!n zNDgB#=`64>Jc%b1{e$?3D>=)e-dgTs8r%x1yt?!r)=5T9`W9PsKe#%TlXpU72)>H8iEfrL zlF2Z(iu1lO`<*wecLoSMgK{>C*r?0I^RVpUE-m&Z?cQ9KPr52(k#1s=x3&q$-58LX zYv?i|uz94}P67#Y2qzpQto)LD4wZT_OLZgpa&P$yc38!90001Z+GAi~&_RL$3}p=G z7|j^hG3hXQFjX7Yb?$NeVj@xfCrF(-dbZ zUQ^;wvQe6&%%E(cT%f#8`IU-*ikV7+N{7k=RT)(W)fCk})dQ-})Oge;sU1*zr>>wL zpkAkbMngekj>a8L1OG?9)f4!^YJ)MkV-Y0 z@qcdrxy)G7WzSb2uQVs=K0C*r7Lao6tE?@D14Y_)xTH|;9X_EC`snaUUG+8{KBXt# z*x@qZTm$H=d|S)xz20B|K#ummHi_2qC)?t!(Z|FnSZmf4o)Yl93%({+lgfvhWsivxy zw5&~ZJM5Gls)aR1euy-HZ#t%Vgm3d0u5iNk43{0u*O(9T;Zd1cP0G!FA9BFt`og893u`0B+0>k_{)`<$Jqt z_s#Aj1b_T)qn7{0PmmA^l`sh>lrX}HKu07|L=!_Sam15AB1t5ZLMmyblR+j~WRpWK zdE`?-Aw?8ZLMdgmqdgtyNGCeeg|2j?J9-Rg7%^eSf|YVA=s{0<(VIT>r5`rzR8mDX z4*D~Ifed0WLm0|1hBJbZjAArn7|S@uGl7XrVlq>h$~2}kgBpq8AZu95Rd(^7b!=lZ zdpOJ?(Xoj(RbS!_9`k^Q zJmLfOJmU#ZIf0Y!?BFHOd4Y>hd|@NAaWjXxG|RCdCMD#kywe7cu9~%Ns?qqkyJ^ObjgrRPIHFyT;L{W zIma#5b5ydp#&xbpw&bvdZ;~r{k}m~PC`D2%B~mJ75zdCzW|u+dZFKAP`YNTStO#h+ zD^=aD>UN{je@^pVP#Tn)(x@~k%}R^Xsw`Iq``H2-R9}N3y58;ddg^LxT3mrG%@NS- z2&?vbn*0m1qw=o~d*B^DHKkE$iu8Y5)BYvqU}6a-)?iZp2Q-kh4FCXm+VkFUA}C@b zBV%9WP7VeRhGc~ejLI$>n3W4Qh`TB%cyHhf^xnW092K#_M0$fpWI~!kS7^irCe_3Z zjIPPbNgJ4yT{dwuvT1GNVFMB(Kq7Jziw37_kjo|>4tA}LY>X}&RTw)0BQ`j6M1Xl} mAl?oZ1_(D22zD_3Z{5JsyOEW_1px9`D;59%0a>}9WdH!qzDlJ4 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-bold.woff2 b/docs/Documentation/themes/d3/fonts/robotoslab-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a0e46d686e5410b7bdf6a084d7a33b31957fb5d4 GIT binary patch literal 18720 zcmV)9K*hgzPew8T0RR9107)PK6951J0GQAK07$a{0RR9100000000000000000000 z0000#Mn+Uk92zPcpL`rx24Db$3J5$2lMxXJ3W3;6fxZ?2HUcCAhg1uLYybox1&Cq? zhA<3)4nKEgVrB*#Vu&Sp(@EoYfOWH6&TmB{b=Wun%FGU(Y@76;J2+OFLMyWWKO;FA zLzo7e*3hxk2wlVT+w1{?fsNQO0|Uhb6J`Mh+Ne`83KJt|^vaA) zd()M{-^`_RX)IcuGv;)qQ~3v3;KeMk*kMtOUUVcDrzHdy5|Q4OUV1 z1U~=>0O+4z>$A>%*uaCh8z5*Gp~mIQcp3ZpciMON2{Utb0m%lm(uSPyfS$ipewa;| z4ScC6S*NJJKst>ea!UqyF^_M=tN1l-8x7YqM!wqIgkjB)+!Y?E?EwD&RcooD4#~|E zAF3IdluXj*BoXDA*{vxlN{+hf%48MUyaeee*-*L5k!N(@5t|`YVGyAs7N(eBZUoZ(Ta`{E`DaU=AFiLb>#Rc2>3XQb8+JvF_@DqQ4+P zHJo|}g+{2CI1mnrw51)TDh8n#befAqm>7}q8Q+Sk-9^Tj$o&5~_1j8L6dFoCat2}F zc7S$3yFZJ~to`njWIsV1Np>1Tz;?-Y$acwg+RC!~k3%02O9N~v{=acbagq-NL)`uW zfZgoo%yxFOUjah@b|L=^&=4-zDONWxjX%Ik@j!}YU9MWErXBpWV7P|T!0v?xH22+n zzbpMGwl;u6RL~YMLg{rsZ+e29ARpVoQg;9sN>%1dSrE&=T}OeY4B+S9Qolj5)59wE z?#g?}C6tcP1W`JrVBrie$e6rW*$pG-?pQJhf`1E`CP47!*1uP9H5MZ{zZ2Jsu$9DiD(ADD) zp9zlyw(a&V-arUB`TyED<+#*DAjGLgRQtk4JpT2RPx3S_=FZlaIek{1616(@IuA0Y z(^YqE_z4q=t-~?A!Y`sCJ<63tE$S%gtcK*(7BSs^gl z5XAEr?DD(t+yzsftITYEiUZ#2sXMjX|2{Z>;>yQ)g8rB^S9~HVc?vU8dD5NF0avp} zp_h~=nh(;GrU56xZKJ(q~iqq+g)2YD&=E~K+r(L%*$3Fwc4;fe8{uQt9>?!#H$Qd9vogI9G zmAQD^uxGgem@Con&0*IkAYY{XW60ZmY`vp-C!Jhx*(2rW-Z_JLb2pefru1BSU1+Ec zlE9{-oCM5~mjmenF#hRG=45!+J+gawc7xFXvOdu~zOb$l1Pny{p7opqNHV}^`oB*{ zivu!#@&7+5B<;xC*%U6EM)R=Hb)Rapg_@kJur$NNd{E3vV$ zS|+v5ND|(s;|!28z3##Cn(LzGk8~6rTYHc^710xJM)t5K0U(Jzcf<&;sN0jd^!9J{ z=01zF?%eX`)@e9epE=ofZ%G52&be|iDkTAC%Y}kFTJK{}cO$izQ@cJot_#=}%-(z- zHhlmx<=V2Yb|6=a&+j;GHgk@~I5~4HVd2lym;!>vew|LP(!gi>ZWLtnw<706PP19JO8NAo+xCuaFD}1e_U+}+ zF2gB4PTm2??RxusZZS{(@omA00YDC>lJtD@J#ei%p`79OzXfu1HM(qB!|QMUT~G;5 z;)#kU8oCH*=fmEvjTw^Cf(+RFw zD})Z+MD=v5gkI-h^sh1o@W~oI$r*E*ylZYyGS#WzrdYRBa4!;%<%_qB?0ZaKyfwJb z`ez?F3xyFzxERuig3d2SGm^G@t_h z-$5NeMgh~KOZ6{Gt*mWq?dS}qy@R6@%h|=%&E3P(i|y^>d%({>fD;%L91O$LB7u2?_z@C_&K++BRNvbyy8O1Iv5_hDmm`!mS>_6KnE_9Hcwb@dIk zEyqFg<6RxMr)Sduc<)kh48=0mPE+m>Ff7oSL3lHL&iNE_O{s)xwV|3=4@>Ja2kB&GsVtj8LKT8RA+Rtb%?D#}D62emIucc--U`;;Hl&8FIjOq=SXW}e-FTjoN8(x$3hn7vtcv}JN&*@QjdKZfxXJ=%qeEBOknhAJ)hV%~51!xSx%z41|;360^4617qU6CXMS>s$;%h>7k6{!G|$vr>-%K-`N`jPQ? z1vNd6bHpSlgN}c@E&>}ip&V6LWxN%o?|e!bb-#(MGzt-fRq7J0Z0`f7$BDbQUeG9!ga20{U($v;~r_r zdYC@xxm#ejL#84bpotgc!VJH3w9~<8+%>@bRZDLNjG-%e^h|zpL^Q8z212`B|(swmQHfW zs|1<5YPALshgq^w-d`~Xd&PA3| zQ=d?hL^K_VqZnE_K8Qahyoj5Q`iq4WqB>>>6;e~N)h!Vo+LHya6lE%jJTqj`&-UYs z(l;X^2Q8|S+M9&p+bYt;AcCt%^nzhLStG&v#9mS|z))#_L?qM(1QRJRI@`IFYs@9E zQ1WzDaY`Miem}{&=bqlLAO;C!=PCdVnil)ABcWsonRIv_1 ziYJ_qbr?70M66H+yCUv#3^s!zT72f2IRmdf@PlPdomzX|l{)8%`sfZ`b2P3w3UCN< zs&p2YdZT$<5<*zW%PVMGdYp|pK^;=jE9oFw)BytH<8rx$2cDR;WIe8cHih;mxEXVJ zp+qWVR!pr{ivZk2O~yW@AXahdcmVk2HYhHq*f8kEFBvcdvjA)+OTu6q$w6=nz((>U z48D;9gs=c?qDaCJ8!16Z3&7^eBn-Kc3WTx%Y^+McP#dX1PfLP?8Bf>kuSz@mP(5tS zl|sXKi-R*E&#igU8S9c}E95f+0{X>3*)t6IxT|k;>59Kb)lYo@3>9j~0-K;I>u_KyG{-QK7tYhT zBvQyjR&0K~rvh1dhn6=np!oU2}m>CtheoATdVd{A_T$?f9H^k%+?g?cGPlk zQ%$Clb0=5Vr*&U4L}=jcqnuO4O8SwbL5j}&-`%WPTD{gR`>oOmQwtmpd))*76c|-E zk$+k30@Y1Lck>1dIG^m$BBi#frCeW;Y+?i=)0(E|jv}hLBN&Qf5a90q0B&#LcJFsL z^_Ij5mPXPybv@Blljz8Zr819B8CR)8+l1!08+Z5_Ko2AB@itw}#Fm0g9T^ssEu9JH zpp?2Gr4S%oinmS5ROl$vRFFt9&ISDK2G$;JLXI4Gaog~i3DiKH2JPr8UB*M)miF@o zY3*B~C*y~HrtBQ%g01kIHdRI)DIWIy+27gCO@L#omX^PG^Y|m=S3cs*S>VMtNIx9* zxHE7EUEAw;F`$)>G@8f^re=PnKyx+5hQVhxj)dj7=RC$}mQoQye;_How-rK_@M6uu z8slW8ORsJ%>j@3_iNmG|tfcQCGacYYYI*n#lp+2DYVjQRJ>}@a@cSP9ZEmd&|5YAaiZ(@nLg>AvZ(G!& z@cHTd$V}kx;M^fYLQuF25DN=F&^Ce9%)jBhIzmyhhU=wc%1yiwB`}Tj)8cbUP_Pl1 zGO?@C$lL&djf3JVUl7$T-kCEs@&96WtH1p_7%Vm zk;owDTEy-X7f-bRTV$OZ4AAE^Hb`5F1Z+uLVp%_GDU}6YGTDet90wtJr~2q>6N#Q_ zV3VeB(k=^!aQ4in*4@5Hr?jl}I{k%WyG*E3LR4*v0#g&Xvw@;5Z3`s~T8!01AD18t zoh5}&Q|}(SD~XnLp>f+Zo*vhch9gpA9L1`Z!YVZ;s&r5}xDa#f1mO#zlW0jinoPkaLJOXXCL10RxpB#QUJWz%_H>oB=BhKWE8$u{^;7Z&?{U zBowhELKg%vKqcUrG0|ua|CTJ856{fPfbhFIEy~DYW%EC+` z2PaW904*&0)x=?h(ie_HDpH(9&ih+4jSc?g^`0KqADg0ua8LBtGT z$DM5&Dc;CloL_#`cDQJ7VVl!yT1Oae4oQSN*Rs+g|MHBc3F$$IW^^b^$yk)}1T3D_ zkr~|g4YeO*U)+)1ES#k>;Q$2p-kd|`h^og;b5Rc{K-uJ;0Ud&12-5u`cYy`QGIU(n zLLowQz4m!bNKr&soTTOAN zveCL>1`8Nft65`uMD@`!Mq{XEs4YNg;BEKi@BztshKIQ=369H>mFm89g-~_QgZjC% z&;%zDx3IbY_}nbNmC{#lE{P-#rvpP7@`-Ce6i_zwD~J4+n-+Rd{dSSS zvcYQoY>UYwU1J;J5dEV7@|JMGv%vFA5-mM+o9-EY3Z4spY7vduM&j9=5Dz}p9vUd@ ztj>06j1!g-3~9R;yg1Ph;)%m(ia>l~Ih3rxSfiO4X?3W#rKrrB%!*4iCPfjUSrYWs zH)|UL5&~+Mb>v3R%G%D#LW=_rG6D;bJ&&^e7R{A5%EtVE15GNu%0NJ<{aNH8N3GlN z{zMo6>7#O*V2OVG!Eyc8AB4*UfP|tb0gvqya`{y({E#Uzixdezz!jgk;c#LiCwO}f z7^}YTM>=(lJ9ga&=fqm+b^kxcs_W3@U1UEmqWP1arZcyV|1?8}#< z((_%fh7_jvU^fWLnPG)&U+-`)H^0zK{nx%P?pz#v`FKqFZr7d5(%;q*OEStwbJK!3 zp`rE&nd8N$`3r_nm8MK69@4rlqwT?KGjKtEG(xm1^Z-xi5lTbf$kqPoFP# zEvZm<_Ixo5hKISW8Oz$$!a6A0N){jfs$!ASQ_sI+4AQa8;`4_C=^VQj_rdvxqg{7z zSB8i6c+&!HF}75#3b$9~^!H5vN8e-^E`Hvo!=}-%U>lzVOkx#9bU7pgLV&)1LMnJx ztg91n+Q%$S(^=2h(Uoe;^krf-&`iZ*?R)Zm?xhB5lO8BaT}jx5VJ}7Yg^MMTlxozZ zhkK8y;mVdW=pKgqu{MzCX>WdIbtt#9ci{nB=hj8%r$Y{&k1@#7DY%e1t+w%YPVJ?@ zEv%CFL0%v?Jt;ITH7>c=!7>%!ceAgi6~_yG#TItd=v5E>3`UrY1}J;Nf|k@umqleR9IblL3B$r+iyPsCW)l$+Piq_nB4Iy z$1`!p&o^UbnI-Mlzytx_Y!P&8S!VvV6mIdIsyP;z*!y04?3qH|4jat76cfPf&B#t@ za;8T<`Y3gNk>DoQK*+yusy3_gH`ibyHEStI4I6@fLfV-~{WQZPqZzYO3(G6g3$vMr zN74+r`YC4;ZvKA$`0@V`>Tcnw85~YhMtEdWY7i$mP4$gmV4S;$UrYeUKhD!VAkN_X zY(~w+VOjBGHg5Odi)<~+=saJ=8q3m@C>Gyby76?J%2PY}eA)abPCV1!?cGUzp?--2 zIfujBSa_VT2FiL?(&S0f+iFdeyy7nYTeMl!NQ$XKiYUhiVx}pHZ{r_8k~oUl0V+I- zvjXicypOO0L!$#&Q3rsxG8R4wpL@LaXZ==T<9w3iLycfItV8o3O&ZS_CbamO`q?ez zfSjAIXNjj@Rr6=*Tk^j@8=Xt9AbXprBaLaOAfi1Xt$b1Nv_zO;xwT=;IdQI3xcv!Z zpAjt^oJPGJ@u7Z1<-iw7s0Z&laO6spDw$B&exK6HCiBidU_7lv@ z-}m{gI4obVP@6QJ)GL;r9T^cHot&&T^E4wrB#>JWQZVi4hPktdn>t@&W`(>m zhrR4uZ4`%_T2wi}mCQP)kzqW6U!(;o148?IqrZsyd!cK9i>R;dPIX*( z*8lC?dEFi6R(3_7yI+b9u2dHlmU>&WCOY^u@iW70=u0>@`t(|=`}5{cZ5xiyF?ZWL zY0s2Meyo*JPBV7kozU!8n(l+VO-vh#i8gNGn<(hrakS)}q$X%|ps*~s2^8L|ry{8%)aD29x$iH)tcP&nQu9`cc?dSrd;>V#X* zJy2Bz!k2*L=q}Rpz4*W;p+{RQuE$2!D)y9?cH${3HQ4$Ug^7s~xefVuWAfvdF3leR zum1x2M+H27qVoHnpL7^=_3J-#@(xGG=9T9Bw4DAVT`#rB2{*a%pfm7Ow41P2r+=D6 z5*PZVus)rb(UW3Sq>&6AVi|gmP@tBYv=ce(xa6!T_-+xaPuJqvob2fE@T~OAM|O^< zR+lvH9jH_H$|{NUV3h`+q3qfHS{lBhHUD)`HX$(7a2@|}xLH3aD=*B;JCoZ;g0qAl z3}4V)TZf;;aD%)p*nQC9HS|eQIJ^?b$JvSAqN|6=+8TN@`BmFmeXOjls_qw4f%EZ7 zKkS52NE_iF4@Vn8Pn`=AF_P-BQtl{8S4nbw0tS+SvLzIs?~xQY_6|xwGTPZ(a8O)2 z{fmU;@D%EJ6C|V?zhsI-^3Y*fku=%R>fG zrs!Jao5*xg$Oy`o&lD=f7RmGX^V85DlRhP-qxr_Vgi(+w`DPiF*ODO#X+gP|iY>A) zKD>5^U*}*TEhC2vsGihl^{*U%1zTf%oD^yHNS42ft=+GF=T;R!QL7d%0Ku&bs^AW! zqKVQ|kp^RJ7r(q07ivmYs!_!(yw`d8{3!Omw>TSB*0Z9CY1N-=>7=^Kjl2q23udk<17(@15xh zCNop~JL@eiXWfDVT!b_br+&Y__7!Qghu;+?|9$9@E5jb4^4Z|5*Dqooceol~7X;D& z95QB=yZTSRR^P*dWs4clVtYfI!!eEiyZT4#T!G`44gRSPKFPBQB0rvc7HDoAA9n2o zjUn?%PWQd`7a_A1u=GXnP1jMZU|d02LRg`uGtq6>j`G|=_*sc(P_9TMAxbgGH_^^* zs1n!R^Pned?8)ux8ZIJ>@(XEq@D7fyPFeF0=DRC#d@B_MpNXqbbBm8HPIvgP*xLKv3SpN}9deRK4>Y{~5(+f2jSs(eg0A1akRPsQ zF~+P0uYmJ6*0x5uFQ?DX$Bh^G#rW+H(0$L!|4__KYSCTFjfApWv|kCkpRhzAZfRYg zc{oh86EqiF@p+*{wej+8EH94~AS@CL;m8cCe`PPFkpZ6D`@AD9iuOzto4$ z{{=|+j0Ni|N}w^`eJ%Y%y0v?Hg+^M zHF~rb4{s=k&Whz5FpoI<&n#O2?B25aJ)c8X+ZL5LXg^emv+6%^f_p92F3_as)nK3j zBQCtJ+R6^&A!dHZTn!y$i+_WPR-~<>rvDbvygbO9P!rtCv*GAJc=ITL>?w<{x6-`% zuAoDMeK5#fPE!Ccd=PHKHVP6K{_i49pQ?8EHvZ^*z&*EMe*KU}(c`%%Ff{ksKzlP-My!F4Tb6B7RR zsQgp$5OMRClYJxFT@Sj1DP)^6vh#7z@cyY+?_-A|#aH z_=iX;r^>m~)o-P_C>d_$dNc;wf`Y^`-*V+-5V>n2XiGbiUCt8|SI_%CeF&A^-^9sz z``=mU6O@YO?x1EyZqJROB6rhdp--m!h9V_2B9we0C877{!qKN5bw7$kpZf@fNn(8n z5nKuW?%8nknZ@(3d_~T#>pFcaj}({R!0D&AcXVplpf9UFfAS3NZ5B`lMfBR`-MfS*HXgInAt?%H0|B(pNsHK;LLD*dEB}F z-kqDKX6-(BMrY<+jDNR3$zQ*x7d4m3==8yB8H@1&>N;OqWQL7r7It&Gf=F)XbjMPT z*~!M6wNIJ$?ex!aeRxofJ_!+zTHo%JDbacTXAku1m`{zBD^tl?i$rnYI!r5^9C%sA zZnk6DiaKlRlAWTR^iF4JT+;Zd0n@-cWTHP(VGVfA%+n6p_tRTf)bFZ2#?ReTyR5Z2 zy%Z0=&Tp?E#;~|hPJq3G zdq%wQi^w<5bd`7)+JtQ+cie_WD>_tJbF|dZ+4y2O*KC5~R#RVDQ&sC^%BO~fUZAne zY8$HZrZgM7nvF$<8AJN4^2(}O^OD?&oj?8OcYa?Que$U7Wo>+#Kpz%^_}<6JXY?}I zjyh#$ek+d6?q%n*`_LFf9~P2_=%P1zP{TeyogsO*BVtNOrD^0(q`H&s5{G@vO^0sG zs0_OxfA8}Lle+?oSOpMQ%i+amdeP}w9%qfdTYtPf;Kwd=Cozl|mEi-5k3WBxS{As6 zRrJeB<)tS3(w!4s_y#|#OpPItO~-!nAvhU&CU`<*1qMcktFxIp77LJM4H>d;_SGjvjk*zFk zEbJV}2EC$4WZ1dl%A@U7M=i)K|PbTf7un29Fh3TKE=pPQG{Ne&!B1}h&?Nn<*C6%<37lzt!RQ5+W z{K+G@z{i7cTMwT$8lw=@ihHO(Vnz@k$hjcT{^R565kFRV7S&Cj&>`-*3gD}>$BsYE zEbQ`-l}A0#Y`k*0v-9fZ#*C&b6CGVwCz|*^2cmquPS2mg_KRkF`#v;ErXH>(<881? zkCIG|gN64|uYk~KjuY1h?yZD{U5C#;T>t&%R(`{LGV7{lun(+5^IuJx{-W3)uywE< zI)>4S{QP&ysz_y=M8dbXpCnuI(UmL7%KSPdWb=?$FI$YS)xtEECE9qOb$1W&Ari@Y z`ab?j@cyl~Tljt*5RonS^3sxJf~mHbOdoA+3WG#TrC55O^QR0UiK9NKqUG3a-uwv#?-TQ|*TQ02R8ico=B2{731p>6!BVS@s6GWt9d{;$uQSZth}~)Wzn?}=VY>C5~o6Q@o~0w&=su?NVwe$euo3)<3aYe!f9@j6=az4I|$Su%#@TFiJ? z=$d>jM$HlL!ddi|X=Bn2AEmh@@7$LwBKu_@?kG+wJ&~GG`tppapN@{1qdxuSeu1|F zi35a>1nEaj*BMuAL60q3ZdZCTY&z0`x7Um?Zh=XN#E?_-$@ten4q+ea7G#0q*5>APnh9J3PhGM5ZZX5B*kFKC*12VR=w(_6M3loe zKt-Ln_?sT@^*hfIE)t=OdpHXl3cERrGpo>ULT8u0GqetGvP>1q`gSH&#GZtM9 znQLAgLB>hD>|)2XwuhW~IJW8-o%rj3MRXswrMz%BlyTMB&cW8>?$1KkFh z=%QksFS5+ z(sVyG^C-t2@}&?AZS-1+!I|X&=GSjwbpr##Fxe3B?%tD=LkV1rh*@&AuW{94YBvT= z{gjZ$`bWmTc4pSNX)=h7!IM9vO6?-PW8-a?yZloEgUye}ed&1$7{NoDkwt~P#G(Rj z0JkVNA)$(Kr4_|BcB`+*9l>PJm3@-xW1p7Ysots4Jjn}H-aM4W)aHQD;iFYqmWh%o zGV9gZ5>`L-#5RQLPt-R*JMAQrSaQ36B7Iyb6YFLZg!L4{!(JGpM8Vi4R^4DYE zV|czX1%h)f4c|E=mj}#Oq$U89uO5q8T}qj(u%Z?%=hA@GPe=~{33yWk(&yBKjW3p& z&%Y57x%^#b9B?T9{AfTLpfnpTb55}NZ?V8;)WirGi0lE~a(s!rvqUJc$2a&vm^Y_H5iQ(Hfge}qh_5XiL+Zz$2mj_MPVupD{T3N9ef!1_Lhm$pHCqgZr z>k*V^qUo9hMYMBXyv{!`7oA{Q&4b}+5hJEu0wZ|1DFH-3GxOpV@nMFpEMCFkbWLaF z<%oY?nj0aIh9b{yWW@_GVmidZux5RVkl?wT5?WhJ+C*!@rk+)VI58cz z#BlU82wSV%HuvJd+S==0Yop>iZ5nwj27aA~{61)QFXb9%F&9B{g@1Z$*qy68!Fz@NmY-pt=nZ)~oC~8pQA--gjCvK_pbQwM|hDjykOiG$F?E zttHwHF`j`4x*h87EBr|h58eY%7 z=j#Y>Dg!jk^tMrpH;Dq6dhs?&p!!8;_ib#Ke-Kx2213ZQe`oiIE2U0j%h>(?ulMh7 zD*OiiIN^H_=cx|}7t?(YdSJ`N(=bkYcK!4)g7DeP}jPYm0$~B>kWaUl2!yITY$FN}37&9}m{0mU-eiNB>hd%vQ&3A{s zJ2A~^-#ZggD8p1bLeH%e&tVOt%9t{KO`^2O=Ts~hHO4Gn3<2nS_$b!GvF-1`tWvT`_ku3ilw-gJXU+2AHR+;aV}|bE zFY{KMQF%MaD+Bue0l+4}bk<=tqK=yAMFa+$erE+1{r%c6GRSY9^}I)zeC&T;WQ!$# z%Dnvl68LS(p~yg6$Z?HLTcn9LgC-M;DMDe1Kz75RTpFj?3=;7d4^Qm1WTONc_F3k* z?wWFsZBbLiY~3Iy+?>01-_%uEe`1hNUDH5Taq~|2%7XrZHiHgGXZK{{n1>BwI3`MiG

_eRa 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 z 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 j{xNC$epx7z7L`7PLiqVVV_#6U@HC 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 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-light.svg b/docs/Documentation/themes/d3/fonts/robotoslab-light.svg new file mode 100644 index 0000000..a09733a --- /dev/null +++ b/docs/Documentation/themes/d3/fonts/robotoslab-light.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-light.ttf b/docs/Documentation/themes/d3/fonts/robotoslab-light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..067e1e58b0729e758f737c5c1cc70cace6f4c734 GIT binary patch literal 40392 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 Chiqg3 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-light.woff b/docs/Documentation/themes/d3/fonts/robotoslab-light.woff new file mode 100644 index 0000000000000000000000000000000000000000..1cbe7902b7c7722c5f984d2933a76f962248ed21 GIT binary patch literal 24224 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 OD;59%0a>}9VE_OV(@IGI literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-light.woff2 b/docs/Documentation/themes/d3/fonts/robotoslab-light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b954cfdc867b95a2755e7cd6601cab227c4091f6 GIT binary patch literal 19112 zcmV)7K*zs#Pew8T0RR9107|F;6951J0G+%507^Ol0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-regular.eot b/docs/Documentation/themes/d3/fonts/robotoslab-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..10a7a2b6d2d836dcd1501f7d8fec3dcaba773e9c GIT binary patch literal 39066 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/Documentation/themes/d3/fonts/robotoslab-regular.ttf b/docs/Documentation/themes/d3/fonts/robotoslab-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9c36f36071729ae3ea3e8d5f1875a09729b44301 GIT binary patch literal 38804 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 T{)-s=)*Ow;-L0K>i!prwlD(7=Kk;_r0 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",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"

","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m(" + + +EOT; + + return; + } + + /** + * @param $aResult + * + * @return bool + */ + protected function hasRemoteVersionDiff($aResult) + { + $blDiff = false; + + if (is_array($aResult) + && isset($aResult[$this->oBase->sVersionTag]) + && is_array($aResult[$this->oBase->sVersionTag]) + ) { + foreach ($aResult[$this->oBase->sVersionTag] as $sRemoteVersion) { + if (version_compare($sRemoteVersion, $this->oBase->getVersion(), '!=')) { + $blDiff = true; + } + } + } + + return $blDiff; + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getNoSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getSuccessItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $aResult + * @param $sElementId + * @param $sCheckType + * @param $aConfiguration + */ + public function getUnknownItem($aResult, $sElementId, $sCheckType, $aConfiguration) + { + $sText = ''; + $sDesc = ''; + if ($this->hasRemoteVersionDiff($aResult)) { + $sText = '!'; + $sDesc = strip_tags($this->translate('RemoteVersionDiff')); + } + + echo '
'.$sText.'
' . + $this->_addToggleScript($aResult, $sElementId) . + $this->translate($sCheckType, $aConfiguration) . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + + $this->getSubDirItems($aResult, $sElementId); + } + + /** + * @param $sCheckType + * @param $aConfiguration + */ + public function getUncheckableItem($sCheckType, $aConfiguration) + { + echo '
' . + $this->translate($sCheckType, $aConfiguration) . ' (' . $this->translate('RequNotCheckable') . ')' . + $this->_addDescBox($sCheckType.'_DESC', $aConfiguration) . + '
' . PHP_EOL; + } + + /** + * @param $aResult + * @param $sElementId + */ + public function getSubDirItems($aResult, $sElementId) + { + if (is_array($aResult) && count($aResult)) { + echo '' . PHP_EOL; + } + } + + /** + * @param $aResult + * @param $sElementId + * + * @return string + */ + protected function _addToggleScript($aResult, $sElementId) + { + if (is_array($aResult) && count($aResult)) { + $sScript = "
+
"; + } else { + $sScript = ""; + } + + return $sScript; + } + + /** + * @param $sTextIdent + * @param $aConfiguration + * + * @return string + */ + protected function _addDescBox($sTextIdent, $aConfiguration) + { + $sContent = "
?". + "
". + "
".$this->translate($sTextIdent, $aConfiguration)."
". + "
"; + + return $sContent; + } + + /** + * @param $sIdent + * @param array $aConfiguration + * + * @return mixed|string + */ + public function translate($sIdent, $aConfiguration = array()) + { + $sGenIdent = preg_replace("@(\_[0-9]$)@", "", $sIdent); + $oTranslations = new requTranslations(); + $aTransl = $oTranslations->getTranslations(); + + if (isset($aConfiguration['aParams']) && is_array($aConfiguration['aParams'])) { + array_walk($aConfiguration['aParams'], array($this->oBase, 'aTos'), $sIdent); + } + + if (isset($aTransl[$this->oBase->getLang()][$sGenIdent]) + && ($sTranslation = $aTransl[$this->oBase->getLang()][$sGenIdent]) + ) { + if (isset($aConfiguration['aParams'])) { + return vsprintf($sTranslation, $aConfiguration['aParams']); + } else { + return $sTranslation; + } + } else { + return $sGenIdent; + } + } + + public function getPngButton() + { + $sImg = "iVBORw0KGgoAAAANSUhEUgAABDgAAAAWCAYAAAAl+SzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB". + "MpJREFUeNrs3Y1O4zgUhuFY4hbb2ZthRjtczOz0Ght7cZwfQ5u2E4K0a55XiNDUXyWcT+ZwfGyHw+HQvZI6AACAT+J0OgW9AAAAtn". + "A8Hh/JWYSnbkxuvAYeeg0AAAAAAPynuJevOB6P+ZKe6sYvLy96DgAA7M7z87NOAAAAm7iVq8gxRs5p5CTH03Tz758/uzAUc7x+Hy4". + "pf71ex9fDj2leyxLG1vnNELpmdJPqo21a7afy+/MIj/AIj7zVhS/seWPD4zoAAIAtxJhW44+cy/jx/ftw/2kRxDEQSd0Uraah/RKV". + "lLfK+/kDS0T7eieGZnTdA33QfeF+CpFHeIRHeORSF1Lw3I0Nd3UAAACbEhwprscfadnma05wpL7v8v0Sh4QiLimREqWEt7mSmK9xn". + "LlrSBe6fdq02k9D1oxHeIRHeORCFz13Y8NtHQAAwNYER+zX44+q3Zzg6GOcbw6haqhmXG5MvuQPiw3q9mrTaj/xCI/wCI9c13juxo". + "Y/0wEAANxNcPTxbvzxLsHRd7mEo8y+pJIFCWEupy2XMTcSxjKQUMqSl1mb/79urzbN9hOP8AiP8MgV3Zf2vLHhIR0AAMBWcr5iNf6". + "o4owlwdGPCY68hiUsZbRh2DGsWkz7/mUaVl83oxu3R/xwm1b7KfEIj/AIj1zRDfc9d2PDTR0AAMA2hgqOtfijWqOybDKaExzj6pVp". + "zWyYG04zdGn5vByohVC924ou7NSm3X7iER7hER55r/P3w9jw6NgAAADwp+SCjPX442oFR5URWeaY5pKPsmNpmI+SnctN5zKRVnR7t". + "Wm1nwKP8AiP8MiKznM3NqzrAAAANic4zuf1+ONaBce576dQZAhMplPepvWzYdn6vSoBCUNJSCkPaUS3V5tm+4lHeIRHeORS97U9b2". + "x4RAcAALA5wZEPRVmJP1K4ckxsPJ/H9SzjOvpuEc11INP805gtWQ6Ka0gXdmrTaD8NGTMe4REe4ZFrOs/d2HBLBwAAsJHzuV+PP6q". + "JlKqCI3ZdvaZliVGm3MiYKZm3EJuvXera0aW0T5tG+2kKYHmER3iER2pdU8/Pc/+0sQEAAGALec/Q9fjjSgVH358v/zFZJNXy6ukY". + "uFQqREZBK7q0U5tm+4lHeIRHeOSqLnnuxoa7YwMAAMAWzvF8M/64THDEOB+xEsYIJlV7d5R1tdNGHsMnlvW2I63opirrj7Zptp86H". + "uERHuGRS92X9ryx4cGxAQAAYBv5mNi1+OP6HhzDMbEVad5JrKoxrdbfzlFa155urzYt9lPgER7hER658bt47saGVR0AAMA28ikqj8". + "QfVQVH3705ceU1KEm5qmM+0y7N8crwOqY5a5Ja0sWd2jTaTykmHuERHuGRS52/H8aGuzoAAIBtxCGIWok/riU4Yl8EZVOwEpSUG9X". + "62XmRS1w+oV5z24RurzaN9tO0QR6P8AiP8MgbnedubLitAwAA2EqfExo34o+LBMevX7+6b9/+KkFItYZlmI0tP1XBS3UE3LhNeju6". + "vdq02k8dj/AIj/DIhW48W8NzNzbcHBsAAAC2MGypsRJ//P7n9/J/yOFwGO6fTie9BgAAPgvrVAAAwFZuzpgcj8fh+jQGHGm6AQAAs". + "DcmUgAAwFYezFeEfwUYAAoCUXB0RZrTAAAAAElFTkSuQmCC"; + header("Content-type: image/png"); + echo base64_decode($sImg); + exit; + } + + public function getPngLogo() + { + $sImg = "iVBORw0KGgoAAAANSUhEUgAAADMAAAA0CAYAAAAnpACSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE". + "IxJREFUeNq8Wgl4VNXZfu+dLZkkk5BA9kACYQlB2aIga6myuIEtFX+kLW1BJVT/akVrRds+rVqRX2lLRSsal5/nUaCgtmhi8BeaUh". + "Al7EYTIWyGQPZlMsnM3Lnn/865dzJ3biaLVnsfDpk59yzf++3fOSMxxvANPlZqUdQs1FRqXmq+Ac7NpbaI2jxqQ6nZqDVR+z9qr1H". + "71DxB+nfBPHYYSHUCK8fATl+HUZtK7Wpqo1SGeZ0BQCEYFolQETSrhDJ6d4rax9Q+pFa18SQ8HX6aHAcszUUS9T3U0IU1710ASqid". + "dwNuBciMARbSDjcQtDQnnnj7HNYuGvY1gqHnW9RWBBi+f7kT+LwVKG8AjlDj38+0AR1EiJ1kk0XEZFAbO4gQJwOj44F0+m6TsYvWK". + "KKWQOQUvVwFPHCAxNBlZDs1psk30wXsv4XWi8VvqefXXwcYWg6FRPy8racBzsXjjQxtXim4sra5bKCG6X3QCLOR4lxBwGakS1g+Ch". + "hORN5FcttWpSumpCunZADEH5L2iATa71bAaUUW9XzxVcEs4yCq2zD9qaMML1QQXQGdaMmwYW8PM41RQxwvmgu0+yU8Qap7uUMbN59". + "UykUKXF4P0J5hgD4gi5qTjuW6DQkDHehDfMNvLnbgvp/vV7GdpKEGdA5aTMRiAIAQDj6HJHR7rgyHBc+T/a16jaQzNFbYB0FDXa0H". + "C0a+QSrrD82J1qj3G73NQJ6buTT+eppdf+cehuauCCCCLDeDkcwAWM8xjA+T8JcKxp3FKu4oFGLUOZJEpyJNIqKfpP4F/kBI9bLIW". + "UxIErPLvozNFLb5sOmRgwwbj6kaMbIUrjJMJzIIRooAUOpNzwzdAcMX+hfvlFC6UEaCQ8K0N4FGrzbVQuM+InuZNBjruOcLzpL7Ab". + "LSr2LT0lIVG8tpBZnpxDOtwfgX4X2snz5z4y8swaYRfWM2+fhkaS/3gotyqE/RVGnrAgHkz6daQ0D6A8Mlsvm24gDerSYgNhaZiP4". + "avvq4giFCgkdJzZa+MAv442zCQxby9hmgK4C7c+MxZCBgZtJam24tVvBmlS4RhoERaH6nRhpvkg4FKfipKXrj32nPjy+p+NsZ9d4W". + "L16noPvTu/OBuSSt/z1BaUCNoPN2c7phfhJoqbLfk1qVconwEUw3DEm3L1Xq3W0x9Ix0TDLnHTpwzZ5W5MsYP1gCqTSsxN5jFK+KT". + "gbweiW1ChXzhksoXmh7lkx11Vvz8fxsCsaXOsVKI/sD84t3z6pYu5fkaZdCXJUkLSbQd56aWCQz5ZLJ57Juwn3csFV9jaDDCeoEfX". + "+owIbceGmT3qseqmOri44oWjam8vmWoMt4iYJk/Pb5WPdpi/h+vC8wszwKHrpzt08zRE4Ql4LEwqL39httGJckD8in8yleUhs7sfV". + "sG8MFN0PJ2QB2nAp0A/RrXmzrU+VK2YOTrWlXJEmr7y2w4C0ac90wGQ8UWPmwe1+pCCg/GmvZnO7EOovmPZ19gSn8w2E/LraomlRU". + "g6fSmc0lMi1NRopTmjCAeB+UFN80YfQgiUeGoSvzLXMrm9nsxw76sOWYQvmbirxEy3i3j5Vtr1Jqbx1lXbBhtq3wd9Nsi2JteIfmP". + "Per/b53HCKuWZafa2dYuduLD74XtYHo2UKdDeY4c2t1K9s2qsgj7E8I3Kw11AZFEYdXRlOKIZEp4tzsHT4Rdny6vrtINdq8DA76nE". + "BjaygtSaIi4Hu5FhSfU9FFBs6Xeusm+xKyka1PH/LjUJ2KN25w8PlLlhd3bR8WL2Goy4qV4yxxtxd72/laL893pNK0R4/Vq6t/VOL". + "F0Ysqdi6OwndyLb+i/t+ZwXxw127vnBdIMkJXI5kAETwxRcZHy5x8Y/L+8NyyywdKNZBNEfm2kTJON6nYVulHTryMKekyTjWrpGYS". + "8pOtKK9jcJPX4uBHJkhYP8M2nta4Z8Nh/4r9NQG8OM+BeIf0Z+qjZAluPceglBJ5LV62nIeIHxZ3IaDncwUZRMtSJ1dBXn74g2AyP". + "H72Re5LHtS2q707bNLtFRNstGnUe/RtAe96eJ8PWS4Z01IlJJIEslwWzsEMPWequ39P16Wq5gAmJVuQ6LTgIAFqpkienyhhIsWRZW". + "Oskzv87FD28x1IiqHsOd+GkYNkwYxOkmJFYwDnyda2fKrgXLMalkJxs65cGUMZtHw9fS0J2sxtB2oDqG0OaFLpLcOhtaani9WOBrs". + "mEEH5SZoRE5ApRNiHfHOeBA6mdOTpOVH/omGbHz/Q9Wqak+HaDF5sSeRAJMTSmLdPKeWLcq3/s+E6x5of7PTg4fqApgnBPCyo7rJJ". + "9fkQkvLm4z48OSuqkIORdYBPFx33adT2E6XzNS92LLhgLXmnd6sV7D6naA6k3IsrX2xHXlE7xtDfJX/zTP/7aeWVtddEbeK2aJd5c". + "cZQ5w5QUAzgRL1wZe9clWKBhTNS1uOZVU9tJC2ARgzUtNZrn/hBWrWQawOnLLexk2FnpU+P9KrWVL0xHSB9jqINsuPlcP9O72Ta6I". + "GrHXz28rLzCmW8ZOjkEWrIS23/xIuFW9txsFYpXJpnX9alcAdBCkBuKI8YMzpRrFeV5ZIwhNRMeB/VkD2YswlVDX0moLXNCg5fFgy". + "5lq805RSpV1eXakozQh5MW4QhJ0HmBsonng9iibNrHo6e5E4S+4l6xRDhma4aDH85Is4xttwx3i4pKhMSaupUcdktInGHhazYaWEh". + "5jHdylUWYm7QWQXfiX6GDy8KrZjFt5q274ISmsQMC+iDxV/i2NQ0UTy9T3Pag2AoNqDdKzbJqyHCLrUEQioRlC6BO3rJL9IVeuzbK". + "rzYd8GHzFgJmXGCEVHcEfkUfT+oBimo4RIS/dDX1hi274Koz/K5Axj+aYMSLo1IyRZNLEgT/uKk8e2JOiVY3ow7SfrPWITii/ClkA". + "pZtXHKt4dZyVMBu075hI3fMsqeQK6X1C8oDUOKFFbMRfBMNKShQ0xwceoyq5uVUKTv45mcIsB8ZOzjbjR4znW+lajmQUAyJQYEMI3". + "AUHfxmvfdAU5ffLQMa7SkxQyiodFDYDyqyWP1TxN/39wpbIY7R8R+wYmQ+phIxEhESZJTEHnW+CrZKWvSJuY3dhhUwpjpUN+0DMGI". + "E7F2SbzxikyABaU66bNGJZwRPQrSCBWqTm9rl+CIg+9gc3sD4VxgekWJUJYbbZMQL7JoLQ8KPpfd3bXu0MpGv67v4SUCp2/BCB6ks". + "WtyqlW84XbmJ5A6eXNLT3t1G5HCj6UkYwkSQdXoq0870pA5GCWaK7MaiFCHsO4Jg0klXJonazKudY4MftONLhflXNccqfUb0iCdEi". + "L427kOpMeJYHuwneyCM2bEIC2UT820pdPcubsqO00luYEh3bWP2rPaoC82jSMqB+PmXuVMAzOkMSaVI0/GOWrXLLjZCGZ6lk2YTks". + "Xw1kuGWbkHmcbw9oZMVydVq/bx30f6bWdZwxM0EhgZleQO7/YpIiz25DxM5PNs8jaRovEOwThPv5/3XDOpUAf0Z+4Oz5VFEgvw7Cd". + "iHYNQsbjqgiI32+I1Dz4UeBcPT0Gs7MdfMyr1w53YA595mVEdVNASJWeG3dUdA7gnEANxa4wV60iMVqg6+CSqbwy2TpLGxDpiEjrv". + "zpD6Pwhs29QNOv/1t5q0nmeoAU0I3GRY1g3LwF3XhXLpbL4klv1pMVS8kiAp2TYxHYFGfZC8oDLNvyjLfycofusTYrgBGAoxTU3nq". + "w5plYO5vDkdLsehCTzyZwYzA147BBbjxgjDpzH8BsLfD5miBX/PTMOIxKtGE2fx6fakRpneYberW/wqJeaPAGUVXfiDIWBRfkxmDb". + "UMZyEt+mON5vQyYshrviqGgIhzEENnTWHqZehwCKveGWKoO0MB1PGCXGS3/fwRU14eEuLt5BbFnrZ404kWTPs55aMc4LaOPrcoo8r". + "XfxGY+WDM1y42OrDsYteECjUk/smIHzfNa8dcaP0kw5DVduLvZj/Gg2aNGdOjlDjUr7oZ8mxFszKtqOkwoNgmDZG7/GpNsRoLqPRD". + "GZLeTsWXxnbvPGA+4nPyYhvGBklJMklQCUvPr7QiaM1XRgcQw6EjGXr7ckjaNr9JVWdhT/ZWq/t91VvImhabJSM8WnCBMqs+sHR2n". + "uuiXu85AQVdxZTZUa6MGuYgxP4qtn4+fPI2/XYdqwdflKNFkocm1u9WDIhFh2Ur2TGyGij6Gwho+FG/8xNSYXkhje9Wu7Gqh31+jF". + "vX1Ge9X3MQPZ3x4w4Ks/lYl6dBouz12dmRz3u4pt7TekIcW1iukB+JOKC5BaPX/B2B7RaovGmPCc2Lx7CjYnfnUzmHpxaweEa79Sf". + "72rEP6o6Q0cprD+6+5Aa0baiIE4cQRlPZ87EOeR/fndczMxXPmwVV1lBjsmkBukihcN8vYWv91RupN1jKY7MaqE0o5pc9p7TnaRuX". + "uw82aHZRlCVVaPn6hFA+pYKacyEoVEYM0QwusR81PTcfTPjZ76yv8WwicaV1TvqqG6hOtvSvxZwT+4iPa5u8uOzOj/aOgIhB8TVSt". + "bT9+50KZzT3QeO/YmMnFXhVBe3ij/xGGM+neGlkbK2uBG/L2nQ6lvzxVAk8RuPXoMMUAz1u3lymJs1EGrsY4aBkhR+tyOCG9VWOdH". + "YuzqLskspjzsx88F5gKZd//C1gxDH3XBADVV0YOFltKqGru/CxhjuMSVT9A5O6C7F1fCC0Fh4ITzCh0V+vRX9VyoH8mAQSKRbgJJY". + "u/yHjd9NoRw9SDALJ5gZozALVw9jqmGu9LqBm3I/4x1ON1NgcJyGdflDdK2aOQh5yfb3j9d61/d3pfHsD69y4Z7rEvkhsYGDhvMAY". + "3ltrtG736H3iyUjk4xSCkoNxvMIA1hfAFdkReGZRcnCxr1KeKSIBOYUqdt31t+cjGtyozUJhXE/Aje7uWzipvlkxaiW5kOTsLXR82". + "SGCOfZxnuFWbyEeKS6wbeTHyoO5LLpLdLHNcWFw5Cf6dAlFEG/zX2RiOhxCYWBXVIhHAgv6fb8LBtpLutTlXW+x/nhiBLAgMDw5+n". + "4KPnRsp/lYPrIGHHvFvn2DF/t2m+gjVxwOuWGx9fmYmyK49mqOt8veiO4v0uWx0iU979LElo+fZAmIfVrJraPGorvN2loNPbdNxx5". + "KY4n/3nac3dfxA7kxugZCoJLX1qWgUdvTtESTkWNcIJi0vkw2zGU0oz19GbmrEXRwPxgWiL23puDnCT7w6WfuX/Z7y3Ql/i5Cc+vC". + "mta/Mt+vOUCdp9s1wKaBaHAJvXyK4w+k0jDxIBWoU7KceLF72diYmb0Xu61XtjftC070U6GLyMlzhqGe3Sy/d/6VdMqX4A9V/xJO/". + "60pwF7PneD+fXfYMkSvvTDdBA0dSKp1E9IGsunJCIuSv7liwean+QXWLQfvikw4oiZ2l2kCetP13vx+qEWvHygUTvQ0AnrBiYhdDF". + "rVCk9/0uItWJpQYIAcUV6NI/qfxTS+FdTJT+rs1m+eTDBx6ar353tXnXpR2c94O3QeQ9qWv3ooBjVTIkmJ8ZG4FxUzbqiLUgmABMy". + "ojBleAymZDsxJNZayu9wqO3+bfHl1iQq5PgtwX8ajPFJ039IN4faWP36Llb/WaOs5yc+PcNt1a/6+I94PuBnCF8HAf8vwADS7GaT0". + "D4fMwAAAABJRU5ErkJggg=="; + header("Content-type: image/png"); + echo base64_decode($sImg); + exit; + } + + public function getGifBg() + { + $sImg = "R0lGODlhCgAyANUAANHo+pfK85rM8/X6/vb6/v///5jL85bJ8+Hv/KbS9dzt+87m+qTR9fH4/er1/b7e+MTh+P3+/63V9u/3/". + "dfq+rnc97fa96DP9Nns+53N9LLY9tTp+sHg+Mzl+cfi+OPx/Pv9/7DX9p/O9Oz2/bTZ9uXy/KLQ9Pj7/ujz/bzd9/7+//r8//P5/s". + "nj+ZvM897u+6nT9avU9qvU9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAKADIAAAb". + "FwINwSAwYj0iDcskUOJ9Ql3RKzVivWJF2y714v2CTeExmmM/ohHrNhrnf8Jh8PpdJ7vh8aM/va/6AgSSDhIUWh4iJFYuMjSmPkJEP". + "k5SVHJeYmRCbnJ0en6ChLaOkpR2nqKkLq6ytAK+wsRuztLUUt7i5GLu8vQq/wMEvw8TFCMfIyR/LzM0lz9DRKNPU1Q7X2Nkj29zdE". + "9/g4Q3j5OUs5+jpA+vs7QTv8PEn8/T1K/f4+SD7/P0R/wADqhhIsGCBgwgTBgEAOw=="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } + + public function getGifDe() + { + $sImg = "R0lGODlhEgANAIQZAAAAABAFBhEGBhIGBhQHBxUHCCYNDZQqH5QrI9c4M+M4M9w9M+g/MuNDM/BFM99tI+t3H+CyDerIB+zIB". + "uzKBurLCPfcAPfgAPjlAP///////////////////////////ywAAAAAEgANAAAFVaARCGRpmoExAGzrvsBAwHRLFHVdIEfv/8ADou". + "EoGo9IR2PBaDqfUMYioahar1hF4gHper9gyKOCKZvPaExFcmm73/CLZGKp2+94yyRCmfj/gIAUESEAOw=="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } + + public function getGifEn() + { + $sImg = "R0lGODlhEgANAOfRANzd6P9LQP7//93e6ba32v8HB/J4ef//+/85Of8fFVddwP8aFq+13P8aFPr////f3f8XE/n//62s3fQuL". + "AIDj6ys3uHZ5P8uLOjp793f6dbX6uvBxsyasurCx/9fXcadtS88r+Da5EZHr+Hi7A0NlUVGqcjR9MKaunh5x/8REQAAkv9IP/9BPn". + "h6wi4/td3c5uLl7P8PD7vO9aGSw7bM9uDh6UpLsf8hFv/f3PPx9/Dx9DFCuMDE4cHF4/sAANPU3ufp8JSDvuVocf8ODvz8+/xRTPQ". + "gG+PM0ZSWzs/R476+4ujp8v8/PurO0uPZ3//u5fQCAOPj6nFxxf8UE8rM4P/w5YGM18PH4/79/ExUuP3//4CAxqmo3KaZxv7+/Rcs". + "tO3v89XW6fS8waOj2snM7Nra7Ccon+no9v03OFJZvuK2xBEipP89Ov8dE+be4u3u8/w3OOVocv8sKv8EBOjo9+/u+Kap15SFvgwRl". + "ba327uXteHh7tvc5yo3q9XX5SQ4uU5MrtjW5qaVxvDS2f8DA+Tj6vr6/j1FtVlgvL+euvHw9v+rqe7u+XKJ1ebn7p2x7CUmnvb2+d". + "PW8P8cEc/P4efn8/38/5Ws66mYx/ccGNfY5vh0d927zSUlov96ev88OgAAjmmA09rb5v+xsPF5eMnR8i0upuuAgvEyLx0rq97f6cu". + "nwEBIuO/Aw/9/fuTm6vn5+vTEyM7P5rq63BESlf+Fgv8fF8SWsOfp7+2rrvX1+La23RgmqLe43PPV2vdydhcnqIWQ2BEgoube4wAS". + "n82atOHj6uTT2f97etKjuf9dWsSduZyb08fJ4fn5+/z8/f+ZAP///////////////////////////////////////////////////". + "/////////////////////////////////////////////////////////////////////////////////////////////////////". + "///////////////////////////////////ywAAAAAEgANAAAI/gB/YHCkig+AAVGGuSmUAYCoEbpgGXsFY8kWM7T6JEI14QMIEpB". + "aVNIBRBOSOtEqmAK27EabYqk6jYl2hpksKnjSmIgmqdEqWw2ShSITrZQCFXb8IDpkRdGBCLGmpBDj4ECOYKyyXHFyyoCQX8hceShQ". + "QFktT5viGCDV5AgUaHDjypXrI9exIgHYwEHA5MIcQnJYIEDzKcCKVi+63BE0CMeTUTGGLKrywBemIDMCJVnz5ZIWATI4LYCghoaAa". + "I/+EGNAqQQXQ4xQuDiRYBKHHVLoWJIAaFaNZkSU2KAgTI+RTLd4gRKxC0uZPQPAvAnTiwCPEB02WOiRh4CGZ15wAgUEADs="; + header("Content-type: image/Gif"); + echo base64_decode($sImg); + exit; + } +} + +/** + * Class requTranslations + */ +class requTranslations +{ + /** + * @return array + */ + public function getTranslations() + { + return array( + 'de' => array( + 'RequCheck' => 'Mindestanforderungsprüfung', + 'ExecNotice' => 'Führen Sie diese Prüfung immer aus dem Stammverzeichnis '. + 'Ihres Shops aus. Nur dann können die Prüfungen erfolgreich durchgeführt werden.', + 'RequSucc' => 'Bedingung erfüllt', + 'RequNotSucc' => 'Bedingung nicht erfüllt', + 'RequUnknown' => 'Bedingung unklar, siehe Hinweise im Hilfetext', + 'RequNotCheckable' => 'Bedingung nicht prüfbar', + 'hasMinPhpVersion' => 'mindestens PHP Version %1$s', + 'hasMinPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht kleiner ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen kleiner als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxPhpVersion' => 'maximal PHP Version %1$s', + 'hasMaxPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version die nicht höher ist '. + 'als %1$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann in '. + 'PHP-Versionen höher als %1$s nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasFromToPhpVersion' => 'Server verwendet PHP Version zwischen %1$s und %2$s', + 'hasFromToPhpVersion_DESC' => '
Das Modul erfordert eine PHP-Version zwischen %1$s und %2$s.
'. + '
Die passende PHP-Version '. + 'ist auf Ihrem Server aktiv.
'. + '
Das Modul kann '. + 'außerhalb der PHP-Versionen nicht ausgeführt werden. Fragen Sie Ihren Serverprovider '. + 'nach der Anpassung der PHP-Installation oder kontaktieren Sie uns für eine alternative '. + 'Modulversion.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasExtension' => '%1$s-Erweiterung verfügbar', + 'hasExtension_DESC' => '
Das Modul erfordert die %1$s-Servererweiterung.
'. + '
Die %1$s-Erweiterung ist '. + 'auf Ihrem Server vorhanden.
'. + '
Das Modul kann ohne die '. + '%1$s-Erweiterung nicht ausgeführt werden. Fragen Sie bei Ihrem Serverprovider nach der '. + 'Installation dieser Erweiterung.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinCurlVersion' => 'mindestens cURL Version %1$s', + 'hasMinCurlVersion_DESC' => '
Das Modul benötigt cURL ab der Version %1$s.
'. + '
cURL ist in '. + 'passender Version installiert.
'. + '
cURL ist nicht oder in einer '. + 'älteren Version installiert. Fragen Sie Ihren Serverprovider nach einer passenden '. + 'cURL-Version.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinOpenSSLVersion' => 'mindestens OpenSSL Version %1$s', + 'hasMinOpenSSLVersion_DESC' => '
Das Modul benötigt OpenSSL ab der Version %1$s.
'. + '
OpenSSL ist in '. + 'passender Version installiert.
'. + '
OpenSSL ist nicht oder in '. + 'einer älteren Version installiert. Fragen Sie Ihren Serverprovider nach einer passenden '. + 'OpenSSL-Version.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinShopVersion' => 'mindestens Shop Version %1$s', + 'hasMinShopVersion_DESC' => '
Das Modul ist ab Shopversion %1$s freigegeben.
'. + '
Die Shopsoftware ist in '. + 'passender Version installiert.
'. + '
Das Modul kann in dieser '. + 'Version der Shopsoftware nicht installiert werden. Fragen Sie nach einer früheren '. + 'Modulversion, die für Ihre Shopversion getestet wurde.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxShopVersion' => 'maximal Shop Version %1$s', + 'hasMaxShopVersion_DESC' => '
Das Modul ist bis zur Shopversion %1$s freigegeben.
'. + '
Die Shopsoftware ist in '. + 'passender Version installiert.
'. + '
Wir können nicht '. + 'garantieren, dass das Modul in Ihrer Shopversion funktioniert. Fragen Sie nach einer aktuelleren '. + 'Modulversion, die für Ihren Shop passt.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMinModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") mindestens in Version %3$s', + 'hasMinModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" mindestens in '. + 'Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasMaxModCfgVersion' => '%2$s (ModCfg-Eintrag "%1$s") maximal in Version %3$s', + 'hasMaxModCfgVersion_DESC' => '
Das Modul benötigt die Zusatzsoftware "%2$s" höchstens '. + 'in Version %3$s
'. + '
Die Software ist in '. + 'passender Version installiert.
'. + '
Die Zusatzsoftware ist '. + 'möglicherweise gar nicht oder in falscher Version installiert. Bitte installieren Sie die '. + 'Zusatzsoftware, bevor Sie diese Installation fortsetzen.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'requireNewLicence' => 'bisheriger Lizenzschlüssel kann verwendet werden', + 'requireNewLicence_DESC' => '
Diese Prüfung versucht zu ermitteln, ob Sie für den '. + 'Einsatz dieses Moduls einen aktuellen Lizenzschlüssel benötigen:
'. + '
Sie haben für dieses '. + 'Modul einen Lizenzschlüssel hinterlegt, der wahrscheinlich auch für die neue '. + 'Modulversion geeignet ist.
'. + '
Sie benötigen '. + 'für dieses Modul wahrscheinlich einen neuen Lizenzschlüssel. Haben Sie diesen schon '. + 'vorliegen, führen Sie die Installation aus und tragen den Lizenzschlüssel dann im '. + 'Adminbereich Ihres Shops ein. Ansonsten können Sie den Lizenzschlüssel in unserem Shop '. + 'www.oxidmodule.com erwerben oder '. + 'sich ebenfalls im Adminbereich Ihres Shops einen kostenfreien Test-Lizenzschlüssel '. + 'erstellen.
'. + '
Für Details wenden Sie sich bitte an '. + 'buchhaltung@shopmodule.com.
', + 'hasModCfg' => 'Modul-'. + 'Connector installiert', + 'hasModCfg_DESC' => '
Das Modul erfordert zwingend den D3 Modul-Connector.
'. + '
Der Modul-Connector ist '. + 'installiert.
'. + '
Das Modul kann ohne den Modul-'. + 'Connector nicht ausgeführt werden. Bitte laden Sie sich diesen kostenfrei aus unserem Shop '. + 'unter www.oxidmodule.com/'. + 'connector/ und installieren diesen vorab.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'isShopEdition' => 'ist Shopedition %1$s', + 'isShopEdition_DESC' => '
Das Modul erfordert eine dieser Shopeditionen: %1$s
'. + '
Der Shop ist in der '. + 'passenden Edition installiert.
'. + '
Das Modul kann in Ihrer '. + 'Shopedition nicht ausgeführt werden. Bitte fragen Sie nach einer Modulversion für Ihre '. + 'Shopedition.
'. + '
Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) oder Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. + 'installiert (auf passendes Zend-Installationspaket achten!)', + 'hasZendLoaderOptimizer_DESC' => '
Das Modul erfordert (je nach PHP-Version) den Zend Optimizer '. + 'bzw. den Zend Guard Loader. Achten Sie darauf, ein für den verfügbaren Decoder '. + 'erstelltes Installationspaket zu verwenden.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert. Es ist eine zusätzliche Erweiterungen (Zend OPcache) installiert, '. + 'die im Zusammenspiel mit dem Decoder Fehler verursachen kann.
'. + '
Das Modul kann ohne den '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des passenden Zend-Decoders.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasIonCubeLoader' => 'ionCube Loader installiert (auf passendes ionCube-Installationspaket achten!)', + 'hasIonCubeLoader_DESC' => '
Das Modul erfordert den ionCube Loader. Achten Sie darauf, ein '. + 'für den verfügbaren Decoder erstelltes Installationspaket zu verwenden.
'. + '
Der passende Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Das Modul kann ohne den '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des ionCube Loaders.
'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'hasIonCubeOrZendLoader' => 'ionCube Loader oder Zend Optimizer / Guard Loader installiert '. + '(%1$s)', + 'hasIonCubeOrZendLoader_DESC' => '
Das Modul erfordert den ionCube Loader oder den Zend '. + 'Optimizer / Guard Loader. Achten Sie darauf, ein für die verfügbaren Decoder erstelltes '. + 'Installationspaket zu verwenden (%1$s).
'. + '
Ein passender Decoder ist '. + 'auf Ihrem Server installiert.
'. + '
Ein passender Decoder ist '. + 'auf Ihrem Server installiert. Es ist jedoch ein Abbruchgrund festgestellt worden, der zu Fehlern '. + 'führen kann. Details entnehmen Sie bitte den folgenden Hinweisen.
'. + '
Das Modul kann ohne einen '. + 'passenden Decoder nicht ausgeführt werden. Fragen Sie Ihren Serverprovider nach der '. + 'Installation des ionCube Loaders oder des Zend Optimizers / Guard Loaders.
'. + '%2$s'. + '
Über den [+]-Button können Sie Ergebnisse zu den getesteten Verzeichnissen '. + 'abrufen. Je nach Servereinstellung können die Ergebnisse abweichen. Nur die rot markierten '. + 'Verzeichnisse erfordern eine Anpassung.
'. + '
Details zu Ihrer Serverinstallation sehen Sie durch Klick auf den Button "PHPInfo anzeigen". '. + 'Bei Fragen kontaktieren Sie uns bitte über '. + 'support@shopmodule.com.
', + 'RemoteVersionDiff' => ' (Remotescript hat abweichende Version oder ist nicht '. + 'prüfbar, Ergebnis mglw. nicht sicher)', + 'globalSuccess' => 'Die technische Prüfung war erfolgreich. Sie können das Modul '. + 'installieren.*

', + 'globalNotSuccess' => 'Die technische Prüfung war nicht erfolgreich. Bitte kontrollieren '. + 'Sie die rot oder orange markierten Bedingungen.

', + 'deleteFile1' => 'Löschen Sie diese Datei nach der Verwendung bitte unbedingt wieder von '. + 'Ihrem Server! Klicken Sie hier, um diese Datei zu löschen.', + 'showPhpInfo' => 'PHPinfo anzeigen', + 'dependentoffurther' => '* abhängig von ungeprüften Voraussetzungen', + 'oneandonedescription' => '** geprüft wurde das Ausführungsverzeichnis, '. + 'providerabhängig müssen Unterverzeichnisse separat geprüft werden (z.B. bei 1&1)', + 'or' => ' oder ', + 'toggleswitch' => 'Klick für Details zur Prüfung', + 'unableDeleteFile' => 'Datei konnte nicht gelöscht werden. Bitte löschen Sie diese '. + 'manuell.', + 'goodBye' => 'Auf Wiedersehen.', + 'unableExecuteDirectoryIterator' => 'Es können nicht alle Unterverzeichnisse auf weitere Prüfungen '. + 'kontrolliert werden. (%1$s)', + 'availableDecoder' => 'verfügbar: %1$s - auf passendes Installationspaket achten!', + 'noDecoderAvailable' => 'kein verwendbarer Decoder verfügbar', + 'availableDecoder_hasZendLoaderOptimizer' => 'Zend Guard Loader / Optimizer', + 'notAvailableDecoder_hasZendLoaderOptimizer' => '
  • Der Zend Guard Loader / Optimizer ist nicht '. + 'installiert.
  • ', + 'decoderIssue_hasZendLoaderOptimizer' => '
  • Der Zend-Decoder ist '. + 'auf Ihrem Server installiert. Es ist jedoch eine zusätzliche Erweiterungen (Zend OPcache) '. + 'installiert, die im Zusammenspiel mit dem Zend-Decoder Fehler verursachen kann.
  • ', + 'availableDecoder_hasIonCubeLoader' => 'ionCube Loader', + 'notAvailableDecoder_hasIonCubeLoader' => '
  • Der ionCube Loader ist nicht installiert.
  • ', + 'decoderIssue_hasIonCubeLoader' => '
  • Es wurde ein nicht definierter Abbruchgrund bei der '. + 'Verwendung des ionCube-Decoders festgestellt.
  • ', + ), + 'en' => array( + 'RequCheck' => 'Requirement check', + 'ExecNotice' => 'Execute this check script in the root directory of your shop. In this '. + 'case only checks can executed succesfully.', + 'RequSucc' => 'condition is fulfilled', + 'RequNotSucc' => 'condition isn\'t fulfilled', + 'RequUnknown' => 'condition unclear, see notes in help text', + 'RequNotCheckable' => 'condition isn\'t checkable', + 'hasMinPhpVersion' => 'at least PHP version %1$s', + 'hasMinPhpVersion_DESC' => '
    The module requires a PHP version at least %1$s
    '. + '
    The appropriate version of PHP '. + 'is activated on your server.
    '. + '
    The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMaxPhpVersion' => 'not more than PHP version %1$s', + 'hasMaxPhpVersion_DESC' => '
    The module requires a PHP version not more than %1$s
    '. + '
    The appropriate version of PHP '. + 'is activated on your server.
    '. + '
    The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasFromToPhpVersion' => 'server use PHP version between %1$s and %2$s', + 'hasFromToPhpVersion_DESC'=> '
    The module requires a PHP version between %1$s and %2$s
    '. + '
    The appropriate version of PHP '. + 'is activated on your server.
    '. + '
    The module can not be executed within '. + 'the actived PHP version. Ask your server provider for for the adaption of your PHP installation or '. + 'contact us for another module version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasExtension' => '%1$s extension is available', + 'hasExtension_DESC' => '
    The module requires the %1$s server extension.
    '. + '
    The %1$s server extension is '. + 'available on your server.
    '. + '
    The module can not be executed '. + 'without the %1$s extension. Ask your server provider for installing this extension.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMinCurlVersion' => 'at least cURL version %1$s', + 'hasMinCurlVersion_DESC' => '
    The module requires at least cURL version %1$s.
    '. + '
    cURL is available '. + 'in a compatible version.
    '. + '
    cURL is not installed or '. + 'installed in an older version. Ask your server provider for an appropriate version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMinOpenSSLVersion' => 'at least OpenSSL version %1$s', + 'hasMinOpenSSLVersion_DESC' => '
    The module requires at least OpenSSL version %1$s.
    '. + '
    OpenSSL is availabe '. + 'in a compatible version.
    '. + '
    OpenSSL is not installed or '. + 'installed in an older version. Ask your server provider for an appropriate version.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMinShopVersion' => 'at least shop version %1$s', + 'hasMinShopVersion_DESC' => '
    The module is released to shop version %1$s
    '. + '
    The shop software is installed '. + 'in a compatible version.
    '. + '
    We can not guarantee, '. + 'that this module works properly in your shop version. Please ask for a matching module version.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMaxShopVersion' => 'not more than shop version %1$s', + 'hasMaxShopVersion_DESC' => '
    The module is released to shop version %1$s
    '. + '
    The shop software is installed '. + 'in a compatible version.
    '. + '
    We can not guarantee, '. + 'that this module works properly in your shop version. Please ask for a matching module version.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMinModCfgVersion' => '%2$s (ModCfg item "%1$s") at least in version %3$s', + 'hasMinModCfgVersion_DESC' => '
    The module requires additional software "%2$s" at least '. + 'in version %3$s
    '. + '
    The software is installed '. + 'in a compatible version.
    '. + '
    The additional software is '. + 'not installed or in wrong version available. Please install the additional software before '. + 'proceeding this installation.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasMaxModCfgVersion' => '%2$s (ModCfg item "%1$s") not more than in version %3$s', + 'hasMaxModCfgVersion_DESC' => '
    The module requires additional software "%2$s" not more than '. + 'in version %3$s
    '. + '
    The software is installed '. + 'in a compatible version.
    '. + '
    The additional software is '. + 'be installed or in wrong version available. Please install the additional software before '. + 'proceeding this installation.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'requireNewLicence' => 'former licence key can be used', + 'requireNewLicence_DESC' => '
    This test tries to determine whether you need a new licence key '. + 'for the use of this module
    '. + '
    You have stored a license key '. + 'for this module, which is probably also compatible for the new module version.
    '. + '
    You need likely a new license '. + 'key for this module. Do you have already one, run the installation and then apply the license '. + 'key in the admin panel of your shop. Otherwise, you can purchase it in our shop '. + 'oxidmodule.com or also create a '. + 'free trial license key in the admin panel of your shop.
    '. + '
    If you have any questions, please contact us at '. + 'buchhaltung@shopmodule.com.
    ', + 'hasModCfg' => 'Module '. + 'Connector installed', + 'hasModCfg_DESC' => '
    The module requires necessarily the D3 Module Connector.
    '. + '
    The Module Connector is '. + 'installed.
    '. + '
    The module can not be executed '. + 'without the Module Connector. Please download this free of charge from our shop '. + 'www.oxidmodule.com/'. + 'connector/ and install it beforehand.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'isShopEdition' => 'shop edition is %1$s', + 'isShopEdition_DESC' => '
    The module requires one of these shop editions: %1$s
    '. + '
    The shop is installed '. + 'in the appropriate edition.
    '. + '
    The module can not be executed '. + 'in your shop edition. Please ask for a module version for your shop edition.
    '. + '
    If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasZendLoaderOptimizer' => 'Zend Optimizer (PHP 5.2) or Zend Guard Loader (PHP 5.3, 5.4, 5.5, 5.6) '. + 'installed (pay attention to the compatible Zend installation package!)', + 'hasZendLoaderOptimizer_DESC' => '
    The module requires (depending on the PHP version) the Zend Guard Optimizer '. + 'or the Zend Guard Loader.
    '. + '
    The appropriate decoder is '. + 'installed on your server.
    '. + '
    The decoder is '. + 'installed on your server. There is an additional installed extension (Zend OPcache), '. + 'which can cause errors in combination with the decoder.
    '. + '
    The decoder isn\'t '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasIonCubeLoader' => 'ionCube Loader installed (pay attention to the compatible ionCube installation package!)', + 'hasIonCubeLoader_DESC' => '
    The module requires the ionCube Loader.
    '. + '
    The appropriate decoder is '. + 'installed on your server.
    '. + '
    The decoder isn\'t '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
    '. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'hasIonCubeOrZendLoader' => 'ionCube Loader or Zend Optimizer / Guard Loader installed '. + '(%1$s)', + 'hasIonCubeOrZendLoader_DESC' => '
    The module requires the ionCube Loader or the Zend '. + 'Optimizer / Guard Loader. Pay attention to use a compatible installation package (%1$s).
    '. + '
    One of the appropriate '. + 'decoders is installed on your server.
    '. + '
    One of the appropriate '. + 'decoder is installed on your server. An undefined abort reason has been found, which can cause '. + 'to errors. For details, please refer to the following notes.
    '. + '
    None of the decoders is '. + 'installed on your server. The module can\'t installed or executed. Please contact your server provider.
    '. + '%2$s'. + '
    The [+] button show details for all tested directories. Depending on the server settings, '. + 'the results may vary. Only the red marked directories requires adaptation.
    '. + '
    Details about your server installation you can see by clicking on the button "show PHPinfo". '. + 'If you have any questions, please contact us at '. + 'support@shopmodule.com.
    ', + 'RemoteVersionDiff' => ' (Remote script has different version or isn\'t '. + 'callable, result may not be safe)', + 'globalSuccess' => 'The technical test was successful. Your server is ready for installing '. + 'the module.*

    ', + 'globalNotSuccess' => 'The technical test wasn\'t successfull. Please check the red or orange marked '. + 'conditions.

    ', + 'deleteFile1' => 'Please delete this file after use on your server! Click here, to delete this file.', + 'showPhpInfo' => 'show PHPinfo', + 'dependentoffurther' => '* dependent of further unchecked conditions', + 'oneandonedescription' => '** this check use execution directory only, provider dependend '. + 'subdirectories have to check separately (e.g. at 1&1)', + 'or' => ' or ', + 'toggleswitch' => 'click for details', + 'unableDeleteFile' => 'Unable to delete file. Please delete it manually.', + 'goodBye' => 'Good Bye.', + 'unableExecuteDirectoryIterator' => 'Unable to check subdirectories for further checks. (%1$s)', + 'availableDecoder' => 'available: %1$s - pay attention to the compatible installation package!', + 'noDecoderAvailable' => 'no usable decoder available', + 'availableDecoder_hasZendLoaderOptimizer' => 'Zend Guard Loader / Optimizer', + 'notAvailableDecoder_hasZendLoaderOptimizer' => '
  • Zend Guard Loader / Optimizer isn\'t '. + 'available.
  • ', + 'decoderIssue_hasZendLoaderOptimizer' => '
  • The Zend decoder is '. + 'installed on your server. There is an additional installed extension (Zend OPcache), '. + 'which can cause errors in combination with the decoder.
  • ', + 'availableDecoder_hasIonCubeLoader' => 'ionCube Loader', + 'notAvailableDecoder_hasIonCubeLoader' => '
  • ionCube Loader isn\'t available.
  • ', + 'decoderIssue_hasIonCubeLoader' => '
  • An undefined abort reason has been found when using the '. + 'ionCube decoder.
  • ', + ), + ); + } +} + +/** + * Class requRemote + */ +class requRemote +{ + public $blUseRemote = true; + + public $oModuleData; + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|array + */ + public function getShopEdition($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return explode(',', $oModuleData->moduleversion->compatible_release->shopedition); + } + + return false; + } + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|string + */ + public function getMinShopVersion($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return $this->shortenVersion($oModuleData->moduleversion->compatible_release->fromshopversion); + } + + return false; + } + + /** + * @param $sModId + * @param $sModVersion + * @param $sShopEdition + * + * @return bool|string + */ + public function getMaxShopVersion($sModId, $sModVersion, $sShopEdition) + { + $sUrl = "moduleversion/"; + $sUrl .= 'modid/' . urlencode($sModId) . '/'; + $sUrl .= 'forcemodversion/' . urlencode($sModVersion) . '/'; + $sUrl .= 'edition/' . urlencode($sShopEdition) . '/'; + + /** @var stdClass $oModuleData */ + $oModuleData = $this->_getRemoteServerData($sUrl); + + if ($oModuleData->status == 'OK' && isset($oModuleData->moduleversion->compatible_release)) { + return $this->shortenVersion($oModuleData->moduleversion->compatible_release->toshopversion); + } + + return false; + } + + /** + * @param $sUrl + * + * @return stdClass + */ + protected function _getRemoteServerData($sUrl) + { + if (isset($this->oModuleData[$sUrl])) { + return $this->oModuleData[$sUrl]; + } + + $oFailureData = new stdClass(); + $oFailureData->status = 'NOK'; + + if (false === $this->blUseRemote) { + return $oFailureData; + } + $sHost = "http://update.oxidmodule.com"; + $sData = $this->curlConnect($sHost . '/serialized/' . $sUrl); + $oData = unserialize($sData); + + if (false == $oData) { + return $oFailureData; + } + $this->oModuleData[$sUrl] = $oData; + + return $this->oModuleData[$sUrl]; + } + + /** + * @param $sFilePath + * + * @return string + */ + public function curlConnect($sFilePath) + { + $sContent = ''; + + if (($ch = $this->_hasCurl())) { + $sCurl_URL = preg_replace('@^((http|https)://)@', '', $sFilePath); + curl_setopt($ch, CURLOPT_URL, $sCurl_URL); + if ($_SERVER['HTTP_USER_AGENT']) { + curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); + } + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); + curl_setopt($ch, CURLOPT_POST, 0); + $sContent = curl_exec($ch); + } + + return $sContent; + } + + /** + * @return null|resource + */ + protected function _hasCurl() + { + if (extension_loaded('curl') + && function_exists('curl_init') + && function_exists('curl_exec') + ) { + return curl_init(); + } + + return null; + } + + /** + * @param $sVersion + * + * @return string + */ + public function shortenVersion($sVersion) + { + $aVersion = explode('.', $sVersion); + + unset($aVersion[3]); + + return implode('.', $aVersion); + } +} + +/** + * Class requTests + * contains test functions + */ +class requTests +{ + public $oBase; + public $oDb; + public $oConfig; + public $blGlobalResult = false; + + /** + * @param requCheck $oCheckInstance + * @param requConfig $oConfig + * @param $oDb + * @param requRemote $oRemote + */ + public function __construct(requCheck $oCheckInstance, requConfig $oConfig, $oDb, requRemote $oRemote) + { + $this->oBase = $oCheckInstance; + $this->oConfig = $oConfig; + $this->oDb = $oDb; + $this->oRemote = $oRemote; + } + + /** + * @return requCheck + */ + public function getBase() + { + return $this->oBase; + } + + public function getDb() + { + return $this->oDb; + } + + /** + * @return string + */ + public function getBasePath() + { + return $this->getBase()->getBasePath(); + } + + /** + * @param bool $blResult + */ + public function setGlobalResult($blResult) + { + $this->getBase()->blGlobalResult = $blResult; + } + + /** + * @param $sMethodName + * @param null $aArguments + * + * @return array + */ + public function checkInSubDirs($sMethodName, $aArguments = null) + { + return $this->getBase()->checkInSubDirs($sMethodName, $aArguments); + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasMinPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '>=')) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasFromToPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if ((version_compare(phpversion(), $aConfiguration['aParams']['from'], '>=')) && + (version_compare(phpversion(), $aConfiguration['aParams']['to'], '<')) + ) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasMaxPhpVersion(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (version_compare(phpversion(), $aConfiguration['aParams']['version'], '<=')) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * + * @return array + */ + public function hasExtension(&$aConfiguration) + { + $aResult = array($this->getBasePath() => false); + + if (extension_loaded($aConfiguration['aParams']['type'])) { + $aResult[$this->getBasePath()] = true; + } + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * @return array + */ + public function hasMinCurlVersion(&$aConfiguration) + { + $aCurlVersion = curl_version(); + $aResult = array( + $this->getBasePath() => version_compare($aCurlVersion['version'], $aConfiguration['aParams']['version'], '>=') + ); + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param $aConfiguration + * @return array + */ + public function hasMinOpenSSLVersion(&$aConfiguration) + { + $aResult = array( + $this->getBasePath() => version_compare($this->get_openssl_version_number(true), $aConfiguration['aParams']['version'], '>=') + ); + + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__, $aConfiguration['aParams'])); + + return $aResult; + } + + /** + * @param bool $patch_as_number + * @param null $openssl_version_number + * @return bool|string + */ + protected function get_openssl_version_number($patch_as_number=false,$openssl_version_number=null) { + if (is_null($openssl_version_number)) $openssl_version_number = OPENSSL_VERSION_NUMBER; + $openssl_numeric_identifier = str_pad((string)dechex($openssl_version_number),8,'0',STR_PAD_LEFT); + + $openssl_version_parsed = array(); + $preg = '/(?[[:xdigit:]])(?[[:xdigit:]][[:xdigit:]])(?[[:xdigit:]][[:xdigit:]])'; + $preg.= '(?[[:xdigit:]][[:xdigit:]])(?[[:xdigit:]])/'; + preg_match_all($preg, $openssl_numeric_identifier, $openssl_version_parsed); + $openssl_version = false; + if (!empty($openssl_version_parsed)) { + $alphabet = array(1=>'a',2=>'b',3=>'c',4=>'d',5=>'e',6=>'f',7=>'g',8=>'h',9=>'i',10=>'j',11=>'k', + 12=>'l',13=>'m',14=>'n',15=>'o',16=>'p',17=>'q',18=>'r',19=>'s',20=>'t',21=>'u', + 22=>'v',23=>'w',24=>'x',25=>'y',26=>'z'); + $openssl_version = intval($openssl_version_parsed['major'][0]).'.'; + $openssl_version.= intval($openssl_version_parsed['minor'][0]).'.'; + $openssl_version.= intval($openssl_version_parsed['fix'][0]); + $patchlevel_dec = hexdec($openssl_version_parsed['patch'][0]); + if (!$patch_as_number && array_key_exists($patchlevel_dec, $alphabet)) { + $openssl_version.= $alphabet[$patchlevel_dec]; // ideal for text comparison + } + else { + $openssl_version.= '.'.$patchlevel_dec; // ideal for version_compare + } + } + return $openssl_version; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function hasMinShopVersion(&$aConfiguration) + { + if ($this->getDb()) { + require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; + $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); + + $oEditionResult = $this->_getShopEdition(); + $sEdition = strtoupper($oEditionResult->oxedition); + + $mMinRemoteVersion = $this->oRemote->getMinShopVersion( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $sEdition + ); + + if ($mMinRemoteVersion) { + $aConfiguration['aParams'] = array('version' => $mMinRemoteVersion); + } else { + $aConfiguration['aParams'] = array('version' => $aConfiguration['aParams'][$sEdition]); + } + + if (version_compare($shopVersion, $aConfiguration['aParams']['version'], '>=')) { + return true; + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function hasMaxShopVersion(&$aConfiguration) + { + if ($this->getDb()) { + require_once '../vendor/oxid-esales/oxideshop-ce/source/Core/ShopVersion.php'; + $shopVersion = OxidEsales\EshopCommunity\Core\ShopVersion::getVersion(); + + $oEditionResult = $this->_getShopEdition(); + $sEdition = strtoupper($oEditionResult->oxedition); + + $mMaxRemoteVersion = $this->oRemote->getMaxShopVersion( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $sEdition + ); + + if ($mMaxRemoteVersion) { + $aConfiguration['aParams'] = array('version' => $mMaxRemoteVersion); + } else { + $aConfiguration['aParams'] = array('version' => $aConfiguration['aParams'][$sEdition]); + } + + if (version_compare($shopVersion, $aConfiguration['aParams']['version'], '<=')) { + return true; + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function isShopEdition(&$aConfiguration) + { + if ($this->getDb()) { + $oResult = $this->_getShopEdition(); + + $mRemoteShopEditions = $this->oRemote->getShopEdition( + $this->oConfig->sModId, + $this->oConfig->sModVersion, + $oResult->oxedition + ); + + if (is_array($mRemoteShopEditions)) { + $aConfiguration['aParams'][0] = $mRemoteShopEditions; + } + + if (in_array(strtoupper($oResult->oxedition), $aConfiguration['aParams'][0])) { + $aConfiguration['aParams'][0] = strtoupper($oResult->oxedition); + return true; + } + } + + return false; + } + + /** + * @return bool|object|stdClass + */ + protected function _getShopEdition() + { + if ($this->getDb()) { + $sField = 'oxedition'; + $sSelect = "SELECT " . $sField . " FROM oxshops WHERE 1 LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + return $oResult; + } + + return false; + } + + /** + * @return bool + */ + public function hasModCfg() + { + if ($this->getDb()) { + $sModId = 'd3modcfg_lib'; + $sSelect = "SELECT 1 as result FROM d3_cfg_mod WHERE oxmodid = '" . $sModId . "' LIMIT 1"; + $rResult = mysqli_query($this->getDb(), $sSelect); + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); + + if ((bool) $oResult->result == true) { + return true; + } + } + } + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool|int + */ + public function hasMinModCfgVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT IF ". + "(INET_ATON(oxversion) >= INET_ATON('" . $aConfiguration['aParams']['version'] . "'), 1, 0) AS result ". + "FROM d3_cfg_mod ". + "WHERE + oxmodid = '" . $aConfiguration['aParams']['id'] . "' AND + oxversion != 'basic' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blReturn = (bool)$oResult->result; + + if (false == $blReturn) { + $this->setGlobalResult(false); + } + + return $blReturn; + } + + $this->setGlobalResult(false); + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool|int + */ + public function hasMaxModCfgVersion(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT + IF (INET_ATON(oxversion) <= INET_ATON('" . $aConfiguration['aParams']['version'] . "'), 1, 0) AS result + FROM d3_cfg_mod WHERE + oxmodid = '" . $aConfiguration['aParams']['id'] . "' AND + oxversion != 'basic' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + $blResult = (bool)$oResult->result; + + if (false == $blResult) { + $this->setGlobalResult(false); + } + + return $blResult; + } + + $this->setGlobalResult(false); + + return false; + } + + /** + * @param $aConfiguration + * + * @return bool + */ + public function requireNewLicence(&$aConfiguration) + { + if ($this->getDb()) { + $sSelect = "SELECT + oxversion as oxversion + FROM d3_cfg_mod WHERE + oxmodid = '" . $this->oConfig->sModId . "' + ORDER BY oxversion ASC LIMIT 1"; + + $rResult = mysqli_query($this->getDb(), $sSelect); + $oResult = mysqli_fetch_object($rResult); + + if (isset($oResult) + && is_object($oResult) + && isset($oResult->oxversion) + && isset($aConfiguration['aParams']['checkVersion']) + ) { + $sInstalledVersion = $this->_getConvertedVersion( + $oResult->oxversion, + $aConfiguration['aParams']['remainingDigits'] + ); + $sNewVersion = $this->_getConvertedVersion( + $this->oConfig->sModVersion, + $aConfiguration['aParams']['remainingDigits'] + ); + if (version_compare($sInstalledVersion, $sNewVersion, '>=')) { + return true; + } + } + } + + return 'notice'; + } + + /** + * cut not used version digits + * @param string $sVersion + * @param int $iRemainingDigits + * + * @return string + */ + protected function _getConvertedVersion($sVersion, $iRemainingDigits) + { + $aInstalledVersion = explode('.', $sVersion); + return implode('.', array_slice($aInstalledVersion, 0, $iRemainingDigits)); + } + + /** + * @return array + */ + public function hasZendLoaderOptimizer(&$aConfiguration, $blCheckBasePathOnly = false) + { + $aResult = array($this->getBasePath() => false); + + if ((version_compare(phpversion(), '5.2.0', '>=') + && version_compare(phpversion(), '5.2.900', '<') + && function_exists('zend_optimizer_version') + ) || ( + version_compare(phpversion(), '5.3.0', '>=') + && version_compare(phpversion(), '5.6.900', '<') + && function_exists('zend_loader_version') + )) { + if (function_exists('opcache_get_status') + && ($aOpCacheStatus = opcache_get_status()) + && $aOpCacheStatus['opcache_enabled'] + ) { + $aResult[$this->getBasePath()] = null; + } else { + $aResult[$this->getBasePath()] = true; + } + } + + if ($blCheckBasePathOnly == false) { + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + } + + return $aResult; + } + + /** + * @return array + */ + public function hasIonCubeLoader(&$aConfiguration, $blCheckBasePathOnly = false) + { + $aResult = array($this->getBasePath() => false); + + if (function_exists('ioncube_loader_version')) { + $aResult[$this->getBasePath()] = true; + } + + if ($blCheckBasePathOnly == false) { + $aResult = array_merge($aResult, $this->checkInSubDirs(__FUNCTION__)); + } + + return $aResult; + } + + /** + * @return array + */ + public function hasIonCubeOrZendLoader(&$aConfiguration) + { + $oLayout = $this->getBase()->oLayout; + + $aDecoderTexts = array(); + $aDecoderErrorTexts = array(); + foreach (array('hasZendLoaderOptimizer', 'hasIonCubeLoader') as $sDecoderCheck) { + $aReturn = call_user_func_array(array($this, $sDecoderCheck), array($aConfiguration, true)); + if ($aReturn[$this->getBasePath()]) { + $aDecoderTexts[$sDecoderCheck] = $oLayout->translate('availableDecoder_'.$sDecoderCheck); + } elseif ($aReturn[$this->getBasePath()] === null) { + $aDecoderErrorTexts[$sDecoderCheck] = $oLayout->translate('decoderIssue_'.$sDecoderCheck); + } else { + $aDecoderErrorTexts[$sDecoderCheck] = $oLayout->translate('notAvailableDecoder_'.$sDecoderCheck); + } + } + + $sDecoderText = count($aDecoderTexts) ? + sprintf($oLayout->translate('availableDecoder'), implode(' + ', $aDecoderTexts)) : + $oLayout->translate('noDecoderAvailable'); + $aConfiguration['aParams'][1] = $sDecoderText; + + $sDecoderErrorText = count($aDecoderErrorTexts) ? + '
      '.implode('', $aDecoderErrorTexts).'
    ' : + ''; + $aConfiguration['aParams'][2] = $sDecoderErrorText; + + $aZendLoaderResults = $this->hasZendLoaderOptimizer($aConfiguration); + $aIonCubeLoaderResults = $this->hasIonCubeLoader($aConfiguration); + + $aResult = array(); + foreach (array_keys($aZendLoaderResults) as $sPath) { + // transfer meta data + if (strstr($sPath, '@@')) { + $aResult[$sPath] = $aZendLoaderResults[$sPath]; + } elseif ($aIonCubeLoaderResults[$sPath] || $aZendLoaderResults[$sPath]) { + $aResult[$sPath] = true; + } elseif ($aIonCubeLoaderResults[$sPath] === null || $aZendLoaderResults[$sPath] === null) { + $aResult[$sPath] = null; + } else { + $aResult[$sPath] = false; + } + } + + return $aResult; + } +} + +/** + * Class requTransformation + */ +class requTransformation +{ + public $oCheck; + + /** + * @param requCheck $oCheck + */ + public function __construct(requCheck $oCheck) + { + $this->oCheck = $oCheck; + } + + /** + * @param $aCheckList + */ + public function transformCheckList($aCheckList) + { + $this->_removeDeprecatedLibs($aCheckList['hasMinModCfgVersion']); + $this->_removeDeprecatedLibs($aCheckList['hasMaxModCfgVersion']); + + return $aCheckList; + } + + /** + * @param array $aCheck + */ + protected function _removeDeprecatedLibs(&$aCheck) + { + $blDelOldLibs = false; + $sCheckVersion = 0; + + if (is_array($aCheck)) { + $sSelect = "SELECT oxversion as result ". + "FROM d3_cfg_mod ". + "WHERE oxmodid = 'd3modcfg_lib' LIMIT 1"; + $rResult = mysqli_query($this->oCheck->getDb(), $sSelect); + + if (is_object($rResult)) { + $oResult = mysqli_fetch_object($rResult); + if ($oResult->result) { + $sCheckVersion = $oResult->result; + } + } + + foreach ($aCheck as $aModCfgCheck) { + if (isset($aModCfgCheck['aParams']['id']) && + strtolower($aModCfgCheck['aParams']['id']) == 'd3modcfg_lib' && + version_compare($sCheckVersion, '4.0.0.0', '>=') + ) { + $blDelOldLibs = true; + } + } + + reset($aCheck); + + if ($blDelOldLibs) { + $aOldLibs = array('d3install_lib', 'd3log_lib', 'd3clrtmp_lib'); + foreach ($aCheck as $sKey => $aModCfgCheck) { + if (isset($aModCfgCheck['aParams']['id']) && + in_array(strtolower($aModCfgCheck['aParams']['id']), $aOldLibs) + ) { + unset($aCheck[$sKey]); + } + } + } + } + } +} + +/** + * @param $mVar + */ +function dumpvar($mVar) +{ + echo "
    ";
    +    print_r($mVar);
    +    echo "
    "; +} + +$oRequCheck = new requcheck; +if (isset($_REQUEST['fnc']) && $_REQUEST['fnc']) { + $oRequCheck->{$_REQUEST['fnc']}(); +} else { + $oRequCheck->startCheck(); +} diff --git a/docs/Precheck/modules/d3/d3fileupload/public/d3precheckinfolder.php b/docs/Precheck/modules/d3/d3fileupload/public/d3precheckinfolder.php new file mode 100644 index 0000000..1b234a1 --- /dev/null +++ b/docs/Precheck/modules/d3/d3fileupload/public/d3precheckinfolder.php @@ -0,0 +1,198 @@ + + * @link http://www.oxidmodule.com + */ + +date_default_timezone_set('Europe/Berlin'); + +/** + * Class d3PreCheckInFolder + */ +class d3PreCheckInFolder +{ + public $sVersion = '4.10.2'; + + /** + * @return string + */ + public function getVersion() + { + return $this->sVersion; + } + + /** + * @return bool + */ + public function hasMinPhpVersion() + { + $aArgs = func_get_args(); + + if (version_compare(phpversion(), $aArgs[0]['version'], '>=')) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function hasMaxPhpVersion() + { + $aArgs = func_get_args(); + + if (version_compare(phpversion(), $aArgs[0]['version'], '<=')) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function hasFromToPhpVersion() + { + $aArgs = func_get_args(); + + if ((version_compare(phpversion(), $aArgs[0]['from'], '>=')) && (version_compare( + phpversion(), + $aArgs[0]['to'], + '<' + )) + ) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function hasZendLoaderOptimizer() + { + 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'] + ) { + return null; + } else { + return true; + } + } + + return false; + } + + /** + * @return bool + */ + public function hasIonCubeLoader() + { + if (function_exists('ioncube_loader_version')) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function hasExtension() + { + $aArgs = func_get_args(); + + if (extension_loaded($aArgs[0]['type'])) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function hasMinCurlVersion() + { + $aArgs = func_get_args(); + + $aCurlVersion = curl_version(); + return version_compare($aCurlVersion['version'], $aArgs[0]['version'], '>='); + } + + /** + * @return bool + */ + public function hasMinOpenSSLVersion() + { + $aArgs = func_get_args(); + return version_compare($this->get_openssl_version_number(true), $aArgs[0]['version'], '>='); + } + + /** + * @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 $mVar + */ +function dumpvar($mVar) +{ + echo "
    ";
    +    print_r($mVar);
    +    echo "
    "; +} + +if (!isset($_SERVER['REMOTE_ADDR']) || !isset($_SERVER['HTTP_USER_AGENT'])) { + $oPreCheck = new d3PreCheckInFolder(); + if (isset($_GET['fnc']) && $_GET['fnc']) { + $aParams = isset($_GET['params']) ? unserialize(stripslashes(urldecode($_GET['params']))) : array(); + echo serialize(call_user_func(array($oPreCheck, $_GET['fnc']), $aParams)); + } +} \ No newline at end of file diff --git a/src/Application/Controller/Admin/d3_cfg_fileuploadlog.php b/src/Application/Controller/Admin/d3_cfg_fileuploadlog.php new file mode 100644 index 0000000..55b24f0 --- /dev/null +++ b/src/Application/Controller/Admin/d3_cfg_fileuploadlog.php @@ -0,0 +1,38 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\ModCfg\Application\Controller\Admin\Log\d3_cfg_log; + +class d3_cfg_fileuploadlog extends d3_cfg_log +{ + protected $_sModId = 'd3fileupload'; + + /** + * @return string + */ + public function d3getAdditionalUrlParams() + { + $sRet = parent::d3getAdditionalUrlParams(); + + if ($this->_sModId) { + $sRet .= '&sD3ModId='.$this->_sModId; + } + + return $sRet; + } +} \ No newline at end of file diff --git a/src/Application/Controller/Admin/d3_cfg_fileuploadlog_list.php b/src/Application/Controller/Admin/d3_cfg_fileuploadlog_list.php new file mode 100644 index 0000000..69d1e10 --- /dev/null +++ b/src/Application/Controller/Admin/d3_cfg_fileuploadlog_list.php @@ -0,0 +1,24 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\ModCfg\Application\Controller\Admin\Log\d3_cfg_log_list; + +class d3_cfg_fileuploadlog_list extends d3_cfg_log_list +{ + protected $_sModId = 'd3fileupload'; +} diff --git a/src/Application/Controller/Admin/d3fileupload_licence.php b/src/Application/Controller/Admin/d3fileupload_licence.php new file mode 100644 index 0000000..30bb13c --- /dev/null +++ b/src/Application/Controller/Admin/d3fileupload_licence.php @@ -0,0 +1,35 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_licence; + +class d3fileupload_licence extends d3_cfg_mod_licence +{ + + protected $_sModId = 'd3fileupload'; + protected $_hasLicence = false; + protected $_hasNewsletterForm = false; + protected $_hasUpdate = true; + protected $_modUseCurl = false; + protected $_sMenuItemTitle = 'd3mxfileupload'; + protected $_sMenuSubItemTitle = 'd3mxfileupload_support'; + protected $_sHelpLinkMLAdd = 'Bestellvorgang/Fileupload/Support'; + + //protected $_sBlogFeed = "http://blog.oxidmodule.com/feeds/categories/9-erweiterte-Suche.rss"; +} diff --git a/src/Application/Controller/Admin/d3fileupload_list.php b/src/Application/Controller/Admin/d3fileupload_list.php new file mode 100644 index 0000000..12364ff --- /dev/null +++ b/src/Application/Controller/Admin/d3fileupload_list.php @@ -0,0 +1,30 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_list; + +class d3fileupload_list extends d3_cfg_mod_list +{ + public function __construct() + { + parent::__construct(); + + $this->_blD3ShowLangSwitch = false; + } +} diff --git a/src/Application/Controller/Admin/d3fileupload_main.php b/src/Application/Controller/Admin/d3fileupload_main.php new file mode 100644 index 0000000..5d2fc34 --- /dev/null +++ b/src/Application/Controller/Admin/d3fileupload_main.php @@ -0,0 +1,37 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_; + +class d3fileupload_main extends d3_cfg_mod_ +{ + protected $_hasListItems = false; + + /** + * @return string + */ + public function render() + { + $this->addTplParam('sListClass', 'd3fileupload_list'); + + $this->addTplParam('sMainClass', 'd3fileupload_settings'); + + return parent::render(); + } +} diff --git a/src/Application/Controller/Admin/d3fileupload_orderupload.php b/src/Application/Controller/Admin/d3fileupload_orderupload.php new file mode 100644 index 0000000..28d610d --- /dev/null +++ b/src/Application/Controller/Admin/d3fileupload_orderupload.php @@ -0,0 +1,298 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\Fileupload\Application\Model\d3fileupload; +use D3\Fileupload\Application\Model\d3fileupload_setting; +use D3\Fileupload\Application\Model\Exceptions\d3fileuploadException; +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use D3\ModCfg\Application\Model\d3filesystem; +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Log\d3log; +use Doctrine\DBAL\DBALException; +use Exception; +use OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController; +use OxidEsales\Eshop\Application\Model\Order; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Request; +use OxidEsales\Eshop\Core\UtilsView; + +class d3fileupload_orderupload extends AdminDetailsController +{ + /** @var Order */ + protected $_oEditObject; + protected $_sThisTemplate = "d3fileupload_orderupload.tpl"; + protected $_sHelpLinkMLAdd; + protected $_sModId = 'd3fileupload'; + + /** + * @return string + */ + public function render() + { + parent::render(); + + $this->addTplParam("edit", $this->getEditObject()); + + return $this->_sThisTemplate; + } + + /** + * @return null|object + */ + public function getEditObject() + { + if (false == $this->_oEditObject) { + $this->_oEditObject = oxNew(Order::class); + + $soxId = $this->getEditObjectId(); + if (isset($soxId) && $soxId != "-1") { + $this->_oEditObject->load($soxId); + } + } + + return $this->_oEditObject; + } + + /** + * @param string $sArticleId + * + * @return array|null + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3ParameterNotFoundException + * @throws d3fileuploadException + */ + public function getUploadFiles($sArticleId) + { + if (!$sArticleId) { + return array(); + } + + $oD3Upload = $this->getUpload(); + return $oD3Upload->getUploadItems($sArticleId); + } + + /** + * Get Upload Dir + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getUploadDir() + { + $oSettings = $this->getUploadSettings(); + return '../'.$oSettings->getUploadDir(); + } + + /** + * @return d3fileupload + */ + protected function getUpload() + { + return oxnew(d3fileupload::class, $this->getEditObject()); + } + + /** + * @return d3fileupload_setting + */ + protected function getUploadSettings() + { + return oxnew(d3fileupload_setting::class); + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3ShopCompatibilityAdapterException + * @throws StandardException + * @throws d3_cfg_mod_exception + */ + public function d3filedownload() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + + /** @var d3fileupload $oUpload */ + $oUpload = $this->getUpload(); + $oUpload->setOrderArticleId($request->getRequestEscapedParameter('oaid')); + $sPath = $oUpload->getUploadFileHandler()->getOrderArticleFileDirectory(). + $request->getRequestEscapedParameter('filename'); + + // ToDo: try to get contents by download method of refactored ModCfg + $content = file_get_contents($sPath); + + /** @var d3filesystem $oFileSystem */ + $oFileSystem = oxNew(d3filesystem::class); + $oFileSystem->startDirectDownload($sPath, $content); + + try { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, d3_cfg_mod::get($this->_sModId)->d3getLog(), d3log::ERROR); + $oEx->setMessage("D3FILEUPLOAD_ERROR_MESSAGE_CANTDOWNLOADFILE"); + $oEx->setLogText("path '" . $sPath . "'"); + throw $oEx; + } catch (Exception $oEx) { + Registry::get(UtilsView::class)->addErrorToDisplay($oEx); + } + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function d3filedelete() + { + try { + /** @var Request $request */ + $request = Registry::get(Request::class); + + /** @var d3fileupload $oUpload */ + $oUpload = $this->getUpload(); + $oUpload->setFilename($request->getRequestEscapedParameter("sFileName")); + $oUpload->setOrderArticleId($request->getRequestEscapedParameter("aid")); + $oUpload->doDelete(); + } catch (d3fileuploadException $oEx) { + Registry::get(UtilsView::class)->addErrorToDisplay($oEx); + } + } + + /** + * @return array + */ + public function getUserMessages() + { + return array(); + } + + /** + * @deprecated + * @return string + */ + public function getBGLogoUrl() + { + return ''; + } + + /** + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getHelpURL() + { + $sUrl = d3_cfg_mod::get($this->_sModId)->getHelpURL(); + /** @var $oFS d3filesystem */ + $oFS = oxNew(d3filesystem::class); + + if ($this->_sHelpLinkMLAdd) { + $sUrl .= $oFS->unprefixedslashit(Registry::getLang()->TranslateString($this->_sHelpLinkMLAdd)); + } + + $aFileName = $oFS->splitFilename($sUrl); + + // has no extension + if (false == $aFileName['ext']) { + $sUrl = $oFS->trailingslashit($sUrl); + } + + return $sUrl; + } + + /** + * @return mixed + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function hasFixation() + { + return d3_cfg_mod::get($this->_sModId)->getValue('blAllowFixation'); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function orderIsFixed() + { + if (false == $this->hasFixation()) { + return false; + } + + $oOrder = $this->getEditObject(); + return $oOrder->getFieldData('d3uploadfixed') == '0000-00-00 00:00:00' ? false : true; + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function d3fixupload() + { + if (false == $this->hasFixation()) { + return; + } + + $oOrder = $this->getEditObject(); + $oOrder->assign( + array( + 'd3uploadfixed' => date('Y-m-d H:i:s'), + ) + ); + $oOrder->save(); + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function d3unfixupload() + { + if (false == $this->hasFixation()) { + return; + } + + $oOrder = $this->getEditObject(); + $oOrder->assign( + array( + 'd3uploadfixed' => '0000-00-00 00:00:00', + ) + ); + $oOrder->save(); + } +} diff --git a/src/Application/Controller/Admin/d3fileupload_settings.php b/src/Application/Controller/Admin/d3fileupload_settings.php new file mode 100644 index 0000000..79050eb --- /dev/null +++ b/src/Application/Controller/Admin/d3fileupload_settings.php @@ -0,0 +1,315 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller\Admin; + +use D3\Fileupload\Application\Model\d3fileupload; +use D3\Fileupload\Application\Model\d3fileupload_setting; +use D3\Fileupload\Application\Model\Exceptions\d3fileuploadException; +use D3\ModCfg\Application\Controller\Admin\d3_cfg_mod_main; +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use D3\ModCfg\Application\Model\d3filesystem; +use D3\ModCfg\Application\Model\d3str; +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Filegenerator\d3filegeneratorcronsh; +use D3\ModCfg\Application\Model\Shopcompatibility\d3ShopCompatibilityAdapterHandler; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Application\Model\Shop; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Module\Module; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Request; +use OxidEsales\Eshop\Core\ViewConfig; + +class d3fileupload_settings extends d3_cfg_mod_main +{ + protected $_sThisTemplate = 'd3fileupload_settings.tpl'; + protected $_sModId = 'd3fileupload'; + + protected $_sMenuItemTitle = 'd3mxfileupload'; + protected $_sMenuSubItemTitle = 'd3mxfileupload_settings'; + + protected $_blUseModCfgStdObject = true; + + protected $_blHasDebugSwitch = false; + + /** @var d3fileupload */ + public $oUpload; + + /** + * @return string + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + */ + public function render() + { + $ret = parent::render(); + + return $ret; + } + + public function save() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + + $iD3MaxUploadSize = $request->getRequestEscapedParameter('iD3MaxUploadSize'); + $iD3MaxUploadSizeMultiplier = $request->getRequestEscapedParameter('iD3MaxUploadSizeMultiplier'); + $_POST['value']['iD3MaxUploadSize'] = $iD3MaxUploadSize * $iD3MaxUploadSizeMultiplier; + + parent::save(); + } + + /** + * @param string $sType + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getDefaultPermissions($sType = 'dir') + { + return $this->getUploadSettings()->getDefaultPermissions($sType); + } + + /** + * @return int + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getModuleMaxUploadFileSize() + { + return $this->getUploadSettings()->getMaxUploadSize(); + } + + /** + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getFormattedModuleMaxUploadFileSize() + { + return $this->getUploadSettings()->getFormattedMaxUploadSize(); + } + + /** + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3fileuploadException + */ + public function getAllowedUploadFileExtensions() + { + $aExtensions = $this->getUploadSettings()->getAllowedUploadFileExtensions(); + $sExtensions = implode(chr(10), $aExtensions); + + return $sExtensions; + } + + /** + * @return int + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getMaxUploadFileCount() + { + return $this->getUploadSettings()->getMaxUploadFileCount(); + } + + /** + * @return int + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getUploadDir() + { + return $this->getUploadSettings()->getUploadDir(); + } + + /** + * @return d3fileupload_setting + */ + public function getUploadSettings() + { + return oxnew(d3fileupload_setting::class); + } + + /** + * get basic cronjob access password; for cases only, if no password is set + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getCronPassword() + { + return $this->getUploadSettings()->getCronPassword(); + } + + /** + * @param bool $blUsePw + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws \oxFileException + */ + public function getCronLink($blUsePw) + { + /** @var $oViewConf ViewConfig */ + $oViewConf = oxNew(ViewConfig::class); + + $sBaseUrl = $oViewConf->getModuleUrl('d3fileupload').'public/d3_fileupload_cron.php'; + + $aParameters = array( + 'shp' => $oViewConf->getActiveShopId(), + ); + + if ($blUsePw) { + $aParameters['key'] = $this->getCronPassword(); + } + + /** @var $oD3Str d3str */ + $oD3Str = oxNew(d3str::class); + $sURL = $oD3Str->generateParameterUrl($sBaseUrl, $aParameters); + + return $sURL; + } + +// ToDo: use a list from d3filesystem::formatBytes + + /** + * @return array + */ + public function getFileSizeUnits() + { + return array( + 1 => 'B', + 1024 => 'KB', + 1048576 => 'MB', + 1073741824 => 'GB' + ); + } + + /** + * @return float + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getShorthandModuleMaxUploadFileSize() + { + return (double) $this->getUploadSettings()->getFormattedMaxUploadSize(); + } + + /** + * @return float + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getShorthandModuleMaxUploadFileSizeUnit() + { + return strtoupper( + trim( + str_replace( + (double) $this->getUploadSettings()->getFormattedMaxUploadSize(), + '', + $this->getUploadSettings()->getFormattedMaxUploadSize() + ) + ) + ); + } + + /** + * @return string + */ + public function getSystemUploadSizeRestrictions() + { + $iSystemUploadRestrictions = $this->getUploadSettings()->getSmallestSystemUploadRestrictions(); + + /** @var d3filesystem $oFileSystem */ + $oFileSystem = oxNew(d3filesystem::class); + return $oFileSystem->formatBytes($iSystemUploadRestrictions); + } + + /** + * @return array + */ + public function getCronProviderList() + { + /** @var d3filegeneratorcronsh $oD3ShGenerator */ + $oD3ShGenerator = oxNew(d3filegeneratorcronsh::class); + + return $oD3ShGenerator->getContentList(); + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function generateCronShFile() + { + /** @var Module $oModule */ + $oModule = oxNew(Module::class); + + /** @var d3ShopCompatibilityAdapterHandler $oD3CompatibilityAdapterHandler */ + $oD3CompatibilityAdapterHandler = oxNew(d3ShopCompatibilityAdapterHandler::class); + $sModulePath = $oD3CompatibilityAdapterHandler->call( + 'oxmodule__getModuleFullPath', + array($oModule, d3_cfg_mod::get($this->_sModId)->getMetaModuleId()) + ); + + $sScriptPath = $sModulePath . "/public/d3_fileupload_cron.php"; + + /** @var Shop $oShop */ + $oShop = Registry::getConfig()->getActiveShop(); + $aParameters = array( + 0 => $oShop->getId() + ); + + /** @var d3filegeneratorcronsh $oD3ShGenerator */ + $oD3ShGenerator = oxNew(d3filegeneratorcronsh::class); + + /** @var Request $request */ + $request = Registry::get(Request::class); + + $oD3ShGenerator->setContentType($request->getRequestEscapedParameter('crontype')); + $oD3ShGenerator->setScriptPath($sScriptPath); + $oD3ShGenerator->setSortedParameterList($aParameters); + $oD3ShGenerator->startDownload('d3fileupload_'.$oShop->getId().".sh"); + } +} diff --git a/src/Application/Controller/d3fileupload_response.php b/src/Application/Controller/d3fileupload_response.php new file mode 100644 index 0000000..0920933 --- /dev/null +++ b/src/Application/Controller/d3fileupload_response.php @@ -0,0 +1,239 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller; + +use D3\Fileupload\Application\Model\d3fileupload; +use D3\Fileupload\Application\Model\d3fileupload_setting; +use D3\Fileupload\Application\Model\Exceptions\d3fileupload_cronUnavailableException; +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Log\d3log; +use Doctrine\DBAL\DBALException; +use Exception; +use OxidEsales\Eshop\Application\Model\Order; +use OxidEsales\Eshop\Core\Base; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Request; + +class d3fileupload_response extends Base +{ + private $_sModId = 'd3fileupload'; + + /** + * @return void + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function init() + { + startProfile(__METHOD__); + + $blExceptionThrown = $this->_startExecution(); + + if ($this->isBrowserCall() && false == $blExceptionThrown) { + echo "script successfully finished".PHP_EOL; + } + + Registry::getSession()->freeze(); + + stopProfile(__METHOD__); + + $this->_getSet()->d3getLog()->d3GetProfiling(); + } + + /** + * @return bool + */ + protected function _startExecution() + { + startProfile(__METHOD__); + + $blExc = false; + + try { + $this->_getSet()->d3getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, "start", ""); + + $this->_checkUnavailableCronjob(); + $this->_startJob(); + $this->_getSet()->setValue('sCronExecTimestamp', date('Y-m-d H:i:s')); + $this->_getSet()->saveNoLicenseRefresh(); + $this->_getSet()->d3getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, "end"); + + } catch (d3fileupload_cronUnavailableException $oEx) { + /** @var d3fileupload_cronunavailableexception $oEx */ + $oEx->d3showMessage(); + $blExc = true; + } catch (Exception $oEx) { + /** @var Exception $oEx */ + $oEx->debugOut(); + $blExc = true; + } + + stopProfile(__METHOD__); + + return $blExc; + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + protected function _startJob() + { + startProfile(__METHOD__); + + /** @var d3fileupload $oFileUpload */ + $oFileUpload = oxNew(d3fileupload::class, oxNew(Order::class)); + $oFileUpload->sendNotificationMail(); + + stopProfile(__METHOD__); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + protected function _checkAccessKey() + { + /** @var d3fileupload_setting $oModuleSettings */ + $oModuleSettings = oxNew(d3fileupload_setting::class); + + /** @var Request $request */ + $request = Registry::get(Request::class); + + $sGetAccessKey = $request->getRequestEscapedParameter("key"); + $sRegisteredAccessKey = $oModuleSettings->getCronPassword(); + + if ($this->hasValidAccessKey($sRegisteredAccessKey, $sGetAccessKey)) { + return false; + } + + return true; + } + + /** + * @return d3_cfg_mod + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + protected function _getSet() + { + return d3_cfg_mod::get($this->_sModId); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function showDisabledMessage() + { + return false == $this->_getSet()->getValue('blCronActive') && + ($this->_getSet()->hasDebugMode() || $this->isBrowserCall()); + } + + /** + * @return bool + */ + public function isBrowserCall() + { + return $_SERVER['REMOTE_ADDR'] || $_SERVER['HTTP_USER_AGENT']; + } + + /** + * @param $sRegisteredAccessKey + * @param $sGetAccessKey + * + * @return bool + */ + protected function hasValidAccessKey($sRegisteredAccessKey, $sGetAccessKey) + { + return ( + $_SERVER['REMOTE_ADDR'] || + $_SERVER['HTTP_USER_AGENT'] + ) && $sRegisteredAccessKey != $sGetAccessKey; + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws StandardException + * @throws d3fileupload_cronUnavailableException + */ + protected function _checkUnavailableCronjob() + { + if (false == $this->_getSet()->isActive()) { + /** @var d3fileupload_cronunavailableexception $oEx */ + $oEx = oxNew(d3fileupload_cronunavailableexception::class, $this->_getSet()->d3getLog(), d3log::INFO); + $oEx->setMessage(Registry::getLang()->translateString('D3FILEUPLOAD_EXC_NOTACTIVE', 1)); + $oEx->d3enableScreenMessage(); + $oEx->debugOut(); + throw $oEx; + } elseif (false == $this->_checkAccessKey()) { + /** @var d3fileupload_cronunavailableexception $oEx */ + $oEx = oxNew(d3fileupload_cronunavailableexception::class, $this->_getSet()->d3getLog(), d3log::INFO); + $oEx->setMessage('cron via browser: missing or wrong identification'); + $oEx->d3enableScreenMessage(); + $oEx->debugOut(); + throw $oEx; + } else { + $this->_checkDisabledCronjob(); + } + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileupload_cronUnavailableException + */ + public function _checkDisabledCronjob() + { + if ($this->showDisabledMessage()) { + /** @var d3fileupload_cronunavailableexception $oEx */ + $oEx = oxNew(d3fileupload_cronunavailableexception::class, $this->_getSet()->d3getLog(), d3log::ERROR); + $oEx->setMessage('cronjob script is disabled'); + $oEx->d3enableScreenMessage(); + $oEx->debugOut(); + throw $oEx; + } elseif (false == $this->_getSet()->getValue('blCronActive')) { + /** @var d3fileupload_cronunavailableexception $oEx */ + $oEx = oxNew(d3fileupload_cronunavailableexception::class, $this->_getSet()->d3getLog(), d3log::ERROR); + $oEx->setMessage('cronjob script is disabled'); + $oEx->d3disableScreenMessage(); + $oEx->debugOut(); + throw $oEx; + } + } +} diff --git a/src/Application/Controller/d3uploadmanager.php b/src/Application/Controller/d3uploadmanager.php new file mode 100644 index 0000000..3a399e6 --- /dev/null +++ b/src/Application/Controller/d3uploadmanager.php @@ -0,0 +1,798 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Application\Controller; + +use D3\Fileupload\Application\Model\d3fileupload; +use D3\Fileupload\Application\Model\d3fileupload_setting; +use D3\Fileupload\Application\Model\Exceptions\d3fileuploadException; +use D3\Fileupload\Modules\Application\Model\d3_oxarticle_fileupload; +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Log\d3log; +use D3\ModCfg\Application\Model\Parametercontainer\d3ParameterContainer; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Application\Controller\AccountController; +use OxidEsales\Eshop\Application\Model\Order; +use OxidEsales\Eshop\Application\Model\OrderArticle; +use OxidEsales\Eshop\Application\Model\OrderArticleList; +use OxidEsales\Eshop\Application\Model\User; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Request; +use OxidEsales\Eshop\Core\SeoEncoder; +use OxidEsales\Eshop\Core\UtilsView; +use OxidEsales\Facts\Facts; + +class d3uploadmanager extends AccountController +{ + private $_sModId = 'd3fileupload'; + public $blThrown = false; + + /** + * Template, fuer basic und azure + * @var string + */ + protected $_sTemplateD3Fileupload = 'd3uploadmanager.tpl'; + + /** @var d3ParameterContainer */ + public $oParameterContainer; + + /** + * d3uploadmanager constructor. + */ + public function __construct() + { + parent::__construct(); + + $this->oParameterContainer = oxNew(d3ParameterContainer::class); + } + + /** + * @return null|void + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws StandardException + * @throws d3fileuploadException + */ + public function init() + { + parent::init(); + + if (!$this->getSet()->isActive()) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage(Registry::getLang()->translateString('D3FILEUPLOAD_EXC_NOTACTIVE', null, true)); + throw $oEx; + } + + $this->getSet()->d3getLog()->log(d3log::INFO, __CLASS__, __FUNCTION__, __LINE__, "starting"); + } + + /** + * @return User + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws \Exception + */ + public function getUser() + { + if (false == $this->oParameterContainer->has('oUser')) { + /** @var \OxidEsales\Eshop\Core\Request $request */ + $request = Registry::get(Request::class); + $sUserID = $request->getRequestEscapedParameter("uid"); + $oUser = oxNew(User::class); + + $facts = oxNew(Facts::class); + if (in_array(strtolower($facts->getEdition()), array('ee', 'b2b')) && + false == Registry::getConfig()->getConfigParam('blMallUsers') + ) { + $oUser->setDisableShopCheck(false); + } + + // check user + if (false == $sUserID || + false == $oUser->Load($sUserID) + ) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3enableScreenMessage(); + $oEx->setMessage('D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_UID'); + $oEx->setLogText("Can't load user, UserId is '".$sUserID."'"); + if (false == $this->blThrown) { + $oEx->debugOut(); + $this->blThrown = true; + } + // throw $oEx; + Registry::getUtils()->redirect(Registry::getConfig()->getShopCurrentURL().'&cl=account'); + } else { + $this->oParameterContainer->set('oUser', $oUser); + } + } + + return $this->oParameterContainer->get('oUser'); + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function checkHasArticle() + { + $sArticleID = $this->getOrderArticleId(); + + $blFound = false; + /** @var OrderArticleList $oOrderArticleList */ + $oOrderArticleList = $this->getOrder()->getOrderArticles(true); + /** @var OrderArticle $oOrderArticle */ + foreach ($oOrderArticleList as $oOrderArticle) { + if ($oOrderArticle->getId() == $sArticleID) { + $blFound = true; + } + } + + if (!$blFound) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage('D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_AID'); + $oEx->setLogText("Can't load article, ArticleId is '" . $sArticleID . "'"); + throw $oEx; + } + } + + /** + * @return Order + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + * @throws \Exception + */ + public function getOrder() + { + if (false == $this->oParameterContainer->has('oOrder')) { + $sOrderID = $this->getOrderId(); + /** @var Order $oOrder */ + $oOrder = oxNew(Order::class); + + /** @var Facts $facts */ + $facts = oxNew(Facts::class); + if (in_array(strtolower($facts->getEdition()), array('ee', 'b2b'))) { + $oOrder->setDisableShopCheck( false ); + } + + //check order + if (false == $oOrder->Load($sOrderID) || + $oOrder->getFieldData("oxuserid") != $this->getUser()->getId() + ) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage('D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_OID'); + $oEx->setLogText("Can't load order, OrderId is '".$sOrderID."'"); + throw $oEx; + } else { + $this->oParameterContainer->set('oOrder', $oOrder); + } + } + + return $this->oParameterContainer->get('oOrder'); + } + + /** + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function render() + { + + try { + parent::render(); + + if (false == $this->getUser()) { + return $this->_sThisTemplate = $this->_sThisLoginTemplate; + } + + $this->addTplParam('user', $this->getUser()); + $this->addTplParam('order', $this->getOrder()); + } catch (d3fileuploadException $oEx) { + Registry::get(UtilsView::class)->addErrorToDisplay($oEx); + } + + return $this->_sTemplateD3Fileupload; + } + + /** + * @return d3_cfg_mod + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getSet() + { + return d3_cfg_mod::get($this->_sModId); + } + + /** + * @return d3fileupload + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + protected function _getFileUpload() + { + if (false == $this->oParameterContainer->has('oUpload')) { + $oUpload = oxnew(d3fileupload::class, $this->getOrder()); + $this->oParameterContainer->set('oUpload', $oUpload); + } + + return $this->oParameterContainer->get('oUpload'); + } + + /** + * @return d3fileupload_setting + */ + public function getUploadSettings() + { + return oxNew(d3fileupload_setting::class); + } + + /** + * @return null + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function doUpload() + { + if ($this->orderIsFixed()) { + return; + } + + try { + $this->checkHasArticle(); + $sOrderArticleID = $this->getOrderArticleId(); + $sUploadID = $this->getUploadSlotId(); + + $this->getSet()->d3getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + "starting", + "article id is '$sOrderArticleID', upload id is '$sUploadID'" + ); + + $this->_getFileUpload()->setOrderArticleId($sOrderArticleID); + $this->_getFileUpload()->setUploadId($sUploadID); + $blRet = $this->_getFileUpload()->doUpload(); + + $this->getSet()->d3getLog()->log( + d3log::INFO, + __CLASS__, + __FUNCTION__, + __LINE__, + "doUpload", + "return is '$blRet'" + ); + } catch (d3fileuploadException $oEx) { + $oEx->debugOut(); + } + + Registry::getUtils()->redirect($this->getPageLink()); + + return; + } + + /** + * @param $sOrderArticleId + * + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function hasFileCountReached($sOrderArticleId) + { + return $this->_getFileUpload()->hasFileCountReached($sOrderArticleId); + } + + /** + * loescht jeweils eine Datei + * + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function doDelete() + { + if ($this->orderIsFixed()) { + return; + } + + try { + $this->checkHasArticle(); + $sOrderArticleID = $this->getOrderArticleId(); + /** @var Request $request */ + $request = Registry::get(Request::class); + $sFilename = $request->getRequestEscapedParameter("file"); + + $this->getSet()->d3getLog()->log( + d3log::NOTICE, + __CLASS__, + __FUNCTION__, + __LINE__, + "starting", + "aid is '$sOrderArticleID', file is '$sFilename'" + ); + + $oFileUpload = $this->_getFileUpload(); + $oFileUpload->setOrderArticleId($sOrderArticleID); + $oFileUpload->setFilename($sFilename); + + $blRet = $oFileUpload->doDelete(); + + $this->getSet()->d3getLog()->log( + d3log::NOTICE, + __CLASS__, + __FUNCTION__, + __LINE__, + "doDelete", + "return is '$blRet'" + ); + } catch (d3fileuploadException $oEx) { + $oEx->debugOut(); + } + + Registry::getUtils()->redirect($this->getPageLink()); + } + + /** + * @return int + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function getOrderCnt() + { + if (false == $this->oParameterContainer->has('iOrderCnt')) { + $iOrderCnt = $this->getUser()->getOrderCount(); + $this->oParameterContainer->set('iOrderCnt', $iOrderCnt); + } + + return $this->oParameterContainer->get('iOrderCnt'); + } + + /** + * pr�ft, ob Bestellung entsprechende Artikel enth�lt + * + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function hasUploadArticles() + { + return $this->_getFileUpload()->hasUploadArticles(); + } + + /** + * Artikel fuer die Dateien hochgeladen werden k�nnen + * + * @return array + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function getUploadArticles() + { + return $this->_getFileUpload()->getUploadArticles(); + } + + /** + * @param OrderArticle $oOrderArticle + * @return mixed + */ + public function getArticleFromOrderArticle($oOrderArticle) + { + return $oOrderArticle->getArticle(); + } + + /** + * maximale Dateigroesse + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getMaxUploadFileCount() + { + return $this->getUploadSettings()->getMaxUploadFileCount(); + } + + /** + * maximale Dateigroesse + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function getFormattedMaxUploadSize() + { + return $this->getUploadSettings()->getFormattedMaxUploadSize(); + } + + /** + * Gibt die erlaubten Dateitypen zurueck + * + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3fileuploadException + */ + public function getAllowUploadFileTypeListing() + { + return $this->getUploadSettings()->getAllowUploadFileTypeListing(); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function isValidAccount() + { + if ($this->getUser()) { + return true; + } else { + /** @var Request $request */ + $request = Registry::get(Request::class); + $sUserID = $request->getRequestEscapedParameter('uid'); + /** @var $oUser User */ + $oUser = oxnew(User::class); + if ($oUser->load($sUserID) && $oUser->getFieldData("oxpassword")) { + return true; + } + } + + return false; + } + + /** + * Gibt die Dateien zurueck + * + * @param string $sArticleId + * + * @return array + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function getUploadFiles($sArticleId) + { + return $this->_getFileUpload()->getUploadItems($sArticleId); + } + + /** + * @param $sOrderArticleId + * @param $sSlotId + * + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function isUploadSlotEmpty($sOrderArticleId, $sSlotId) + { + return $this->_getFileUpload()->isUploadSlotEmpty($sOrderArticleId, $sSlotId); + } + + /** + * @return mixed + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3fileuploadException + */ + public function getOrderArticleId() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + $sArticleId = $request->getRequestEscapedParameter("aid"); + + if (false == $sArticleId) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage('D3FILEUPLOAD_ERROR_MESSAGE_ARTICLEIDNOTSET'); + throw $oEx; + } + + return $sArticleId; + } + + /** + * @return mixed + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3fileuploadException + */ + public function getUploadSlotId() + { + $sSlotId = null; + + /** @var OrderArticle $oOrderArticle */ + $oOrderArticle = oxNew(OrderArticle::class); + $oOrderArticle->load($this->getOrderArticleId()); + /** @var d3_oxarticle_fileupload $oArticle */ + $oArticle = $oOrderArticle->getArticle(); + + if (count($oArticle->d3GetUploadsArray())) { + /** @var Request $request */ + $request = Registry::get(Request::class); + $sSlotId = $request->getRequestEscapedParameter("uploadid"); + + if (false == $sSlotId || false == in_array($sSlotId, $oArticle->d3GetUploadsArray())) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage('D3FILEUPLOAD_ERROR_MESSAGE_UPLOADIDNOTSET'); + throw $oEx; + } + } + + return $sSlotId; + } + + /** + * @return mixed + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3fileuploadException + */ + public function getOrderId() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + $sOrderId = $request->getRequestEscapedParameter("oid"); + + if (false == $sOrderId) { + /** @var d3fileuploadException $oEx */ + $oEx = oxNew(d3fileuploadException::class, $this->getSet()->d3getLog(), d3log::ERROR); + $oEx->d3disableScreenMessage(); + $oEx->setMessage('D3FILEUPLOAD_ERROR_MESSAGE_ORDERIDNOTSET'); + throw $oEx; + } + + return $sOrderId; + } + + /** + * @return string + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function getNoUploadArticlesMessage() + { + return sprintf( + Registry::getLang()->translateString('D3_UPLOADMANAGER_NO_UPLOAD'), + $this->getOrder()->getFieldData('oxordernr') + ); + } + + /** + * @return array + */ + public function getBreadCrumb() + { + $aPaths = array(); + $aPath = array(); + + $language = Registry::getLang(); + + $aPath['title'] = $language->translateString( + 'MY_ACCOUNT', + $language->getBaseLanguage(), + false + ); + $aPath['link'] = Registry::get(SeoEncoder::class)->getStaticUrl( + $this->getViewConfig()->getSelfLink() . "cl=account" + ); + $aPaths[] = $aPath; + + $aPath['title'] = $language->translateString( + 'ORDER_HISTORY', + $language->getBaseLanguage(), + false + ); + $aPath['link'] = Registry::get(SeoEncoder::class)->getStaticUrl( + $this->getViewConfig()->getSelfLink() . "cl=account_order" + ); + $aPaths[] = $aPath; + + $aPath['title'] = $language->translateString( + 'D3_UPLOADMANAGER_HEAD_TITLE', + $language->getBaseLanguage(), + false + ); + $aPath['link'] = $this->getPageLink(); + $aPaths[] = $aPath; + + return $aPaths; + } + + /** + * @return string + */ + public function getPageLink() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + + return $this->getViewConfig()->getSelfLink() . "cl=d3uploadmanager". + "&oid=".$request->getRequestEscapedParameter('oid'). + "&uid=".$request->getRequestEscapedParameter('uid'); + } + + /** + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function d3fixorder() + { + $oOrder = $this->getOrder(); + + if ($oOrder) { + $oOrder->assign( + array( + 'd3uploadfixed' => date('Y-m-d H:i:s'), + ) + ); + $oOrder->save(); + } + + Registry::getUtils()->redirect($this->getPageLink()); + } + + /** + * @return mixed + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function hasFixation() + { + return $this->getSet()->getValue('blAllowFixation'); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws d3fileuploadException + */ + public function orderIsFixed() + { + if (false == $this->hasFixation()) { + return false; + } + + $oOrder = $this->getOrder(); + return $oOrder->getFieldData('d3uploadfixed') == '0000-00-00 00:00:00' ? false : true; + } +} diff --git a/src/Application/Model/Exceptions/d3fileuploadException.php b/src/Application/Model/Exceptions/d3fileuploadException.php new file mode 100644 index 0000000..bd9a74c --- /dev/null +++ b/src/Application/Model/Exceptions/d3fileuploadException.php @@ -0,0 +1,45 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 +FtBfFXWpjwZqVPS= \ No newline at end of file diff --git a/src/Application/Model/Exceptions/d3fileupload_cronunavailableexception.php b/src/Application/Model/Exceptions/d3fileupload_cronunavailableexception.php new file mode 100644 index 0000000..4b6befb --- /dev/null +++ b/src/Application/Model/Exceptions/d3fileupload_cronunavailableexception.php @@ -0,0 +1,38 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 +Vlj4N93LBnJygWVHfny1iX0lkgO= \ No newline at end of file diff --git a/src/Application/Model/d3fileupload.php b/src/Application/Model/d3fileupload.php new file mode 100644 index 0000000..f9e7025 --- /dev/null +++ b/src/Application/Model/d3fileupload.php @@ -0,0 +1,281 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +HR+cPvnQTElz/4pD+ABXo2a56W7G/C5KBDLvZvgujgE62MxhjMCbu5bK4X6sr5JCYZ1HEgtfjXN2 +FiqxdAo0CPqnHD9WFYHTaZEAe5+qPefLgJIKKTWQN7DwzBP+VouJIjom9EusqNKA0CSVwif20nIW +VCp2wjdt7bLVpP7D7sRZKbLlmGA4ub1yEMR4sI2c0rxpCDy9y4yZQTtCLnCHVZiHrIIlBIwn2Iq4 +W2zROnEU2D2H5jBlR9FBo4OVR/OzJ/JQ8d/1LoTl3st1GJVhdCcdSXzdek5aI0NXE0xfKPU47i38 +msGuYXv1JWZcJh+hPif9q+ZrtxmWcUU1yWGhifVyM9TVep6NxyEawZ+pzfD3fMOplt1zAZY7PCga +ibrinMaQExHOuqO+haPz3VmYOOOxAf0tgslxXwn0CAYUjNUrXLxhnWGpMk0C1omB3Wn7Z4zdH4dk +h5slZb/d8ME5YRyGHnZ/mKg4kb5yJXLqvwor1fXjAdHlDuLdKAu+ok3jcxzDSl4/dQ4lvbk1s1NC +BA/Sn6lejvqzDWLYhzONX9O38jzwMAxLYwVvSWlYxrPEersxZd924q7JmkoR5dG9XMR/DkVLhdDK +RRVtLl+KLs+za/cVEWQdqKsStSeaJRhSzNJw/dTztsBn7NmtX+NKtRCu9NWbqkbb0Z9Lw71P3rEI +hgdaOvykVuFV6M97khJbRHZLReikAGgWBPpgJV7CQ9UP5vpcGKY5Kf2qkl82rpAqiNtH6hJ9HZYk +zF5cugmrUqhgWztsdeWSPmNXKOCQaVnYYCJwmgmhnewy7QMz5DV2AjJAA9uvkODUcQdC/nw1EomS +cUtmY09U2DBjbkgnirRShwMNC+RqpmOQoefw9OozJ4DdEPXO7Ggsr7JABGCts1QpDpqde98Zm24W +ZiA8BpsnKZ13TKGQPmsmzOY8XkOOYpRJpvzgSBO+fjEy4JUb7XRqKvyhZBHq7GM3gZ56Ziodz5Et +poZDmQcqA3kQwbmDa74nu0ODFv/YUQ1o4OmzmFSUl5FJAsG7IG2b39////H1Di5BpXWLQHuGVaO+ +yMiDRtjl7F9UdAdI+F3xQL0vO44r8QFQhSh1sGZbT7lCUmnS8Q0nCC8YlsYXBBfzMm9zm0RjiZyU +NaNIofRWpqWsmi2UWFjRxUa05Lax+lYeTrq4gB+kouM+wfPsBNruoRNKoPGSquECVpx+SV51RavP +qpvCCjYWciYVVGPV8JN56Q67OoBXNa67nk1hKHILmdfp2QqDleOBmPRBxxJ8OBGA+5fkcvJMDyxS +bEAn1p16RJZOhJBVEjlVG8bSCqUFWBhrcQj9ns7xQUGbxA0jQnw3450cXfI3aVgdDHmKu3KA2fBZ +5oTXEpY7p0oqqOjUL9ohuP0UWrXUYP5Vm4HzND+923QQw8mj4BCmapkRyDY4HJQuJxFWChjvp+xQ +JSr1W4bPIN63kLYtzZxK5qV5QF9Qk6tnzO1v5oFiPZGmDhOY01jT21ArGdvYHw3G6+5M9prnNdHq +CnaKcOPj/QZCDIToSADm2L/k8oebTl2KznYjYI1/KLuQ/+Ejss2WLCZsiC61TEuAjZtCnuT+Cm7M +8YfQeGoFwshnO8BqoX2UEnoKxyAs0NMHcf4qV/bA7wap/dktONL1Q81fZGHQ9zzlbEeZ7YGnyLuZ +WdFl5gYqVhLHLqRKSyKudhGoB7v/KN+4AGV/JEdOlDm1wQQjq+A0pbHifqq8BO/oT0nBst0ZE0uI +nGnoi/3H1CTr70E1CEr3ILxR5kJrHRy+u9irHHhO/yMqFRXeflCfntfPQL/Ag+pld/7z+Ug0/72+ +4MCENsqHwCvm/LroYnCEFTX19QHE+DEt+VUGpGZ7BqvGK+E212xyFxiNnMqirNjyVzMUp/jcOmWB +Wu/wNeiBMjHvdSpm+lB7O28RAYcOccwQ34hkI4tuAlBXMfHe2ZjXx7FuInbrgntFCmHnAxDYIdco +kyPsq2wHfWZAHVHKK3ue78gw02uh7Izw2BEN6iSBv/l+BXrFUwiaKGfafVDE6vtFMocej9Bz2/+m +LHq5npY1OaxBRGyFRbs0w+SwSydEOKXI7bvLIcTVrxPXUITwCa/LkO16VoiTshDC3/VKzUm/tnov +kfgfqRribrbXNV4bdWlDXR7zKFBP8ajuxbj6jzePFePCk91tWbtLgLboAqVqIHsy9lIukT3j5CdN +p0drfLnX3+CIiLU3Sv3fCijRdQcbmrsK35D18bnhBpGVwphXMEIZ+QLKRaMreWdvZWzjTuN3duGK ++LwAddZ1hKs8N3g7qUKl7GjCULty5BT2x+wcAAPEMT6DcLaWn/LGUkAYFNbZHVmc4VgyFLWEkGs3 +NTlE+CQppDkm+d9YtLrz3A2FoPx62Kh9AnytwK9yFvLOib7jzhuFz0PgWHVhvxCqFaHTaZY9w5jH +zpSIAnnaRXr5sdXQIVUN4tV7fOgQGLFNPG3p/TA0HWpP+ljEhKRec7lYv+p1440JLe5NGsaRk+8b +ci4YXifLAZIKpLlY/Jc2bhq0NNmpQhQMWehocyHs4NaoXN6LxHB1/zxCw6YhXf2ZDm0BSRHiutjR +s0pVXkAinn3k+dd1HiKYGpPvuxjz5WS4vlFtaWC19D4QoHDfwXvJlrC/eyrg2B+oGMGTH+sfdejg +jHmu6ihuqtP9lGwbjTKgyECihCjxLJ5UYbUluEWWRD6UbyWV1IZvz1y7dsGd1RslYiolXouY2GWJ +RE/xPjwsSb7/Nwu1BTrfzaoanudlXoEOREIxZ0ctPsWgu5PhdOlMADIDne1V1eig+q9O6RxyjmCa +U/CvflYZg7Nzfa91IVKnU+1KaN5djHH14jvQvnPc5CEAiLJPGlgi7QI/twVjKdpkC5KNnX76Fm94 +lVtHVfIFv/4E9EbyvTfah2aFQbuLqGM94cXVekekGM9jIE//fHeQQf6v5vhq4rS1/tNywEuCcQik +HRTnRnZangDRGZ0wcXQIhAz3CzfToWV8394Zoaidq0Rsf7zhWHK9M/jHYtLeeFEIXy7rpUJh7YNj +VRdwLDk/Rh8wxqt5NaTaiCZ8VcYFksM8OVVR/v2bcqA9m3eJ2/zvxLXq1uFa/qFYBF5TUoui8epg +jLV57RoKuUvvV2YqTSllq+LyxkMns7FCUEVKVIYgIqIyzyZa1rAX57NbRSmz07g/bM/hnCBUhyHg +WBqRVaEf8AMfBQGfIFy9DHHzPmTgMr0EjFtqeI8Wu5T48peUWN4AeIk5NZ6UMN50j5Hmn+8Bn7e0 +dRBzEeC53X7qnlLXAIrwKl30m0vNmYTTT0UFh9K7OdNY+LU/tgATG4Xau0ihUjn6nuIVp72UXUxc +CN/N1E7DAaOoDMXaqZ0fZ7NdPdME+NPYgCtYnztJ2CEmGdrcDDZ+1dD03mowUU/ehR5etisRbmDs +G/7Yb2kRb1HZ/sm2i+MltS94wPMiX0gHeMIM1i/xeFhjMOS9bBy+vj/aTMCp2ka4muHlEDhYrDHM +4HjbraEldR8xoCvGtJb3VfwxFrbi1yoL0XaMYu7wFoUrb8mi2kTIQdWKFyi84lqLQTMvxDXmnalc ++RX/bVtO6ThsubM0fwSoOxGI2CneuYJ7Y4RNblxkh7/ora/mL+zXgHo+a5ivmIqs41Y7fW+RmKYQ +qVTffjk2IVQezIt3PjEES9moXSInenun3LUWBzcgtBt81gSSy5eazW+vSV6PfPWOJj22SeX2AjSe +MiavyRrFwsTm9duGuopgtgyejU/0mc7f/skHpV3nmp5zgHvpbreiwGmpgltVjJHqRtHO+Q3JJOc3 +435tTIoG6+J+TuFQI8NRObUVzTsvNEUgE1IQBcbtuMhyA07VlEhvLwb4335moYosIGX6RvpDd4ha +0yTERATTKhx9L5mgkPX3tuLvk2pJ766uNeAQJ+IBeD27Pt/J7NfqqEofahhzZyMLBH2nrgBMwnBi +Fc4/77VWgDY4GtAhPdRzzMCdhW8+isl4z1AzdkmhPXAcOVw9zcfQA+3ZJ4JWqJrfINaz2KlhyEHX +qL0Q49jY5aJIgKWowVbvyq4z5tavszzLq1h2M7k7xBSALZcO5aNOzUnIl+vkLwOFI/g+HwQXCcuJ +4UjmBEZLn/O3hOxMkAOmLlyq1rh7rROs1fNhWokdK0w8M0VkoPt/2lCVdes+mgePuwMHUoXWrqcH +YdSRJ68nFeL+DV2na/fl1+2PjuxkenxudP8XS/tgDKam94Mb2ScB8ohp1rj+/8teSEMGzRFBPMew +N7y0XdIwLJ3HECRWDrZWrAYM3D6jJPxYSp8xpDHu8lGBHyFXWI3uPl42Ph9wU1Q7ozp8Mwb8XxBa +e+u5X/4u1Xix486Pifa2SbhTZHb9ME0VFdyx9I1uys+L6cyk7cCieuIPBNJ64oVr8o98Y0LZJdH8 +zJN2XuOjKrYn9SAF4q4GdcULGCQ1WguwGwMBYcIPACAg/8g5RzZFC6nh/hfTkYEnde5oczKL6Ywe +l/lywc1ZuE8rQrg+P0Rpjfe9O4ualoXIz6gDH8MebgyTBc4z4AC7BiOJKBMc/uSjeTj+Ai91rkqK +8316nsvydjIqQTGjg8++I6cfwxb+JWNB3PlncrrQOp0NY3H0/TQTnl00gyMAQYNr/Wprd0Ab3DGs +mPwNeYuX50FBaJL1PL0NRPtAVj/9Bs5Q+/mLm0b3zq96AHNilDOT+46C9EQKU8Uwm/ZQeZcpa3uk +5WSXM9sfJ4GYX3JErzapmh6r8Ux3yp+LITl+gWdsA9Y1l1r4QKokV3cTSqm8CNewELkUGuSHGp2f +YkNBQub7Uf+WAv6mCQmDbn0w4NSeYo2wO/O3mwCJHce4zXLE7MeIP4OPUNMrnV2igznnDIPNS89w +h6sZtPUfSnhUDQFTU4bUaz703YFgYVyGfipsCjnIMAwWxfDlE0jIATsUe+ArPMxkUfXk5nipnGYK +m6drr/nRZLQk5I1uCpHZPfW6CzZtsRkNU3AJmh//oO1/zICD2l04LD6Y9zCVyYxaIPGUz7QwTVxh +2de6DIWJsYKBX6Mf3HA54+pm9Sy6sNr+I4RZ0ibGC2Sew0eY4rFW4HS0lm0CGbOXeyZvZleguynP +juwUlSJj08xeWcxxErLoliDpA4TIVmgK6/UjsGsCtiVtaab+U83G1YED0C20Fgu04iD5Xv519d8m +o1J2SLpC7iwVha1qD9E6PzKdJ0leO0Wu/MVIRi6H4zofcJ9DXIX0RXI4U12cIjqvYHv166C4UBZ9 +LLCUp6Al2Vrdtq6ibf0wX7vdM0hF7ghYtnekQfA41tTeNTcQ2hHzuf50A6dVjFR0g7B4DJeDtYDU +IIiPs14xerhz0SGufN/LY5fNpOVqopzhIzlM3y/LNVwanYAafNSwGuYACGEvJzTRjFz2Kz6QViwm +9kOON91ob/XHEJHfVbtQ1KXJ2FNvus8cdniC9RMSbDkR47Q8B6Ku6lAvAmC+0cPo7RrRfdDZfO/T +ZdDcw2gfDEt2UMYCMA7qrAXZJ2cwlHctbOhwyz1xoqNdOXDi3TL/N791dSUHOjhR5/32964Ly1GG +BC+KGgI54L0zj4Itd7r7Xyp2GoZLm17S+O4RFh4lXBSXQIT0PvrjYJxTSJw8ngplVBfHtPzkjRA7 +sHJVrodmCY7ujRvxIK5uq66Kdt9WHlLVCO2BuSUG6jqwO5hD4mwbwLFD4O1BVe07PGyZCmYYWEkQ +IebDO1Ig8qMNcK/KnsMIWVTspNFyedV4jxscgeC1ulEZZY+0CrmrseEa3Fzj3FNGDTdFPGn7y7VD +de6UeVnGB7Ld5EGRXYrrKrSYhf3r75Jl3KhI+Ww9hqtZayEScr0JRgytfAswcdckV5SCPKIWyHRK +KP1bIX5gb1wW0DSADuaf+z4wRdqEa7k3VFxYMbl+bz0HuaNTJgyXKKcQ7q56luKQldsqj7NvVctB +zAE0TMha1d/l9J26Pb1BfYuY/GFSVgT6SpUEBprYv5Cf3ITBnmjPAd878QxtUT5kBP1x1BuOXfUb +BOgzVUJI10AKO8rEn2YkRhR8Si+bwHYhn6tOUZjtdYIrcp2o/Bzv3LMRf1jxcYc4zVK7W8KcpNlc +YiRYMw7NRv1ORrs8QAO2d27YeTy1M714H1fCzgaTW7VT/6T8W7bWpOgv1Jj9OBtnrXF3S6DVR3ab +jXYtl07DDhikFeRAXfggY+an3QR4geXzlY6WpUM63ke6k9XwKW6Ab2z2OuxX8KJIG04bCv8j8F// +9zUx7Ql9d+y7zc5kvgZvZET7ThQhEzl2cCRavnhOgOi+YMpaVoCkLyvdwrUIjnJuu3QgeSDB6VL3 +zpz0Varo+iWr1R682DgWDvPadiI1f8rEibNYkhULQWwKAIyTDV7AUupHbDF3bJqOPneH4R4/sVhf +C6MdzxMdQWqqDfx+3It3AUOauBdoJeZB8Ke+wNvETAddoSTI89QnzdgDGM/uH8GqNW5g+Fb2Yfv6 +7LYOpPN9azrI+czzgFS6mjVHjWLL3xqMwe5HpB/+ggEqOoQeHx6FgsbxqDg0FRioJfsH5dD2lJhZ +Hgp1+8X0W/bneVhb6WaYLE8j6eyuBSYDpWf2Tf7zbiuHG18LEnwPHxS7Bi13dgZRg42xVt8oI+H4 +vCJI/0CgkqrqyoRlohSeBtoDaVovZVjvP/mKNQZRBieTN7LrIptSvq6tfjRpP/n/DGFHK2OQ/Vkw +hPSuJor0tv8jrkmbZ5txhMSjilvSFJuEyecU+YWIFZY2wbKVigu8U1cXSR63eipTY3xro2Yfx/YH +WMmf0+brmYbAT9ML4MZvOsH3dP/06dqp6u4DNwwqYtm8nPCNSWOiahEQ+MPNKkKJEpgonjL2QfQC +u3qWkfNMLY1zrcROsNZ/ammcg4qQBCvR0DyAoeRrsi7kmFm4ZYo/f3a1GrYEfW5CtynKjSAqkcR7 +6Zg6uLW/+2gP0qghhXszfvbPtnuErCfjZ0J/5cCPJvxvWtckohHerGeXLhhPTqW0iBdjc3KDMvmQ +qjDW6XboykoxLuSBc6am2XmOa0Gfe945XsQGz36ApTxIKLMQNYQZO0elqSNyan7LfK8AFLKgWs3m +hfRZ5XkEZNlOHwgBviewhnRu2Z+YjD0+RvuW+04KE4+JTZHYW7sBrIN18m5IRP22XI7r5bWkwzlv +/yENYoQtGatsVa1/IM+0XJhiUBQvPE3lSiNYZLeKANvuCcfucTfv4ELEUfm3KmaX4dGqbvGxaGjb +2VRGImAR+wKUL8NsJXzIYT7o8eU+S5oSZq1f6Ly5YelhGfyEmvxUYlNEtwlQClzmEEZsMyDJVHK6 +Ag+GwlNXprShDNCYpoChkC/lP3HLzxyWLHvXk9GpsPrceoqJhpwPoYg2Ublm5mfDxL6xJenBP4v1 +5kA16HGTdBF0OIm8Z+5FgKrnngyJMOkrKgPNvpI/Z73jiALHAObJLOOCR1GI4UtjFkfCWYNI3olp +0OOPyAQD0xv+k9m3dbgf/tXp9ZW0HKQbVo3dLAVsunTm+2wHux/hr/o9Tgn4AOAKJZBIeIKbW73/ +Yd1aw6AoaMY9zYj5QU8ub9qZs1IXtKHgYevgOHLYb5yEWlUYVm2I4YXGqb3rlxppZXn5QBNdvpAK +8VRajGFJtVfBSbrsycUIzXnVST3WIi09kYxMv8elWlV1vGHb9kMmG6UqW3BtxgakBae1zd+A9o0t +QnIbHM7Zoo1fX9xRrv8u9R4I1fSEc0taDGcwlZIsd/D6yL0m6/3Hhp9gFO1IViGhDoiqs1E/GS4f +KzBbKkz3WkUflug1R1N+YpPzdvLdZKwH/Nzq9P2+Om0D1+jEQH5Z4gYMRtHemoXum4EOpE3wZkVy +Awt14VOpV+z0+0jvDl3XI1HmN7vuOgnA/5KRIfha8SZIumV3WYnWfIy+8vPNPHAUw77nqV50aBwK ++XVGQxF9MSzpGhyEGat+Q3q5VD2bl3DNoCzYQjbK128Z+sKq9PrIYsdZrhpIVnh0ln//IeO4XM3Y +Ri2w8U/bAtHJ6HX16MBiRjT3Qxm2NmAHwkOSo4vHIubvG5za/EKn+2jaz/cb25u5GHAi/+Quz8DT +SSq6bhsjcUzOF/ZclBAuSCf4gJCxGXnBHPOZdaSWX8fwurm5mB7G3XssullBmEW0bwkpgY0TMUb4 +osVeQijjB6Sre1Sz+RZicyZtRC0NmrKjThpHEJWEEsfw/VubbIqbgnuNKDNCxeLBNQtZKlnFP5aS +TV9ypofXmIbioTnKKHj+w4lWDE3DPxP3xVSZ3YFnbaTgbk9w2OolsBS7evGkgQSampCvpt/qeI7p +Pt6Qr6ygWhCBYsdbKh2MvRz5M3tyMF/pVsdAyfiUW+/5U3tQJH+cjF6RlZQ3PXBfRzKjWCXEXaWC +QwAhR+OmZI8/B3tYO3ljc3bjDj2elEsLTdum9z4EtxYb++O7ObFlof3OtpYNgYsPMFGA3/3GLBtO +pgXpTwtboJNA++smbbWK4kk9wEN6ISOrJyhGZFXGEFV9OVgGWOZV98RbSBns2FiDKcsAHOCTT/Dz +83w6v7AipiXeoD+Mmi7fpYeR+ee316qR6Lu+uexQ66tsbhM9Q5wRQHkkDnNbzMMFS6Z5YTHdHJYY +Pq4tgD7jYgnJbUI6A1Das457acUxGRkHDGaKHZ4K/PUnwFE9g2XhrLi8RSiefqbtbeX89Dh1Qj/t +9mjLFedLtpDk/ag2X+1nOToYXRYYKZS2qdK4fvK9W8X9HTeDA/+oFIxK3UA+WUG14GBw8rIVeoOW +kCUkigz+al2mopADDldC17ugfY2KfJgYL/gBHUOQzPGjH1H/CpNb91VpOXboIGc9gnD0SkqNvX7l +4PVjQ6kLmNg1WBBudj8mgNyJpoJWI27R9MWUxafwswt9a7i1ZF968da6W/O3AR8usg4j3gfHGKha +qoVRUUd3nlWqaEoPsjmfLS1UKdPw/2Nw3eFl5qA1OMApoPwgr2mdE+4CQD9AXfBJxzOmoaT/bqPu +h0qrAMK/jUvw82ZlPq5SqnZqd6OLXIYzQoxlEYBki64D/eWbtGkQBZIRKbIaGim5cxB5kAybemT3 +KAw2fUt2O3Sqds5MQK3TGo3/+kXI05Xqk5aeb9H7lKvt2B7xK5iHIejmb7kTjGXgf5BYdr4VQsmE +uJWpvdkK0vBNVaFvaB4HratQd+hTlIyR6bDPtBz7jGw9U2cc/3d+a/hU5iiZ3EWKxlxYI+M1dE/F +pUH2oTxZ1G4nfCHrkVfJNJa8h9/6n54NLYWQjICK5Wwi1+q6Asso1t4JEfMh3+bT8klAJd09x6Bg +2b+aLFHFXswFDat/n2bai9i8nTO4MpeweuS2g6p7uwJWxExMlLgEG7SFUvZ7RfZHx5vcQVM0Yiyj +Y5jE0uP7ruu76VgGElV9E+se2jgB5uFkgh6H541qmc7+T/aCe+BW2+V18/tBD5CrtJgaofC2gvwT +QwTLAd6PDJCeHgs1K2MCdomBmLRCTJR4kjVs5E5vlfW5g0v7PG2Gszj4exHrXDVVkivTQyz4SESE +y+9liHZe2YwfaLratMmZ8syVNiCWu6tKoq6NKqhnTg0GVMP7gYK8SsLIWH2h3/71d9flbFebegr2 +azoFpC5AKsVdGLJSJHXcDSYAHCW8R4sBIEVhEf38BkZDx00ZfBi1zSAtIUsNhgPTpN3sE4Ngjf6b +Y6EEJnXX8ShxHyV1h1IeONeA8q1nFOwiTmaGQYSBswmdFT9gW3OF5aIKTi4P8erBDtbsRwB6IiyU +RsEFyDTdmmiYwr8+XplXmUewCysjGIAEQ8bX48Ks07T4H1SZqay5iLkS8VTq5qB5PKtrsTUB8hCr +LoJzW0J3N796UBQmEw9swF7aigzD9hFVXs3qn7kqXvapthNDCe0IsLJYlStmTecZtcRpSe9GPStH +6uXUv/4Q7TjftXUUkCqGCmVIk8J9wg2X56fVri/uKgC64/LlZNqNp9zxjmInIYHgzCQAsXG169iY +MbVFO6+TZrxvZ7jyfThFkGYT5M8iIo+Lx/99MYQfec2WvSYqywFewmOMrRwgUwuecBFbWYAc0+Sb +fdyTnZ5okoSbiEz5HmpryFcvq0Oml0Y7ONanjR8H5+mikiy33J2z/sp39J9+i43QR2qYxdH+l4BA +tVDSAuE37qVVybHUL9eayyxPJzASMpekFtVyowt5+eslmVdsHECvul8LQczAO6H7O06oxd36+vsS +mTE5oIwf7F4fyun//fomuOWN3/5QuBr2aQBUD4KL+VlQxdSjQ1moxl0XmyP9AJyRA1IMuXuUi9c2 +HxOMcxdlGpbWjhI1A6tKXJqzJa+zuHE6h3zruf5J749J0KufVcpHNckXv6sN1IyYzgO9OIBnZvqR +x+eANW6lmyJWtyvZSL3LuKfw8i0W7sEOAKVs/SRM5K7orpxMURfMIpt/0XfWPXeQCKOHZRV0jt52 +2Qknx0ucLKLHXxVrtTAF4Z3RA5V5eX2mQ+FF8CPrM3KXkuJSJS7iO/ZBaTi11WGgMhtrMOfdZ4qA +67ngTDckI6xRRwfNu3LxHi/BHOurwshGOVdqjjKzyWBDqp8cBL8tRhbmIVGPWFHjDnenHrK8NWTg +k0lEZ5Zs/u2JEdU4yC8B4SorH+WlUsc8nSfiG6sMskwHBBzhdBg9cczSwc8xXS+PZFohY15X+YX2 +ETd+TQlWYRH3k8yRCnD7Kc1ijFsblHKfpmdxk6L2k8MweP0IsGfe/s6IfUvwAWmvPqhB6fLrld+p +hB6k4gravp64xVBh895ns2ZEn36+ii9vQ8OEqCac5n05S232mnLBMkbNXZ1McPN76V1KEBeAjyRE +4rE1voLQ/WhsOH/2KKGYp6jJ/7JoUpe+9IEXBSxGVBLT4uLKN5/x7r7VYRPaNVfTIvZFDpMFZkAM +yPsyEvIVLKgbGoKr178xzrBJJG+44FZAqruUO7268uYSVFUt8pHm0eNJrhvEWEbRNo/qzZWLrhi1 +wameKUGSTnjDdrc8v+R+P8S5vZ9diU2xY0FFbOSqxLE5dzNEkNRQQM9F5Dfbxp488pDgZmZWzfG0 +vSb5m5o4+qgk0GpKaW4bMqocivyIM/LMCadTBpxxcwzX0UM1C6KBpsgAPPst8cWl34MziC8pPtF4 +LxC7BrgQzXcxI5cQ3Y8ZDqnleUalcA5OvVQoDghEEurVYD3NYbgVPwcLI8ODunTM6J+1h37kasxW +3m8FJhKpr5OcisgyGNdLa2yXZIICgBLpkt3rVi0Q0/F0texHapuFZNlQ8+uGVgMKBR/my05plVbc +Yl5eHJNrmcLwhswM6lkkF/tulMm6+0f3FiJetCr+MDfZ/z6Mkq7wVkTbR7jy6Zhn17KzYONrFUGN +IXeZEwpAJmgMRkMmrnMnecFTQgoq85OCsvFhI3h8d3HHB1Rlk0kiGh6Z5UB1HTjgK5U55BigQnT6 +yJ4Fzufo2SLXJGQ9m/7eILEty6k4XaQowvMDmEv7RFzAjvyWAPTvbOZtZwzBOyCwY2Gmy392AlOR +xYoFyQh6OGgptzAvDIjNr9ARwJfdt/GGeDLcJ8bUrJTR+44m5nnHKBUMNXWiT6fUjvT0YKsM9MtP +PKfQojLcAvnz1jtuKaSDQVPy1KVWMvvDIV4cCriENPEEjxScnHZ7ocCTRrzid9F5xDQdnGfj9Y1B +JN9SWgZ0/LzK6oSHgVp+aehZGAFqCdSZuz1mUSQfIy/lFti+zlIOH3M6WR+p5A5noC47SqhpAfJt +I5TQe6oLwC08ElWNLAffgxTir2D4J6Fs/baQmc0Q5ilkG0m1YZHpNBTe3vyTadwxn+cM9nyOs5zK +Cvuh/pgHN0M5EcQ65aNeWXD1RTeNs9octRZ2ZW82KggACIbXvgwXTsXqvG5xeurgM5VDFjHOqRCU +58+EaALLElE36DMziQPqTxO0rwk6vUXAk+kLgpsSyRIXtG82gOYb+VUNvqi/ytufYVLmOQSl3Gou +ZMHcmvpqzgVVgunJJnnUab9HsERmll7zSnkz9l1gshAhZfXfdpuCr9YRG/PQR00QUsBrlJFBcpti +BWHP1RJy0U/GSQTP+qHqCM3x04PMij1hD7ALYAFKd80zzvm8pfACnyFpazbBIEscvYqxe0p3dAkx +C8cnX3PgBaYqiYA9u7KAxzTbOActM9A6S7kp5Q27GsV/8lqNBOmW89UfezGlnUMwFNeWfZTMq1XH +DOIXHqBHmQ0BFZ8unOJCXJxytbMMwDvS9N/OtORgJulPUlebvIHwwdqDnVdJFtKuaOTbDX7gTCm1 +dSGpxyrePrKRhAg8RQXrbxPWEGtCMptdXm05cfdZBb1AgRgLowv1P5iCnqNluyyTkXaNfQjEHK72 +ykNYeGJ11LPFUqvl7Y06E1DQmFkI/YkcMJ+rpdRjl5FKsXsM8VrYB3uwEghp0DH8EYpIINE8Ddea +uTj4j3jjsxoqyWKGWoag6/mZveYjqe6mnnsraElRHvTmgX9OO/kiD3zMxUQRPd0rT/alzmClcKIs +5xL90t28EBesxYHtd6sUORCtQMwBeWpZWFzO5kfAzkCCZkzpzLYHmNXiHObMZQd+Z08xRHsMYB2/ +vUBhZ1/zABQ9hdomArmP4v3M1Yz0Y/3suOU1OUjDvGkU3AGSR4jPqdSfW3J1p2nimQocmICU8PrI +xjADWunyZd/uHCbFkOukQFgRG1mEuPxbiaPF67BMkH+lh/HMiNa9DegVW2iPXfGVD5mS35qkKi9o +6sJENyJIXJGxoNbD+TdmsmDvLIz2/Kst7firRJPEN24rl+rQ8z8p28O1q9a5tbN7ZZ1rU5BqNS71 +rcO66lYA9+PgGchW1ql3mLmR536Tqoln5ibxvn07X6eDSODMMFdtBMLlrl4Jfp3POQFaAHSFrU7z +ZZdfCDBtqV6ImAiKX0KOUDsJhH6Y6TdOrzn3G9DORrtqjsxokkf+n2pxC0tIRKHzHuMhUOHCq9Qg +lNGFRr1HcpHEBlcMGoEc2wr7Cr8J6Ono20MLo65eQHhHgvFa3rqTJ+dK0s3NqYf0pu/d6HyxraYI +eDmUZEZkeTbmkxcBtXyImOUYjp14wr2uDZUUoJC3hyw3ML4LqQAEELjmNLwz6NtUZtcPbjYmmSnx +Ob9FWqxK/ADRDdbG8On+ddoY97TZHHFReydjiGXN8Uou98F9vVHwnx5vgk52kDBI7jEpChmVJ0Sm +rh8Cp5aYiyVA83xUPAWiODcNuoztfS9zxxzmvgokmfhvsXrVYH1n2yszRbtOjw73O6NJuQrcolba +4a0bsVpH1JOGpKFCzcCTXwLYoT9VPPmdfh/eQ5FgFl0CmABzJOv3ri2W8tJ7xxWtxCVZ/cihQAgC +Ug5DIMbEQ0kgIV2wGx7ZXHNph40NweAYuKQnRxCraSP4AqQiqsFg0bcoyqrKB/Tlg6Dy3l3p9Ti8 +FV+feTP9HDIB16bIe8EcinOkXEoXeH+sf54kwe6qkreGnBcPZC6LAccNi0zDhF1rr8cwgdjmcDY9 +b8txID8KdYqd87CPs0vVrAXUb4KCGp5fcjpKi30oq9JRorTrdImLHnvwG8WbnZF7QZ6D6wbeglOL +kv6IKXG+B0Duy0SC32MthKS7546pP38Rvoy503bS89B97tCYOa9sjyJkDrAh3lwhZ9t/gn21sgkR +ySFYL9dedqJnvyw6xoVbjcNQqZ9fT2Dm0yqrswBKiQEO1MOUzpJADcS7wtmQ3kVhRkNirh8O95DS +QU52vfk86cMUWA1oTZxPJCXHKc4zhSQDgcPFsXrf4LZNydfWA5hnXOZ3Hxj2iD76uMFQm+X46JwH +06MDU7npknkD0WuUVDCWs8xseq0YkeBwNij1xQ2e8f3jaxqNHzBK682Zc0NY02/cT+L5EOovkonw +hroe4a0MIZz5uzmmfhfydlHGXC5ptkIa5Y5kpbGV7ydSKw/qDjXigSEUNaNiGNziVVmi6dkvIzDO +zRaPAlc0v5n62tUu9bV2oibEe0oJG1JdmoODrLtIQT1Oez6aXp73iaXgXKIYHDU6xXkNCd614Lmh +ARkXUOXplWXqSvxIbqfstaF64U/2ygWJjB+ZMBsvdB+S/FoGXf1PL7he0SD/T+PXKEE+febd8Omz +gWjg4qTw9p2DFexKL+MM6PjrxI2tT7nDjET+n373Xd7ioy0C0BGRXfMMPKs8J7DWez/mbUea+BYw +AMyIQweOrZdSFSjY2Bc9LQepUC5CsRvaVMlI5fXl/clEDVLzTgot++mSijSd+c6vI0J/XvX/yuCx +J7hZDSNR8VFH+zle14HvSwpJfM3esCoHz/0gdFxRMYlZlZKt5rD0pksBtVMNYFAbap2DNnh2wlBL +7jufh5vNfj3j9i+WVJ0P3vNM5DUaFHcHTTVWnPOpV+CTGFcz7VNJlBCfZvWaQdaYJt795RLHuDSf +5MZjSOD/QCNfiXBfM3PfSWZvk6GpH/BDX9WLe3EGC5Cs6pJsBC9lGh0PpOJKQUN9ZIuBYCBsrp2P +kbjM68d5dFfPnhFMB41mRKaxMF2h7nSo4VXfE2cTEEbK1vBZ4NjgfKQ6WbnBAE1VpFq+/bZUf9a5 +5DbfzbAU2fLeA9tJ4HhwOhfr34A98F/PXIMBaPaJ+z1TxdaDnKmXgUjfrcTtEaHcrnPgohm9cYKQ +nIEBMx5M3i/i2NmeGWrEtibwycm4JRWe6tukYJjF1uLmvhyvsrsJ7WulAj6PXKcdELn2EViiT4rc +RZOpq7XSAEfyWfItsb5r+diC60t9GLb6ExkXP4r6cGRZvMRXE0sSMSCPadMsqWRuZkto9c/33jX6 +x5wcTviX7TCmBde45xE0rYeDh+2lnkX8jXGp5+4KIu0dG9HThIh+oR6LBVoPGmpjhknYXHB1wKF2 +hDIr0ocTv9lX4lGULVgS4+O/fk3KG8mB0MzQSHYREYliaudgpft1AjYhZZEKkR2AbJLg1J8L+cin +YYXMEiwzodTNwuKJSFu/lIEPaJSSXQ1CEJ56RJN0yIdNiQSZLhi6SY314imutkYn0nebCU7aZNDu +IqCt6RoMj1YoiyAo7KndKKsdJMj5XMf75zujawZ09DGt1OmBUZg9LDkP03lDi39FovYx6dJsVm5I +ciyWDZD8qekp9v1Tg62OLT/mzUp9yWYO0uhl4GQLHWZpqw0qKv2xxWX8sEojCJU5w3x+8reDI+51 +3aSzTF6njkOkUkII6ekcxr7VolB8YK7smEnhNaLkiRLoLsssw6LGVQbZswM+nKtGoaMEgDeMY4G9 +hrgnwo6DRFZ8H0bqxQRIS9WB4GidVOcDtTjMnF+nXaOHQx6cfyO+PD5752LKkTqOpAo6tHVjszfp +t53rFclnYFjgx35nPnB4H+dfemw9jqRvfAoCY5Vq17HXMvxzmNi9Z7Wo21V1jQvU1qhM/95YWnWu +Ra/eMK36+Cz0AO+KsYTRDcH3OTjvjsZlKQ9X4mo+892fURZZxeppAAGxxSf2UT9Y0qam0w27WWNc +QFA3xjaRZ+Yw4QBByQgaF/FuilaGhVkn1qPUEieqfyLxzdW0HtTlxXTXOra4Wev4PZjFDZqKPCnw +kTQS68nyV/3WJhtkq/A9N5tiyCShBXUdyU5nZ1z0CB9nLLRWHtRMXUCVhvsf0uBIy9TzEkBDb5wn +SWy50R+xTJ+5Wcg8bkc3HgGSb8FAe/a+jZ9q1XOEHi4R8e9YuRNoJ62Qg5fIWE4GiJhtX9bKMFN+ +KY22/xhFq1YeqekawNULu4I/yBZtaD+ImQPkyZA8x/qumSeBUmoAQciKmVynF+5kMhjXYHU43Cxf +M3/Krutjv88srP0i2DXSQw3aVvGe7U+eaaBawPXb94r4QlNyDG37S+QZn0/ErSf2tMCQEzaufBa0 +/b0to8TDKeHdHjAPk076M+uaj5PDcp0nthucluEMi1aMroyZdx+vjkGufPKo0WuSwqAFwT5p9NdB +CKVpf+A0G/PriqWuofScrjW4mkaiHABZv4dYhzGkCEpcHJ+tYieP/u8RlHueQYFk2gUF4ViJWhwd +jtFWLZSwDVEVQoJQnV8rn5M3S1KMxChDHR4zWDObaK10oBluqt6rfzirm8+fqrixb2H8kfLp17A1 +t2c11Vx5VAaZ6jfxPGGFQVCgXpIlhJakGcHMA6Vmxs6+nkFiIeW9w9PwLrf7JRu/tEuW3mBVfVru +7grnsnWQ2yFSI5hXmXzV5p3NY8GTMdy3btH/zz9B16krZvsdHMUCjdwTHu/xPBvyurRu7RBsjQLU +TI6XyL3WpTkSRa9B528ewHKhK0bPRqXkytkBWVI8RaZs+6XnI27aCHILjoYp23LxCQ4zbVWdV9TH +4vDmpbGSPyL+Z6Ab8GBlnQ4bbEwvIqG1mjk1eFcvr/k5AiSusKCTLcILLFiSv1xdPm5iSuQT5hOP +YuXhKN0D0+pKR5cZ6h9vL3Y+Oe3Ya6TRkyex5YCnva/ruF8HOXFq9za5zSP3T/w1ElkHIP+j3EXO +YzHwo4WVZD+uwTnWEkX+HrIv+s6LLqJ0maaom7ZwOTlVfF2+KpzreUSDfJ6TU8vX+MhwnC5Drd/S +GiPz+fT+WeHK66vnFcmU6JLUUl9ldDUrJBf948gXwTKdZvIg7a3EyOAf5YP2ndBFkLKmoEwK36VQ +YifZ3jOrYqbvo9X525ma3K5JpiTyT47KVwDmbM+lg7oboFL+GkoX/edcv+E9TO5VE4/U4fQ5XdO2 +NCxaDs9f3hnvtf0Y/2Rtw6/MKNcj/59NtXTeHlIWUVE2Hg/d8D0HYVOkFkWNKeGK3LdrOrVbshSn +OUoK4swwGr7hM9FWS/9uySTsw1VaD6X4Hce+2PHK41/or7nPrzPSXhb8Xn47OBZHqFmQb5EJO7Rq +3+tg9O+Lu1zzLhYanCZew654oJPMa6GbGhmnmxBuGwEgb9beEJKhSTmLTQdmTIOneYBv9ghXJBHF +JVhhQSTKu9F9RBbHQa5IgY87JVHmyIC91cR71S7YQ9msL+4VBNlKWtm1V92W5Y3H1W4puYV+xemT +tbAIx28ptxi+qZaCUbZmzbVhKdL8nkWmHbVZtmQLkGI7m3xhyPoe04kMgWkbyxGqUi8vuuV5oYA3 +nGbo6AtQb4uRPQKla0Z6lR+tH1TzumgKkohUELGYyzIA+BNTDT+/4mxtdZs8hTUD6TGnTg4bTgWZ +6IaAXajET1S7wRg83X8YQiOBcvxGexjGNK8VIaxgzT4aLge2S6Hxn4YiSsAWUI3bj1rZxmk3wXab +l5uieOS6FKGc7jaCYVYUEFS1R+uO2HFXAexPg9JIxUqDK/wIOPHDrsc11OQ/pgFwBeZj6pYi72E5 +3zr+5Y4h3RWhJ/6t05VBRJyTgsxR78xUI6/+Ie8GwUQpUqyi5zB8/FeVlocRJgQPNsJ7MKV/ergq +PfxzLj/K4dztuMnySvbAhXZrqm7W4I3Yw0VKPWRBiIza32BgNjHKOUMsbvBJ5VCcjmoOt//9Qn4m +w6IVjuynE0cLfolp1ZbqCTr1rqZ3GTZIW6js4THMsON7mDTo40EFxiHmNTPJfRKOdA8f/M4BzKiN +DohHgogTiqCmtNOhJA82n86ZXY5uxVkqH/NlWrIimu81u+dVdHl4S7R3Evm6LIDKSB6XUAy9YNRr +ooTjt6NTOpOJrVrX1ABlid7x2P3/j4TyTAUhPfVqS4L8bjIP5FUx7LCWBZswxBFUnpR6JNyoodS9 +qneL6j90uBLacAc6cowLUgyWBD569l2TBVy8I0/ipDM48g+ffhSMy274hEYWZCGVSgcGjiV92njp +fFuJmQ3AD1R+X1/zdGXkTvGE5a+Jh8K+vQ+UYBQXaUMWfHMejrFb9wPvrrWvxGYaC+gYmpSoNvFT +nVrt3YkJIOzw7dgsTDoX0eKjvw6/s9Gzy6xAUd5mO9GlSH41WsdjRjwr2YnHC7sBxIWS9UF2vsdh +GYm44Hxq1mIB40RBIwp3WVYGirEMYG/C9/BdkJiLE0Pt4BZmv1BN1Bjx0L5fi2L8A7uXDv+Ql7Au +5ySZJuUHyADlgqHFLPkw2mOfJhAmWAnMK7CjbScPTgMIbsO3YME7jk+P6es581RwpOZiecen5igX +8SxMJFEwG8oUM5FnZXqQLNlMRDAHTaQ1Allwej0HMK0L90nPmc9uQB5n/3vnTMfhAzPpj3Auyyzi +skKMBrbq9SiKr915LgY1/NdiFGXqoVppScrARQRm1XSNfKtTR7ebORSFWOjtIrMrGGVFB0qb+BE8 +RAxGplxqg5EQNbfDIHqpiG4LAA+7bzPr4Niqm8e9WGIhh1ArJP+kXjP4LsTS887AUwFhg+rofP9p +NTiW68DgA7H5LnaQGe8z+Q/WgQvLf0UdI0ky4UV7hI1wpaM5+jquOurRVAd2Z1sp2TlpZ99XoptE +9Q5al+xEqvBZqxD+tvgI8eJwS0smG8Lfte3my/TTaA4Za2a8/+0FUbXYPM1NsTwUC3JN0RmLkgRS +onEjnSyEFW5ICn+S3HjfpJGsKG05MnRERk3yamWTXuIIoDKUiMIY0meIh3F9E2XK9DuumRHk5u9e +OYJuo/I2Lt3CwXNVPr+XxsfEAnu5Q3ueBirLNOYiS4qh4eOTSOue911PwNa88jO5hS4HLAThmMM6 +3v7XfHJO2RBGTes7/yYrJTJ6vfo8mWrWO2UDA0zXrpwcqUr4a+bukqsB6uZcvY0niCqJOmePavq4 +yXIBQwAAG/wjjNluZsFWDS5I1jBnaAOtbBgBzla0yyzp5i7fZwZy+8xUM2Yao4Vr7y95IgQAfCLM +l7S4/lzGvaINDEKihNuGZkmxtjgbUG2uVw3OZ4Je5FOA69e3ldGcvldzMdddUI+k1M1ngt58tFlV +1SWJpsVRxjNTn7PJ/zU4Xdx7ICJ4QR3/W1k2iX56rn//inVBhoM2lllqrYgZF+2ixnBIbk3X5tkd +Vie2MMD44eFFL9XAODa36+Wcfe1rI9H9qmVCOBfNqJLChUXIZb9kMYXi0BYvBuGN8sVgp+HGsro9 +AWvZ9sYTopdJOOGn4N4+DDTDoHkrL/a2+0xCowhVd6cXP8cJ4h6V16h31txl3UnARk9+1dvTfEd5 +yE29A16KA1WSdrFTzz9Iv287UU1ssaKZk7wIek+h1gom0ngNA5zmSirtnwZKJyMUT73gCzgYvgee +oEO8yprUN8Li6OtdPD4+tSivgZdME4w6P8IxtadyB1kXESwU4Yd158zOm5hHBCmVKTYADWV6/fNj +XStpbDxC+UEdUAf7LDd3JFVaDlXzmsRcCN4/2ZctDYzWrUlP+ozwedrPWdmRti+yEqIoAm8HkQZR +E6HUUUxj6bcVAZPHPobgx1P/U4+DYdEtadtSkQXMXUJTbXzal+lIO/j578bT2+i2eYA/rP1gN5d1 +SK9m45gFLmBiDNg2G9p0wDMsakG8CU8YEplPvCXL2yl6NX9E5+DWWjnuC/Nsf1kUNFOVOTTb3s7E +liB4GCBM4MT2/XY/GwWxNjuni5bHsxpU/N4E/1rPJIgYuM+XSDrdW2/Pgcf3KjUwA9IkoGQuL7SF +xOqSTJ3um/6ExnIytOli27cjxdELe3yOu7M9J1FI7GRR2MjG3wnu2xKzisssCLswcoVzpykRinbb +y5O6cg8xqPOG4lQS4YPR7sHJ49aE4O9h6Y/uUWk3jhvF34qnQTdD1nh2ju1fE3Xi6E4unFwd4/+F +ch+K6PRk5Oi1D3LPak06qViIc8Q0FVlBgfvy8TbxqhXXWv8m0n61dZ4fL9QPz6yw8C0VC9KakKh1 +hVcg8/YrQ9f+XIQ3BykCcdYuvNvF1AaYm6ViYkH9QLJsahAaRre8znnMi5a7UIoLpZh/G6L/+RBt +zGb49V5UufaLOdkCxxvqNqNHDUHJx9uU7M9kDVTwRCxyi9teSWdfwym3yM5R1azhKK4JtQ2mEZ70 +AeC4ogNCXEn3UYDmy/0S1DagfPWvR7X6wExg5nSlwvifQL6UGHG24EJAe8zgyGh+BxImIe/SHWj3 +WyUE0SLEN9ZPwS9qYA2PDO+Y5jFYIBqGWuv+kUdoFIg8xKU/kdhmAY2JaHLcNbwZbvfC0ovwwjud +idhgVq85YiKG3DukaMH9wFezeIiNqSsTcMKOu/HDaRD9KBf/+icC9L+XFdqi0+Na4TPehg3mK621 +I3+9hlG4HRqt4uJpb7c+ocMQ4/HnNGhpZu6HVdTRbGykdTqbpLYDXLSTYvSh3KPUbZvfh97wWKHQ +67AgTAQKKuli+hcHC+EInKgtFqik7BvcnUmB5OfH3pV0NhfX0g9weKaebakR+nqpw2hvDJ+F6d83 +2olLKAcVeIlcGJZE9uwpkeva7K1tfa39SYoAEaR5fYW3qFySLPJ4twMIt3BbfYyMFn/mAv7gech5 +erfqjJkqZDBYqZFbXVPhh46A6jlRrxv9LSbzW4ddToKJvIwJGRL7PqOE0Z2TsGFgiUEMq/0nUpCb +lKwGQQ1fXQxZ4CkksqY5+dOcV1EYiNsJ1iAUAmmwCbo+a+UUcF5mqsmAWCYO89FyDbWu49jM8L49 +B2xBn6yHjhsqdsB8BF+Naih5WE41kGuGtMmqgjUYOCB+HwAmYsguM3ffJrLhYPy3LQIWau+3xcgo +vMgOlgKv3whRHyeO/drB/dAztAywe0zkRMt+aT8D6om7Q1NxbnP6DhwAoQQczynsGIAVRh6xeCzV +NfMA99WpqgD6j/dr0ZEFxlrjSRQ3vmHy2uNOJwpbwBggxBT+UoqLCzk5PMB9qZ3g6B4Zt5F5GCsq +aD8XiIJeQFAty8/7B5mKiJHHbvV5xnYpvcMAfPuwo7s06HDjwAWFgcA9LS+F83it9Sz7iOSP3F+2 +CC4soTQbeAMD1gUPmFbhHTwme+7twixVw4we/r47O7MxcbcvrILCNRTUFmsZ9edHqf9A9/Jit2AG +qUPXNFFdtGidR8jgGI1ZtlIPjTw3aiPzRqj9RWB4MhYMajMVoRVEsd6KAK4m4NKcKnkN73BvbgMw +CphRvue2sJY4JIcgyWsvQxg9iHhOfirqlj4XvWsM3Ny5GXQI5SvSdgZqkzRBGu9358MLiybkRcnR +sY1FLbx1yLDSlAsLZ826SLghjn1n7xgGDBFh4QIwLvg26NcpuMkokrwlm8aq+yQ6aYgmtcUfMG== \ No newline at end of file diff --git a/src/Application/Model/d3fileupload_db.php b/src/Application/Model/d3fileupload_db.php new file mode 100644 index 0000000..f55516b --- /dev/null +++ b/src/Application/Model/d3fileupload_db.php @@ -0,0 +1,132 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 +Q/stWvPkcG== \ No newline at end of file diff --git a/src/Application/Model/d3fileupload_file.php b/src/Application/Model/d3fileupload_file.php new file mode 100644 index 0000000..a5200b5 --- /dev/null +++ b/src/Application/Model/d3fileupload_file.php @@ -0,0 +1,226 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 +7+ypRAPd7ami \ No newline at end of file diff --git a/src/Application/Model/d3fileupload_setting.php b/src/Application/Model/d3fileupload_setting.php new file mode 100644 index 0000000..2526294 --- /dev/null +++ b/src/Application/Model/d3fileupload_setting.php @@ -0,0 +1,124 @@ +1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'ionCube')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'get-loader.ioncube.com')." for install assistance.\n\n");exit(199); +?> +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 \ No newline at end of file diff --git a/src/Application/translations/de/d3fileupload_lang.php b/src/Application/translations/de/d3fileupload_lang.php new file mode 100644 index 0000000..f771e75 --- /dev/null +++ b/src/Application/translations/de/d3fileupload_lang.php @@ -0,0 +1,143 @@ + + * @link http://www.oxidmodule.com + */ + +$sLangName = "Deutsch"; + +// ------------------------------- +// RESOURCE IDENTITFIER = STRING +// ------------------------------- +$aLang = array( + + 'charset' => 'UTF-8', + + //EMail Templates + 'D3_MAIL_ORDER_CUST_HTML_INFOTEXT' => "Artikel", + + 'D3_ACCOUNT_ORDER_START_UPLOAD' => "Dateien für diese Bestellung hochladen", + + 'D3_UPLOADMANAGER_HEAD_TITLE' => "Uploadmanager", + 'D3_UPLOADMANAGER_NO_UPLOAD' => "Für die Bestellung %d wurden keine Artikel gefunden, ". + "für die zusätzliche Dateien von Ihnen nötig sind!

    Bitte wenden Sie bei Fragen zu Ihrer Bestellung ". + "telefonisch oder per E-Mail an uns.", + + 'D3_UPLOADMANAGER_ERROR_TITLE' => "Es ist ein Fehler aufgetreten:", + 'D3_UPLOADMANAGER_ERROR_NO_ORDER' => "Zu Ihrer Anfrage konnte keine Bestellung gefunden werden.", + 'D3_UPLOADMANAGER_ERROR_TEXT_BADFILE' => "Sie haben versucht, einen nicht erlaubten Dateityp ". + "hochzuladen.
    Der Vorgang wurde abgebrochen.", + 'D3_UPLOADMANAGER_ERROR_TEXT_TOO_BIG' => "Ihre Datei überschreitet die erlaubte Maximalgröße.", + 'D3_UPLOADMANAGER_ERROR_TEXT_UPLOADDIR_NOT_FOUND' => "Interner Systemfehler.(upload dir not found)". + "
    Bitte informieren Sie den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_NO_PERMISSION' => "Interner Systemfehler. (permission error)
    ". + "Bitte informieren Sie den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_NOT_UPLOADED' => "Ihre Datei konnte nicht erfolgreich auf den Server ". + "geladen werden.
    Bitte versuchen Sie es erneut oder informieren den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_DIR_NOT_FOUND' => "Beim Löschen der Datei ist ein Fehler aufgetreten. ". + "
    Bitte versuchen Sie es erneut oder wenden sich bitte an den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_FILE_NOT_DELETE' => "Beim Löschen der Datei ist ein Fehler aufgetreten. ". + "
    Bitte versuchen Sie es erneut oder wenden sich bitte an den Shopinhaber.", + + 'D3_UPLOADMANAGER_ORDER_TITLE' => "Dateien hochladen für Bestellung Nr.", + 'D3_UPLOADMANAGER_ORDER_DATE' => "Bestellung vom:", + 'D3_UPLOADMANAGER_UPLOAD_PERM' => "Einschränkungen:", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILESIZE' => "maximale Dateigröße", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT_MAX' => "max.", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT' => "Dateien pro Artikel (möglicherweise artikelabhängig)", + 'D3_UPLOADMANAGER_UPLOAD_ALLOWEDFILES' => "nur Dateien vom Typ", + 'D3_UPLOADMANAGER_ARTICLELIST' => "Artikelliste:", + 'D3_UPLOADMANAGER_LIST_FILES' => "Dateien", + 'D3_UPLOADMANAGER_LIST_INFO' => "", + 'D3_UPLOADMANAGER_LIST_SIZE' => "Größe", + 'D3_UPLOADMANAGER_LIST_DATE' => "Aufladedatum", + 'D3_UPLOADMANAGER_LIST_ARTNUM' => "ArtNr.", + 'D3_UPLOADMANAGER_ITEM_COMMENTBTN' => "?", + 'D3_UPLOADMANAGER_ITEM_YOURCOMMENT' => "Ihre Anmerkung:", + 'D3_UPLOADMANAGER_LIST_NOFILES' => "noch keine Dateien aufgeladen", + 'D3_UPLOADMANAGER_LIST_FILEUPLOAD' => "Datei hochladen:", + 'D3_UPLOADMANAGER_BTN_FILEUPLOAD' => "hochladen", + 'D3_UPLOADMANAGER_ADDCOMMENT_BTN' => "Kommantar hinzufügen", + 'D3_UPLOADMANAGER_FIX_BTN' => "Bestellung fixieren", + 'D3_UPLOADMANAGER_FIX_CONFIRM' => "Möchten Sie die Bestellung fixieren? Änderungen an ". + "den aufgeladenen Dateien sind dann nicht mehr möglich.", + 'D3_UPLOADMANAGER_ISFIXED_MSG' => "Diese Bestellung wurde fixiert. Daher können Sie hier ". + "keine Veränderungen vornehmen. Möchten Sie die Uploaddateien anpassen, wenden Sie sich bitte an den ". + "Shopbetreiber.", + 'D3_UPLOADMANAGER_FIX_MSG' => "Haben Sie alle nötigen Dateien aufgeladen, fixieren ". + "Sie die Bestellung bitte. Sie teilen uns damit mit, dass die aufgeladenen Dateien für uns verbindlich sind. ". + "Wenn Sie diese Bestellung fixieren, können Sie keine weiteren Änderungen an Ihren aufgeladenen Dateien ". + "durchführen. Möchten Sie nach der Fixierung Änderungen vornehmen, kontaktieren Sie uns bitte.", + + 'D3_THANKYOU_UPLOAD' => "Uploadartikel gekauft!", + 'D3_THANKYOU_UPLOAD_INFOTEXT1' => "Sie haben Artikel bestellt, für die noch zusätzliche ". + "Dateien von Ihnen benötigt werden!
    Klicken Sie dazu auf den folgenden Link:", + 'D3_THANKYOU_UPLOAD_BTN' => "Dateien hochladen", + 'D3_THANKYOU_UPLOAD_INFOTEXT2' => "Den Link finden Sie auch noch einmal in der soeben ". + "versendeten Bestellbestätigungsmail und in Ihrem Konto in der Bestellhistorie.", + + 'D3_EMAIL_ORDER_CUST_HTML_UPLOADINFO' => "WICHTIG!

    Sie haben Artikel bestellt, ". + "für die noch zusätzliche Dateien von Ihnen benötigt werden!
    Benutzen Sie dazu den folgenden Link, oder ". + "melden Sie sich im Shop an und nutzen unter "Mein Konto" den Punkt "Bestellhistorie".", + 'D3_EMAIL_ORDER_CUST_HTML_UPLOADBTN' => "[ Dateien hochladen ]", + + 'D3_EMAIL_ORDER_CUST_PLAIN_UPLOADINFO' => 'WICHTIG!\n\nSie haben Artikel bestellt, für die noch ". + "zusätzliche Dateien von Ihnen benötigt werden!\nBenutzen Sie dazu den folgenden Link, oder melden Sie sich ". + "im Shop an und nutzen unter "Mein Konto" den Punkt "Bestellhistorie".', + + 'D3_UPLOADMANAGER_BTN_REMOVE' => "entfernen", + + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_UID' => "unbekannte oder fehlende Benutzerkennung (uid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_OID' => "unbekannte oder fehlende Bestellkennung (oid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_AID' => "unbekannte oder fehlende Artikelkennung (aid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_CONTACTOWNER' => "Bitte wenden Sie sich an den Shopinhaber.", + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOTAVAILABLE' => "Der Upload konnte leider nicht durchgeführt werden. ". + "Wenden Sie sich bitte an den Shopbetreiber.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ARTICLEIDNOTSET' => "Artikel-ID ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ORDERIDNOTSET' => "Order-ID ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILENAMENOTSET' => "Dateiname ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEPOINTERNOTFOUND' => "Upload-Datei konnte nicht gefunden werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_BADFILETYPE' => "Dieser Dateityp kann nicht aufgeladen werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILETOBIG' => "Die Datei ist zu groß.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEDIRNOTAVAILABLE' => "Das Ablageverzeichnis ist nicht verfügbar", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERUPLOADDIR' => "Das Ablageverzeichnis für die Bestellung kann nicht ". + "angelegt werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERARTICLEUPLOADDIR' => "Das Ablageverzeichnis für die bestellten Artikel ". + "kann nicht angelegt werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOALLOWEDEXTENSIONSSET' => "Keine erlaubten Dateierweiterungen eingestellt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTMOVEUPLOADFILES' => "Upload-Dateien können nicht in Zielordner verschoben ". + "werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDELETEFILE' => "Datei kann nicht gelöscht werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CONFIGNOTCOMPLETE' => "Unvollständige Konfiguration", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOUPLOADFILE' => "Fehler beim Aufladen: ", + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR1' => 'Datei ist zu groß (maximale Dateigröße: %1$s).', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR2' => 'Upload konnte nicht abgeschlossen werden.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR3' => 'Die aufgeladenen Datei ist leer.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR4' => 'Der Dateityp kann nicht verwendet werden.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR5' => 'Interner Fehler #%1$s.', + 'D3FILEUPLOAD_ERROR_MESSAGE_CONTACT' => ' Bitte kontaktieren Sie uns.', + 'D3FILEUPLOAD_ERROR_MESSAGE_FILECOUNTREACHED' => "Die Anzahl der möglichen Uploaddateien ist erreicht.", + + 'D3FILEUPLOAD_MAIL_SUBJECT' => 'Datei-Upload Aktualisierungsbenachrichtigung', + 'D3FILEUPLOAD_MAIL_FROM' => 'Datei-Upload Aktualisierungsbenachrichtigung vom', + 'D3FILEUPLOAD_MAIL_FIXEDORDERS' => 'Diese Bestellungs-Uploads wurden seit der letzten '. + 'Benachrichtigung fixiert:', + 'D3FILEUPLOAD_MAIL_UPLOADORDERS' => 'Für diese Bestellungen wurden seit der letzten '. + 'Benachrichtigung neue Dateien aufgeladen:', + 'D3FILEUPLOAD_MAIL_ORDERNR' => 'Bestell-Nr.:', + 'D3FILEUPLOAD_MAIL_ORDERFROM' => 'vom', + + 'D3_FILEUPLOAD_IDENT1' => 'Datei für Seite 1', +); diff --git a/src/Application/translations/en/d3fileupload_lang.php b/src/Application/translations/en/d3fileupload_lang.php new file mode 100644 index 0000000..70ad254 --- /dev/null +++ b/src/Application/translations/en/d3fileupload_lang.php @@ -0,0 +1,124 @@ + + * @link http://www.oxidmodule.com + */ + +$sLangName = "English"; + +// ------------------------------- +// RESOURCE IDENTITFIER = STRING +// ------------------------------- +$aLang = array( + + 'charset' => 'UTF-8', + + //EMail Templates + 'D3_MAIL_ORDER_CUST_HTML_INFOTEXT' => "article", + + 'D3_ACCOUNT_ORDER_START_UPLOAD' => "Upload files for this order", + + 'D3_UPLOADMANAGER_HEAD_TITLE' => "Upload Manager", + 'D3_UPLOADMANAGER_NO_UPLOAD' => "For the order %d no articles were found, ". + "for which additional files of you are necessary!

    If you have questions about your order, please contact us by phone or e-mail.", + + 'D3_UPLOADMANAGER_ERROR_TITLE' => "An error has occurred:", + 'D3_UPLOADMANAGER_ERROR_NO_ORDER' => "No order could be found for your request.", + 'D3_UPLOADMANAGER_ERROR_TEXT_BADFILE' => "You tried to upload an unauthorized file type.
    The process was canceled.", + 'D3_UPLOADMANAGER_ERROR_TEXT_TOO_BIG' => "Your file exceeds the maximum allowed size.", + 'D3_UPLOADMANAGER_ERROR_TEXT_UPLOADDIR_NOT_FOUND' => "Internal system error.(upload dir not found)". + "
    Bitte informieren Sie den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_NO_PERMISSION' => "Internal system error. (permission error)
    ". + "Bitte informieren Sie den Shopinhaber.", + 'D3_UPLOADMANAGER_ERROR_TEXT_NOT_UPLOADED' => "Your file could not be successfully loaded on the server.
    Please try again or inform the shop owner.", + 'D3_UPLOADMANAGER_ERROR_TEXT_DIR_NOT_FOUND' => "An error occurred while deleting the file. ". + "
    Please try again or inform the shop owner.", + 'D3_UPLOADMANAGER_ERROR_TEXT_FILE_NOT_DELETE' => "An error occurred while deleting the file. ". + "
    Please try again or inform the shop owner.", + + 'D3_UPLOADMANAGER_ORDER_TITLE' => "Upload files for order no.", + 'D3_UPLOADMANAGER_ORDER_DATE' => "Order from:", + 'D3_UPLOADMANAGER_UPLOAD_PERM' => "limitations:", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILESIZE' => "maximum file size", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT_MAX' => "max.", + 'D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT' => "files per article (possibly article-dependent)", + 'D3_UPLOADMANAGER_UPLOAD_ALLOWEDFILES' => "only files of the type", + 'D3_UPLOADMANAGER_ARTICLELIST' => "Product list:", + 'D3_UPLOADMANAGER_LIST_FILES' => "files", + 'D3_UPLOADMANAGER_LIST_INFO' => "", + 'D3_UPLOADMANAGER_LIST_SIZE' => "size", + 'D3_UPLOADMANAGER_LIST_DATE' => "upload date", + 'D3_UPLOADMANAGER_LIST_ARTNUM' => "Item No.", + 'D3_UPLOADMANAGER_ITEM_COMMENTBTN' => "?", + 'D3_UPLOADMANAGER_ITEM_YOURCOMMENT' => "Your comment:", + 'D3_UPLOADMANAGER_LIST_NOFILES' => "no files loaded yet", + 'D3_UPLOADMANAGER_LIST_FILEUPLOAD' => "Upload file:", + 'D3_UPLOADMANAGER_BTN_FILEUPLOAD' => "upload", + 'D3_UPLOADMANAGER_ADDCOMMENT_BTN' => "add comment", + 'D3_UPLOADMANAGER_FIX_BTN' => "Fix order", + 'D3_UPLOADMANAGER_FIX_CONFIRM' => "Would you like to fix the order? Changes to the uploaded files are then no longer possible.", + 'D3_UPLOADMANAGER_ISFIXED_MSG' => "This order has been fixed. Therefore, you can not make any changes here. If you would like to adapt the upload files, please contact the shop owner.", + 'D3_UPLOADMANAGER_FIX_MSG' => "If you have loaded all the necessary files, please fix the order. They tell us that the uploaded files are not changed anymore. ". + "If you freeze this order, you will not be able to make any changes to your uploaded files. If you would like to make changes after fixing, please contact us.", + + 'D3_THANKYOU_UPLOAD' => "Purchased upload items!", + 'D3_THANKYOU_UPLOAD_INFOTEXT1' => "You have ordered items that require additional files from you!
    Click on the following link:", + 'D3_THANKYOU_UPLOAD_BTN' => "Upload files", + 'D3_THANKYOU_UPLOAD_INFOTEXT2' => "The link can be found again in the order confirmation email just sent and in your account in the order history.", + + 'D3_EMAIL_ORDER_CUST_HTML_UPLOADINFO' => "IMPORTANT!

    You have ordered items that require additional files from you!
    Use the following link, or log in to the shop and use under "My account" the page "order history".", + 'D3_EMAIL_ORDER_CUST_HTML_UPLOADBTN' => "[ Upload files ]", + + 'D3_EMAIL_ORDER_CUST_PLAIN_UPLOADINFO' => 'IMPORTANT!\n\nYou have ordered items that require additional files from you!\nUse the following link, or log in to the shop and use under "My account" the page "order history".', + + 'D3_UPLOADMANAGER_BTN_REMOVE' => "remove", + + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_UID' => "unknown or missing user ID (uid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_OID' => "unknown or missing order ID (oid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_WRONG_PARAMS_AID' => "unknown or missing article ID (aid)", + 'D3FILESUPLOAD_ERROR_MESSAGE_CONTACTOWNER' => "Please contact the shop owner.", + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOTAVAILABLE' => "The upload could not be done unfortunately. ". + "Please contact the shop owner.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ARTICLEIDNOTSET' => "Article ID is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ORDERIDNOTSET' => "Order ID is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILENAMENOTSET' => "File name is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEPOINTERNOTFOUND' => "Upload file could not be found.", + 'D3FILEUPLOAD_ERROR_MESSAGE_BADFILETYPE' => "This file type can not be loaded.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILETOBIG' => "The file is too big.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEDIRNOTAVAILABLE' => "The storage directory is not available", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERUPLOADDIR' => "The storage directory for the order can not be created.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERARTICLEUPLOADDIR' => "The storage directory for the ordered items can not be created.", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOALLOWEDEXTENSIONSSET' => "No allowed file extensions set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTMOVEUPLOADFILES' => "Upload files can not be moved to destination folder.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDELETEFILE' => "File can not be deleted.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CONFIGNOTCOMPLETE' => "Incomplete configuration", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOUPLOADFILE' => "Error while upload: ", + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR1' => 'File is too big (maximum file size %1$s).', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR2' => 'Upload could not be completed.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR3' => 'The loaded file is empty.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR4' => 'The file type can not be used.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR5' => 'Internal error #%1$s.', + 'D3FILEUPLOAD_ERROR_MESSAGE_CONTACT' => ' Please contact us.', + 'D3FILEUPLOAD_ERROR_MESSAGE_FILECOUNTREACHED' => "The number of possible upload files has been reached.", + + 'D3FILEUPLOAD_MAIL_SUBJECT' => 'File upload update notification', + 'D3FILEUPLOAD_MAIL_FROM' => 'File upload update notification from', + 'D3FILEUPLOAD_MAIL_FIXEDORDERS' => 'These order uploads have been fixed since the last notification:', + 'D3FILEUPLOAD_MAIL_UPLOADORDERS' => 'For these orders, new files have been loaded since the last notification:', + 'D3FILEUPLOAD_MAIL_ORDERNR' => 'Order no.:', + 'D3FILEUPLOAD_MAIL_ORDERFROM' => 'from', + + 'D3_FILEUPLOAD_IDENT1' => 'File for page 1', +); diff --git a/src/Application/views/admin/blocks/admin_article_main_form.tpl b/src/Application/views/admin/blocks/admin_article_main_form.tpl new file mode 100644 index 0000000..4e3101c --- /dev/null +++ b/src/Application/views/admin/blocks/admin_article_main_form.tpl @@ -0,0 +1,55 @@ +[{$smarty.block.parent}] + +[{d3modcfgcheck modid="d3fileupload"}][{/d3modcfgcheck}] + +[{block name="d3fileupload_admin_article_main_form"}] + [{if $mod_d3fileupload}] +
    + [{if $edit->isVariant() && $oModCfg_d3fileupload->getValue('blVariantInheritUpload')}] + [{assign var="d3ReadonlyInheritance" value="readonly disabled"}] + [{else}] + [{assign var="d3ReadonlyInheritance" value=""}] + [{/if}] + + + + + + + + + + + + + [{/if}] + [{assign var="sConfirmMessage" value="D3_ARTICLE_MAIN_DEACTIVATE_CONFIRM"|oxmultilangassign}] + [{oxscript add="function ahowhideartdepupload(blchecked) { + if (blchecked) { + document.getElementById('d3fileuploads_element').style.display = 'table-row'; + } else { + if (confirm('$sConfirmMessage')) { + document.getElementById('d3fileuploads_element').style.display = 'none'; + document.getElementById('d3fileuploads').value = ''; + } else { + document.getElementById('d3toggle').checked = 'checked'; + } + } + }"}] +[{/block}] \ No newline at end of file diff --git a/src/Application/views/admin/de/d3fileupload_lang.php b/src/Application/views/admin/de/d3fileupload_lang.php new file mode 100644 index 0000000..4b38cf5 --- /dev/null +++ b/src/Application/views/admin/de/d3fileupload_lang.php @@ -0,0 +1,166 @@ + + * @link http://www.oxidmodule.com + */ + +$sLangName = "Deutsch"; + +// ------------------------------- +// RESOURCE IDENTITFIER = STRING +// ------------------------------- +$aLang = array( + + 'charset' => 'UTF-8', + + 'd3fileupload_TRANSL' => 'Fileupload', + 'd3fileupload_HELPLINK' => 'Fileupload/', + + //ModCfg + 'd3mxfileupload' => ' FileUpload', + 'd3cfgfileupload' => 'Konfiguration', + + 'd3tbclfileupload_settings_main' => 'Konfiguration', + 'd3mxfileupload_settings' => 'Konfiguration', + 'd3mxfileupload_support' => 'Support', + + 'D3_CFG_MOD_d3fileupload_MODULEACTIVE' => 'Modul aktiv', + 'D3_CFG_d3fileupload_GENERAL_DEBUGACTIVE' => 'Debug-Modus', + 'D3_CFG_d3fileupload_TEST_MODUS' => 'Test-Modus', + + 'D3_CFG_MOD_d3fileupload_SETTINGS' => 'Einstellungen', + 'D3_CFG_MOD_d3fileupload_sD3UploadDir' => 'Speicherort', + 'D3_CFG_MOD_d3fileupload_sD3UploadDir_HELP' => 'Relativer Pfad innerhalb des Shopverzeichnisses zum '. + 'Verzeichnis in dem die Uploaddateien gespeichert werden sollen. (Muß Schreib- und Leserechte für '. + 'PHP haben!)

    Stellen Sie nach Änderung dieser Angabe sicher, dass das Verzeichnis auch existiert.', + + 'D3_CFG_MOD_d3fileupload_sD3UploadPermDir' => 'Verzeichnisrechte', + 'D3_CFG_MOD_d3fileupload_sD3UploadPermFile' => 'Dateirechte', + 'D3_CFG_MOD_d3fileupload_sD3UploadPerm_HELP' => 'Welche Rechte (Permissions) sollen angelegten '. + 'Verzeichnissen und Dateien gegeben werden?
    Angabe octal -> z.B. "0644"', + + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize' => 'Dateigröße', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_HELP' => 'Maximal erlaubte Groesse einer Upload-Datei '. + '
    Beachten Sie, das die max. Größe generell durch die Servereinstellung '. + '"max_upload_file" begrenzt wird
    Details erfahren Sie von Ihrem Provider', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_SERVER' => 'Serverbeschränkung: ', + + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadFiles' => 'Anzahl der Dateien', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadFiles_HELP' => 'Maximale Anzahl an Dateien, die ein Kunde pro bestellten '. + 'Artikel hochladen darf.', + + 'D3_CFG_MOD_d3fileupload_blVariantInheritUpload' => 'Varianten erben Upload-Status', + 'D3_CFG_MOD_d3fileupload_blVariantInheritUpload_HELP' => 'Wenn der Elternartikel Uploads '. + 'ermöglicht, wird diese Einstellung auch auf alle seine Varianten vererbt. Ist dieser Haken nicht '. + 'gesetzt, erfordert jede Variante eine eigene Einstellung.', + 'D3_CFG_MOD_d3fileupload_aD3AllowedUpladFileExtensions' => 'Dateitypen', + 'D3_CFG_MOD_d3fileupload_aD3AllowedUpladFileExtensions_HELP' => 'Für den Upload erlaubte Dateitypen. '. + 'Dateien mit anderen Dateiendungen werden abgewiesen.
    Achtung! Sie sollten aus Sicherheitsgründen '. + 'folgende Dateitypen nicht erlauben: "php", "jsp", "cgi", "cmf", "exe"', + + 'D3_CFG_MOD_d3fileupload_blAllowFixation' => 'Fixierung anbieten', + 'D3_CFG_MOD_d3fileupload_blAllowFixation_HELP' => 'Mit der Fixierung der Uploads können Ihnen Ihre '. + 'Kunden mitteilen, keine Änderungen mehr an den Uploads vornehmen zu wollen. Die Fixierung lässt '. + 'sich für jede Upload-Bestellung separat setzen. Ist diese aktiviert, hat der Kunde keine '. + 'Möglichkeit mehr, die aufgeladenen Dateien zu verändern oder zu löschen. Ab dann können '. + 'Sie sich auf die Uploads verlassen.

    Ob Bestellungen fixiert sind, sehen Sie im Adminbereich an der '. + 'jeweiligen Bestellung. Dort können Sie die Fixierung bei Bedarf auch wieder aufheben bzw. diese selbst '. + 'setzen. Sofern Sie die regelmäßigen Mailinformationen per Cronjob aktiviert haben, werden Sie '. + 'darin auch über die fixierten Bestellungen informiert.', + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOTAVAILABLE' => "Der Upload konnte leider nicht durchgeführt werden. ". + "Wenden Sie sich bitte an den Shopbetreiber.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ARTICLEIDNOTSET' => "Artikel-ID ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ORDERIDNOTSET' => "Order-ID ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILENAMENOTSET' => "Dateiname ist nicht gesetzt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEPOINTERNOTFOUND' => "Upload-Datei konnte nicht gefunden werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_BADFILETYPE' => "Dieser Dateityp kann nicht aufgeladen werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILETOBIG' => "Die Datei ist zu groß.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEDIRNOTAVAILABLE' => "Das Ablageverzeichnis ist nicht verfügbar", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERUPLOADDIR' => "Das Ablageverzeichnis für die Bestellung kann nicht ". + "angelegt werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERARTICLEUPLOADDIR' => "Das Ablageverzeichnis für die bestellten Artikel ". + "kann nicht angelegt werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOALLOWEDEXTENSIONSSET' => "Keine erlaubten Dateierweiterungen eingestellt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTMOVEUPLOADFILES' => "Upload-Dateien können nicht in Zielordner verschoben ". + "werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDELETEFILE' => "Datei kann nicht gelöscht werden.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CONFIGNOTCOMPLETE' => "Unvollständige Konfiguration", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOUPLOADFILE' => "Fehler beim Aufladen: ", + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR1' => 'Datei ist zu groß (maximale Dateigröße: %1$s).', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR2' => 'Upload konnte nicht abgeschlossen werden.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR3' => 'Die aufgeladenen Datei ist leer.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR4' => 'Der Dateityp kann nicht verwendet werden.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR5' => 'Interner Fehler #%1$s.', + 'D3FILEUPLOAD_ERROR_MESSAGE_CONTACT' => ' Bitte kontaktieren Sie uns.', + 'D3FILEUPLOAD_ERROR_MESSAGE_FILECOUNTREACHED' => "Die Anzahl der möglichen Uploaddateien ist erreicht.", + + 'D3_FILEUPLOAD_SET_CRON' => 'Cronjob', + 'D3_FILEUPLOAD_SET_CRON_DESC' => 'Bei der Ausführung des Cronjobs werden dem Shopbetreiber regelmäßig informatorische Mails zum Status der Uploadbestellungen gesendet. Darin finden Sie eine Auflistung aller neu fixierten Bestellungen sowie Bestellungen, bei denen es Veränderungen der Uploads gab.', + 'D3_FILEUPLOAD_SET_CRON_ACTIVE' => 'Cronjob aktiv', + 'D3_FILEUPLOAD_SET_CRON_MAXORDERCNT' => 'max. Anzahl an Bestellungen pro Cron-Durchlauf', + 'D3_FILEUPLOAD_SET_CRON_PASSWORD' => 'Zugriffspasswort', + 'D3_FILEUPLOAD_SET_CRON_EXTLINK' => 'externer Link', + 'D3_FILEUPLOAD_SET_CRON_EXTLINK_DESC' => 'Möchten Sie den Cronjob manuell im Browser '. + 'ausführen, verwenden Sie diesen Link.', + 'D3_FILEUPLOAD_SET_CRON_CRONLINK' => 'URL für Cronjobeinstellung', + 'D3_FILEUPLOAD_SET_CRON_CRONLINK_DESC' => 'Setzen Sie diesen Link im Cronjob. Die zusätzlichen '. + 'Parameter sind hier nicht nötig, da das Cronjobscript selbst feststellen kann, ob die Ausführung '. + 'berechtigt ist. Richten Sie den Cronjob in einem Zeitabstand ein, dass alle auflaufenden Bestellungen '. + 'abgearbeitet werden können. Sie können dessen Ausführung auch mehrmals am Tag starten.', + 'D3_FILEUPLOAD_SET_CRON_LASTEXEC' => 'letzte Ausführung', + + 'D3_CFG_MOD_d3fileupload_MAIN_SAVE' => 'speichern', + + //Tab + 'd3tbclorder_upload' => 'D³ FileUpload', + + //Templates + 'D3_ARTICLE_MAIN_ISUPLOAD' => 'D³ Upload nach Bestellung nötig', + 'D3_ARTICLE_MAIN_ISUPLOAD_DESC' => 'Setzen Sie diesen Haken, wenn Ihr Kunde für diesen gekauften Artikel Dateien aufladen können soll. Der Upload-Bereich des Kunden befindet sich im "Mein Konto"-Bereich und wird auf der Bestellabschlussseite gesondert erwähnt.

    Ist dieses Feld nicht editierbar, haben Sie eventuell die Vererbung vom Elternartikel aktiviert.', + 'D3_ARTICLE_MAIN_ARTICLEDEPENDEND' => 'D³ artikelabhängige Uploads', + 'D3_ARTICLE_MAIN_ARTICLEDEPENDEND_DESC' => 'Die grundsätzlichen Uploadeinstellungen legen Sie in den Moduleinstellungen fest. Möchten Sie für diesen Artikel eine abweichende Anzahl Uploads vorgeben oder diese thematisch sortieren, aktivieren Sie diese Option und pflegen die daraus folgenden Einstellungen.

    Ist dieses Feld nicht editierbar, haben Sie eventuell die Vererbung vom Elternartikel aktiviert.', + 'D3_ARTICLE_MAIN_UPLOADS' => 'D³ Uploads', + 'D3_ARTICLE_MAIN_UPLOADS_DESC' => 'Tragen Sie hier den Titel für jeden gewünschten Upload ein. Setzen Sie jeden Titel in eine neue Zeile. Der Kunde kann für jeden Eintrag (jede Zeile) eine Datei aufladen. Sie können den Titel im Klartext hinterlegen. Alternativ können Sie ebenfalls Idents von Sprachbausteinen verwenden, um die Titel mehrsprachig zu nutzen. Nutzen Sie in Ihren Titeln bitte kein Pipe-Zeichen "|".

    Ist dieses Feld nicht editierbar, haben Sie eventuell die Vererbung vom Elternartikel aktiviert.', + 'D3_ARTICLE_MAIN_DEACTIVATE_CONFIRM' => 'Sollen die Uploadeinstellungen gelöscht werden?', + + 'D3_ORDER_UPLOAD_FILETITLE' => 'Datei(en)', + 'D3_ORDER_UPLOAD_COMMENT' => 'Kommentar', + 'D3_ORDER_UPLOAD_FILESIZE' => 'Dateigröße', + 'D3_ORDER_UPLOAD_DOWNLOAD' => 'Download', + 'D3_ORDER_UPLOAD_DELETE' => 'Löschen', + 'D3_ORDER_UPLOAD_DIR' => 'Speicherort:', + 'D3_ORDER_UPLOAD_DELETECONFIRM' => 'Soll die Datei wirklich gelöscht werden?', + 'D3_ORDER_UPLOAD_NOFILEUPLOADED' => 'Für diesen Artikel wurde noch keine Datei aufgeladen.', + + 'D3_FILEUPLOAD_METADATA_TITLE' => 'D³ Fileupload', + 'D3_FILEUPLOAD_METADATA_DESC' => 'Dieses Modul stellt für den OXID eShop einen '. + 'Uploadmanager für den Kunden nach dem Bestellvorgang bereit.', + 'D3_FILEUPLOAD_METADATA_AUTHOR' => 'D³ Data Development, Inh. Thomas Dartsch', + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOUPLOADFILE' => "Es wurde keine Datei zum Upload ausgewählt.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDOWNLOADFILE' => "Dateidownload nicht möglich.", + 'D3FILEUPLOAD_FIXEDORDER_OK' => "Die Bestellung wurde fixiert. Der Kunde kann keine ". + "Dateien verändern.", + 'D3FILEUPLOAD_FIXEDORDER_NOK' => "Die Bestellung ist nicht fixiert. Der Kunde kann die ". + "Dateien jederzeit anpassen.", + 'D3FILEUPLOAD_FIXORDER_BTN' => "Upload sperren", + 'D3FILEUPLOAD_UNFIXORDER_BTN' => "Upload entsperren", + + 'D3FILEUPLOAD_UPDATE_UPLOADDIR' => 'Die Uploaddateien werden zentral auf Ihrem Server gespeichert. Bitte legen Sie den Ordner "%1$s" dafür an.', + + 'D3FILEUPLOAD_EXC_NOTACTIVE' => "FileUpload-Modul ist deaktiviert.", + + 'D3_FILEUPLOAD_IDENT1' => 'Datei für Seite 1', +); diff --git a/src/Application/views/admin/en/d3fileupload_lang.php b/src/Application/views/admin/en/d3fileupload_lang.php new file mode 100644 index 0000000..88278e6 --- /dev/null +++ b/src/Application/views/admin/en/d3fileupload_lang.php @@ -0,0 +1,139 @@ + + * @link http://www.oxidmodule.com + */ + +$sLangName = "English"; + +// ------------------------------- +// RESOURCE IDENTITFIER = STRING +// ------------------------------- +$aLang = array( + + 'charset' => 'UTF-8', + + 'd3fileupload_TRANSL' => 'Fileupload', + 'd3fileupload_HELPLINK' => 'Fileupload/', + + //ModCfg + 'd3mxfileupload' => ' FileUpload', + 'd3cfgfileupload' => 'Settings', + + 'd3tbclfileupload_settings_main' => 'Settings', + 'd3mxfileupload_settings' => 'Settings', + 'd3mxfileupload_support' => 'Support', + + 'D3_CFG_MOD_d3fileupload_MODULEACTIVE' => 'module active', + 'D3_CFG_d3fileupload_GENERAL_DEBUGACTIVE' => 'Debug-Modus', + 'D3_CFG_d3fileupload_TEST_MODUS' => 'Test-Modus', + + 'D3_CFG_MOD_d3fileupload_SETTINGS' => 'Settings', + 'D3_CFG_MOD_d3fileupload_sD3UploadDir' => 'storage location', + 'D3_CFG_MOD_d3fileupload_sD3UploadDir_HELP' => 'Relative path within the shop directory to the directory in which the upload files are to be stored. (Must have read and write permissions for PHP!)

    After changing this, make sure the directory exists.', + + 'D3_CFG_MOD_d3fileupload_sD3UploadPermDir' => 'directory permissions', + 'D3_CFG_MOD_d3fileupload_sD3UploadPermFile' => 'file permissions', + 'D3_CFG_MOD_d3fileupload_sD3UploadPerm_HELP' => 'Which permissions should be set to created directories and files?
    Specification octal -> e.g. "0644"', + + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize' => 'file size', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_HELP' => 'Maximum allowed size of an upload file '. + '
    Note that the maximum size is generally limited by the server setting "max_upload_file".
    For details, please contact your provider.', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_SERVER' => 'server limitation: ', + + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadFiles' => 'Number of files', + 'D3_CFG_MOD_d3fileupload_iD3MaxUploadFiles_HELP' => 'Maximum number of files that a customer can upload per ordered item.', + + 'D3_CFG_MOD_d3fileupload_blVariantInheritUpload' => 'Variants inherit upload status', + 'D3_CFG_MOD_d3fileupload_blVariantInheritUpload_HELP' => 'If the parent article allows uploads, this setting will be inherited by all its variants. If this checkbox is not set, each variant requires its own setting.', + 'D3_CFG_MOD_d3fileupload_aD3AllowedUpladFileExtensions' => 'allowed file types', + 'D3_CFG_MOD_d3fileupload_aD3AllowedUpladFileExtensions_HELP' => 'Uploaded file types allowed. Files with other file extensions will be rejected.
    Attention! For security reasons, you should not allow the following file types: php, jsp, cgi, cmf, exe', + + 'D3_CFG_MOD_d3fileupload_blAllowFixation' => 'Offer fixation', + 'D3_CFG_MOD_d3fileupload_blAllowFixation_HELP' => 'By fixing the uploads, your customers can inform you that they no longer want to make any changes to the uploads. The fixation can be set separately for each upload order. If this is activated, the customer no longer has the option of modifying or deleting the uploaded files. From then you can rely on the uploads.

    Whether orders are fixed, you can see in the admin area to the respective order. If necessary, you can also cancel the fixation there or set it yourself. If you have activated the regular mail information via cronjob, you will also be informed about the fixed purchase orders.', + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOTAVAILABLE' => "The upload could not be done unfortunately. ". + "Wenden Sie sich bitte an den Shopbetreiber.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ARTICLEIDNOTSET' => "Article ID is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_ORDERIDNOTSET' => "Order ID is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILENAMENOTSET' => "File name is not set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEPOINTERNOTFOUND' => "Upload file could not be found.", + 'D3FILEUPLOAD_ERROR_MESSAGE_BADFILETYPE' => "This file type can not be loaded.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILETOBIG' => "The file is too big.", + 'D3FILEUPLOAD_ERROR_MESSAGE_FILEDIRNOTAVAILABLE' => "The storage directory is not available", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERUPLOADDIR' => "The storage directory for the order can not be created.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTCREATEORDERARTICLEUPLOADDIR' => "The storage directory for the ordered items can not be created.", + 'D3FILEUPLOAD_ERROR_MESSAGE_NOALLOWEDEXTENSIONSSET' => "No allowed file extensions set.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTMOVEUPLOADFILES' => "Upload files can not be moved to destination folder.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDELETEFILE' => "File can not be deleted.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CONFIGNOTCOMPLETE' => "Incomplete configuration", + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR1' => 'File is too big (maximum file size: %1$s).', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR2' => 'Upload could not be completed.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR3' => 'The loaded file is empty.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR4' => 'The file type can not be used.', + 'D3FILEUPLOAD_ERROR_MESSAGE_ERR5' => 'Internal error #%1$s.', + 'D3FILEUPLOAD_ERROR_MESSAGE_CONTACT' => ' Please contact us.', + 'D3FILEUPLOAD_ERROR_MESSAGE_FILECOUNTREACHED' => "The number of possible upload files has been reached.", + + 'D3_FILEUPLOAD_SET_CRON' => 'Cronjob', + 'D3_FILEUPLOAD_SET_CRON_DESC' => 'During the execution of the cronjob the shop operator is regularly sent informative mails about the status of the upload orders. In it you will find a list of all newly fixed orders as well as orders with changes of the uploads.', + 'D3_FILEUPLOAD_SET_CRON_ACTIVE' => 'Cronjob active', + 'D3_FILEUPLOAD_SET_CRON_MAXORDERCNT' => 'max. number of orders per cron run', + 'D3_FILEUPLOAD_SET_CRON_PASSWORD' => 'Access password', + 'D3_FILEUPLOAD_SET_CRON_EXTLINK' => 'external link', + 'D3_FILEUPLOAD_SET_CRON_EXTLINK_DESC' => 'If you would like to manually run the cronjob in the browser, use this link.', + 'D3_FILEUPLOAD_SET_CRON_CRONLINK' => 'URL for cron job setting', + 'D3_FILEUPLOAD_SET_CRON_CRONLINK_DESC' => 'Put this link in the cron job. The additional parameters are not necessary here, since the cronjobscript can determine for itself whether the execution is justified. Set up the cron job at a time interval so that all incoming orders can be processed. You can also start its execution several times a day.', + 'D3_FILEUPLOAD_SET_CRON_LASTEXEC' => 'last execution', + + 'D3_CFG_MOD_d3fileupload_MAIN_SAVE' => 'save', + + //Tab + 'd3tbclorder_upload' => 'D³ FileUpload', + + //Templates + 'D3_ARTICLE_MAIN_ISUPLOAD' => 'D³ Upload to order is required', + 'D3_ARTICLE_MAIN_ISUPLOAD_DESC' => 'Check this box if your customer should be able to load files for this purchased item. The customer\'s upload section is located in the "My Account" section and will be mentioned separately on the order completion page.

    If this field is not editable, you may have activated inheritance from the parent article.', + 'D3_ARTICLE_MAIN_ARTICLEDEPENDEND' => 'D³ article-dependent uploads', + 'D3_ARTICLE_MAIN_ARTICLEDEPENDEND_DESC' => 'The basic upload settings are defined in the module settings. If you would like to specify a different number of uploads for this article or sort them by topic, activate this option and maintain the following settings.

    If this field is not editable, you may have activated inheritance from the parent article.', + 'D3_ARTICLE_MAIN_UPLOADS' => 'D³ Uploads', + 'D3_ARTICLE_MAIN_UPLOADS_DESC' => 'Enter the title for each upload you want. Put each title in a new line. The customer can load a file for each entry (each line). You can deposit the title in plain text. Alternatively, you can also use language module idents to multilingual the titles. Please do not use a pipe character "|" in your titles.

    If this field is not editable, you may have activated inheritance from the parent article.', + 'D3_ARTICLE_MAIN_DEACTIVATE_CONFIRM' => 'Do you want to delete the upload settings?', + + 'D3_ORDER_UPLOAD_FILETITLE' => 'file(s)', + 'D3_ORDER_UPLOAD_COMMENT' => 'comment', + 'D3_ORDER_UPLOAD_FILESIZE' => 'file size', + 'D3_ORDER_UPLOAD_DOWNLOAD' => 'download', + 'D3_ORDER_UPLOAD_DELETE' => 'delete', + 'D3_ORDER_UPLOAD_DIR' => 'location:', + 'D3_ORDER_UPLOAD_DELETECONFIRM' => 'Do you really want to delete the file?', + 'D3_ORDER_UPLOAD_NOFILEUPLOADED' => 'No file has been uploaded for this item yet.', + + 'D3_FILEUPLOAD_METADATA_TITLE' => 'D³ Fileupload', + 'D3_FILEUPLOAD_METADATA_DESC' => 'This module provides the OXID eShop with an upload manager for the customer after the order process.', + 'D3_FILEUPLOAD_METADATA_AUTHOR' => 'D³ Data Development, owner: Thomas Dartsch', + + 'D3FILEUPLOAD_ERROR_MESSAGE_NOUPLOADFILE' => "No file was selected for upload.", + 'D3FILEUPLOAD_ERROR_MESSAGE_CANTDOWNLOADFILE' => "File download not possible.", + 'D3FILEUPLOAD_FIXEDORDER_OK' => "The order has been fixed. The customer can not change any files.", + 'D3FILEUPLOAD_FIXEDORDER_NOK' => "The order is not fixed. The customer can adapt the files at any time.", + 'D3FILEUPLOAD_FIXORDER_BTN' => "Fix order", + 'D3FILEUPLOAD_UNFIXORDER_BTN' => "Unfix order", + + 'D3FILEUPLOAD_UPDATE_UPLOADDIR' => 'The upload files are stored centrally on your server. Please create the folder "%1$s" for it.', + + 'D3FILEUPLOAD_EXC_NOTACTIVE' => "FileUpload module is disabled.", + + 'D3_FILEUPLOAD_IDENT1' => 'File for page 1', +); diff --git a/src/Application/views/admin/tpl/d3fileupload_orderupload.tpl b/src/Application/views/admin/tpl/d3fileupload_orderupload.tpl new file mode 100644 index 0000000..e257e7c --- /dev/null +++ b/src/Application/views/admin/tpl/d3fileupload_orderupload.tpl @@ -0,0 +1,172 @@ +[{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}] + +[{if $readonly}] + [{assign var="readonly" value="readonly disabled"}] +[{else}] + [{assign var="readonly" value=""}] +[{/if}] + + + + + [{$oViewConf->getHiddenSid()}] + + + + +[{block name="d3fileupload_orderupload_main"}] + [{block name="d3fileupload_orderupload_fixation"}] + [{if $oView->hasFixation()}] + [{if $oView->orderIsFixed()}] +
    +
    + [{oxmultilang ident="D3FILEUPLOAD_FIXEDORDER_OK"}] +
    +
    +
    + [{$oViewConf->getHiddenSid()}] + + + + + +
    +
    + [{else}] +
    +
    + [{oxmultilang ident="D3FILEUPLOAD_FIXEDORDER_NOK"}] +
    +
    +
    + [{$oViewConf->getHiddenSid()}] + + + + + +
    +
    + [{/if}] + [{/if}] + [{/block}] + + [{block name="d3fileupload_orderupload_filelist"}] +
    + + + + getFieldData('d3isupload') == 1}]checked[{/if}] [{$readonly}] [{$d3ReadonlyInheritance}]> + [{oxinputhelp ident="D3_ARTICLE_MAIN_ISUPLOAD_DESC"}] +
    + + + getFieldData('d3fileuploads')}]checked="checked"[{/if}] [{$readonly}] [{$d3ReadonlyInheritance}]> + [{oxinputhelp ident="D3_ARTICLE_MAIN_ARTICLEDEPENDEND_DESC"}] +
    + + + + [{oxinputhelp ident="D3_ARTICLE_MAIN_UPLOADS_DESC"}] +
    + + + + + + + + + + + + + + + + + + + + [{assign var="blWhite" value=""}] + [{foreach from=$edit->getOrderArticles() item="listitem" name="orderArticles"}] + [{if $listitem->getFieldData('d3isupload') && $listitem->getFieldData('oxstorno') != 1}] + [{assign var="aUploadFiles" value=$oView->getUploadFiles($listitem->getId())}] + [{assign var="listclass" value="listitem"|cat:$blWhite}] + [{if $aUploadFiles}] + [{foreach from=$aUploadFiles name="uploads" item="upload"}] + + [{if $smarty.foreach.uploads.first}] + + + [{/if}] + + + + + + + [{/foreach}] + + + + [{else}] + + + + + + [{/if}] + [{if $blWhite == "2"}] + [{assign var="blWhite" value=""}] + [{else}] + [{assign var="blWhite" value="2"}] + [{/if}] + [{/if}] + [{/foreach}] +
    [{oxmultilang ident="GENERAL_ITEMNR"}][{oxmultilang ident="GENERAL_TITLE"}][{oxmultilang ident="D3_ORDER_UPLOAD_FILETITLE"}][{oxmultilang ident="D3_ORDER_UPLOAD_COMMENT"}][{oxmultilang ident="D3_ORDER_UPLOAD_FILESIZE"}][{oxmultilang ident="D3_ORDER_UPLOAD_DOWNLOAD"}][{oxmultilang ident="D3_ORDER_UPLOAD_DELETE"}]
    [{$listitem->getFieldData('oxartnum')}][{$listitem->getFieldData('oxtitle')|string_format:"%.20s"|strip_tags}] + [{if $upload->sUploadId}] + [{oxmultilang ident=$upload->sUploadId noerror=true}]:
    + [{/if}] + [{$upload->sFilename}] +
    (vom [{$upload->sFileCTime|date_format:"%m.%d.%Y, %T"}]) +
    + [{$upload->sComment}] + + [{$upload->sFilesize}] + +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + + +
    +
    +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + + + +
    +
    + [{oxmultilang ident="D3_ORDER_UPLOAD_DIR"}] [{$oView->getUploadDir()}]/[{$edit->getId()}]/[{$listitem->getId()}]/ +
    [{$listitem->getFieldData('oxartnum')}][{$listitem->getFieldData('oxtitle')|string_format:"%.20s"|strip_tags}] + [{oxmultilang ident="D3_ORDER_UPLOAD_NOFILEUPLOADED"}] +
    + [{/block}] +[{/block}] + +[{include file="d3_cfg_mod_inc.tpl"}] \ No newline at end of file diff --git a/src/Application/views/admin/tpl/d3fileupload_settings.tpl b/src/Application/views/admin/tpl/d3fileupload_settings.tpl new file mode 100644 index 0000000..ca8f022 --- /dev/null +++ b/src/Application/views/admin/tpl/d3fileupload_settings.tpl @@ -0,0 +1,336 @@ +[{include file="headitem.tpl" title="D3_CFG_MOD"|oxmultilangassign}] + + + + + +[{if $readonly}] + [{assign var="readonly" value="readonly disabled"}] +[{else}] + [{assign var="readonly" value=""}] +[{/if}] + +
    + [{$oViewConf->getHiddenSid()}] + + + + +
    + +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + + [{block name="d3fileupload_settings_main"}] + + + + [{/block}] +
    + + [{include file="d3_cfg_mod_active.tpl"}] + + [{if $oView->getValueStatus() == 'error'}] + [{oxmultilang ident="D3_CFG_MOD_GENERAL_NOCONFIG_DESC"}] +
    +
    + + + + [{else}] + +
    +
    + + + [{oxmultilang ident="D3_CFG_MOD_d3fileupload_SETTINGS"}] + + +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_sD3UploadDir_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_sD3UploadPerm_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_sD3UploadPerm_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_HELP"}] + ([{oxmultilang ident="D3_CFG_MOD_d3fileupload_iD3MaxUploadSize_SERVER"}] [{$oView->getSystemUploadSizeRestrictions()}]) +
    +
    +
    + +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_iD3MaxUploadFiles_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_aD3AllowedUpladFileExtensions_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + getEditValue('blVariantInheritUpload') == '1'}]checked[{/if}]> + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_blVariantInheritUpload_HELP"}] +
    +
    +
    + +
    +
    + +
    +
    + + getEditValue('blAllowFixation') == '1'}]checked[{/if}]> + [{oxinputhelp ident="D3_CFG_MOD_d3fileupload_blAllowFixation_HELP"}] +
    +
    +
    +
    +
    + +
    +
    + + + [{oxmultilang ident="D3_FILEUPLOAD_SET_CRON"}] [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_DESC"}] + + +
    +
    + +
    +
    + + getValue('blCronActive') == 1}]checked[{/if}]> + [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_ACTIVE_DESC"}] +
    +
    +
    +
    +
    + +
    +
    + + [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_PASSWORD_DESC"}] +
    +
    +
    +
    +
    + [{oxmultilang ident="D3_FILEUPLOAD_SET_CRON_EXTLINK"}] +
    +
    + + + + [{$oView->getCronLink(true)}] + [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_EXTLINK_DESC"}] +
    +
    +
    +
    + [{oxmultilang ident="D3_FILEUPLOAD_SET_CRON_CRONLINK"}] +
    +
    + [{$oView->getCronLink(false)}] + [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_CRONLINK_DESC"}] +
    +
    +
    + +
    +
    + +
    +
    + + + + + [{oxinputhelp ident="D3_SHGENERATOR_CRON_SHGENERATOR_DESC"}] +
    +
    +
    + +
    +
    + [{oxmultilang ident="D3_FILEUPLOAD_SET_CRON_LASTEXEC"}] +
    +
    + [{$edit->getValue('sCronExecTimestamp')|oxformdate}] + [{oxinputhelp ident="D3_FILEUPLOAD_SET_CRON_LASTEXEC_DESC"}] +
    +
    +
    +
    +
    + + + + + +
    + + + +
    + + [{/if}] +
    +
    + +[{include file="d3_cfg_mod_inc.tpl"}] \ No newline at end of file diff --git a/src/Application/views/blocks/email/html/email_html_order_cust_orderemail.tpl b/src/Application/views/blocks/email/html/email_html_order_cust_orderemail.tpl new file mode 100644 index 0000000..186c2ee --- /dev/null +++ b/src/Application/views/blocks/email/html/email_html_order_cust_orderemail.tpl @@ -0,0 +1,15 @@ +[{$smarty.block.parent}] + +[{d3modcfgcheck modid="d3fileupload"}][{/d3modcfgcheck}] + +[{if $mod_d3fileupload}] + [{if $order->getD3CustomerBoughtUploadArticles()}] +
    + [{oxmultilang ident="D3_EMAIL_ORDER_CUST_HTML_UPLOADINFO"}] +
    +
    + [{oxmultilang ident="D3_EMAIL_ORDER_CUST_HTML_UPLOADBTN"}] +
    +
    + [{/if}] +[{/if}] \ No newline at end of file diff --git a/src/Application/views/blocks/email/plain/email_plain_order_cust_orderemail.tpl b/src/Application/views/blocks/email/plain/email_plain_order_cust_orderemail.tpl new file mode 100644 index 0000000..a4278c8 --- /dev/null +++ b/src/Application/views/blocks/email/plain/email_plain_order_cust_orderemail.tpl @@ -0,0 +1,13 @@ +[{$smarty.block.parent}] + +[{d3modcfgcheck modid="d3fileupload"}][{/d3modcfgcheck}] + +[{if $mod_d3fileupload}] + [{if $order->getD3CustomerBoughtUploadArticles()}] + + [{oxmultilang ident="D3_EMAIL_ORDER_CUST_PLAIN_UPLOADINFO"}] + + [{$oViewConf->getBaseDir()}]index.php?shp=[{$shop->getId()}]&cl=d3uploadmanager&uid=[{$order->getFieldData('oxuserid')}]&oid=[{$order->getId()}] + + [{/if}] +[{/if}] \ No newline at end of file diff --git a/src/Application/views/blocks/page/account/account_order_history_cart_items.tpl b/src/Application/views/blocks/page/account/account_order_history_cart_items.tpl new file mode 100644 index 0000000..bc95a53 --- /dev/null +++ b/src/Application/views/blocks/page/account/account_order_history_cart_items.tpl @@ -0,0 +1,15 @@ +[{$smarty.block.parent}] + +[{d3modcfgcheck modid="d3fileupload"}][{/d3modcfgcheck}] +[{if $mod_d3fileupload && $order->getD3CustomerBoughtUploadArticles()}] +
    +
    + [{$oViewConf->getHiddenSid() }] + + + + + +
    +
    +[{/if}] diff --git a/src/Application/views/blocks/page/checkout/checkout_thankyou_info.tpl b/src/Application/views/blocks/page/checkout/checkout_thankyou_info.tpl new file mode 100644 index 0000000..4d39e45 --- /dev/null +++ b/src/Application/views/blocks/page/checkout/checkout_thankyou_info.tpl @@ -0,0 +1,26 @@ +[{$smarty.block.parent}] + +[{d3modcfgcheck modid="d3fileupload"}][{/d3modcfgcheck}] + +[{if $mod_d3fileupload}] + [{if $order->getD3CustomerBoughtUploadArticles()}] + +
    + [{oxmultilang ident="D3_THANKYOU_UPLOAD"}]
    + [{oxmultilang ident="D3_THANKYOU_UPLOAD_INFOTEXT1"}] +

    +
    + [{$oViewConf->getHiddenSid()}] + + + + + +
    +
    + [{oxmultilang ident="D3_THANKYOU_UPLOAD_INFOTEXT2"}] +

    +
    + [{/if}] +[{/if}] + diff --git a/src/Application/views/tpl/d3uploadmanager.tpl b/src/Application/views/tpl/d3uploadmanager.tpl new file mode 100644 index 0000000..5881568 --- /dev/null +++ b/src/Application/views/tpl/d3uploadmanager.tpl @@ -0,0 +1,332 @@ +[{capture append="oxidBlock_content"}] + [{assign var="template_title" value="D3_UPLOADMANAGER_HEAD_TITLE"|oxmultilangassign}] + + [{oxstyle include=$oViewConf->getModuleUrl('d3fileupload','out/src/css/d3fileupload.css')}] + + [{block name="d3fileupload_uploadmanager_main"}] +

    [{oxmultilang ident="D3_UPLOADMANAGER_HEAD_TITLE"}]

    + + [{if $order}] + [{if count($Errors)>0 && count($Errors.d3fileupload) > 0}] + [{block name="d3fileupload_uploadmanager_errors"}] +
    + [{foreach from=$Errors.d3fileupload item=oEr key=key}] +

    [{$oEr->getOxMessage()}] [{oxmultilang ident="D3FILESUPLOAD_ERROR_MESSAGE_CONTACTOWNER"}]

    + [{/foreach}] +
    + [{/block}] + [{elseif !$oView->hasUploadArticles()}] + [{block name="d3fileupload_uploadmanager_errors_noarticles"}] +
    +
    + [{$oView->getNoUploadArticlesMessage()}]
    +
    + [{assign var="oCont" value=$oView->getContentByIdent("oximpressum")}] + +
    +
    + [{/block}] + [{else}] + [{block name="d3fileupload_uploadmanager_overview"}] + [{if $oView->orderIsFixed()}] + [{assign var="orderIsFixed" value="disabled"}] + [{else}] + [{assign var="orderIsFixed" value=""}] + [{/if}] + [{block name="d3fileupload_uploadmanager_statustable"}] +

    + [{oxmultilang ident="D3_UPLOADMANAGER_ORDER_TITLE"}] [{$order->getFieldData('oxordernr')}] +

    + + + + + + [{if !$oView->orderIsFixed()}] + + + + + + + + [{/if}] +
    + [{oxmultilang ident="D3_UPLOADMANAGER_ORDER_DATE"}] + + [{$order->getFieldData('oxorderdate')|date_format:"%d.%m.%Y, %T"}] +
     
    + [{oxmultilang ident="D3_UPLOADMANAGER_UPLOAD_PERM"}] + +
    +
      +
    • + [{$oView->getFormattedMaxUploadSize()}] [{oxmultilang ident="D3_UPLOADMANAGER_UPLOAD_MAXFILESIZE"}] +
    • +
    • + [{oxmultilang ident="D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT_MAX"}] [{$oView->getMaxUploadFileCount()}] [{oxmultilang ident="D3_UPLOADMANAGER_UPLOAD_MAXFILECOUNT"}] +
    • +
    • + [{oxmultilang ident="D3_UPLOADMANAGER_UPLOAD_ALLOWEDFILES"}] [{$oView->getAllowUploadFileTypeListing()}] +
    • +
    +
    +
    + [{/block}] + + [{block name="d3fileupload_uploadmanager_articlelist"}] +

    [{oxmultilang ident="D3_UPLOADMANAGER_ARTICLELIST"}]

    + + + + + + + + + + + [{assign var="blWhite" value="1"}] + [{foreach name="articles" from=$oView->getUploadArticles() item="oOrderitem"}] + [{assign var="oArticle" value=$oView->getArticleFromOrderArticle($oOrderitem)}] + [{assign var="listclass" value="listitem"|cat:$blWhite}] + [{if $oView->getUploadFiles($oOrderitem->getId())}] + [{block name="d3fileupload_uploadmanager_uploadfiles_tablehead"}] + + + + + + + + + [{/block}] + + [{if $oArticle->d3GetUploadsArray()|@count}] + [{foreach name="uploads" from=$oView->getUploadFiles($oOrderitem->getId()) item="oUpload"}] + [{block name="d3fileupload_uploadmanager_uploadfilesarray_table"}] + + [{if $smarty.foreach.uploads.first}] + + [{/if}] + + + + + + + [{/block}] + [{/foreach}] + [{else}] + [{foreach name="uploads" from=$oView->getUploadFiles($oOrderitem->getId()) item="oUpload"}] + [{block name="d3fileupload_uploadmanager_uploadfiles_table"}] + + [{if $smarty.foreach.uploads.first}] + + [{/if}] + + + + + + + [{/block}] + [{/foreach}] + [{/if}] + [{else}] + + + + + [{/if}] + + + + + [{if false == $oView->orderIsFixed()}] + [{if $oArticle->d3GetUploadsArray()|@count}] + [{foreach name="uploads" from=$oArticle->d3GetUploadsArray() item="sUpload"}] + [{if $oView->isUploadSlotEmpty($oOrderitem->getId(), $sUpload)}] + + + + [{/if}] + [{/foreach}] + [{else}] + [{if !$oView->hasFileCountReached($oOrderitem->getId())}] + + + + [{/if}] + [{/if}] + [{/if}] + + + + + + [{if $blWhite == "2"}] + [{assign var="blWhite" value="1"}] + [{else}] + [{assign var="blWhite" value="2"}] + [{/if}] + [{/foreach}] +
     [{oxmultilang ident="D3_UPLOADMANAGER_LIST_FILES"}][{oxmultilang ident="D3_UPLOADMANAGER_LIST_INFO"}][{oxmultilang ident="D3_UPLOADMANAGER_LIST_SIZE"}][{oxmultilang ident="D3_UPLOADMANAGER_LIST_DATE"}] 
    +
    [{$oOrderitem->getFieldData('oxtitle')}]
    +
    ([{oxmultilang ident="D3_UPLOADMANAGER_LIST_ARTNUM"}] [{$oOrderitem->getFieldData('oxartnum')}])
    +
    + + [{oxmultilang ident=$oUpload->sUploadId noerror=true}]:
    + [{$oUpload->sFilename|truncate:30:"..."}] +
    +
    + [{if $oUpload->sComment}] + sComment}]"> + + + [{/if}] + + [{$oUpload->sFilesize}] + + [{$oUpload->sFileCTime|date_format:"%d.%m.%Y, %T"}] + + [{block name="D3_FILEUPLOAD_DELETEFORM"}] +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + +
    + [{/block}] +
    +
    [{$oOrderitem->getFieldData('oxtitle')}]
    +
    ([{oxmultilang ident="D3_UPLOADMANAGER_LIST_ARTNUM"}] [{$oOrderitem->getFieldData('oxartnum')}])
    +
    + + [{$oUpload->sFilename|truncate:30:"..."}] + + + [{if $oUpload->sComment}] + sComment}]"> + + + [{/if}] + + [{$oUpload->sFilesize}] + + [{$oUpload->sFileCTime|date_format:"%d.%m.%Y, %T"}] + + [{block name="d3fileupload_uploadmanager_articlelist_remove_form"}] +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + +
    + [{/block}] +
    +
    [{$oOrderitem->getFieldData('oxtitle')}]
    +
    ([{oxmultilang ident="D3_UPLOADMANAGER_LIST_ARTNUM"}] [{$oOrderitem->getFieldData('oxartnum')}])
    +
    + [{oxmultilang ident="D3_UPLOADMANAGER_LIST_NOFILES"}] +
     
    + [{block name="d3fileupload_uploadmanager_articlelist_uploadarray_form"}] +
    + [{$oViewConf->getHiddenSid()}] + + + + + + + [{oxmultilang ident=$sUpload noerror=true}]: [{oxmultilang ident="D3_UPLOADMANAGER_LIST_FILEUPLOAD"}]  + + +
    + +
    +   +
    + [{/block}] +
    + [{block name="d3fileupload_uploadmanager_articlelist_upload_form"}] +
    + [{$oViewConf->getHiddenSid()}] + + + + + + [{oxmultilang ident="D3_UPLOADMANAGER_LIST_FILEUPLOAD"}]  + + +
    + +
    +   +
    + [{/block}] +
     
    + [{/block}] + + [{block name="d3fileupload_uploadmanager_fixation"}] + [{if $oView->hasFixation()}] + [{if !$oView->orderIsFixed()}] +
    +
    + [{oxmultilang ident="D3_UPLOADMANAGER_FIX_MSG"}] +
    + [{block name="d3fileupload_uploadmanager_fixation_form"}] +
    + [{$oViewConf->getHiddenSid()}] + + + + + +
    + [{/block}] +
    + [{else}] +
    + [{oxmultilang ident="D3_UPLOADMANAGER_ISFIXED_MSG"}] +
    + [{/if}] + [{/if}] + [{/block}] + [{/block}] + [{/if}] + [{else}] + [{oxmultilang ident="D3_UPLOADMANAGER_ERROR_NO_ORDER"}] + [{/if}] + + [{insert name="oxid_tracker" title=$template_title}] + [{/block}] +[{/capture}] + + +[{assign var="sidebar" value=""}] +[{capture append="oxidBlock_sidebar"}] + [{if $oView->isValidAccount() && $oxcmp_user}] + [{include file="page/account/inc/account_menu.tpl" active_link="orderhistory"}] + [{assign var="sidebar" value="Left"}] + [{/if}] +[{/capture}] + +[{include file="layout/page.tpl" sidebar=$sidebar}] \ No newline at end of file diff --git a/src/Application/views/tpl/email/html/d3fileupload_notification.tpl b/src/Application/views/tpl/email/html/d3fileupload_notification.tpl new file mode 100644 index 0000000..343ed8a --- /dev/null +++ b/src/Application/views/tpl/email/html/d3fileupload_notification.tpl @@ -0,0 +1,42 @@ +[{block name="fileupload_notification_mail"}] + + + + [{oxmultilang ident="D3FILEUPLOAD_MAIL_SUBJECT"}] + + + + [{block name="fileupload_notification_mailcontent"}] + [{oxmultilang ident="D3FILEUPLOAD_MAIL_FROM"}] [{$smarty.now|date_format:"%d.%m.%Y %H:%I"}] + + [{strip}] + [{if $aFixedOrderList && $aFixedOrderList|count}] + [{oxmultilang ident="D3FILEUPLOAD_MAIL_FIXEDORDERS"}] +
      + [{foreach from=$aFixedOrderList item="oOrder"}] +
    • + [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERNR"}] [{$oOrder->getFieldData('oxordernr')}],  + [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERFROM"}] [{$oOrder->getFieldData('oxorderdate')}]  + ([{$oOrder->getFieldData('oxbilllname')}], [{$oOrder->getFieldData('oxbillfname')}]) +
    • + [{/foreach}] +


    + [{/if}] + + [{if $aUploadOrderList && $aUploadOrderList|count}] + [{oxmultilang ident="D3FILEUPLOAD_MAIL_UPLOADORDERS"}] +
      + [{foreach from=$aUploadOrderList item="oOrder"}] +
    • + [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERNR"}] [{$oOrder->getFieldData('oxordernr')}],  + [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERFROM"}] [{$oOrder->getFieldData('oxorderdate')}]  + ([{$oOrder->getFieldData('oxbilllname')}], [{$oOrder->getFieldData('oxbillfname')}]) +
    • + [{/foreach}] +
    + [{/if}] + [{/strip}] + [{/block}] + + +[{/block}] \ No newline at end of file diff --git a/src/Application/views/tpl/email/plain/d3fileupload_notification.tpl b/src/Application/views/tpl/email/plain/d3fileupload_notification.tpl new file mode 100644 index 0000000..c46eed2 --- /dev/null +++ b/src/Application/views/tpl/email/plain/d3fileupload_notification.tpl @@ -0,0 +1,19 @@ +[{block name="fileupload_notification_mail"}] +[{oxmultilang ident="D3FILEUPLOAD_MAIL_FROM"}] [{$smarty.now|date_format:"%d.%m.%Y %H:%I"}] + +[{if $aFixedOrderList && $aFixedOrderList|count}] +[{oxmultilang ident="D3FILEUPLOAD_MAIL_FIXEDORDERS"}] + +[{foreach from=$aFixedOrderList item="oOrder"}] +- [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERNR"}] [{$oOrder->getFieldData('oxordernr')}], [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERFROM"}] [{$oOrder->getFieldData('oxorderdate')}] ([{$oOrder->getFieldData('oxbilllname')}], [{$oOrder->getFieldData('oxbillfname')}]) +[{/foreach}] + +[{/if}] +[{if $aUploadOrderList && $aUploadOrderList|count}] +[{oxmultilang ident="D3FILEUPLOAD_MAIL_UPLOADORDERS"}] + +[{foreach from=$aUploadOrderList item="oOrder"}] +- [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERNR"}] [{$oOrder->getFieldData('oxordernr')}], [{oxmultilang ident="D3FILEUPLOAD_MAIL_ORDERFROM"}] [{$oOrder->getFieldData('oxorderdate')}] ([{$oOrder->getFieldData('oxbilllname')}], [{$oOrder->getFieldData('oxbillfname')}]) +[{/foreach}] +[{/if}] +[{/block}] \ No newline at end of file diff --git a/src/IntelliSenseHelper.php b/src/IntelliSenseHelper.php new file mode 100644 index 0000000..9625db3 --- /dev/null +++ b/src/IntelliSenseHelper.php @@ -0,0 +1,25 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Modules\Application\Model +{ + class d3_oxorder_fileupload_parent extends \OxidEsales\Eshop\Application\Model\Order {} + + class d3_oxarticle_fileupload_parent extends \OxidEsales\Eshop\Application\Model\Article {} + + class d3_oxemail_fileupload_parent extends \OxidEsales\Eshop\Core\Email {} +} diff --git a/src/Modules/Application/Model/d3_oxarticle_fileupload.php b/src/Modules/Application/Model/d3_oxarticle_fileupload.php new file mode 100644 index 0000000..607196e --- /dev/null +++ b/src/Modules/Application/Model/d3_oxarticle_fileupload.php @@ -0,0 +1,88 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Modules\Application\Model; + +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\Request; + +class d3_oxarticle_fileupload extends d3_oxarticle_fileupload_parent +{ + private $_sModId = 'd3fileupload'; + + /** + * d3_oxarticle_fileupload constructor. + * + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function __construct() + { + parent::__construct(); + + if (d3_cfg_mod::get($this->_sModId)->getValue('blVariantInheritUpload')) { + $this->_aCopyParentField[] = 'oxarticles__d3isupload'; + } + } + + /** + * @return bool + */ + public function save() + { + /** @var Request $request */ + $request = Registry::get(Request::class); + $aEditVal = $request->getRequestEscapedParameter('editval'); + + $aUploads = array(); + foreach (explode(PHP_EOL, $aEditVal['oxarticles__d3fileuploads']) as $sUpload) { + $sUpload = trim($sUpload); + if (strlen($sUpload)) { + $aUploads[] = trim($sUpload); + } + } + + $this->_setFieldData('d3fileuploads', implode('|', $aUploads)); + + return parent::save(); + } + + /** + * @return array + */ + public function d3GetUploadsArray() + { + if ($this->getFieldData('d3fileuploads')) { + return explode('|', $this->getFieldData('d3fileuploads')); + } + + return array(); + } + + /** + * @return string + */ + public function d3GetEditUploadsArray() + { + return implode(PHP_EOL, $this->d3GetUploadsArray()); + } +} diff --git a/src/Modules/Application/Model/d3_oxemail_fileupload.php b/src/Modules/Application/Model/d3_oxemail_fileupload.php new file mode 100644 index 0000000..4b48032 --- /dev/null +++ b/src/Modules/Application/Model/d3_oxemail_fileupload.php @@ -0,0 +1,65 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Modules\Application\Model; + +use OxidEsales\Eshop\Core\Model\ListModel; +use OxidEsales\Eshop\Core\Registry; + +class d3_oxemail_fileupload extends d3_oxemail_fileupload_parent +{ + protected $_sFileUploadInfoTemplate = 'd3fileupload_notification_html.tpl'; + + protected $_sFileUploadInfoPlainTemplate = 'd3fileupload_notification_plain.tpl'; + + /** + * @param ListModel $aFixedOrderList + * @param ListModel $aUploadOrderList + * + * @return bool + */ + public function d3FileUploadSendNotification(ListModel $aFixedOrderList, ListModel $aUploadOrderList) + { + $oShop = $this->_getShop(); + $this->_setMailParams($oShop); + + $oSmarty = $this->_getSmarty(); + + $this->setViewData("aFixedOrderList", $aFixedOrderList); + $this->setViewData("aUploadOrderList", $aUploadOrderList); + $this->setViewData("shopTemplateDir", Registry::getConfig()->getTemplateDir(false)); + $this->setViewData("oShop", $oShop); + $oSmarty->template_dir = Registry::getConfig()->getTemplateDir(false); + + $this->_processViewArray(); + + $this->setBody($oSmarty->fetch($this->_sFileUploadInfoTemplate)); + $this->setAltBody($oSmarty->fetch($this->_sFileUploadInfoPlainTemplate)); + + $sSubject = Registry::getLang()->translateString('D3FILEUPLOAD_MAIL_SUBJECT', 0); + $this->setSubject($sSubject); + + $sFullName = $oShop->__get('oxshops__oxname')->getRawValue(); + + $this->setRecipient($oShop->getFieldData('oxinfoemail'), $sFullName); + $this->setReplyTo($oShop->getFieldData('oxinfoemail'), $oShop->__get('oxshops__oxname')->getRawValue()); + + $blSuccess = $this->send(); + + return $blSuccess; + } +} diff --git a/src/Modules/Application/Model/d3_oxorder_fileupload.php b/src/Modules/Application/Model/d3_oxorder_fileupload.php new file mode 100644 index 0000000..a5e606c --- /dev/null +++ b/src/Modules/Application/Model/d3_oxorder_fileupload.php @@ -0,0 +1,59 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Modules\Application\Model; + +use OxidEsales\Eshop\Application\Model\OrderArticle; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\UtilsFile; + +class d3_oxorder_fileupload extends d3_oxorder_fileupload_parent +{ + /** + * Gibt true zurueck, wenn der Kunde mindestens einen Uploadartikel gekauft hat + * @return bool + */ + public function getD3CustomerBoughtUploadArticles() + { + $oArticleList = $this->getOrderArticles(); + + /** @var OrderArticle $oOrderArticle */ + foreach ($oArticleList as $oOrderArticle) { + $blIsUpload= $oOrderArticle->getFieldData('d3isupload'); + if (false == empty($blIsUpload)) { + return true; + } + } + + return false; + } + + /** + * Gibt den Upload-Link der aktuellen Bestellung zurueck + * @return string URL + */ + public function getUploadLink() + { + if (!$this->getId() || !$this->getD3CustomerBoughtUploadArticles()) { + return null; + } + + return Registry::get(UtilsFile::class)->normalizeDir( + Registry::getConfig()->getShopUrl() + ) . "index.php?cl=d3uploadmanager&uid=" . $this->getFieldData('oxuserid') . "&oid=" . $this->getId(); + } +} diff --git a/src/Setup/Events.php b/src/Setup/Events.php new file mode 100644 index 0000000..fcbef2b --- /dev/null +++ b/src/Setup/Events.php @@ -0,0 +1,46 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Setup; + +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Install\d3install; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Exception\SystemComponentException; + +class Events +{ + /** + * @throws d3ShopCompatibilityAdapterException + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws SystemComponentException + */ + public static function onActivate() + { + d3install::checkUpdateStart(); + } + + public static function onDeactivate() + { + } +} \ No newline at end of file diff --git a/src/Setup/d3fileupload_update.php b/src/Setup/d3fileupload_update.php new file mode 100644 index 0000000..acfb0c5 --- /dev/null +++ b/src/Setup/d3fileupload_update.php @@ -0,0 +1,520 @@ + + * @link http://www.oxidmodule.com + */ + +namespace D3\Fileupload\Setup; + +use D3\Fileupload\Application\Model\d3fileupload_setting; +use D3\ModCfg\Application\Model\Configuration\d3_cfg_mod; +use D3\ModCfg\Application\Model\d3database; +use D3\ModCfg\Application\Model\d3filesystem; +use D3\ModCfg\Application\Model\Exception\d3_cfg_mod_exception; +use D3\ModCfg\Application\Model\Exception\d3ParameterNotFoundException; +use D3\ModCfg\Application\Model\Exception\d3ShopCompatibilityAdapterException; +use D3\ModCfg\Application\Model\Install\d3install_updatebase; +use Doctrine\DBAL\DBALException; +use OxidEsales\Eshop\Core\DatabaseProvider; +use OxidEsales\Eshop\Core\Exception\ConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException; +use OxidEsales\Eshop\Core\Exception\DatabaseErrorException; +use OxidEsales\Eshop\Core\Exception\StandardException; +use OxidEsales\Eshop\Core\Registry; +use OxidEsales\Eshop\Core\UtilsObject; + +class d3fileupload_update extends d3install_updatebase +{ + public $sModKey = 'd3fileupload'; + public $sModName = 'FileUpload'; + public $sModVersion = '5.0.0.0'; + public $sModRevision = '5000'; + public $sBaseConf = 'yPgv2==Nnl5c2l2cWRrcnhOTElJRjBnZXdiWTZGZU8zOUR2YS9YVTBPam9IVm9GVjRicWUvTTdmRGpQd +GtGNUFhOWpLbnBUK1gzbGZkNldTUE5BTTNoV0QzYVJKTkRrZEZMUHpqMHlOVXlSWUtrOUx4WDV2VGRPO +HllQ3M2bXZTWGdNQ3Rzejl4TTY2T3F0eUR0U0ZpRldnQkY0Ky82MStJY1RlRWF3YXJZTGNIYXFOYU1GZ +VhqTUUzSFp5UHl2eEIyMXZQTzgwQWJSTWlHcTYvNXRPYk5UN3l0bUM3VUhqbldSbHEyRytqL1hZZXBtZ +zBpT2xkWXZHTTVHT0hCZ01DbjN3TThNQXVOZWNSZHFVeGUwUmtLRS9xWng0ams4dXBVUGlFcGs1U0lGW +VRpbDIvUjk4MGdldVhzWkxwYlprNVB5dEhuR0ZHM1pjZVg0ZlhGTlVGbVlNbzB3PT0='; + public $sRequirements = ''; + public $sBaseValue = 'TyUzQTglM0ElMjJzdGRDbGFzcyUyMiUzQTE1JTNBJTdCcyUzQTMyJTNBJTIyZDNfY2ZnX21vZF9fYUQzQWxsb3dlZFVwbGFkRmlsZXMlMjIlM0JhJTNBMTElM0ElN0JpJTNBMCUzQnMlM0EzJTNBJTIyemlwJTIyJTNCaSUzQTElM0JzJTNBMyUzQSUyMnJhciUyMiUzQmklM0EyJTNCcyUzQTMlM0ElMjJqcGclMjIlM0JpJTNBMyUzQnMlM0EzJTNBJTIyZ2lmJTIyJTNCaSUzQTQlM0JzJTNBMyUzQSUyMnBuZyUyMiUzQmklM0E1JTNCcyUzQTMlM0ElMjJwZGYlMjIlM0JpJTNBNiUzQnMlM0EzJTNBJTIycHNkJTIyJTNCaSUzQTclM0JzJTNBMyUzQSUyMmRvYyUyMiUzQmklM0E4JTNCcyUzQTQlM0ElMjJkb2N4JTIyJTNCaSUzQTklM0JzJTNBMyUzQSUyMnhscyUyMiUzQmklM0ExMCUzQnMlM0E0JTNBJTIyeGxzeCUyMiUzQiU3RHMlM0EyNCUzQSUyMmQzX2NmZ19tb2RfX3NEM1VwbG9hZERpciUyMiUzQnMlM0ExNyUzQSUyMi4uJTJGLi4lMkZ1cGxvYWRmaWxlcyUyMiUzQnMlM0EyNCUzQSUyMmQzX2NmZ19tb2RfX3NEM1VwbG9hZFVybCUyMiUzQnMlM0E1JTNBJTIyZmlsZXMlMjIlM0JzJTNBMjUlM0ElMjJkM19jZmdfbW9kX19zRDNVcGxvYWRQZXJtJTIyJTNCcyUzQTQlM0ElMjIwNjQ0JTIyJTNCcyUzQTI4JTNBJTIyZDNfY2ZnX21vZF9faUQzTWF4VXBsb2FkU2l6ZSUyMiUzQmklM0EyMDk3MTUyJTNCcyUzQTI5JTNBJTIyZDNfY2ZnX21vZF9faUQzTWF4VXBsb2FkRmlsZXMlMjIlM0JzJTNBMSUzQSUyMjUlMjIlM0JzJTNBMjglM0ElMjJkM19jZmdfbW9kX19hTGljZW5zZUluZm9NYWlsJTIyJTNCYSUzQTIlM0ElN0JzJTNBNDIlM0ElMjJOT0xJQ0tFWV9fNDc5MzYzODcwMmI2NzcxNWYxZGZiZmM4MzI0NjY5MTQlMjIlM0JzJTNBMTklM0ElMjIyMDEzLTAxLTEwJTIwMTIlM0ExNyUzQTM1JTIyJTNCcyUzQTQzJTNBJTIyTk9DT05GS0VZX19kNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZSUyMiUzQnMlM0ExOSUzQSUyMjIwMTMtMDEtMTAlMjAwMSUzQTQyJTNBNTklMjIlM0IlN0RzJTNBNDQlM0ElMjJkM19jZmdfbW9kX19ibFVwZGF0ZUhhc0NoZWNrZWRGb3JPcnBoYW5GaWxlcyUyMiUzQmklM0ExJTNCcyUzQTQxJTNBJTIyZDNfY2ZnX21vZF9fYUQzQWxsb3dlZFVwbGFkRmlsZUV4dGVuc2lvbnMlMjIlM0JhJTNBOCUzQSU3QmklM0EwJTNCcyUzQTMlM0ElMjJwZGYlMjIlM0JpJTNBMSUzQnMlM0EzJTNBJTIyanBnJTIyJTNCaSUzQTIlM0JzJTNBMyUzQSUyMnBuZyUyMiUzQmklM0EzJTNCcyUzQTMlM0ElMjJwc2QlMjIlM0JpJTNBNCUzQnMlM0EzJTNBJTIyZG9jJTIyJTNCaSUzQTUlM0JzJTNBNCUzQSUyMmRvY3glMjIlM0JpJTNBNiUzQnMlM0EzJTNBJTIyeGxzJTIyJTNCaSUzQTclM0JzJTNBNCUzQSUyMnhsc3glMjIlM0IlN0RzJTNBMjglM0ElMjJkM19jZmdfbW9kX19zRDNVcGxvYWRQZXJtZGlyJTIyJTNCcyUzQTQlM0ElMjIwNzQ0JTIyJTNCcyUzQTI5JTNBJTIyZDNfY2ZnX21vZF9fc0QzVXBsb2FkUGVybWZpbGUlMjIlM0JzJTNBNCUzQSUyMjA2NjQlMjIlM0JzJTNBMzQlM0ElMjJkM19jZmdfbW9kX19ibFZhcmlhbnRJbmhlcml0VXBsb2FkJTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTI3JTNBJTIyZDNfY2ZnX21vZF9fYmxBbGxvd0ZpeGF0aW9uJTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTI0JTNBJTIyZDNfY2ZnX21vZF9fYmxDcm9uQWN0aXZlJTIyJTNCcyUzQTElM0ElMjIwJTIyJTNCcyUzQTI1JTNBJTIyZDNfY2ZnX21vZF9fc0Nyb25QYXNzd29yZCUyMiUzQnMlM0E4JTNBJTIyQjhnbjlNUmElMjIlM0IlN0Q='; + + protected $_aUpdateMethods = array + ( + array('check' => 'checkModCfgItemExist', + 'do' => 'updateModCfgItemExist'), + array('check' => 'checkFileUploadTableExist', + 'do' => 'updateFileUploadTableExist'), + array('check' => 'checkFields', + 'do' => 'fixFields'), + array('check' => 'checkIndizes', + 'do' => 'fixIndizes'), + array('check' => 'hasNoUploadDir', + 'do' => 'createUploadDir'), + array('check' => 'hasNoTuples', + 'do' => 'addFilesWithoutTuples'), + array('check' => 'hasUnregisteredFiles', + 'do' => 'showUnregisteredFiles'), + array('check' => 'checkModCfgSameRevision', + 'do' => 'updateModCfgSameRevision'), + ); + + // Standardwerte fuer checkMultiLangTables() und fixRegisterMultiLangTables() + public $aMultiLangTables = array(); + + public $aFields = array( + 'OOA_D3ISUPLOAD' => array( + 'sTableName' => 'oxorderarticles', + 'sFieldName' => 'D3ISUPLOAD', + 'sType' => 'TINYINT(1)', + 'blNull' => false, + 'sDefault' => '0', + 'sComment' => 'd3FileUpload: article requires upload', + 'sExtra' => '', + 'blMultilang' => false, + 'blAddBreak' => true, + ), + 'OO_D3UPLOADFIXED' => array( + 'sTableName' => 'oxorder', + 'sFieldName' => 'D3UPLOADFIXED', + 'sType' => 'DATETIME', + 'blNull' => false, + 'sDefault' => '0000-00-00 00:00:00', + 'sComment' => 'd3FileUpload: uploads are fixed', + 'sExtra' => '', + 'blMultilang' => false, + 'blAddBreak' => true, + ), + 'OA_D3ISUPLOAD' => array( + 'sTableName' => 'oxarticles', + 'sFieldName' => 'D3ISUPLOAD', + 'sType' => 'TINYINT(1)', + 'blNull' => false, + 'sDefault' => '0', + 'sComment' => 'd3FileUpload: article requires upload', + 'sExtra' => '', + 'blMultilang' => false, + 'blAddBreak' => true, + ), + 'OA_D3FILEUPLOADS' => array( + 'sTableName' => 'oxarticles', + 'sFieldName' => 'D3FILEUPLOADS', + 'sType' => 'VARCHAR(255)', + 'blNull' => false, + 'sDefault' => '', + 'sComment' => 'd3FileUpload: article dependend file uploads', + 'sExtra' => '', + 'blMultilang' => false, + 'blAddBreak' => true, + ), + 'FU_OXID' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXID', + 'sType' => 'CHAR(32)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXORDERID' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXORDERID', + 'sType' => 'CHAR(32)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXORDERARTICLEID' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXORDERARTICLEID', + 'sType' => 'CHAR(32)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXUPLOADID' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXUPLOADID', + 'sType' => 'CHAR(100)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXFILENAME' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXFILENAME', + 'sType' => 'VARCHAR(255)', + 'blNull' => false, + 'sDefault' => false, + 'sComment' => '', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXFILESIZE' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXFILESIZE', + 'sType' => 'INT(9)', + 'blNull' => false, + 'sDefault' => '0', + 'sComment' => 'filesize in bytes', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXFILECTIME' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXFILECTIME', + 'sType' => 'INT(10)', + 'blNull' => false, + 'sDefault' => '0', + 'sComment' => 'change time', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXUPLOADDATE' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXUPLOADDATE', + 'sType' => 'DATETIME', + 'blNull' => false, + 'sDefault' => '0000-00-00 00:00:00', + 'sComment' => 'upload time', + 'sExtra' => '', + 'blMultilang' => false, + ), + 'FU_OXUPLOADNOTE' => array( + 'sTableName' => 'd3fileupload', + 'sFieldName' => 'OXUPLOADNOTE', + 'sType' => 'TEXT', + 'blNull' => false, + 'sDefault' => '', + 'sComment' => 'note for upload file', + 'sExtra' => '', + 'blMultilang' => false, + ), + ); + + public $aIndizes = array( + 'FU_OXID' => array( + 'sTableName' => 'd3fileupload', + 'sType' => d3database::INDEX_TYPE_PRIMARY, + 'aFields' => array( + 'OXID' => 'OXID', + ), + ), + 'FU_OXORDERID' => array( + 'sTableName' => 'd3fileupload', + 'sType' => d3database::INDEX_TYPE_INDEX, + 'sName' => 'OXORDERID', + 'aFields' => array( + 'OXORDERID' => 'OXORDERID', + ), + ), + 'FU_OXORDERARTICLEID' => array( + 'sTableName' => 'd3fileupload', + 'sType' => d3database::INDEX_TYPE_INDEX, + 'sName' => 'OXORDERARTICLEID', + 'aFields' => array( + 'OXORDERARTICLEID' => 'OXORDERARTICLEID', + ), + ), + 'FU_OXORDERARTICLEUPLOADID' => array( + 'sTableName' => 'd3fileupload', + 'sType' => d3database::INDEX_TYPE_INDEX, + 'sName' => 'OXORDERARTICLEUPLOADID', + 'aFields' => array( + 'OXORDERARTICLEID' => 'OXORDERARTICLEID', + 'OXUPLOADID' => 'OXUPLOADID', + ), + ), + ); + + protected $_aRefreshMetaModuleIds = array('d3fileupload'); + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function checkFileUploadTableExist() + { + return $this->_checkTableNotExist('d3fileupload'); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws ConnectionException + */ + public function updateFileUploadTableExist() + { + $blRet = false; + if ($this->checkFileUploadTableExist()) { + $this->setInitialExecMethod(__METHOD__); + $blRet = $this->_addTable2( + 'd3fileupload', + $this->aFields, + $this->aIndizes, + 'file uploads for order articles', + 'MyISAM' + ); + } + + return $blRet; + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function hasNoUploadDir() + { + /** @var d3fileupload_setting $oFileUploadSettings */ + $oFileUploadSettings = oxNew(d3fileupload_setting::class); + $sPath = $oFileUploadSettings->getFullUploadDir(); + + /** @var d3filesystem $fileSystem */ + $fileSystem = oxNew(d3filesystem::class); + return !$fileSystem->exists($sPath); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function createUploadDir() + { + $blRet = true; + /** @var d3fileupload_setting $oFileUploadSettings */ + $oFileUploadSettings = oxNew(d3fileupload_setting::class); + $sPath = $oFileUploadSettings->getFullUploadDir(); + + $this->setInitialExecMethod(__METHOD__); + + /** @var d3filesystem $fileSystem */ + $fileSystem = oxNew(d3filesystem::class); + + if ($this->hasExecute()) { + $blRet = $fileSystem->create_dir_tree($sPath); + } else { + $this->setActionLog( + 'MSG', + sprintf( + Registry::getLang()->translateString('D3FILEUPLOAD_UPDATE_UPLOADDIR'), + $sPath + ), + $this->getInitialExecMethod(__METHOD__) + ); + } + + return $blRet; + } + + /** + * @return bool true, if update is required + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + */ + public function hasNoTuples() + { + $blRet = false; + + /** @var d3_cfg_mod $oModCfg */ + $oModCfg = d3_cfg_mod::get($this->sModKey); + if ($oModCfg->getValue('blUpdateHasCheckedForOrphanFiles')) { + return $blRet; + } + + // change this to your inividual check criterias + $sSql = "SELECT count(`oxid`) "; + $sSql .= "FROM `d3fileupload` WHERE 1;"; + + if ($this->getDb()->getOne($sSql) == 0) { + $blRet = true; + } + + return $blRet; + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + * @throws StandardException + */ + public function addFilesWithoutTuples() + { + $blRet = true; + + /** @var d3filesystem $oFileSystem */ + $oFileSystem = oxNew(d3filesystem::class); + + /** @var d3fileupload_setting $oFileUploadSettings */ + $oFileUploadSettings = oxNew(d3fileupload_setting::class); + $sPath = $oFileUploadSettings->getFullUploadDir(); + $aOrderList = $oFileSystem->dirlist($sPath, false, true, true); + + $aQueries = array(); + + foreach ($aOrderList as $aOrder) { + $this->_handleOrderUploadFiles($aQueries, $aOrder); + } + + $this->setInitialExecMethod(__METHOD__); + + if (count($aQueries)) { + foreach ($aQueries as $sSql) { + $this->sqlExecute($sSql); + } + $this->setActionLog('SQL', implode(PHP_EOL . PHP_EOL, $aQueries), $this->getInitialExecMethod(__METHOD__)); + } + + /** @var d3_cfg_mod $oModCfg */ + $oModCfg = d3_cfg_mod::get($this->sModKey); + $oModCfg->setValue('blUpdateHasCheckedForOrphanFiles', 1); + $oModCfg->saveNoLicenseRefresh(); + $this->setUpdateBreak(true); + + return $blRet; + } + + /** + * @param $aQueries + * @param $aOrder + * + * @throws DatabaseConnectionException + */ + public function _handleOrderUploadFiles(&$aQueries, $aOrder) + { + if ($aOrder['type'] == 'd') { + $sOrderId = $aOrder['name']; + if (is_array($aOrder['files'])) { + foreach ($aOrder['files'] as $aOrderArticle) { + if ($aOrderArticle['type'] == 'd') { + $sOrderArticleId = $aOrderArticle['name']; + $this->_handleOrderArticleUploadFiles( + $aQueries, + $aOrderArticle, + $sOrderId, + $sOrderArticleId + ); + } + } + } + } + } + + /** + * @param $aQueries + * @param $aOrderArticle + * @param $sOrderId + * @param $sOrderArticleId + * + * @throws DatabaseConnectionException + */ + protected function _handleOrderArticleUploadFiles(&$aQueries, $aOrderArticle, $sOrderId, $sOrderArticleId) + { + if (is_array($aOrderArticle['files'])) { + foreach ($aOrderArticle['files'] as $aOrderArticleUpload) { + if ($aOrderArticleUpload['type'] == 'f') { + $aQueries[] = $this->_getUploadFileQuery ( + $sOrderId, + $sOrderArticleId, + $aOrderArticleUpload + ); + } + } + } + } + + /** + * @param $sOrderId + * @param $sOrderArticleId + * @param $aFileData + * + * @return string + * @throws DatabaseConnectionException + */ + protected function _getUploadFileQuery($sOrderId, $sOrderArticleId, $aFileData) + { + $oDb = DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC); + $sQuery = "INSERT INTO d3fileupload (". + "`oxid`, ". + "`oxorderid`, ". + "`oxorderarticleid`, ". + "`oxfilename`, ". + "`oxfilesize`, ". + "`oxfilectime`, ". + "`oxuploaddate`) VALUES (". + $oDb->quote(UtilsObject::getInstance()->generateUId()).", ". + $oDb->quote($sOrderId).", ". + $oDb->quote($sOrderArticleId).", ". + $oDb->quote($aFileData['name']).", ". + $oDb->quote($aFileData['size']).", ". + $oDb->quote($aFileData['lastmodunix']).", ". + $oDb->quote(date("Y-m-d H:i:s")).");"; + + return $sQuery; + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ParameterNotFoundException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function hasUnregisteredFiles() + { + return $this->_hasUnregisteredFiles('d3fileupload', array('blocks', 'd3FileRegister')); + } + + /** + * @return bool + * @throws DBALException + * @throws DatabaseConnectionException + * @throws DatabaseErrorException + * @throws StandardException + * @throws d3ShopCompatibilityAdapterException + * @throws d3_cfg_mod_exception + */ + public function showUnregisteredFiles() + { + return $this->_showUnregisteredFiles('d3fileupload', array('blocks', 'd3FileRegister')); + } +} diff --git a/src/build/Gruntfile.js b/src/build/Gruntfile.js new file mode 100644 index 0000000..8f5e3f6 --- /dev/null +++ b/src/build/Gruntfile.js @@ -0,0 +1,13 @@ +module.exports = function(grunt) { + + // measures the time each task takes + require('time-grunt')(grunt); + + var path = require('path'); + + // load grunt config + require('load-grunt-config')(grunt, { + configPath: path.join(process.cwd(), 'grunt'), + }); + +}; \ No newline at end of file diff --git a/src/build/grunt/aliases.yaml b/src/build/grunt/aliases.yaml new file mode 100644 index 0000000..b87d548 --- /dev/null +++ b/src/build/grunt/aliases.yaml @@ -0,0 +1,13 @@ +production: + - "jshint:module" + - "less:module" + - "less:module_unminified" + - "uglify:module" + +development: + - "less:module_sourcemap" + - "less:module_unminified" + - "uglify:module" + +default: + - "production" diff --git a/src/build/grunt/jshint.js b/src/build/grunt/jshint.js new file mode 100644 index 0000000..f8d0d28 --- /dev/null +++ b/src/build/grunt/jshint.js @@ -0,0 +1,18 @@ +module.exports = { + + options: { + curly: true, + eqeqeq: false, + eqnull: true, + browser: true, + globals: { + jQuery: true + } + }, + module: { + src: [ + "sources/js/*.js" + ] + } + +}; diff --git a/src/build/grunt/less.js b/src/build/grunt/less.js new file mode 100644 index 0000000..0ccc490 --- /dev/null +++ b/src/build/grunt/less.js @@ -0,0 +1,54 @@ +module.exports = { + + options: { + yuicompress: true, + optimization: 2, + plugins: [ + new (require('less-plugin-autoprefix'))({ + browsers: [ + "last 10 versions", + "> 0.2%", + "> 0.1% in DE", + ] + }) + ] + }, + + module: { + options: { + sourceMap: false, + sourceMapFileInline: false, + compress: true, + }, + files: { + "../out/src/css/d3fileupload_allthemes.min.css": "sources/less/styles_allthemes.less", + "../out/src/css/d3fileupload_flow.min.css": "sources/less/styles_flow.less", + "../out/src/css/d3fileupload_azure.min.css": "sources/less/styles_azure.less", + } + }, + + module_sourcemap: { + options: { + sourceMap: true, + sourceMapFileInline: true, + compress: true, + }, + files: { + "../out/src/css/d3fileupload_allthemes.min.css": "sources/less/styles_allthemes.less", + "../out/src/css/d3fileupload_flow.min.css": "sources/less/styles_flow.less", + "../out/src/css/d3fileupload_azure.min.css": "sources/less/styles_azure.less", + } + }, + + module_unminified: { + options: { + sourceMap: false, + sourceMapFileInline: false, + compress: false, + }, + files: { + "../out/src/css/d3fileupload_allthemes.css": "sources/less/styles_allthemes.less", + } + }, + +}; diff --git a/src/build/grunt/uglify.js b/src/build/grunt/uglify.js new file mode 100644 index 0000000..9180b83 --- /dev/null +++ b/src/build/grunt/uglify.js @@ -0,0 +1,22 @@ +module.exports = { + + options: { + preserveComments: 'some' + }, + + module: { + options: { + sourceMap: false, + }, + files: [ + { + expand: true, + src: "*.js", + cwd: "sources/js/", + dest: "../out/src/js/", + ext: ".min.js", + extDot: "last" + } + ] + }, +}; diff --git a/src/build/grunt/watch.js b/src/build/grunt/watch.js new file mode 100644 index 0000000..369c90a --- /dev/null +++ b/src/build/grunt/watch.js @@ -0,0 +1,8 @@ +module.exports = { + + development: { + files: [ "sources/**/*.js", "sources/**/*.less" ], + tasks: [ "development" ] + } + +}; \ No newline at end of file diff --git a/src/build/package.json b/src/build/package.json new file mode 100644 index 0000000..ac30acc --- /dev/null +++ b/src/build/package.json @@ -0,0 +1,18 @@ +{ + "name": "D3fileupload", + "version": "4.1.0.0", + "description": "", + "main": "Gruntfile.js", + "keywords": [], + "author": "D3 Data Development (Inh. Thomas Dartsch)", + "devDependencies": { + "grunt": "^0.4.5", + "grunt-contrib-jshint": "^0.11.2", + "grunt-contrib-less": "^1.0.1", + "grunt-contrib-uglify": "^0.9.1", + "grunt-contrib-watch": "^0.6.1", + "less-plugin-autoprefix": "^1.5.1", + "load-grunt-config": "^0.17.1", + "time-grunt": "^1.1.1" + } +} diff --git a/src/files/.htaccess b/src/files/.htaccess new file mode 100644 index 0000000..72e4117 --- /dev/null +++ b/src/files/.htaccess @@ -0,0 +1,15 @@ +# disabling file access + +Options -Indexes + + + + # Apache 2.4 + Require all denied + + + # Apache 2.2 + order deny,allow + deny from all + + \ No newline at end of file diff --git a/src/menu.xml b/src/menu.xml new file mode 100644 index 0000000..8541a11 --- /dev/null +++ b/src/menu.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/metadata.php b/src/metadata.php new file mode 100644 index 0000000..884e506 --- /dev/null +++ b/src/metadata.php @@ -0,0 +1,146 @@ + + * @link http://www.oxidmodule.com + */ + +use D3\ModCfg\Application\Model\d3utils; +use OxidEsales\Eshop\Application\Model\Article; +use OxidEsales\Eshop\Application\Model\Order; +use OxidEsales\Eshop\Core\Email; + +/** + * Metadata version + */ +$sMetadataVersion = '2.0'; + +/** + * Module information + */ +$aModule = array( + 'id' => 'd3fileupload', + 'title' => (class_exists(d3utils::class) ? d3utils::getInstance()->getD3Logo() : 'D³') . ' Fileupload', + 'description' => array( + 'de' => 'Dieses Modul stellt im OXID eShop einen Uploadmanager für den Kunden nach dem '. + 'Bestellvorgang bereit.', + 'en' => '', + ), + 'thumbnail' => 'picture.png', + 'version' => '5.0.0.0', + 'author' => 'D³ Data Development', + 'email' => 'support@shopmodule.com', + 'url' => 'http://www.oxidmodule.com/', + + 'extend' => array( + Order::class => \D3\Fileupload\Modules\Application\Model\d3_oxorder_fileupload::class, + Article::class => \D3\Fileupload\Modules\Application\Model\d3_oxarticle_fileupload::class, + Email::class => \D3\Fileupload\Modules\Application\Model\d3_oxemail_fileupload::class, + ), + + 'controllers' => array( + 'd3fileupload_response' => \D3\Fileupload\Application\Controller\d3fileupload_response::class, + + 'd3fileupload_licence' => \D3\Fileupload\Application\Controller\Admin\d3fileupload_licence::class, + 'd3fileupload_list' => \D3\Fileupload\Application\Controller\Admin\d3fileupload_list::class, + 'd3fileupload_main' => \D3\Fileupload\Application\Controller\Admin\d3fileupload_main::class, + 'd3fileupload_orderupload' => \D3\Fileupload\Application\Controller\Admin\d3fileupload_orderupload::class, + 'd3fileupload_settings' => \D3\Fileupload\Application\Controller\Admin\d3fileupload_settings::class, + + 'd3_cfg_fileuploadlog' => \D3\Fileupload\Application\Controller\Admin\d3_cfg_fileuploadlog::class, + 'd3_cfg_fileuploadlog_list' => \D3\Fileupload\Application\Controller\Admin\d3_cfg_fileuploadlog_list::class, + + 'd3uploadmanager' => \D3\Fileupload\Application\Controller\d3uploadmanager::class, + ), + + 'templates' => array( + 'd3fileupload_orderupload.tpl' => 'd3/fileupload/Application/views/admin/tpl/d3fileupload_orderupload.tpl', + 'd3fileupload_settings.tpl' => 'd3/fileupload/Application/views/admin/tpl/d3fileupload_settings.tpl', + + 'd3uploadmanager.tpl' => 'd3/fileupload/Application/views/tpl/d3uploadmanager.tpl', + + 'd3fileupload_notification_html.tpl' => 'd3/fileupload/Application/views/tpl/email/html/d3fileupload_notification.tpl', + 'd3fileupload_notification_plain.tpl'=> 'd3/fileupload/Application/views/tpl/email/plain/d3fileupload_notification.tpl', + ), + + 'blocks' => array( + array( + 'template' => 'article_main.tpl', + 'block'=>'admin_article_main_form', + 'file'=>'Application/views/admin/blocks/admin_article_main_form.tpl' + ), + array( + 'template' => 'email/html/order_cust.tpl', + 'block'=>'email_html_order_cust_orderemail', + 'file'=>'Application/views/blocks/email/html/email_html_order_cust_orderemail.tpl' + ), + array( + 'template' => 'email/plain/order_cust.tpl', + 'block'=>'email_plain_order_cust_orderemail', + 'file'=>'Application/views/blocks/email/plain/email_plain_order_cust_orderemail.tpl' + ), + array( + 'template' => 'page/checkout/thankyou.tpl', + 'block'=>'checkout_thankyou_info', + 'file'=>'Application/views/blocks/page/checkout/checkout_thankyou_info.tpl' + ), + array( + 'template' => 'page/account/order.tpl', + 'block'=>'account_order_history_cart_items', + 'file'=>'Application/views/blocks/page/account/account_order_history_cart_items.tpl' + ), + ), + + 'events' => array( + 'onActivate' => '\D3\Fileupload\Setup\Events::onActivate', + 'onDeactivate' => '\D3\Fileupload\Setup\Events::onDeactivate' + ), + + 'd3FileRegister' => array( + 'd3/fileupload/IntelliSenseHelper.php', + 'd3/fileupload/metadata.php', + 'd3/fileupload/Application/translations/de/d3fileupload_lang.php', + 'd3/fileupload/Application/translations/en/d3fileupload_lang.php', + 'd3/fileupload/Application/views/admin/de/d3fileupload_lang.php', + 'd3/fileupload/Application/views/admin/en/d3fileupload_lang.php', + 'd3/fileupload/public/d3_fileupload_cron.php', + + 'd3/fileupload/Application/Model/d3fileupload.php', + 'd3/fileupload/Application/Model/d3fileupload_db.php', + 'd3/fileupload/Application/Model/d3fileupload_file.php', + 'd3/fileupload/Application/Model/d3fileupload_setting.php', + 'd3/fileupload/Application/Model/exceptions/d3fileuploadexception.php', + 'd3/fileupload/Application/Model/exceptions/d3fileupload_cronunavailableexception.php', + + 'd3/fileupload/Setup/Events.php', + + // ToDo: try to remove these items in later connector release, can determine from default chapters in metadata + 'd3/fileupload/Modules/Application/Model/d3_oxarticle_fileupload.php', + 'd3/fileupload/Modules/Application/Model/d3_oxorder_fileupload.php', + 'd3/fileupload/Modules/Application/Model/d3_oxemail_fileupload.php', + 'd3/fileupload/Application/Controller/d3uploadmanager.php', + 'd3/fileupload/Application/Controller/d3fileupload_response.php', + 'd3/fileupload/Application/Controller/Admin/d3fileupload_orderupload.php', + 'd3/fileupload/Application/Controller/Admin/d3fileupload_licence.php', + 'd3/fileupload/Application/Controller/Admin/d3fileupload_main.php', + 'd3/fileupload/Application/Controller/Admin/d3fileupload_settings.php', + 'd3/fileupload/Application/Controller/Admin/d3fileupload_list.php', + 'd3/fileupload/Setup/d3fileupload_update.php', + 'd3/fileupload/Application/Controller/Admin/d3_cfg_fileuploadlog.php', + 'd3/fileupload/Application/Controller/Admin/d3_cfg_fileuploadlog_list.php', + ), + + 'd3SetupClasses' => array( + \D3\Fileupload\Setup\d3fileupload_update::class, + ), +); diff --git a/src/out/src/css/d3fileupload.css b/src/out/src/css/d3fileupload.css new file mode 100644 index 0000000..73f7e2c --- /dev/null +++ b/src/out/src/css/d3fileupload.css @@ -0,0 +1,38 @@ +body.cl-account_order div.panel { + margin-bottom: 5px; +} + +body.cl-account_order div.panel-upload { + margin-bottom: 35px; +} + +body.cl-d3uploadmanager div.lineBox.clear { + margin-bottom: 30px !important; +} + +body.cl-d3uploadmanager td.filecell { + border-bottom: 1px solid white; +} +body.cl-d3uploadmanager tr.listitem1 th, +body.cl-d3uploadmanager tr.listitem1 td { + background-color: #FAFAFA; + padding: 2px 3px; +} +body.cl-d3uploadmanager tr.listitem1 td.filecell { + border-color: #F0F0F0; +} +body.cl-d3uploadmanager tr.listitem2 th, +body.cl-d3uploadmanager tr.listitem2 td { + background-color: #F0F0F0; + padding: 2px 3px; +} +body.cl-d3uploadmanager tr.listitem2 td.filecell { + border-color: #FAFAFA; +} +body.cl-d3uploadmanager div.uploadcomment { + display: none; +} +body.cl-d3uploadmanager textarea.uploadcomment { + width: 350px; + height: 70px; +} \ No newline at end of file diff --git a/src/picture.png b/src/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..43e8322fa6f524d6471fc13470f3f7ae5df1de35 GIT binary patch literal 17796 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 CCpXG@q2w^15<^#_HbriBSZH5!ohI{ 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 + + # Apache 2.4 + Require all granted + + + # Apache 2.2 + order deny,allow + allow from all + + \ No newline at end of file diff --git a/src/public/d3_fileupload_cron.php b/src/public/d3_fileupload_cron.php new file mode 100644 index 0000000..b51f626 --- /dev/null +++ b/src/public/d3_fileupload_cron.php @@ -0,0 +1,74 @@ + + * @link http://www.oxidmodule.com + */ + +use D3\Fileupload\Application\Controller\d3fileupload_response; +use OxidEsales\Eshop\Core\Registry; + +/** + * Returns shop base path. + * + * @return string + */ +if (!function_exists('getShopBasePath')) { + function getShopBasePath() + { + return dirname(__FILE__) . '/../../../../'; + } +} + +require_once getShopBasePath() . "/bootstrap.php"; + +// required for recalculating order and generating pdf +define('OX_IS_ADMIN', false); + +if (false == function_exists('isAdmin')) { + /** + * @return bool + */ + function isAdmin() + { + if (defined('OX_IS_ADMIN')) { + return OX_IS_ADMIN; + } + + return true; + } +} + +ob_start(); + +$aTranslation['shp'] = ''; +$aTranslation['key'] = ''; + +if (isset($argv) && is_array($argv) && count($argv)) { + $aParams = array(); + $aTranslation['shp'] = $argv[1]; + $aTranslation['key'] = $argv[2]; + foreach ($aTranslation as $sKey => $mValue) { + $aParams[$sKey] = $mValue; + } + $_GET = $aParams; +} + +try { + /** @var $oResponse d3fileupload_response */ + $oResponse = oxNew(d3fileupload_response::class); + $oResponse->init(); + ob_end_flush(); +} catch (\Exception $oEx) {} + +Registry::getConfig()->pageClose();