QUIQQER issueshttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues2023-10-26T08:33:26Zhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1300Mailqueue erstellt tausende leere Ordner2023-10-26T08:33:26ZJan WennrichMailqueue erstellt tausende leere OrdnerBei mir lokal und in einem Kundensystem habe ich im Ordner `var/mailQueue` tausende leere Ordner gefunden:
```
root@[redacted] /var/www/vhosts/[redacted] # l var/mailQueue
total 27768
drwxr-xr-x 6909 www-data www-data 135168 Sep 26 13...Bei mir lokal und in einem Kundensystem habe ich im Ordner `var/mailQueue` tausende leere Ordner gefunden:
```
root@[redacted] /var/www/vhosts/[redacted] # l var/mailQueue
total 27768
drwxr-xr-x 6909 www-data www-data 135168 Sep 26 13:42 ./
drwxr-xr-x 18 www-data www-data 4096 Sep 26 13:00 ../
drwxr-xr-x 2 www-data www-data 4096 May 11 19:10 1/
drwxr-xr-x 2 www-data www-data 4096 May 12 14:29 10/
drwxr-xr-x 2 www-data www-data 4096 May 14 18:20 100/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 09:31 1000/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 09:32 1001/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 10:09 1002/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 10:09 1003/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 10:19 1004/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 10:53 1005/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 11:03 1006/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 11:17 1007/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 11:17 1008/
drwxr-xr-x 2 www-data www-data 4096 Jun 22 11:17 1009/
drwxr-xr-x 2 www-data www-data 4096 May 14 18:57 101/
```
Insgesamt sind es 6908 Ordner:
```
root@[redacted] /var/www/vhosts/[redacted] # ls -l var/mailQueue | wc -l
6908
```Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1299Mail-Test verwendet nicht alle Daten zum Testen2023-10-26T08:33:02ZJan WennrichMail-Test verwendet nicht alle Daten zum TestenWenn man den Mail-Test (1) ausführt, werden die Daten aus den SMTP-Daten-Feldern (2) verwendet, um eine Test-Mail zu versenden.
Die geänderten Daten aus den Absender- und Empfänger-Feldern (3) werden allerdings nicht verwendet. Stattde...Wenn man den Mail-Test (1) ausführt, werden die Daten aus den SMTP-Daten-Feldern (2) verwendet, um eine Test-Mail zu versenden.
Die geänderten Daten aus den Absender- und Empfänger-Feldern (3) werden allerdings nicht verwendet. Stattdessen werden die gespeicherten Daten verwendet.
Die Daten aus (3) sollten auch "live" aus den Feldern geholt und zum Testen verwendet werden.
![image](/uploads/4ad4addd8c2c49649a88459311aa28ef/image.png)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1305Datumsangaben News2023-10-23T12:39:13ZMark LeibleinDatumsangaben NewsDas ist vermutlich ein zentrale Quiqqer-Ding: Das "am" bei der Datumsangabe sind bissl komisch aus:
![grafik.png](/uploads/0c7bb3310645bb64a4745e3022a06438/grafik.png)Das ist vermutlich ein zentrale Quiqqer-Ding: Das "am" bei der Datumsangabe sind bissl komisch aus:
![grafik.png](/uploads/0c7bb3310645bb64a4745e3022a06438/grafik.png)Moritz ScholzMoritz Scholzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1304Datei (Bild) ersetzen2023-10-22T14:02:25ZMark LeibleinDatei (Bild) ersetzenIst eigentlich bekannt, dass die Funktion "Datei ersetzen" (v.a. für Bilder im Media-Ordner) nicht funktioniert? Egal wie rum man es anstellt, die Bilder werden einfach nicht ausgetauscht.Ist eigentlich bekannt, dass die Funktion "Datei ersetzen" (v.a. für Bilder im Media-Ordner) nicht funktioniert? Egal wie rum man es anstellt, die Bilder werden einfach nicht ausgetauscht.Moritz ScholzMoritz Scholzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1302Update oder Setup schreibt Config neu oder entfernt Kommentare2023-09-29T10:03:08ZJan WennrichUpdate oder Setup schreibt Config neu oder entfernt KommentareIch habe in eine Config-Datei (`etc/plugins/my/plugin/conf.ini.php`) Kommentare geschrieben:
```ini
[dev]
;foo="279358486"
;bar="105"
foo="279358471"
bar="76"
```
Wenn ich ein Update ausführe, werden die Kommentare entfernt.
Ist die Ur...Ich habe in eine Config-Datei (`etc/plugins/my/plugin/conf.ini.php`) Kommentare geschrieben:
```ini
[dev]
;foo="279358486"
;bar="105"
foo="279358471"
bar="76"
```
Wenn ich ein Update ausführe, werden die Kommentare entfernt.
Ist die Ursache hierfür, dass Kommentare entfernt werden oder allgemein alle Config Dateien neu geschrieben werden?
Beides sollte aus meiner Sicht nicht notwendig sein und macht das Update langsam.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1293Die Version von QUIQQER in QUIQQER Einstellungen entspricht nicht der Version...2023-09-25T11:00:13ZMichael DanielczokDie Version von QUIQQER in QUIQQER Einstellungen entspricht nicht der Version in config und composer.json DateienIch habe die neuste QUIQQER Version `1.8.17`. In QUIQQER Einstellungen ist `1.8.*` vorausgewählt
![image](/uploads/ff8a5438c7fb1affe129f217a122e289/image.png)
obwohl in `etc/conf.ini.php` und `var/composer/composer.json` die Version `1...Ich habe die neuste QUIQQER Version `1.8.17`. In QUIQQER Einstellungen ist `1.8.*` vorausgewählt
![image](/uploads/ff8a5438c7fb1affe129f217a122e289/image.png)
obwohl in `etc/conf.ini.php` und `var/composer/composer.json` die Version `1.*` eingestellt ist.1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1287Event-System PSR-14 kompatibel machen2023-08-23T09:12:04ZJan WennrichEvent-System PSR-14 kompatibel machenVon der PHP Framework Interop Group (PHP-FIG) gibt es mit [PSR-14](https://www.php-fig.org/psr/psr-14/) einen Standard für die Umsetzung eines Event Dispatchers:
>>>
The goal of this PSR is to establish a common mechanism for event-base...Von der PHP Framework Interop Group (PHP-FIG) gibt es mit [PSR-14](https://www.php-fig.org/psr/psr-14/) einen Standard für die Umsetzung eines Event Dispatchers:
>>>
The goal of this PSR is to establish a common mechanism for event-based extension and collaboration so that libraries and components may be reused more freely between various applications and frameworks.
>>>
Ich habe den Standard überflogen und der größte Unterschied zum QUIQQER-Event-System ist, dass die Events nicht mutwillig durch Strings und ein Array von Parametern definiert werden.
Stattdessen werden Events durch Klassen und Interfaces definiert:
Statt:
```php
QUI::getEvents()->fireEvent(
'onBricksGetAreaByProject',
[$this, $Project, &$bricks]
);
```
Würde man folgendes machen:
```php
QUI::getEvents()->dispatch(
new BricksGetAreaByProjectEvent($this, $Project, &$bricks)
);
```
Der große Vorteil dabei ist, dass Listener und Emitter die genaue Signatur des Events kennen und gezwungen werden diese einzuhalten.
Mit unserem Ansatz muss man sich darauf verlassen, dass jeder, der das Event auslöst, die genauen Parameter (und deren Typen) kennt und diese auch korrekt verwendet.
Es gibt auch schon einige fertige Event Dispatching System, die man adaptieren könnte:
- https://packagist.org/packages/symfony/event-dispatcher
- https://packagist.org/packages/carlosas/simple-event-dispatcher
- https://packagist.org/packages/league/eventHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1280Update: Liste der aktualisierten Pakete sehr unübersichtlich2023-08-17T19:17:46ZJan WennrichUpdate: Liste der aktualisierten Pakete sehr unübersichtlichWenn ich ein Update durchführe, bei dem mehrere Pakete aktualisiert werden, wird es schnell unübersichtlich:
```
Dependency resolution completed in 0.012 seconds
Analyzed 936 packages to resolve dependencies
Analyzed 4295 rules to resol...Wenn ich ein Update durchführe, bei dem mehrere Pakete aktualisiert werden, wird es schnell unübersichtlich:
```
Dependency resolution completed in 0.012 seconds
Analyzed 936 packages to resolve dependencies
Analyzed 4295 rules to resolve dependencies
Lock file operations: 0 installs, 13 updates, 0 removals
Updates: quiqqer/backendsearch:1.2.0, quiqqer/bricks:1.9.1, masterminds/html5:2.8.1, guzzlehttp/psr7:2.6.0, quiqqer/matomo:1.2.0, quiqqer/gdpr:1.1.0, quiqqer/products:1.8.3, quiqqer/product-bricks:1.0.0, quiqqer/erp:1.6.1, quiqqer/contact:1.4.0, guzzlehttp/promises:2.0.1, google/apiclient-services:v0.311.0, [redacted]/core:dev-main f99a04e
Installing dependencies from lock file
Package operations: 0 installs, 13 updates, 0 removals
Updates: quiqqer/bricks:1.9.1, quiqqer/backendsearch:1.2.0, masterminds/html5:2.8.1, guzzlehttp/psr7:2.6.0, quiqqer/matomo:1.2.0, quiqqer/gdpr:1.1.0, quiqqer/erp:1.6.1, quiqqer/products:1.8.3, quiqqer/product-bricks:1.0.0, quiqqer/contact:1.4.0, guzzlehttp/promises:2.0.1, google/apiclient-services:v0.311.0, [redacted]/core:dev-main f99a04e
- Syncing [redacted]/core (dev-main f99a04e) into cache
```1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1240Avatar Placeholder2023-08-17T13:25:45ZMichael DanielczokAvatar PlaceholderWenn ein Benutzer kein Bild hat, wird unsrer allgemeines Placeholder-Bilder verwendet. Das allgemeine Placeholder-Bild ist meistens nicht passend. Man kann zwar in `Einstellungen --> Benutzer` das Standard Avatar-Bild auswählen, aber da...Wenn ein Benutzer kein Bild hat, wird unsrer allgemeines Placeholder-Bilder verwendet. Das allgemeine Placeholder-Bild ist meistens nicht passend. Man kann zwar in `Einstellungen --> Benutzer` das Standard Avatar-Bild auswählen, aber das hat nur die Auswirkung auf die Icon in der `_Benutzer-Leiste_.
![image](/uploads/4f4703a8cd3cfc0a2d561efb6eb2ff33/image.png)
# Vorschlag
Methode: `\QUI\Users\User::getAvatar`
* [ ] User-Placeholder Bild einführen
* [ ] Wenn man `$User->getAvatar()` macht und der Benutzer kein Bild hat, soll das _user placeholder avatar_ zurückgegeben werden. Fallback ist weiterhin das allgemeine Placeholder-Bild.
**Alternative**
Die schon bereits existierenden Eigenschaften benutzen. Problematisch ist jedoch, dass das von `quiqqer/frontend-users` kommt und nicht immer installiert sein muss :thinking: Ggf müsste das mit @mor überlegt werden. Das Ticket bezieht sich zwar auf pcsg/kunden/freemom/umsetzung#322, ist aber meiner Meinung nach für alle Projekte relevant, wo man die Methode `getAvatar()` benutzt (z.B. Blog-Liste).Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1281Update Filesystem-Check: Standardoption bei Problemen sollte Abbruch sein (?)2023-08-14T12:18:23ZJan WennrichUpdate Filesystem-Check: Standardoption bei Problemen sollte Abbruch sein (?)Wenn ich ein Update durchführe und es gibt Probleme mit dem Filesystem, dann wird diese Frage gestellt:
> Should the update be executed anyway? [Y,n]:
Gebe ich nichts ein und drücke <kbd>Enter</kbd>, wird die Ausführung fortgesetzt. ...Wenn ich ein Update durchführe und es gibt Probleme mit dem Filesystem, dann wird diese Frage gestellt:
> Should the update be executed anyway? [Y,n]:
Gebe ich nichts ein und drücke <kbd>Enter</kbd>, wird die Ausführung fortgesetzt.
Aus "Sicherheitsgründen" sollte standardmäßig besser abgebrochen werden (oder?)
Aus meiner Sicht wäre es besser, wenn ich explizit <kbd>y</kbd> eintippen müsste, damit es weiter geht.1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1249composer.json wird bei fehlerhaftem Inhalt zerstört2023-08-14T12:18:23ZJan Wennrichcomposer.json wird bei fehlerhaftem Inhalt zerstört1. Ich editiere eine `var/composer/composer.json` Datei und mache dabei Syntax-Fehler
2. Ich führe ein Update direkt über Composer aus: `php8.0 composer.phar update`
3. Composer beschwert sich über die fehlerhafte Syntax:
```
sudo -u w...1. Ich editiere eine `var/composer/composer.json` Datei und mache dabei Syntax-Fehler
2. Ich führe ein Update direkt über Composer aus: `php8.0 composer.phar update`
3. Composer beschwert sich über die fehlerhafte Syntax:
```
sudo -u www-data php8.0 composer.phar update
In JsonFile.php line 347:
"./composer.json" does not contain valid JSON
Parse error on line 81:
...": "^1.0.8" "quiqqer\/history":
---------------------^
Expected one of: 'EOF', '}', ':', ',', ']'
```
Führe ich hingegen das Update über `./console update` aus, wird kein Fehler ausgegeben.
Schaue ich mir danach die `composer.json` Datei an, ist diese durcheinander geraten:
- Alle Abhängigkeiten stehen in der `require`-Sektion
- Der Paketname, Autoren, Version, etc. wurde entfernt
- Die `minimum-stability` wurde geändert
- und noch Weiteres
Das Update sollte auch abbrechen und den Fehler ausgeben.1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1279Update einzelner Pakete produziert keine Ausgabe2023-08-14T12:18:23ZJan WennrichUpdate einzelner Pakete produziert keine AusgabeDas Update wird erfolgreich durchgeführt, aber es wird nicht ausgegeben was passiert ist.
Außerdem wird scheinbar kein Setup ausgeführt?
Das Paket selbst wurde aber aktualisiert.
```
root@[redacted] /var/www/vhosts/[redacted].de/www....Das Update wird erfolgreich durchgeführt, aber es wird nicht ausgegeben was passiert ist.
Außerdem wird scheinbar kein Setup ausgeführt?
Das Paket selbst wurde aber aktualisiert.
```
root@[redacted] /var/www/vhosts/[redacted].de/www.[redacted].de # sudo -u www-data ./console update --package=[redacted]/matching
_______ _________ _______ _______ _______ _______
( ___ )|\ /|\__ __/( ___ )( ___ )( ____ \( ____ )
| ( ) || ) ( | ) ( | ( ) || ( ) || ( \/| ( )|
| | | || | | | | | | | | || | | || (__ | (____)|
| | | || | | | | | | | | || | | || __) | __)
| | /\| || | | | | | | | /\| || | /\| || ( | (\ (
| (_\ \ || (___) |___) (___| (_\ \ || (_\ \ || (____/\| ) \ \__
(____\/_)(_______)\_______/(____\/_)(____\/_)(_______/|/ \__/
Welcome to QUIQQER Version 1.8.10 - Last Update: 02.08.23 - PHP Version: 8.0.28
QUIQQER Copyright(C) 2023 PCSG - Computer & Internet Service OHG - www . pcsg . de
This program comes with ABSOLUTELY NO WARRANTY; for details type `./console licence` .
This is free software, and you are welcome to redistribute it under certain conditions;
visit www . quiqqer . com for details .
- Starte Update:
- Filesystem check ...
The update has found inconsistencies in the system!
Should the update be executed anyway? [Y,n]:
- Die Aktualisierung wurde durchgeführt
- Generiere Server dateien .htaccess und NGINX
Everything is done. Thank you for using QUIQQER
```1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1261quiqqer/demodata Requirement entfernen oder aufweichen2023-08-14T10:58:39ZJan Wennrichquiqqer/demodata Requirement entfernen oder aufweichenIn der `composer.json` wird `"quiqqer\/demodata": "^1.0|dev-master|dev-dev",` requiret.
Eine Version `^1.0` von `quiqqer/demodata` gibt es nicht.
Standardmäßig erlaubt Composer keine instabilen Versionen.
Somit kann `quiqqer/quiqqe...In der `composer.json` wird `"quiqqer\/demodata": "^1.0|dev-master|dev-dev",` requiret.
Eine Version `^1.0` von `quiqqer/demodata` gibt es nicht.
Standardmäßig erlaubt Composer keine instabilen Versionen.
Somit kann `quiqqer/quiqqer` nicht requiret werden.
Es sollte entweder Version `^0.1` von `quiqqer/demodata` requiret werden oder das Requirement ganz entfernt werden, solange es keine stabile Version gibt.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1284BulkUpload -> Event wird nicht gefeuert2023-08-10T13:41:08ZPatrick MüllerBulkUpload -> Event wird nicht gefeuertWenn mehr als 1 Datei hochgeladen wird (Control: `controls/upload/Form`)
wird zumindest dass `onBegin`-Event vom Control **NICHT** gefeuert.
Evtl. betrifft das auch noch andere Events. Die Events müssen alle auch gefeuert werden, wenn ...Wenn mehr als 1 Datei hochgeladen wird (Control: `controls/upload/Form`)
wird zumindest dass `onBegin`-Event vom Control **NICHT** gefeuert.
Evtl. betrifft das auch noch andere Events. Die Events müssen alle auch gefeuert werden, wenn BulkUpload verwendet wird.Henning LeutzHenning Leutz2023-08-09https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1283BulkUpload -> file params werden nicht mitgegeben2023-08-10T13:40:40ZPatrick MüllerBulkUpload -> file params werden nicht mitgegeben* Über das Control `controls/upload/Form` ein Upload-Control initialisieren
* Über die `setParam()` individuelle Parameter mitgeben
Beispiel:
```js
UploadFormControl.setParam('my_var', 'my_value');
UploadFormControl.setParam('onfinish'...* Über das Control `controls/upload/Form` ein Upload-Control initialisieren
* Über die `setParam()` individuelle Parameter mitgeben
Beispiel:
```js
UploadFormControl.setParam('my_var', 'my_value');
UploadFormControl.setParam('onfinish', 'package_my_package_ajax_my_callback');
```
* Upload submitten
* In der Ajax-Methode `package_my_package_ajax_my_callback`
habe ich jetzt normalerweise meine in JS gesetzten Params
```php
$params = $File->getAttribute('params');
// $params = ['my_var' => 'my_value'];
```
**FEHLER:** Diese individuelle params **FEHLEN** aber, wenn der BulkUpload benutzt wird.
Das ganze Handling der file_params wird aktuell nur gemacht, wenn maximal 1 Datei hochgeladen wird.
Wenn es mehr als 1 Datei ist, geht er über das BulkUpload und die fileparams **fehlen**.
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/bin/QUI/controls/upload/Manager.js#L292Henning LeutzHenning Leutz2023-08-09https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1247Tempalte Auswahl in Seiten - falsche index.php ausgelesen2023-08-10T10:29:03ZMichael DanielczokTempalte Auswahl in Seiten - falsche index.php ausgelesenVor ca. 1 Jahr hast du ein Feature eingebaut: quiqqer/quiqqer#1144. Erst jetzt wollen wir das verwenden und haben wir einen Bug entdeckt.
1. Das Projekt hat das Template X.
2. Eine Seite will das Template Y verwenden.
3. Frontend neul...Vor ca. 1 Jahr hast du ein Feature eingebaut: quiqqer/quiqqer#1144. Erst jetzt wollen wir das verwenden und haben wir einen Bug entdeckt.
1. Das Projekt hat das Template X.
2. Eine Seite will das Template Y verwenden.
3. Frontend neuladen, die Seite funktioniert nicht. Fehlermeldung: `INFO - Warning: Undefined array key "XYZ"`
**Grund:** Im Frontend wird korrekterweise die `index.html` Datei aus dem Template Y ausgelesen, aber weiterhin die `index.php` Datei aus dem Template X. Dadurch will `index.html` (Y) auf Smarty-Variablen zugreifen, die in `index.php` (X) nicht definiert wurden.
Ich denke wenn man in der Seite das andere Template auswählt, soll nicht nur die HTML Datei aber auch die zugehörige `index.php` Datei ausgelesen werden.
@mor jetzt fehlt mir ein: man kann zwar das andere Template auswählen (wenn das gefixt wird), aber dann werden immer die Default-Template Einstellungen genommen. Der Benutzer hat keine Möglichkeit die Template Einstellungen aus dem anderen Template zu ändern :thinking: Das haben wir total vergessen. Hast du eine Idee?Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1262Keine Anzeige von Bildern im webp Format2023-08-10T09:51:33ZSabine KieslichKeine Anzeige von Bildern im webp FormatBilder im webp Format können beim anlegen von Produkten zwar hochgeladen und aktiviert, aber nicht angezeigt werden. Die Darstellung der Produkte im Frontend erfolgt aber im webp Format. Bitte anpassen, da wir von Lieferanten teilweise n...Bilder im webp Format können beim anlegen von Produkten zwar hochgeladen und aktiviert, aber nicht angezeigt werden. Die Darstellung der Produkte im Frontend erfolgt aber im webp Format. Bitte anpassen, da wir von Lieferanten teilweise nur Bilder im webp Format haben.
Beispiel: Die Produkte von Rostikal im JustLetters Shop.
[Metall Dekosäule "Herzlich Willkommen"](https://dev.justletters.de/Sortiment/Deko/Designerst%C3%BCcke?p=1265) ID im Backend 1265
Edit: Ich habe die Bilder nun händisch in das passende Format umgewandelt, damit die Produkte für Kunden sichtbar sind.Henning LeutzHenning Leutz2023-07-30https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1275QUI::getDatabase hat fälschlicherweise nullable return type2023-07-31T12:27:13ZJan WennrichQUI::getDatabase hat fälschlicherweise nullable return typeDer Return Type der Methode `QUI::getDatabase()` als möglicherweise null deklariert.
Die Implementierung der Methode lässt aber nicht zu, das null zurückgegeben wird.
Der Rückgabewert sollte daher nicht nullable sein.Der Return Type der Methode `QUI::getDatabase()` als möglicherweise null deklariert.
Die Implementierung der Methode lässt aber nicht zu, das null zurückgegeben wird.
Der Rückgabewert sollte daher nicht nullable sein.Jan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1273Klasse QUI\QDOM einen semantisch passenderen Namen geben2023-07-31T12:25:59ZJan WennrichKlasse QUI\QDOM einen semantisch passenderen Namen gebenFür eine Person, die QUIQQER nicht kennt, deutet das "DOM" vermutlich auf das aus dem Web bekannte "Document Object Model" hin.
Laut Definition ist das Document Object Model...
> [...] eine Spezifikation einer Programmierschnittstelle,...Für eine Person, die QUIQQER nicht kennt, deutet das "DOM" vermutlich auf das aus dem Web bekannte "Document Object Model" hin.
Laut Definition ist das Document Object Model...
> [...] eine Spezifikation einer Programmierschnittstelle, welche HTML- oder XML-Dokumente als eine Baumstruktur darstellt, in der jeder Knoten ein Objekt ist, welches einen Teil des Dokumentes repräsentiert, z. B. einen Absatz, eine Überschrift, ein Video oder etwa eine Tabellenzelle.
Ein Laie könnte also denken, dass man durch das Erweitern dieser Klasse eine Art Baumstruktur mit Eltern und Kindern aufbauen möchte/kann (ähnlich wie die [DOMNode](https://www.php.net/manual/en/class.domnode.php) oder [DOMDocument](https://www.php.net/manual/en/class.domdocument.php) Klassen von PHP).
Das ist aber ein Trugschluss, da die `QDOM`-Klasse primär dazu genutzt wird, um in einer Klasse beliebige Werte zu speichern, auszulesen und zu entfernen.
Einige semantisch passendere Namen wären für mich: `AttributeContainer`, `AttributeStore`, oder `AttributeBag`.
Vorgehen zum Umbenennen der Klasse:
1. Klasse auf deprecated setzen
2. Klasse mit neuem Namen erstellen, die diese Klasse erweitert
3. Beim nächsten großen Breaking Change Update (QUIQQER 2.0):
1. Die Logik aus der `QDOM` Klasse in die neue Klasse kopieren
2. Die Erweiterung der `QDOM` Klasse aus der neuen Klasse entfernen
3. Die `QDOM` Klasse löschenHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1274Methoden sollten nur einen Typ zurückgeben2023-07-31T12:25:06ZJan WennrichMethoden sollten nur einen Typ zurückgebenIch habe mit [PHPStan](https://phpstan.org/) eine statische Analyse des Codes durchgeführt.
Dabei ist mir aufgefallen, dass viele Methoden zwei oder sogar noch mehr Typen zurückgeben.
Beispielsweise kann `Config->getValue()` einen Wer...Ich habe mit [PHPStan](https://phpstan.org/) eine statische Analyse des Codes durchgeführt.
Dabei ist mir aufgefallen, dass viele Methoden zwei oder sogar noch mehr Typen zurückgeben.
Beispielsweise kann `Config->getValue()` einen Wert vom Typ `array`, `bool` oder `string` zurückgeben.
Um mit einer solchen Vielzahl an möglichen Werten sicher weiterarbeiten zu können, muss man eine Menge Checks durchführen.
So viele Rückgabewerte deuten auch darauf hin, dass das Single Responsibility Principle (SRP) verletzt wird.
Mögliche Refactorings:
- Im Fehlerfall eine Exception werfen statt `false` zurückzugeben
- Für jeden Rückgabetyp eine eigene Methode erstellen
Da das Ändern der Rückgabewerte ein Breaking Change ist, sollte diese Änderung gemeinsam mit anderen Breaking Changes veröffentlicht werden (bspw. QUIQQER 2.0)Henning LeutzHenning Leutz