Hallo JTL Team
Mit Freude habe ich die Email gesehen, dass es eine neue Shopversion gibt. Guter Zeitpunkt. Es gibt aber einige Punkte, welche mir sehr sauer aufstoßen.
----- SNIP ------
Release 5.2.0
Dieses Update enthält Bugfixes und Sicherheitsupdates!
Dieses Update enthält viele Templateanpassungen!
----- ENDSNIP ------
Sicherheitsupdates sollten meiner Meinung nach zurück portiert werden. Es gibt Leute da funktioniert aus Gründen ein Major Release Upgrade nicht einfach mal eben so. Bitte also Feature und Sicherheitsupdates getrennt behandeln oder zumindest zur letzten Major.
Dazu vielleicht auch ein paar Hinweise zur Versionierung: https://semver.org
Informationen zum Sicherheitsupdate dieses Builds
Uns ist kein Vorfall zu den folgenden Security-Fixes bekannt, es handelt sich ausschließlich um präventive Maßnahmen.
* Security-Fix: diverse XSS Fixes im Backend
* Security-Fix: möglicher information leak in dbeS
----- ENDSNIP ------
Das ist nicht ausreichend. Wie stelle ich fest, ob das bei uns ausgenutzt wurde? Hat es DSGVO Relevanz mit dem Information Leak?
----- SNIP ------
Kompatibilität zu PHP 8.1 hergestellt ❗(PHP 8.1 ist gleichzeitig Mindestversion für Shop 5.2.0)❗
----- ENDSNIP ------
Toll! Nun haben wir sogar wieder die Möglichkeit Ioncube Plugins zu nutzen. Warum aber muss ich neben einem neuen Shop direkt eine neue PHP Version installieren? Hätte man die Kompatibilität nicht wenigstens auf PHP8.0 erstrecken können? Dann hätte man mit dem 5.1.5er Shop auf PHP8.0 updaten können um erstmal die PHP Fehler auszumerzen und dann das Update auf 5.2.1. So darf ich jetzt raten ob die zig Fehlermeldungen vom PHP Upgrade oder vom Shop Upgrade stammen oder vielleicht von einem der Plugins in beliebiger Konstellation. Danke! Ich Debugge gern den kram, für welchen wir sehr viel Geld bezahlen.
----- SNIP ------
* PHP 8.1: Bevor auf PHP 8.1 gewechselt wird (❗PHP 8.1 ist neue Mindestversion für Shop 5.2.0❗), sollte für alle Plugins sichergestellt werden, dass diese auch mit PHP 8.1 kompatibel sind! Für JTL-Plugins im ExtensionStore gilt dies mit den aktuellen Versionen für 5.2 (Neue für 5.2 verfügbare Versionen sollten nach dem Shop-Update sofort unter Meine Käufe geprüft und geupdated werden). Prüfen Sie ggf. im Changelog-Bereich der jeweiligen Extensions im ExtensionStore ob es neue Versionen mit entsprechender Kompatibilität gibt oder schlagen Sie bei den Herstellern die Systemvoraussetzungen der jeweiligen Extensions nach.
----- ENDSNIP ------
Moment einmal. Wir sind auf diesen Extension Store mehr oder minder angewiesen und dann stellt ihr nicht einmal sicher, dass die Plugins kompatibel sind? Wieviel Vorlauf hatten die Entwickler? Hier wieder ein Problem mit Sicherheitsupdates....
Ok. Genug aufgeregt. Dann setzen wir doch mal einen Testshop auf. Das Procedere führen wir so seit Release von Shop4 durch und manchmal klappt das Upgrade ja sogar Fehlerfrei.
Heute bekomme ich weiße Seiten im Testshop. Im Backend hagelt es Fehlermeldungen. Beispiel gefällig?
/admin/status
Fatal error: Uncaught TypeError: version_compare(): Argument #1 ($version1) must be of type string, null given in /var/www/html/includes/src/Update/DBMigrationHelper.php:768 Stack trace: #0 /var/www/html/includes/src/Update/DBMigrationHelper.php(768): version_compare(NULL, '5.6', '>=') #1 /var/www/html/includes/src/Backend/Status.php(127): JTL\Update\DBMigrationHelper::getDBStruct(true) #2 /var/www/html/admin/templates_c/89/fb/bf/89fbbfc4f9538d29e5ac0fcb2c3826345c01085d_0.file.status.tpl.php(81): JTL\Backend\Status->validDatabaseStruct() #3 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php(123): content_63c7c0d2832b78_76980739(Object(Smarty_Internal_Template)) #4 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php(114): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template)) #5 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php(217): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #6 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(238): Smarty_Internal_Template->render(false, 0) #7 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(116): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0) #8 /var/www/html/includes/src/Smarty/JTLSmarty.php(344): Smarty_Internal_TemplateBase->fetch('status.tpl') #9 /var/www/html/includes/src/Router/Controller/Backend/StatusController.php(30): JTL\Smarty\JTLSmarty->getResponse('status.tpl') #10 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\StatusController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #11 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #13 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #15 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #16 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #17 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #18 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #19 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #21 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #23 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #24 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #25 {main} thrown in /var/www/html/includes/src/Update/DBMigrationHelper.php on line 768
/admin/searchconfig
NiceDB.php:1458 NiceDB exception executing sql:
string(36) "SHOW VARIABLES LIKE 'innodb_version'"
NiceDB.php:1462 string(240) "SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SHOW VARIABLES LIKE 'innodb_version'' at line 1"
---- Content shrinked ----
Warning: Attempt to read property "Value" on null in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php on line 38
Fatal error: Uncaught TypeError: version_compare(): Argument #1 ($version1) must be of type string, null given in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php:126 Stack trace: #0 /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php(126): version_compare(NULL, '5.6', '>=') #1 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\SearchConfigController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #2 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #3 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #4 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #5 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #6 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #7 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #8 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #9 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #10 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #11 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #13 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #15 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #16 {main} thrown in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php on line 126
/admin/checkbox
Fatal error: Uncaught InvalidArgumentException: Cannot load customer group with id 2 in /var/www/html/includes/src/Customer/CustomerGroup.php:158 Stack trace: #0 /var/www/html/includes/src/Customer/CustomerGroup.php(597): JTL\Customer\CustomerGroup->loadFromDB(2) #1 /var/www/html/admin/templates_c/9d/64/d4/9d64d401788b794b2b698c7384fde52c365653e2_0.file.checkbox.tpl.php(200): JTL\Customer\CustomerGroup::getNameByID(2) #2 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php(123): content_63c7c28bb54369_78579558(Object(Smarty_Internal_Template)) #3 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php(114): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template)) #4 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php(217): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #5 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(238): Smarty_Internal_Template->render(false, 0) #6 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(116): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0) #7 /var/www/html/includes/src/Smarty/JTLSmarty.php(344): Smarty_Internal_TemplateBase->fetch('checkbox.tpl') #8 /var/www/html/includes/src/Router/Controller/Backend/CheckboxController.php(96): JTL\Smarty\JTLSmarty->getResponse('checkbox.tpl') #9 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\CheckboxController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #10 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #11 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #12 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #13 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #14 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #15 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #16 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #17 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #18 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #19 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #21 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #23 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #24 {main} thrown in /var/www/html/includes/src/Customer/CustomerGroup.php on line 158
Im Frontend sieht es ja nachdem man Redis und Filecache gelöscht hat sogar fast gut aus:
Warning: Undefined array key "header_full_width" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1104
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/93/e2/1f/93e21f983ea0a3cb619d062e0abacd5eb9edb9e0_0.file.header_nav_search.tpl.phpon line 108
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1072
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1088
Oh warte! Das ist ja gar nicht unser Template. Das ist ja das Nova. Moment auch das haben wir gleich:
Warning: Undefined array key "theme" in /var/www/html/includes/src/Template/TemplateService.php on line 217
Warning: Trying to access array offset on value of type null in /var/www/html/includes/src/Template/TemplateService.php on line 217
Fatal error: Uncaught Error: Typed property JTL\Template\Paths::$realRelThemeDir must not be accessed before initialization in /var/www/html/includes/src/Template/Paths.php:453 Stack trace: #0 /var/www/html/includes/src/Router/Controller/AbstractController.php(471): JTL\Template\Paths->getRealRelThemeDir() #1 /var/www/html/includes/src/Router/Controller/AbstractController.php(398): JTL\Router\Controller\AbstractController->assignTemplateData() #2 /var/www/html/includes/src/Router/Controller/PageController.php(236): JTL\Router\Controller\AbstractController->preRender() #3 /var/www/html/includes/src/Router/Controller/RootController.php(40): JTL\Router\Controller\PageController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\JTLSmarty)) #4 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\RootController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\JTLSmarty)) #5 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #6 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #7 /var/www/html/includes/src/Router/Middleware/OptinMiddleware.php(49): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #8 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\OptinMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #9 /var/www/html/includes/src/Router/Middleware/CurrencyCheckMiddleware.php(26): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #10 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CurrencyCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #11 /var/www/html/includes/src/Router/Middleware/LocaleCheckMiddleware.php(34): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\LocaleCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #13 /var/www/html/includes/src/Router/Middleware/CartcheckMiddleware.php(25): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CartcheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #15 /var/www/html/includes/src/Router/Middleware/WishlistCheckMiddleware.php(24): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #16 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WishlistCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #17 /var/www/html/includes/src/Router/Middleware/SSLRedirectMiddleware.php(43): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #18 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\SSLRedirectMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #19 /var/www/html/includes/src/Router/Middleware/MaintenanceModeMiddleware.php(40): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\MaintenanceModeMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #21 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #23 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #24 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #25 /var/www/html/includes/src/Router/Router.php(659): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #26 /var/www/html/includes/src/Shop.php(455): JTL\Router\Router->dispatch(Object(JTL\Smarty\JTLSmarty)) #27 /var/www/html/index.php(7): JTL\Shop::dispatch() #28 {main} thrown in /var/www/html/includes/src/Template/Paths.php on line 453
Wir sind nicht eure Betatester! Wenn ihr das wollt, fragt doch einfach. Gegen eine Gebühr, welche sich an euren Sätzen anpasst ist mein Chef sicher bereit einen Entwickler zur Verfügung zu stellen.
Ich bin extrem sauer und meine Geduld neigt sich langsam dem Ende zu.
Mit Freude habe ich die Email gesehen, dass es eine neue Shopversion gibt. Guter Zeitpunkt. Es gibt aber einige Punkte, welche mir sehr sauer aufstoßen.
----- SNIP ------
Release 5.2.0
Dieses Update enthält Bugfixes und Sicherheitsupdates!
Dieses Update enthält viele Templateanpassungen!
----- ENDSNIP ------
Sicherheitsupdates sollten meiner Meinung nach zurück portiert werden. Es gibt Leute da funktioniert aus Gründen ein Major Release Upgrade nicht einfach mal eben so. Bitte also Feature und Sicherheitsupdates getrennt behandeln oder zumindest zur letzten Major.
Dazu vielleicht auch ein paar Hinweise zur Versionierung: https://semver.org
- MAJOR version when you make incompatible API changes - Ist hier geschehen. Man muss das Template anpassen und die PHP Version
- MINOR version when you add functionality in a backwards compatible manner
- PATCH version when you make backwards compatible bug fixes - Dieses Update hätte ich mir gewünscht für Sicherheitslücken
Informationen zum Sicherheitsupdate dieses Builds
Uns ist kein Vorfall zu den folgenden Security-Fixes bekannt, es handelt sich ausschließlich um präventive Maßnahmen.
* Security-Fix: diverse XSS Fixes im Backend
* Security-Fix: möglicher information leak in dbeS
----- ENDSNIP ------
Das ist nicht ausreichend. Wie stelle ich fest, ob das bei uns ausgenutzt wurde? Hat es DSGVO Relevanz mit dem Information Leak?
----- SNIP ------
Kompatibilität zu PHP 8.1 hergestellt ❗(PHP 8.1 ist gleichzeitig Mindestversion für Shop 5.2.0)❗
----- ENDSNIP ------
Toll! Nun haben wir sogar wieder die Möglichkeit Ioncube Plugins zu nutzen. Warum aber muss ich neben einem neuen Shop direkt eine neue PHP Version installieren? Hätte man die Kompatibilität nicht wenigstens auf PHP8.0 erstrecken können? Dann hätte man mit dem 5.1.5er Shop auf PHP8.0 updaten können um erstmal die PHP Fehler auszumerzen und dann das Update auf 5.2.1. So darf ich jetzt raten ob die zig Fehlermeldungen vom PHP Upgrade oder vom Shop Upgrade stammen oder vielleicht von einem der Plugins in beliebiger Konstellation. Danke! Ich Debugge gern den kram, für welchen wir sehr viel Geld bezahlen.
----- SNIP ------
* PHP 8.1: Bevor auf PHP 8.1 gewechselt wird (❗PHP 8.1 ist neue Mindestversion für Shop 5.2.0❗), sollte für alle Plugins sichergestellt werden, dass diese auch mit PHP 8.1 kompatibel sind! Für JTL-Plugins im ExtensionStore gilt dies mit den aktuellen Versionen für 5.2 (Neue für 5.2 verfügbare Versionen sollten nach dem Shop-Update sofort unter Meine Käufe geprüft und geupdated werden). Prüfen Sie ggf. im Changelog-Bereich der jeweiligen Extensions im ExtensionStore ob es neue Versionen mit entsprechender Kompatibilität gibt oder schlagen Sie bei den Herstellern die Systemvoraussetzungen der jeweiligen Extensions nach.
----- ENDSNIP ------
Moment einmal. Wir sind auf diesen Extension Store mehr oder minder angewiesen und dann stellt ihr nicht einmal sicher, dass die Plugins kompatibel sind? Wieviel Vorlauf hatten die Entwickler? Hier wieder ein Problem mit Sicherheitsupdates....
Ok. Genug aufgeregt. Dann setzen wir doch mal einen Testshop auf. Das Procedere führen wir so seit Release von Shop4 durch und manchmal klappt das Upgrade ja sogar Fehlerfrei.
Heute bekomme ich weiße Seiten im Testshop. Im Backend hagelt es Fehlermeldungen. Beispiel gefällig?
/admin/status
Fatal error: Uncaught TypeError: version_compare(): Argument #1 ($version1) must be of type string, null given in /var/www/html/includes/src/Update/DBMigrationHelper.php:768 Stack trace: #0 /var/www/html/includes/src/Update/DBMigrationHelper.php(768): version_compare(NULL, '5.6', '>=') #1 /var/www/html/includes/src/Backend/Status.php(127): JTL\Update\DBMigrationHelper::getDBStruct(true) #2 /var/www/html/admin/templates_c/89/fb/bf/89fbbfc4f9538d29e5ac0fcb2c3826345c01085d_0.file.status.tpl.php(81): JTL\Backend\Status->validDatabaseStruct() #3 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php(123): content_63c7c0d2832b78_76980739(Object(Smarty_Internal_Template)) #4 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php(114): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template)) #5 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php(217): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #6 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(238): Smarty_Internal_Template->render(false, 0) #7 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(116): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0) #8 /var/www/html/includes/src/Smarty/JTLSmarty.php(344): Smarty_Internal_TemplateBase->fetch('status.tpl') #9 /var/www/html/includes/src/Router/Controller/Backend/StatusController.php(30): JTL\Smarty\JTLSmarty->getResponse('status.tpl') #10 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\StatusController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #11 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #13 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #15 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #16 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #17 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #18 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #19 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #21 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #23 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #24 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #25 {main} thrown in /var/www/html/includes/src/Update/DBMigrationHelper.php on line 768
/admin/searchconfig
NiceDB.php:1458 NiceDB exception executing sql:
string(36) "SHOW VARIABLES LIKE 'innodb_version'"
NiceDB.php:1462 string(240) "SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SHOW VARIABLES LIKE 'innodb_version'' at line 1"
---- Content shrinked ----
Warning: Attempt to read property "Value" on null in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php on line 38
Fatal error: Uncaught TypeError: version_compare(): Argument #1 ($version1) must be of type string, null given in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php:126 Stack trace: #0 /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php(126): version_compare(NULL, '5.6', '>=') #1 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\SearchConfigController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #2 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #3 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #4 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #5 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #6 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #7 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #8 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #9 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #10 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #11 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #13 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #15 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #16 {main} thrown in /var/www/html/includes/src/Router/Controller/Backend/SearchConfigController.php on line 126
/admin/checkbox
Fatal error: Uncaught InvalidArgumentException: Cannot load customer group with id 2 in /var/www/html/includes/src/Customer/CustomerGroup.php:158 Stack trace: #0 /var/www/html/includes/src/Customer/CustomerGroup.php(597): JTL\Customer\CustomerGroup->loadFromDB(2) #1 /var/www/html/admin/templates_c/9d/64/d4/9d64d401788b794b2b698c7384fde52c365653e2_0.file.checkbox.tpl.php(200): JTL\Customer\CustomerGroup::getNameByID(2) #2 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_resource_base.php(123): content_63c7c28bb54369_78579558(Object(Smarty_Internal_Template)) #3 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_template_compiled.php(114): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template)) #4 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php(217): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template)) #5 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(238): Smarty_Internal_Template->render(false, 0) #6 /var/www/html/includes/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php(116): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0) #7 /var/www/html/includes/src/Smarty/JTLSmarty.php(344): Smarty_Internal_TemplateBase->fetch('checkbox.tpl') #8 /var/www/html/includes/src/Router/Controller/Backend/CheckboxController.php(96): JTL\Smarty\JTLSmarty->getResponse('checkbox.tpl') #9 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\Backend\CheckboxController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\BackendSmarty)) #10 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #11 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #12 /var/www/html/includes/src/Router/Middleware/WizardCheckMiddleware.php(45): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #13 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WizardCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #14 /var/www/html/includes/src/Router/Middleware/UpdateCheckMiddleware.php(67): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #15 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\UpdateCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #16 /var/www/html/includes/src/Router/Middleware/AuthMiddleware.php(55): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #17 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\AuthMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #18 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #19 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #21 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/src/Router/BackendRouter.php(310): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #23 /var/www/html/admin/index.php(16): JTL\Router\BackendRouter->dispatch() #24 {main} thrown in /var/www/html/includes/src/Customer/CustomerGroup.php on line 158
Im Frontend sieht es ja nachdem man Redis und Filecache gelöscht hat sogar fast gut aus:
Warning: Undefined array key "header_full_width" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1104
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/93/e2/1f/93e21f983ea0a3cb619d062e0abacd5eb9edb9e0_0.file.header_nav_search.tpl.phpon line 108
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1072
Warning: Undefined array key "mobile_search_type" in /var/www/html/templates_c/NOVA/5a/14/b6/5a14b6fae5563236670a22c3357d3114610b9f6d_0.file.header.tpl.php on line 1088
Oh warte! Das ist ja gar nicht unser Template. Das ist ja das Nova. Moment auch das haben wir gleich:
Warning: Undefined array key "theme" in /var/www/html/includes/src/Template/TemplateService.php on line 217
Warning: Trying to access array offset on value of type null in /var/www/html/includes/src/Template/TemplateService.php on line 217
Fatal error: Uncaught Error: Typed property JTL\Template\Paths::$realRelThemeDir must not be accessed before initialization in /var/www/html/includes/src/Template/Paths.php:453 Stack trace: #0 /var/www/html/includes/src/Router/Controller/AbstractController.php(471): JTL\Template\Paths->getRealRelThemeDir() #1 /var/www/html/includes/src/Router/Controller/AbstractController.php(398): JTL\Router\Controller\AbstractController->assignTemplateData() #2 /var/www/html/includes/src/Router/Controller/PageController.php(236): JTL\Router\Controller\AbstractController->preRender() #3 /var/www/html/includes/src/Router/Controller/RootController.php(40): JTL\Router\Controller\PageController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\JTLSmarty)) #4 /var/www/html/includes/src/Router/Strategy/SmartyStrategy.php(40): JTL\Router\Controller\RootController->getResponse(Object(Laminas\Diactoros\ServerRequest), Array, Object(JTL\Smarty\JTLSmarty)) #5 /var/www/html/includes/vendor/league/route/src/Route.php(167): JTL\Router\Strategy\SmartyStrategy->invokeRouteCallable(Object(League\Route\Route), Object(Laminas\Diactoros\ServerRequest)) #6 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): League\Route\Route->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #7 /var/www/html/includes/src/Router/Middleware/OptinMiddleware.php(49): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #8 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\OptinMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #9 /var/www/html/includes/src/Router/Middleware/CurrencyCheckMiddleware.php(26): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #10 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CurrencyCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #11 /var/www/html/includes/src/Router/Middleware/LocaleCheckMiddleware.php(34): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #12 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\LocaleCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #13 /var/www/html/includes/src/Router/Middleware/CartcheckMiddleware.php(25): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #14 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\CartcheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #15 /var/www/html/includes/src/Router/Middleware/WishlistCheckMiddleware.php(24): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #16 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\WishlistCheckMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #17 /var/www/html/includes/src/Router/Middleware/SSLRedirectMiddleware.php(43): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #18 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\SSLRedirectMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #19 /var/www/html/includes/src/Router/Middleware/MaintenanceModeMiddleware.php(40): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #20 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): JTL\Router\Middleware\MaintenanceModeMiddleware->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #21 /var/www/html/includes/vendor/league/route/src/Strategy/ApplicationStrategy.php(37): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #22 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(59): Psr\Http\Server\MiddlewareInterface@anonymous->process(Object(Laminas\Diactoros\ServerRequest), Object(League\Route\Dispatcher)) #23 /var/www/html/includes/vendor/league/route/src/Dispatcher.php(53): League\Route\Dispatcher->handle(Object(Laminas\Diactoros\ServerRequest)) #24 /var/www/html/includes/vendor/league/route/src/Router.php(111): League\Route\Dispatcher->dispatchRequest(Object(Laminas\Diactoros\ServerRequest)) #25 /var/www/html/includes/src/Router/Router.php(659): League\Route\Router->dispatch(Object(Laminas\Diactoros\ServerRequest)) #26 /var/www/html/includes/src/Shop.php(455): JTL\Router\Router->dispatch(Object(JTL\Smarty\JTLSmarty)) #27 /var/www/html/index.php(7): JTL\Shop::dispatch() #28 {main} thrown in /var/www/html/includes/src/Template/Paths.php on line 453
Wir sind nicht eure Betatester! Wenn ihr das wollt, fragt doch einfach. Gegen eine Gebühr, welche sich an euren Sätzen anpasst ist mein Chef sicher bereit einen Entwickler zur Verfügung zu stellen.
Ich bin extrem sauer und meine Geduld neigt sich langsam dem Ende zu.