QUIQQER issueshttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues2024-01-18T11:54:11Zhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1325SQLite Unterstützung?2024-01-18T11:54:11ZJan WennrichSQLite Unterstützung?Laut der Datenbank Klasse, kann man QUIQQER auch mit einer SQLite statt einer MySQL Datenbank betreiben.
Nun habe ich versucht QUIQQER neu zu installieren und dazu SQLite zu verwenden.
Leider erlaubt der Installationsprozess als Date...Laut der Datenbank Klasse, kann man QUIQQER auch mit einer SQLite statt einer MySQL Datenbank betreiben.
Nun habe ich versucht QUIQQER neu zu installieren und dazu SQLite zu verwenden.
Leider erlaubt der Installationsprozess als Datenbank "Driver" nur die Auswahl "mysql".
Somit kann SQLite nicht genutzt werden.
Ist das Absicht?
Wurde QUIQQER mit SQLite schon mal irgendwo benutzt?
Für die automatisierten Tests wäre eine simple SQLite Datenbank sehr praktisch, da man sich dann die gesamte MySQL Installation sparen kann.Jan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1324Session: Class Symfony\Component\HttpFoundation\Session\Storage\Handler\Memca...2024-03-12T08:47:06ZJan WennrichSession: Class Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler not foundBetroffene Stelle: https://dev.quiqqer.com/quiqqer/quiqqer/blob/master/lib/QUI/Session.php#L339
Die Klasse wurde mit Version `4.0.0` von `symfony/http-foundation` entfernt: https://github.com/symfony/http-foundation/tree/4.0/Session/Sto...Betroffene Stelle: https://dev.quiqqer.com/quiqqer/quiqqer/blob/master/lib/QUI/Session.php#L339
Die Klasse wurde mit Version `4.0.0` von `symfony/http-foundation` entfernt: https://github.com/symfony/http-foundation/tree/4.0/Session/Storage/Handler
Entweder muss die Instanzierung entfernt oder das Paket `symfony/http-foundation` auf maximal Version `3` beschränkt werden.
Option 1 ist sehr wahrscheinlich besser, aber ich möchte das nicht alleine entscheiden.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1323QUI\Security: Blowfish wird falsch instanziert2024-02-20T13:32:37ZJan WennrichQUI\Security: Blowfish wird falsch instanziertPHPStan meldet richtigerweise:
> "Class Blowfish\Blowfish does not have a constructor and must be instantiated without any parameters."
https://dev.quiqqer.com/quiqqer/quiqqer/blob/master/lib/QUI/Security.php#L58
Die Instanzierung wä...PHPStan meldet richtigerweise:
> "Class Blowfish\Blowfish does not have a constructor and must be instantiated without any parameters."
https://dev.quiqqer.com/quiqqer/quiqqer/blob/master/lib/QUI/Security.php#L58
Die Instanzierung wäre so korrekt:
```php
$Cipher = new Blowfish();
$Cipher->key_setup(QUI::conf('globals', 'salt'));
// oder
$Ciphery->Blowfish(QUI::conf('globals', 'salt'));
```
Bisher wurde also nie der Key aus der Config verwendet.
Wenn man das nun korrigiert, geht vermutlich das entschlüsseln/decrypt bereits verschlüsselter Inhalte kaputt.
Gibt es dafür eine schöne Lösung?Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1317Console\Spinner prüft nicht überall ob pcntl Extension geladen ist2024-01-31T15:29:56ZJan WennrichConsole\Spinner prüft nicht überall ob pcntl Extension geladen istIn der [Spinner Klasse](https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/System/Console/Spinner.php) werden folgende Inhalte aus `ext-pcntl` verwendet:
- [ ] pcntl_async_signals
- [ ] pcntl_fork
- [ ] pcntl_signal
...In der [Spinner Klasse](https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/System/Console/Spinner.php) werden folgende Inhalte aus `ext-pcntl` verwendet:
- [ ] pcntl_async_signals
- [ ] pcntl_fork
- [ ] pcntl_signal
- [ ] SIGINT
- [ ] SIGQUIT
- [ ] SIGTERM
- [ ] SIGTSTP
An manchen Stellen werden die Inhalte verwendet ohne zu prüfen, ob die Extension geladen ist.
Das muss korrigiert werden.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1316quiqqer/bricks Komponenten nur verwenden wenn das Modul installiert ist2024-01-31T15:29:56ZJan Wennrichquiqqer/bricks Komponenten nur verwenden wenn das Modul installiert istDie folgenden Komponenten aus `quiqqer/bricks` werden (PHP-seitig) verwendet:
- `QUI\Bricks\Controls\LanguageSwitches\DropDown`
- `QUI\Bricks\Controls\Pagination` ...Die folgenden Komponenten aus `quiqqer/bricks` werden (PHP-seitig) verwendet:
- `QUI\Bricks\Controls\LanguageSwitches\DropDown`
- `QUI\Bricks\Controls\Pagination`
- `QUI\Bricks\Manager`
Das Paket ist allerdings kein Requirement in der `composer.json` und soll es auch nicht werden.
Daher muss vor der Verwendung dieser Komponenten geprüft werden, ob das Modul installiert ist.
Noch schöner wäre es, wenn stattdessen ein Event gefeuert wird, auf das dann vom `quiqqer/bricks` Modul reagiert wird.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1308Media Admin Control2024-01-25T07:36:43ZMichael DanielczokMedia Admin ControlFolngede Optionen brauchen wir:
- controls ja/nein
- autoplay ja/nein
- loop ja/nein
- muted ja/nein
- playsinline ja/nein
- Poster Bild / VOrschaubild (Auswahl)
- autoplay nach Scrollen (observer)
Liste mit verfügbaren Attributen: http...Folngede Optionen brauchen wir:
- controls ja/nein
- autoplay ja/nein
- loop ja/nein
- muted ja/nein
- playsinline ja/nein
- Poster Bild / VOrschaubild (Auswahl)
- autoplay nach Scrollen (observer)
Liste mit verfügbaren Attributen: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video?retiredLocale=de#attributes
![image](/uploads/5dc859663ca6a5c9fcd87cba1ccc496e/image.png)1.11 (K* K*)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1307Backend Login Weiterentwickung2023-11-27T06:42:01ZMichael DanielczokBackend Login WeiterentwickungBei der Entwicklung des neuen Backend-Logins (quiqqer/quiqqer#1083) hatte @mor viele Ideen, wie man das noch schöner und moderner machen kann. Das ist der aktuelle Stand:
![image](/uploads/0e28a32b918e416b1df643c6c97bea49/image.png)
Ic...Bei der Entwicklung des neuen Backend-Logins (quiqqer/quiqqer#1083) hatte @mor viele Ideen, wie man das noch schöner und moderner machen kann. Das ist der aktuelle Stand:
![image](/uploads/0e28a32b918e416b1df643c6c97bea49/image.png)
Ich fasse die Ideen hier zusammen, damit das nicht vergessen wird:
1. Der linke Bereich variable machen. Somit können wir die Bilder selber austauschen, extra Bilder für Weihnachten, Halloween, etc.vorbereiten.
- Bilder auf QUIQQER.de ablegen und die Url zu dem Bild verlinken.
- mit iFrame arbeiten. Somit kann nicht nur das Bild sonder auch der Inhalt (Text) austauschen.
2. Die Rakete und Sterne animieren.
3. Sonne / Mond anzeigen abhängig von der Tageszeit.Michael DanielczokMichael Danielczokhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1306Mail Queue überarbeiten2024-01-25T07:36:40ZHenning LeutzMail Queue überarbeiten- Setting wie oft mail in queue versucht wird zu sendne
- Wenn mail in queue nicht der Admin ist, dann info an admin das die Mail so oft versucht wurde zu versenden aber nun abgebrochen wurde
- Neuen Status -> STATUS_CANCELED = 4; Wenn m...- Setting wie oft mail in queue versucht wird zu sendne
- Wenn mail in queue nicht der Admin ist, dann info an admin das die Mail so oft versucht wurde zu versenden aber nun abgebrochen wurde
- Neuen Status -> STATUS_CANCELED = 4; Wenn mail abgebrochen wurde, erhält diese den CANCELED STATUS.
- Neues DB feld mit errors
- Queue Mail Oberfläche. Wo man Mails in queues auch löschen kann
- retrys werden nicht richtig gesetzt, muss behoben werden1.11 (K* K*)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1303Dokumentation mit JetBrains Writerside2024-01-09T14:12:33ZJan WennrichDokumentation mit JetBrains WritersideJetBrains hat mit "Writerside" jetzt ein kostenloses Programm zum Schreiben und Verwalten von technischer Dokumentation veröffentlicht: https://www.jetbrains.com/writerside/
Mit den integrierten Build Tools entstehen dann so schicke Dok...JetBrains hat mit "Writerside" jetzt ein kostenloses Programm zum Schreiben und Verwalten von technischer Dokumentation veröffentlicht: https://www.jetbrains.com/writerside/
Mit den integrierten Build Tools entstehen dann so schicke Doku-Websites wie bspw. diese hier: https://www.jetbrains.com/help/idea/discover-intellij-idea.html
Vielleicht eine Überlegung wert basierend darauf (bzw. damit) eine einheitliche und strukturierte Dokumentation für QUIQQER und die ganzen Pakete zu verfassen?
/cc @mor @henbugJan WennrichJan Wennrich2024-01-08https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1301Mailversand beschleunigen/optimieren2023-09-28T13:13:55ZJan WennrichMailversand beschleunigen/optimierenAuf einem Kundensystem sind alle Operationen, die (unter anderem) mehrere Mails versenden sehr langsam (> 5 Sekunden).
Ich habe die Vermutung, dass es am Mailversand liegt, da dieser synchron geschieht und damit auf den erfolgreichen V...Auf einem Kundensystem sind alle Operationen, die (unter anderem) mehrere Mails versenden sehr langsam (> 5 Sekunden).
Ich habe die Vermutung, dass es am Mailversand liegt, da dieser synchron geschieht und damit auf den erfolgreichen Versand jeder Mail gewartet wird.
Sollte das die Ursache sein, sollte man den Mailversand optimieren (siehe bspw. https://github.com/PHPMailer/PHPMailer/wiki/Sending-to-lists).
Ich sehe folgende Optimierungsmöglichkeiten:
* `SMTPKeepAlive` in PHPMailer verwenden
* (PHPMailer Instanz am Leben halten)
* (Mails über lokalen Mailserver relayen; nur für Kundensysteme sinnvoll)
* Mails nur in die Mailqueue schreiben und den CRON später das Versenden übernehmen lassen
Das Thema müsste einmal besprochen und konzeptioniert werden.
/cc @mor
/cc @henbugJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1297Benutzer im Admin werden fälschlicherweise automatisch gespeichert2023-10-27T10:14:47ZJan WennrichBenutzer im Admin werden fälschlicherweise automatisch gespeichertIch konnte in der Administration das folgende Verhalten beobachten:
1. Administration besuchen
2. "Einstellungen > QUIQQER > System" öffnen (Panel offen lassen für die nächsten Schritte)
3. Einen Benutzer öffnen (Panel offen lassen für d...Ich konnte in der Administration das folgende Verhalten beobachten:
1. Administration besuchen
2. "Einstellungen > QUIQQER > System" öffnen (Panel offen lassen für die nächsten Schritte)
3. Einen Benutzer öffnen (Panel offen lassen für die nächsten Schritte)
4. Benutzer wird beim Öffnen des Panels automatisch gespeichert
5. Administration (Browser-Tab) neu laden
6. Benutzer wird beim Laden der Administration automatisch gespeichertHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1296Update scheitert, wenn composer/composer aktualisiert wird2023-10-02T08:42:07ZJan WennrichUpdate scheitert, wenn composer/composer aktualisiert wirdIch hatte jetzt schon zwei mal das folgende Problem bei einem Update:
1. Ich führe `./console update` aus
2. Es wird ein Update des `composer/composer` Pakets durchgeführt
3. Das Update bricht mit einer Exception ab
<details><summary>L...Ich hatte jetzt schon zwei mal das folgende Problem bei einem Update:
1. Ich führe `./console update` aus
2. Es wird ein Update des `composer/composer` Pakets durchgeführt
3. Das Update bricht mit einer Exception ab
<details><summary>Log</summary>
```
root@[redacted] /var/www/vhosts/[redacted].de/staging.[redacted].de # sudo -u www-data ./console update
[...]
- Starte Update:
- Filesystem check ...
You have changes in the following dependencies:
packages/quiqqer/quiqqer
- ./index.php
The update has found inconsistencies in the system!
Should the update be executed anyway? [y,N]: y
QUIQQER Update ...
Changed CWD to /var/www/vhosts/[redacted].de/staging.[redacted].de/var/composer
Running 2.6.1 (2023-09-01 13:53:08) with PHP 8.1.20 on Linux / 5.15.0-78-generic
Loading config file ./composer.json (/var/www/vhosts/[redacted].de/staging.[redacted].de/var/composer/composer.json)
Loading plugin Composer\Installers\Plugin_composer_tmp0 (from composer/installers, installed globally)
Loading plugin OomphInc\ComposerInstallersExtender\Plugin_composer_tmp1 (from oomphinc/composer-installers-extender, installed globally)
Loading plugin Http\Discovery\Composer\Plugin_composer_tmp2 (from php-http/discovery, installed globally)
> pre-command-run: QUI\Package\Composer\CommandEvents::preCommandRun
> pre-update-cmd: QUI\Package\Composer\CommandEvents::preUpdate
Loading composer repositories with package information
Skipped tag 1.5.1, tag (1.5.1.0) does not match version (1.5.0.0) in composer.json
[200] https://license.quiqqer.com/packages.json
Built pool.
Running pool optimizer.
Pool optimizer completed in 0.296 seconds
Found 6,179 package versions referenced in your dependency graph. 5,177 (84%) were optimized away.
Updating dependencies
Generating rules
Resolving dependencies through SAT
Looking at all rules.
Dependency resolution completed in 0.012 seconds
Analyzed 1002 packages to resolve dependencies
Analyzed 4478 rules to resolve dependencies
Lock file operations: 0 installs, 7 updates, 0 removals
Updates:
[...]
- composer/composer:2.6.2
[...]
Installing dependencies from lock file
Package operations: 0 installs, 7 updates, 0 removals
Updates:
[...]
- composer/composer:2.6.2
[...]
[200] https://composer.quiqqer.com//build/cache/composer/composer/composer-composer-623e5e1de055e65bc6c3c61b8348dc4662d75e2b-zip-bd2e0d.tar
[...]
> pre-package-update: QUI\Package\Composer\PackageEvents::prePackageUpdate
Could not scan for classes inside "/var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/classmap/" which does not appear to be a file nor a folder
[...]
> pre-package-update: QUI\Package\Composer\PackageEvents::prePackageUpdate
Checking out d1622afe8646a6fbe22654bc829733b30cde89c8 from cache
[201] https://packagist.org/downloads/
In FilesystemRepository.php line 165:
[ErrorException]
file_get_contents(/var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Repository/../InstalledVersions.php): Faile
d to open stream: No such file or directory
Exception trace:
at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Repository/FilesystemRepository.php:165
Composer\Util\ErrorHandler::handle() at n/a:n/a
file_get_contents() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Repository/FilesystemRepository.php:165
Composer\Repository\FilesystemRepository->write() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer/InstallationManager.php:381
Composer\Installer\InstallationManager->Composer\Installer\{closure}() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/react/promise/src/Internal/FulfilledPromise.php:47
React\Promise\Internal\FulfilledPromise->then() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer/InstallationManager.php:386
Composer\Installer\InstallationManager->executeBatch() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer/InstallationManager.php:319
Composer\Installer\InstallationManager->downloadAndExecuteBatch() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer/InstallationManager.php:218
Composer\Installer\InstallationManager->execute() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer.php:789
Composer\Installer->doInstall() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer.php:614
Composer\Installer->doUpdate() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Installer.php:288
Composer\Installer->run() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Command/UpdateCommand.php:247
Composer\Command\UpdateCommand->execute() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/symfony/console/Command/Command.php:326
Symfony\Component\Console\Command\Command->run() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/symfony/console/Application.php:1063
Symfony\Component\Console\Application->doRunCommand() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/symfony/console/Application.php:320
Symfony\Component\Console\Application->doRun() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Console/Application.php:382
Composer\Console\Application->doRun() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/symfony/console/Application.php:174
Symfony\Component\Console\Application->run() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/composer/composer/src/Composer/Console/Application.php:145
Composer\Console\Application->run() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/composer/src/QUI/Composer/Web.php:620
QUI\Composer\Web->executeComposer() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/composer/src/QUI/Composer/Web.php:211
QUI\Composer\Web->update() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/composer/src/QUI/Composer/Composer.php:174
QUI\Composer\Composer->update() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/QUI/Package/Manager.php:2072
QUI\Package\Manager->composerUpdateOrInstall() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/QUI/Package/Manager.php:1993
QUI\Package\Manager->update() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/QUI/System/Console/Tools/Update.php:274
QUI\System\Console\Tools\Update->execute() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/QUI/System/Console.php:862
QUI\System\Console->executeSystemTool() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/lib/QUI/System/Console.php:260
QUI\System\Console->__construct() at /var/www/vhosts/[redacted].de/staging.[redacted].de/packages/quiqqer/quiqqer/quiqqer.php:85
require() at /var/www/vhosts/[redacted].de/staging.[redacted].de/console:26
update [--with WITH] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--dev] [--no-dev] [--lock] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--no-autoloader] [--no-suggest] [--no-progress] [-w|--with-dependencies] [-W|--with-all-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [...]
[error]
Etwas ist schief gelaufen::Something went wrong
Wenn das Setup nicht richtig funktioniert hat, nutze bitte den folgenden Befehl für das Update:
php var/composer/composer.phar --working-dir="/var/www/vhosts/[redacted].de/staging.[redacted].de/var/composer" update
Everything is done. Thank you for using QUIQQER
```
</details>Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1295Mailqueue: Abarbeitung entspricht nicht einer Queue2023-09-05T16:16:14ZJan WennrichMailqueue: Abarbeitung entspricht nicht einer QueueDie Mailqueue arbeitet nicht wie eine richtige Queue (Warteschlange).
Von einer Warteschlange würde ich erwarten, dass der erste hinzugefügte Eintrag auch als erstes bearbeitet wird (First in, First Out; FIFO).
Es gibt damit folgende ...Die Mailqueue arbeitet nicht wie eine richtige Queue (Warteschlange).
Von einer Warteschlange würde ich erwarten, dass der erste hinzugefügte Eintrag auch als erstes bearbeitet wird (First in, First Out; FIFO).
Es gibt damit folgende Probleme:
- [ ] Die `send()`-Methode der Mailqueue liest die zu versendenden Mails in beliebiger (nicht definierter) Reihenfolge aus.
Hier sollte nach dem Erstellungsdatum aufsteigend vorgegangen werden.
- [ ] Außerdem muss geprüft werden, ob neu zu versendende Mails direkt verschickt werden, oder erst durch die Queue müssen.
Nach dem allgemeinen Verständnis einer Warteschlange, sollten neue Mails so lange warten müssen, bis sie an der Reihe sind - die Queue also abgearbeitet wurde.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1294Mailqueue: Mails behalten für immer den Status "SENDING"2024-03-01T11:25:15ZJan WennrichMailqueue: Mails behalten für immer den Status "SENDING"Bei einem Kunden wurden in kurzer Zeit sehr viele E-Mails versendet.
In Zuge dessen hat vermutlich der Mailserver schlapp gemacht.
Als ich die Mailqueue geprüft habe, enthielt diese über 600 Mails, die alle den Status `2` (`SENDING`...Bei einem Kunden wurden in kurzer Zeit sehr viele E-Mails versendet.
In Zuge dessen hat vermutlich der Mailserver schlapp gemacht.
Als ich die Mailqueue geprüft habe, enthielt diese über 600 Mails, die alle den Status `2` (`SENDING`) hatten.
Im Fehlerfall hätten sie eigentlich den Status `3` (`ERROR`) erhalten und bei Erfolg gelöscht werden müssen.
Wieso Status `2` blieb, muss geklärt werden.
Die `send()`-Methode liest nur Mails aus der Queue aus, die NICHT den Status `2` haben.
Somit werden diese Mails nie mehr abgearbeitet.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1291PHP Foundation durch Spenden unterstützen2023-08-29T22:01:35ZJan WennrichPHP Foundation durch Spenden unterstützen>>>
The PHP Foundation is a collective of people and organizations relying on the PHP language. Its mission is to ensure the long-term prosperity of the PHP language.
The PHP Foundation focuses on providing financial support and guidanc...>>>
The PHP Foundation is a collective of people and organizations relying on the PHP language. Its mission is to ensure the long-term prosperity of the PHP language.
The PHP Foundation focuses on providing financial support and guidance to PHP language developers to support its goals of improving the language for its users, providing high-quality maintenance, and improving the PHP language project to retain current contributors and to integrate new contributors.
>>>
Die PHP Foundation wurde vor kurzem gegründet. Sie stellt sicher, dass es immer genug Entwickler gibt, die am PHP Core arbeiten. Dies wird erreicht, indem den Entwicklern marktübliche Gehälter gezahlt werden. Auf diese Weise wird die Wahrscheinlichkeit gering gehalten, dass das PHP Projekt dadurch scheitert, dass wichtige Personen Ausfallen/Weggehen (sog. "Bus-Faktor"). Ein Beispiel für eine solche wichtige Person ist bspw. Nikita Popov, der sehr viel zu den neuesten PHP Versionen beigetragen hat, aber bald nicht mehr (so viel) am PHP Core arbeiten wird.
Die PHP Foundation wird durch Spenden finanziert.
Um das Fortbestehen und Wachstum von PHP zu sichern, sollte die Foundation durch eine (kleine) Spende unterstützt werden.
Weitere Informationen:
- https://thephp.foundation/
- https://blog.jetbrains.com/de/phpstorm/2022/01/the-php-foundation/
/cc @mor
/cc @henbugMoritz ScholzMoritz Scholzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1290Request und Response Objekte (von Symfony) global nutzen2024-01-25T07:37:10ZJan WennrichRequest und Response Objekte (von Symfony) global nutzenAn vielen Stellen im Code werden Header, Cookies, Request Parameter, etc. gesendet, verarbeitet oder verändert, ohne die globalen Request und Response Objekte von Symfony zu nutzen.
Beispielsweise wird im gesamten Ajax-Handling auf di...An vielen Stellen im Code werden Header, Cookies, Request Parameter, etc. gesendet, verarbeitet oder verändert, ohne die globalen Request und Response Objekte von Symfony zu nutzen.
Beispielsweise wird im gesamten Ajax-Handling auf die Verwendung der Objekte verzichtet.
Wenn man dann in einem Event die Objekte manipuliert, hat dies also keine Auswirkung auf die Ajax Responses.
Aus diesem Grund sollten die globalen Request und Response überall genutzt werden.1.11 (K* K*)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1289Autoloader mit "Authorative Class Maps" optimieren2023-11-30T12:03:54ZJan WennrichAutoloader mit "Authorative Class Maps" optimierenDer Composer Autoloader wird aktuell durch das Generieren von [Class Maps](https://getcomposer.org/doc/articles/autoloader-optimization.md#optimization-level-1-class-map-generation) optimiert.
Der "Nachteil" hierbei ist, wenn eine Klas...Der Composer Autoloader wird aktuell durch das Generieren von [Class Maps](https://getcomposer.org/doc/articles/autoloader-optimization.md#optimization-level-1-class-map-generation) optimiert.
Der "Nachteil" hierbei ist, wenn eine Klasse nicht im Autoloader gefunden wird, dass nach ihr auf dem Dateisystem gesucht wird. Diese Suche kann das Autoloading langsam machen.
Um diesen "Nachteil" zu beheben, gibt es [Authoritative Class Maps](https://getcomposer.org/doc/articles/autoloader-optimization.md#optimization-level-2-a-authoritative-class-maps).
Hierbei werden wie in der Variante oben auch Class Maps generiert.
Aber wenn eine Klasse nicht in der Class Map gefunden wird, versucht der Autoloader nicht mehr sie auf dem Dateisystem zu finden.
Der Nachteil hierbei ist, dass wenn Klassen nach der Generierung der Class Map hinzukommen, dass der Autoloader sie dann nicht findet. Das passiert aber nur auf Entwicklungssystem.
Für Produktivsysteme sollte man diese Optimierung daher aktivieren können.https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1288Console: Abfrage zum Zulassen von Plugins wird nicht angezeigt2023-08-25T08:52:40ZJan WennrichConsole: Abfrage zum Zulassen von Plugins wird nicht angezeigtIch habe per `console update` ein Update durchgeführt.
Durch eine neue Abhängigkeit kam ein Composer Plugin hinzu.
Bevor das Plugin ausgeführt wird, fragt Composer nach einer expliziten Bestätigung.
Die Abfrage hat der Update Prozes...Ich habe per `console update` ein Update durchgeführt.
Durch eine neue Abhängigkeit kam ein Composer Plugin hinzu.
Bevor das Plugin ausgeführt wird, fragt Composer nach einer expliziten Bestätigung.
Die Abfrage hat der Update Prozess nicht angezeigt und blieb damit beim ersten Schritt "Filesystem check" stehen.
Möglicherweise werden alle Abfragen von Composer nicht angezeigt?
Bei dem Plugin handelt es sich um `php-http/discovery`.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1285Emojis2023-10-27T12:06:31ZMark LeibleinEmojisQuiqqer scheint noch Probleme mit der Darstellung von Emojis zu haben. Zumindest wird auf namestorm.de, wenn man 😇 reinkopiert, es zwar zunächst im Editor angezeigt, aber nach dem Speichern als "?" angezeigt. Ich hab versucht, es hier ei...Quiqqer scheint noch Probleme mit der Darstellung von Emojis zu haben. Zumindest wird auf namestorm.de, wenn man 😇 reinkopiert, es zwar zunächst im Editor angezeigt, aber nach dem Speichern als "?" angezeigt. Ich hab versucht, es hier einzutragen:
https://www.namestorm.de/naming-knowhow/marken-umbenennungen-sammlung-namensaenderungen (also eine News-Seite).Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1282Mechanismen gegen Cache Stampede2023-12-22T16:38:59ZJan WennrichMechanismen gegen Cache StampedeWas ist eine Cache Stampede:
>>>
[Wenn] zu einem Zeitpunkt mehrere gleichzeitige Anfragen das Gleiche aus dem Cache wollen (z. B. das Ergebnis einer teuren SQL-Abfrage), und [dafür kein Cache Eintrag existiert], beginnen alle Prozesse m...Was ist eine Cache Stampede:
>>>
[Wenn] zu einem Zeitpunkt mehrere gleichzeitige Anfragen das Gleiche aus dem Cache wollen (z. B. das Ergebnis einer teuren SQL-Abfrage), und [dafür kein Cache Eintrag existiert], beginnen alle Prozesse mit der Ausführung derselben SQL-Abfrage.
Die Prozessorlast vervielfacht sich und es kann sogar passieren, dass kein Thread innerhalb des Zeitlimits antworten kann, der Cache nicht erstellt wird und die Anwendung abstürzt.
>>>
Hat QUIQQER (bzw. dessen Cache) Mechanismen um so etwas zu verhindern?
Speziell beim Generieren von Bildern oder andern Tasks, die viel Rechenleistung benötigen?
/cc @mor