QUIQQER issueshttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues2024-01-12T23:19:27Zhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1321Nicht benötigte Abhängigkeiten überprüfen2024-01-12T23:19:27ZJan WennrichNicht benötigte Abhängigkeiten überprüfenMit dem Tool [`composer-unused`](https://github.com/composer-unused/composer-unused) habe ich ermittelt, dass die folgenden Abhängigkeiten von `quiqqer/quiqqer` requiret, aber nicht direkt (per PHP) genutzt werden:
- quiqqer/backendsearc...Mit dem Tool [`composer-unused`](https://github.com/composer-unused/composer-unused) habe ich ermittelt, dass die folgenden Abhängigkeiten von `quiqqer/quiqqer` requiret, aber nicht direkt (per PHP) genutzt werden:
- quiqqer/backendsearch
- quiqqer/calendar-controls
- quiqqer/ckeditor4
- quiqqer/colorpicker
- quiqqer/dashboard
- quiqqer/login-logger
- quiqqer/meta
- quiqqer/smarty
Sind die Pakete wirklich ungenutzt oder klinken sie sich evtl. in Events ein und werden daher nicht gelistet?
Werden die Pakete wirklich für die reine Funktion von `quiqqer/quiqqer` benötigt oder sind sie optional (bspw. `quiqqer/login-logger`)?
Aus meiner Sicht sollte alles optionale, das standardmäßig installiert werden soll, besser in der root `composer.json` stehen.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1256Einführung von Unit-Tests (trotz "hard dependencies")2023-12-22T16:31:00ZJan WennrichEinführung von Unit-Tests (trotz "hard dependencies")Ich habe mich die letzten Tage ein wenig mit den Möglichkeiten von Unit-Tests beschäftigt.
Bei Unit-Tests war bisher ja immer das Problem, dass die Klassen so "hart" miteinander "verdrahtet" sind, dass man keine Klasse für sich selbst ...Ich habe mich die letzten Tage ein wenig mit den Möglichkeiten von Unit-Tests beschäftigt.
Bei Unit-Tests war bisher ja immer das Problem, dass die Klassen so "hart" miteinander "verdrahtet" sind, dass man keine Klasse für sich selbst testen kann.
Beispiel Benutzer erstellen: Schreibt in die Datenbank, löst Events aus, (schreibt in die Logs), verschickt Emails etc.
Damit man unabhängig von diesen Abhängigkeiten wird, nutzt man sog. "Mocks", die diese Klassen simulieren/ersetzen.
In einem Unit-Test definiert man dann über den Mock welche Methodenaufrufe erwartet werden und was für Werte diese zurückgeben sollen.
Hier habe ich einen Beispiel-Test erstellt: https://github.com/JanWennrich/PHP-Sorting-Algorithms/blob/hard-dependency-mocking/tests/PhpSorting/SorterTest.php#L16-L22
Ich erstelle einen Mock für die Klasse bzw. das Interface `SortingAlgorithm`.
Dann definiere ich, dass die Methode `sort` meines Mocks den Wert `[1, 2, 3]` zurückgeben soll.
Da ich Dependency Injection verwende, kann ich meiner zu testenden Klasse nun per `new Sorter($sortingAlgorithmStub)` meinen Mock als Abhängigkeit übergeben.
Statt einer konkreten Klasse, die das `SortingAlgorithm`-Interface implementiert, verwendet die zu testende Klasse nun meinen Mock.
Wenn man Dependency Injection verwendet und somit eine lose Kopplung der Klassen hat, kann man die Mocks beim Testen also ganz einfach injecten und damit verwenden.
In den QUIQQER Paketen wird leider keine Dependency Injection verwendet (sollte evtl. geändert werden, siehe quiqqer/quiqqer#1257).
Somit können wir der zu testenden Klasse nicht einfach unser Mock-Objekt als Ersatz für eine Abhängigkeit übergeben.
Mit dem Mock-Framework `Mockery`, lässt sich dieses Architektur-Problem aber umgehen.
Das Framework ermöglicht es, bestehende Klassen über den Autoloader zu überschreiben.
So ist es möglich Mocks selbst dann zu verwenden, wenn keine Dependency Injection möglich ist - also "hard dependencies" vorliegen.
Als Beispiel habe ich hier die Klasse [`TestSort`](https://github.com/JanWennrich/PHP-Sorting-Algorithms/blob/hard-dependency-mocking/src/PhpSorting/Algorithm/TestSort.php), die per `new InsertionSort()` eine "hard dependency" erstellt.
Wenn man die Klasse jetzt testen möchte, wird also zwangsweise auch die Klasse `InsertionSort` instanziiert und verwendet, was unerwünschte Seiteneffekte haben könnte.
Daher muss die `InsertionSort` Klasse gemockt werden.
In Mockery gibt es dazu die `overload:`-Anweisung beim Erstellen eines Mocks.
Hier findet sich das dazugehörige Beispiel: https://github.com/JanWennrich/PHP-Sorting-Algorithms/blob/hard-dependency-mocking/tests/PhpSorting/Algorithm/TestSortTest.php#L20-L26
Wenn im Beispiel nun `$testSort->sort([])` aufgerufen wird, wird nicht die `InsertionSort`-Klasse erstellt sondern das Mock-Objekt verwendet.
Mit dem Verfahren ist es also möglich richtige Unit-Tests für QUIQQER und seine Pakete zu schreiben.
Jede Klasse kann so als eigenständige "Unit" ohne die ganzen Abhängigkeiten getestet werden.
Sieht jemand etwas, das gegen dieses Vorgehen spricht?
PS: Das Verfahren funktioniert zwar, aber ist dabei langsamer als normale Unit-Tests und ist auch nur ein Workaround für eine "schlechte" Code-Architektur.
Wenn wir neuen Code auf Basis von Dependency Injection schreiben, fällt das Testen noch leichter (siehe dazu quiqqer/quiqqer#1257).
/cc @henbug
/cc @peat
/cc @morJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1231Semantik der XML Dateien optimieren2023-12-22T16:23:16ZJan WennrichSemantik der XML Dateien optimierenDie Semantik einiger XML Dateien ist nicht optimal und daher nicht intuitiv verständlich (und nicht so einfach validierbar, siehe #1230).
Da es sich um eine große/weitreichende Änderung handelt, soll das Ticket primär als Erinnerung für...Die Semantik einiger XML Dateien ist nicht optimal und daher nicht intuitiv verständlich (und nicht so einfach validierbar, siehe #1230).
Da es sich um eine große/weitreichende Änderung handelt, soll das Ticket primär als Erinnerung für die Zukunft (bspw. QUIQQER `2.0`) dienen.
Theoretisch sollten sich die alten Formate automatisch zu den neuen Formaten konvertieren lassen.
Am Beispiel der `locale.xml`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<locales>
<groups name="quiqqer/test" datatype="php">
<locale name="package.title">
<de><![CDATA[Suppe]]></de>
<en><![CDATA[Soup]]></en>
</locale>
</groups>
<groups name="quiqqer/test" datatype="js">
<locale name="package.description">
<de><![CDATA[Brot]]></de>
<en><![CDATA[Bread]]></en>
</locale>
</groups>
</locales>
```
Folgender beispielhafte Aufbau wäre semantisch richtig(er) und besser verständlich:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<localization>
<group name="quiqqer/test">
<variables scope="js">
<variable name="package.title">
<translation language="de">Suppe</translation>
<translation language="en">Soup</translation>
</variable>
</variables>
<variables scope="php">
<variable name="package.description">
<translation language="de">Brot</translation>
<translation language="en">Bread</translation>
</variable>
</variables>
</group>
</localization>
```
Folgendes hat sich dabei geändert:
1. Für besseres Verständnis root-Tag `locales` zu `localization` umbenannt
1. Für besseres Verständnis `type` zu `scope` umbenannt
1. `scope` wird in eigenem Element angegeben und nicht mehr in der `group` (alternativ auch pro `variable` denkbar)
1. Für besseres Verständnis `locale` umbenannt zu `variable`
1. Sprach-Tags (bspw. `de`, `en`) zu allgemeinem Element mit Namen `translation` und Attribut `language` umbenannt
1. Entfernen des nicht notwendigen `CDATA`-AbschnittsJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/587php7cc als Unit Tests für die Projekte einführen2023-07-09T17:44:45ZHenning Leutzphp7cc als Unit Tests für die Projekte einführenHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1214Stabile Versionen diverser Symfony und weiterer Drittpakete requiren2023-05-26T16:54:10ZJan WennrichStabile Versionen diverser Symfony und weiterer Drittpakete requirenBeim Ausführen des [`quiqqer:security-update` Konsolen-Tool](https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/f1984cb8d3aa988a8106675a345ca4b7a39c4882/lib/QUI/System/Console/Tools/SecurityUpdate.php) auf einem System, das nur stabile Versi...Beim Ausführen des [`quiqqer:security-update` Konsolen-Tool](https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/f1984cb8d3aa988a8106675a345ca4b7a39c4882/lib/QUI/System/Console/Tools/SecurityUpdate.php) auf einem System, das nur stabile Versionen requiret, kommen häufig nicht stabile Updates rein:
```
- Upgrading composer/composer (dev-main 5165792 => dev-main 50cded3)
- Upgrading symfony/polyfill (dev-main 6b0f6d1 => dev-main 3794858)
- Removing symfony/polyfill-ctype (dev-main 5bbc823)
- Removing symfony/polyfill-intl-grapheme (dev-main 511a08c)
- Removing symfony/polyfill-intl-normalizer (dev-main 19bd1e4)
- Removing symfony/polyfill-mbstring (dev-main 8ad114f)
- Removing symfony/polyfill-php73 (dev-main 9e8ecb5)
- Removing symfony/polyfill-php80 (dev-main 7a6ff3f)
- Removing symfony/polyfill-php81 (dev-main 7074030)
- Upgrading symfony/string (6.0.x-dev 3f57003 => 6.0.x-dev d9e7249)
- Upgrading symfony/filesystem (6.0.x-dev 7e8af5b => 6.0.x-dev 3d49eec)
- Upgrading symfony/finder (6.0.x-dev 47446ca => 6.0.x-dev 5cc9cac)
- Upgrading masterminds/html5 (dev-master 05cc730 => dev-master 3d02e3a)
- Upgrading composer/ca-bundle (dev-main 27284c0 => dev-main 74780cc)
- Upgrading composer/semver (dev-main 3953f23 => dev-main fa1ec24)
- Upgrading composer/spdx-licenses (dev-main 390c7a1 => dev-main 5333493)
- Upgrading ramsey/uuid (3.x-dev dc75aa4 => 3.x-dev ad596eb)
- Upgrading symfony/console (5.4.x-dev 58422fd => 5.4.x-dev dccb8d2)
- Upgrading symfony/http-foundation (6.0.x-dev 22fe17e => 6.0.x-dev 56648fa)
- Upgrading symfony/process (6.0.x-dev 44270a0 => 6.0.x-dev 2114fd6)
- Upgrading guzzlehttp/psr7 (dev-master 67c26b4 => dev-master ddb46ae)
```
Es ist zu prüfen warum das so ist und ob wir unsere Requirements anpassen können, sodass nur stabile Versionen geladen werden.Version 1.8 (Handsome Haflinger)Jan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1222Caching von Image Media URLs überdenken2023-04-12T13:30:59ZPatrick MüllerCaching von Image Media URLs überdenkenAn zwei Stellen wird die URL von Media-Items (Bilder) in den Cache geschrieben:
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/Projects/Media/Item.php#L579
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/Out...An zwei Stellen wird die URL von Media-Items (Bilder) in den Cache geschrieben:
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/Projects/Media/Item.php#L579
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/master/lib/QUI/Output.php#L536
In beiden Fällen wird `$Image->getUrl()` gecached.
Diese Cache-Einträge enthalten aber nur folgende Daten (Beispiel):
`image.php?id=618524&project=XYZ`
Gerade bei Installtionen mit sehr vielen Bildern wird so ein massiver Cache aufgebaut, der theoreitsch unnötig ist.
**Frage:**
Warum wird die URL in der Form gecached? Diese muss nicht durch irgendwelche Queries oder Berechnungen generiert werden sondern liegt ja eigentlich so direkt vor (ID + Projekt).
Bitte einmal mit @mor darüber sprechen.Version 1.8 (Handsome Haflinger)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1195Login durchführen, auch wenn bereits authentifiziert2023-02-02T15:36:14ZJan WennrichLogin durchführen, auch wenn bereits authentifiziertMir ist aufgefallen, dass ein Login in QUIQQER nur möglich ist, wenn noch keine authentifizierte Session besteht.
Wenn bereits eine authentifizierte Session besteht, dann wird diese beim Login direkt zurückgegeben, statt den Login durc...Mir ist aufgefallen, dass ein Login in QUIQQER nur möglich ist, wenn noch keine authentifizierte Session besteht.
Wenn bereits eine authentifizierte Session besteht, dann wird diese beim Login direkt zurückgegeben, statt den Login durchzuführen.
Dieses Verhalten wurde in 685c5a8eea2ed374a3c38fd868b1c00cc8b4a405 bzw. 32b84bf4c8c43460437519e03213fb4acafd5fe3 hinzugefügt.
Dadurch werden auch Events nicht gefeuert.
Ich hätte erwartet, dass ich beim expliziten Durchführen/Aufrufen des Logins dann eine Session als der User, zu dem die übergebenen Login-Daten gehören, erhalte.
Hier kann/sollte diskutiert werden, ob das Verhalten beibehalten werden soll.
Aktuelle Version im Code: https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/a57822378dab22d46367224f0e6cc85d78a013e7/lib/QUI/Users/Manager.php#L815-820
/cc @mor @peat @henbugJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/964Dokumentation2023-02-01T14:10:06ZHenning LeutzDokumentation@mor @peat @Panni @michael.daniel @Gerd
Ich möchte nebenbei die Dokumentation für QUIQQER anfangen. Am Anfang benötigen wir aber Themen, damit das abarbeiten einfacher ist. Daher will ich als erstes ein Inhaltsverzeichnis bzw Übersicht...@mor @peat @Panni @michael.daniel @Gerd
Ich möchte nebenbei die Dokumentation für QUIQQER anfangen. Am Anfang benötigen wir aber Themen, damit das abarbeiten einfacher ist. Daher will ich als erstes ein Inhaltsverzeichnis bzw Übersicht anfangen. Hier können wir dann später ein Projekt daraus machen und einzelne Punkte dann zu weisen.
Bitte also Punkte sammeln die in eine Doku müssen, ich nehme diese dann hier auf.
Wichtig: Es geht erst einmal um das Grundsystem, damit das dokumentiert ist. Keine Module oder Plugins. Wir müssen erst einmal anfangen.
QUIQQER
======
Allgemein
------
- Home
- Was ist QUIQQER
- Was macht QUIQQER
- Wieso sollte ich QUIQQER nutzen
- Get started / Los geht's
- Voraussetzungen
- Installation
- Erste Schritte (Redakteur + Entwickler + Sys. Admin)
- Hilfe bekommen
- Aufbau von QUIQQER
- Module / Plugins / Pakete
User Manual (Redakteur)
------
- Get started / Los geht's
- Erste Schritte
- Wie logge ich mich ein
- Aufbau von QUIQQER (Backend)
- Menu
- Desktop / Panels
- Profil
- Suche
- Projekte / Webseiten
- Projekt / Seiten / Seitenstruktur
- Eine Seite anlegen
- Eine Seite bearbeiten / löschen
- Sprachverknüpfungen / Seiten Multilingualität
- Sprachvariablen / Übersetzer / Multilingualität
- Papierkorb
Entwickler
------
- Get started / Los geht's
- Erste Schritte
- QUIQQER Aufbau
- QUIQQER Systempfade / -ordner
- Datenbankaufbau
- Error Codes
- Security Vulnerability Naming Convention
- Hilfe bekommen
- Plugin Entwicklung
- Ein neues Plugin erstellen
- Versionierung
- composer.json
- QUIQQER Framework (PHP)
- Namespaces
- Globale Klassen
- XML API
- package.xml
- locale.xml
- database.xml
- events.xml
- group.xml
- user.xml
- menu.xml
- panels.xml
- permissions.xml
- settings.xml / projekt
- settings.xml / site
- site.xml
- widgets.xml
- QUIQQER Events
- Richtig loggen
- QUIQQER Framework (JavaScript)
- QUI
- Controls / Classes
- Vorhandene QUIQQER Controls für das Backend
- user
- groups
- site
- project
- Eine Einstellung anlegen
- E-Mails versenden
- Nachrichten / Messages
- Session Variablen setzen und löschen
- Cache
- Deaktivieren
- Templates
- Template erstellen
- Template überschreiben
- Template Vererbung
- Template Events
- Tutorials
System Administration
------
- QUIQQER
- Konsole
- QUIQQER aktualisieren
- Pakete installieren
- Logs einsehen (& verstehen) : sowohl in der Administration als auch im Dateisystem
- Cache
- Wie leeren? (Über Admin, Filesystem und PHP)
- Konfigurieren
- Deaktivieren
- Projekte
- Projekt Einstellungen
- Sprachen hinzufügen / löschen
- VHosts einrichten
- Domain ändern
- Template ändern
- Custom CSS
- Installations-Verzeichnis ändern/verschieben
- Benutzer
- Anlegen
- Gruppen zuweisen
- Passwort ändern
- Gruppen
- Anlegen, Bearbeiten, Löschen
- Permissions
- Was sind permissions
- Permissions zuweisenHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1199Require quiqqer/meta `^2.0.0`2022-12-01T15:31:09ZJan WennrichRequire quiqqer/meta `^2.0.0`The `composer.json` requires `quiqqer/meta` in version `1.*|dev-master|dev-dev`
(https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/40323a470416eb664b64455030cc6d37d588b3cc/composer.json#L65)
Since 2018 version `2.0.0` of this package is ...The `composer.json` requires `quiqqer/meta` in version `1.*|dev-master|dev-dev`
(https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/40323a470416eb664b64455030cc6d37d588b3cc/composer.json#L65)
Since 2018 version `2.0.0` of this package is available.
We should consider updating the major version in the `composer.json`.
With version `2.0.0` the permalinks functionality of `quiqqer/meta` was moved into it's own package called `quiqqer/permalinks`.
Therefore we may also consider requiring this package in the `composer.json` as well.
/cc @henbugJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/852getSiteId's does not take into account when a parent page is inactive2022-07-05T12:11:45ZMichael DanielczokgetSiteId's does not take into account when a parent page is inactiveSite structure:
```
[Blog]
--[Category_1 - INACTIVE]
-----[Entry_1 - active]
-----[Entry_2 - active]
--[Category_2 - active]
----[Entry_3 - active]
----[Entry_4 - active]
----[Entry_5 - active]
```
The ChildrenList `QUI\Controls\Childr...Site structure:
```
[Blog]
--[Category_1 - INACTIVE]
-----[Entry_1 - active]
-----[Entry_2 - active]
--[Category_2 - active]
----[Entry_3 - active]
----[Entry_4 - active]
----[Entry_5 - active]
```
The ChildrenList `QUI\Controls\ChildrenList` uses this method: `$Project->getSitesIds()`.
```php
if ($this->getAttribute('parentInputList')) {
// for bricks
$count_children = Utils::getSitesByInputList($Project, $parents, [
'count' => 'count',
'order' => $this->getAttribute('order')
]);
} else {
// for site types
if ($this->getAttribute('byType')) {
$count_children = $Project->getSitesIds([ // <--- I'm talking about this
'count' => 'count',
'where' => [
'type' => $this->getAttribute('byType')
]
]);
if (is_array($count_children[0])) {
$count_children = $count_children[0]['count'];
}
} else {
$count_children = $Site->getChildren([
'count' => 'count',
'where' => $this->getAttribute('where')
]);
}
}
```
Unfortunately I get the list of children even if the parent page is disabled. Is there a way to exclude the pages directly by fetching? The ChildrenList lists pages of inactive parents but there is no URL to the child page (**href** attribute is empty).
I hope the screenshot below can help you to understand that problem ;)
![image](/uploads/da99af845e03eafb92fd72cfd35535ea/image.png)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1166Remove warnings about performance impact of Xdebug (in CLI)2022-06-24T08:41:30ZJan WennrichRemove warnings about performance impact of Xdebug (in CLI)I just found the [`composer/xdebug-handler`-package](https://github.com/composer/xdebug-handler).
The package can be used to:
> Restart a CLI process without loading the Xdebug extension, unless xdebug.mode=off.
When called via CLI, C...I just found the [`composer/xdebug-handler`-package](https://github.com/composer/xdebug-handler).
The package can be used to:
> Restart a CLI process without loading the Xdebug extension, unless xdebug.mode=off.
When called via CLI, Composer uses it internally to restart the PHP process without Xdebug.
Therefore Xdebug has no impact on the performance.
See: https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer
As Xdebug has no performance impact, the warnings about it should be removed from QUIQQER (in CLI, e.g. the setup).
If warnings are still shown by Composer the `COMPOSER_DISABLE_XDEBUG_WARN=1` environment variable can be set, to disable the warnings.
Furthermore, if development mode is enabled, the `COMPOSER_ALLOW_XDEBUG=1` environment variable could/should be set, to allow Xdebug in composer processes.
What do you think about this, @henbug @mor?Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1162Why is secure-http set to false in composer.json by default?2022-05-31T08:43:50ZJan WennrichWhy is secure-http set to false in composer.json by default?QUIQQET sets the [`secure-http` config value](https://getcomposer.org/doc/06-config.md#secure-http) in the root `composer.json` to false by default:
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/b46bbd72002dbfc3013cc3f5aaacc6afc9c8fc5...QUIQQET sets the [`secure-http` config value](https://getcomposer.org/doc/06-config.md#secure-http) in the root `composer.json` to false by default:
https://dev.quiqqer.com/quiqqer/quiqqer/-/blob/b46bbd72002dbfc3013cc3f5aaacc6afc9c8fc5e/lib/QUI/Package/Manager.php#L471
The default Composer value for this setting is `true`.
Does composer in QUIQQER really need to download content via plain HTTP by default?
As this could be dangerous, I would not set this to `false` and have a system administrator change the value manually if he needs to.Version 1.7 (Gentle Goklan)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/351BigPipes2022-05-19T07:20:48ZHenning LeutzBigPipesBigPipes ist im Prinzip partielles Laden von Teilen der Webseite.
Facebook hat dieses Prinzip definiert. D.h. die Webseite wird per Teilen übertragen, der Grundaufbau ist somit sehr schnell da und Teile die länger dauern werden per flush...BigPipes ist im Prinzip partielles Laden von Teilen der Webseite.
Facebook hat dieses Prinzip definiert. D.h. die Webseite wird per Teilen übertragen, der Grundaufbau ist somit sehr schnell da und Teile die länger dauern werden per flush nachgereicht.
Das was per Ajax oder require nachgeladen wird, wird also in einem Request gemacht.
- https://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
- https://github.com/garo/bigpipe
- http://www.juhonkoti.net/2010/10/01/open-bigpipe-javascript-implementation
- https://github.com/bigpipe/bigpipe
Das würde perfekt für unsere Bricks rein passen.https://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1155Content-Type header missing for WebP images2022-05-12T10:09:28ZJan WennrichContent-Type header missing for WebP imagesThe `Content-Type` header is not set for WebP images.
SEO-optimization-tools complain about the missing header.
I tested this with Apache, I'm not sure if this also applies to nginx.
The reason for the missing header is probably that...The `Content-Type` header is not set for WebP images.
SEO-optimization-tools complain about the missing header.
I tested this with Apache, I'm not sure if this also applies to nginx.
The reason for the missing header is probably that Apache and/or Ubuntu does not know the WebP mime-type.
The `/etc/mime.types` file on Ubuntu 20.04 contains no entry for WebP.
The header can easily be set with an entry in the `.htaccess` file:
```.htaccess
<IfModule mime_module>
AddType image/webp .webp
</IfModule>
```
It should be discussed if the change should be made to the QUIQQER `.htaccess` file or if administrators should make that change manually as it can also be achieved by editing the vHost or probably the system configuration.
@mor @henbugJan WennrichJan Wennrichhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/669Neues Message / Nachrichten Design2021-12-17T11:15:33ZHenning LeutzNeues Message / Nachrichten DesignUnsere Nachrichten müssen umgestaltet und etwas ansprechender aussehen.
Wenn du möchtest, kannst du gerne einige Vorschläge machen.Unsere Nachrichten müssen umgestaltet und etwas ansprechender aussehen.
Wenn du möchtest, kannst du gerne einige Vorschläge machen.Version 1.6 (Fancy Falabella)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/769Projekt-Template sollte über den VHost gesetzt werden, wenn nicht eingestellt2021-12-16T12:14:54ZPatrick MüllerProjekt-Template sollte über den VHost gesetzt werden, wenn nicht eingestelltSituation
---
* Mein Projekt hat **kein Template** eingestellt
* Mein VHost, der das Projekt lädt, **hat ein Template** eingestellt
* Der Cache ist aus bzw. leer
* Mein Template überschreibt die `.html`-Datei eines anderen Paketes
* Ich ...Situation
---
* Mein Projekt hat **kein Template** eingestellt
* Mein VHost, der das Projekt lädt, **hat ein Template** eingestellt
* Der Cache ist aus bzw. leer
* Mein Template überschreibt die `.html`-Datei eines anderen Paketes
* Ich bin an einer Stelle im Frontend, wo diese `.html`-Datei geladen wird
Aktuelles Verhalten
---
* Beim Laden der `.html`-Datei prüft `\Quiqqer\Engine\Smarty3::fetch()`, ob es im aktuellen Projekt-Template eine Datei gibt, die die Datei überschreibt
* Um das aktuelle Projekt-Template zu holen wird `$Project->getAttribute('template')` ausgeführt (https://dev.quiqqer.com/quiqqer/package-smarty/blob/master/Quiqqer/Engine/Smarty3.php#L142)
* Da das Projekt aber kein Template gesetzt hat, kommt da `false` raus, was so interpretiert wird wie "es gibt kein Template"
* Folge: Die Original `.html`-Date wird geladen
Besseres Verhalten
---
* Wird ein Projekt über `QUI::getRewrite()->getProject()` geholt, sollte das Template des aktuellen VHosts automatisch in das Projekt gesetzt werden, **wenn das Projekt keine eigene Template-Einstellung hat**.
@mor Zur Info, weil das ggf. noch diskutiert werden muss.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/862Schreibweise von "Licence" diskutieren2021-07-23T08:23:36ZJan WennrichSchreibweise von "Licence" diskutierenLicence ist das Nomen und to license das Verb (https://www.gcse.com/english/licence.htm)
Somit ist die Schreibweise bei uns eig. immer korrekt (licence).
In Amerika ist allerdings auch licenSe als Nomen erlaubt.
Auf GitHub und im P...Licence ist das Nomen und to license das Verb (https://www.gcse.com/english/licence.htm)
Somit ist die Schreibweise bei uns eig. immer korrekt (licence).
In Amerika ist allerdings auch licenSe als Nomen erlaubt.
Auf GitHub und im Programmier-Kontext lese ich aber fast ausschließlich licenSe als Nomen. Selbst in beispielsweise der GNU Lizenz wird licenSe verwendet: "The GNU General Public License does not permit..."
Die Datei zum Angeben einer Lizenz bei GitHub und GitLab muss ebenfalls licenSe genannt werden.
Vllt. sollten wir dann auch zu der Version mit S umsteigen?CleanupHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1094Prevent Google's FLoC by default2021-04-22T07:46:36ZJan WennrichPrevent Google's FLoC by defaultGoogle's new [Federated Learning of Cohorts (FLOC)](https://www.heise.de/news/Google-Cookie-Ersatz-FLoC-zum-Testen-fuer-Entwickler-und-unwissende-Nutzer-6002797.html) is criticized alot.
Many browser vendors don't want to support this ...Google's new [Federated Learning of Cohorts (FLOC)](https://www.heise.de/news/Google-Cookie-Ersatz-FLoC-zum-Testen-fuer-Entwickler-und-unwissende-Nutzer-6002797.html) is criticized alot.
Many browser vendors don't want to support this new tracking technique and major softwares (like WordPress) plan to prevent this feature from being used on their sites by default.
Why doing this might be a good idea (especially in the case of a CMS) can be read in this WordPress proposal: https://make.wordpress.org/core/2021/04/18/proposal-treat-floc-as-a-security-concern/
Even though FLoC isn't tested in the EU yet, we may consider opting-out of it by default anyways. This can be done by sending the `Permissions-Policy` response-header.
What do you think, @mor & @henbug?Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1059Install single package via console2020-11-20T06:50:10ZPatrick MüllerInstall single package via console@henbug
Please elaborate on how to install a single package via console for QUIQQER so that
a) The Menu cache is correctly created, considering the freshly installed package
b) The `composer.phar` does not have to be utilized
If su...@henbug
Please elaborate on how to install a single package via console for QUIQQER so that
a) The Menu cache is correctly created, considering the freshly installed package
b) The `composer.phar` does not have to be utilized
If such a feature is missing, please implement it or give instructions in how you want to implement it so that i can do it.Patrick MüllerPatrick Müllerhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/839Session cookie's SameSite attribute isn't set (QVE-12-2019-14)2020-09-07T06:53:18ZJan WennrichSession cookie's SameSite attribute isn't set (QVE-12-2019-14)OWASP suggests setting the SameSite attribute for sessions cookies. Currently it isn't set.
More about SameSite: https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95OWASP suggests setting the SameSite attribute for sessions cookies. Currently it isn't set.
More about SameSite: https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95Version 1.5 (Eager Eleia)Henning LeutzHenning Leutz