QUIQQER issueshttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues2024-03-22T11:04:23Zhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1350(Gravierende) Fehler bei/mit Favicons2024-03-22T11:04:23ZJan Wennrich(Gravierende) Fehler bei/mit FaviconsBei einem Kunden sind mir einige (gravierende) Fehler bei den Favicons aufgefallen:
1. [ ] Die `favicon.ico` Datei im root-Verzeichnis wird nie überschrieben
2. [ ] QUIQQER sollte das hochgeladene Bild quadratisch machen (bspw. per Imag...Bei einem Kunden sind mir einige (gravierende) Fehler bei den Favicons aufgefallen:
1. [ ] Die `favicon.ico` Datei im root-Verzeichnis wird nie überschrieben
2. [ ] QUIQQER sollte das hochgeladene Bild quadratisch machen (bspw. per Imagick) oder zumindest darauf hinweisen, dass es quadratisch sein muss
3. [ ] Google schreibt eine [Auflösung von 48px oder einem Vielfachen davon](https://developers.google.com/search/docs/appearance/favicon-in-search?hl=de#guidelines) vor. Es wird nur eine Variante in 48x48px generiert, die anderen Auflösungen sind (für Google) also nutzlos
4. [ ] Wenn das Cache Modul installiert ist, werden die Favicons als `.webp` eingebunden. Dieses Format wird offiziell nicht unterstützt: https://en.wikipedia.org/wiki/Favicon#Image_file_format_support
5. [ ] Als `type` wird immer `image/png` verwendet, obwohl die verlinkte Datei eine `.webp` oder `.jpg` Datei ist
6. [ ] Als `sizes` wird immer `16x16` (oder Vielfache davon) verwendet, obwohl die verlinkte Datei nicht quadratisch ist (bspw. 48x32 px)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1335Locale: getPartsOfLocaleString liefert unerwartete/falsche Ergebnisse2024-02-02T17:30:28ZJan WennrichLocale: getPartsOfLocaleString liefert unerwartete/falsche ErgebnisseDie Methode [`Locale->getPartsOfLocaleString()`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/312a71f4fdbe9b6fe8b780e7873be39473fb07ec/lib/QUI/Locale.php#L700) liefert unerwartete Ergebnisse, wenn man inkorrekte Locale Strings übergibt (...Die Methode [`Locale->getPartsOfLocaleString()`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/312a71f4fdbe9b6fe8b780e7873be39473fb07ec/lib/QUI/Locale.php#L700) liefert unerwartete Ergebnisse, wenn man inkorrekte Locale Strings übergibt (siehe dazu ggf. auch #1334)
Siehe dazu der nachfolgende Output eines Unit-Tests:
```
There were 3 failures:
1) QUI\LocaleTest::testGetPartsOfLocaleString with data set "3" ('this.is.a.test', null, null)
Failed asserting that 'this.is.a.test' matches expected null.
/opt/homebrew/var/www/quiqqer-cc/packages/quiqqer/quiqqer/tests/unit/QUI/LocaleTest.php:141
2) QUI\LocaleTest::testGetPartsOfLocaleString with data set "4" ('this.is.a.test [quiqqer/quiqqer]', null, null)
Failed asserting that 'this.is.a.test' matches expected null.
/opt/homebrew/var/www/quiqqer-cc/packages/quiqqer/quiqqer/tests/unit/QUI/LocaleTest.php:141
3) QUI\LocaleTest::testGetPartsOfLocaleString with data set "6" ('[ ]', null, null)
Failed asserting that ']' matches expected null.
```
In den Klammern steht ganz links der übergebene Wert und danach dann die von mir erwartete Locale Group und Locale Variable (also immer null).
Die Ausgabe hinter "Failed asserting that" gibt an was die Methode stattdesssen zurückgegeben hat.
Es muss geklärt werden, ob das Verhalten so in Ordnung ist oder ob eine Fehlerbehandlung eingebaut werden sollte.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1334Locale: isLocaleString liefert falsche Ergebnisse2024-02-02T17:28:28ZJan WennrichLocale: isLocaleString liefert falsche ErgebnisseWenn man [`Locale->isLocaleString()`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/312a71f4fdbe9b6fe8b780e7873be39473fb07ec/lib/QUI/Locale.php#L680) aufruft gibt die Methode teilweise falsche Ergebnisse zurück.
Wenn man die folgenden We...Wenn man [`Locale->isLocaleString()`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/312a71f4fdbe9b6fe8b780e7873be39473fb07ec/lib/QUI/Locale.php#L680) aufruft gibt die Methode teilweise falsche Ergebnisse zurück.
Wenn man die folgenden Werte übergibt, kommt fälschlicherweise `true` zurück:
- `this.is.a.test [quiqqer/quiqqer]`
- `[ ]`
Die Methode prüft nur, ob eckige Klammern und ein Leerzeichen in dem String vorkommen - das ist unzureichend.
Besser wäre ein regulärer Ausdruck der Form:
```regex
\[\w+\/\w+\] [\w\.]+
```
(siehe https://regex101.com/r/3x3m2V/1)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1333Locale: setTemporaryCurrent & resetCurrent funktioniert nicht korrekt2024-02-02T16:06:52ZJan WennrichLocale: setTemporaryCurrent & resetCurrent funktioniert nicht korrektDie Methode [`setTemporaryCurrent`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/4a1b4877b872545ac3209b4e8ab37559bb65ec0a/lib/QUI/Locale.php) speichert die temporäre Sprache nur, wenn bereits eine temporäre Sprache gesetzt ist.
Das führ...Die Methode [`setTemporaryCurrent`](https://dev.quiqqer.com/quiqqer/quiqqer/blob/4a1b4877b872545ac3209b4e8ab37559bb65ec0a/lib/QUI/Locale.php) speichert die temporäre Sprache nur, wenn bereits eine temporäre Sprache gesetzt ist.
Das führt dazu, dass mit der Methode nie eine temporäre Sprache gesetzt werden kann.
Demenetsprechend funktioniert `resetCurrent` dann auch nicht korrektPatrick MüllerPatrick Müllerhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1329Es werden diversen nicht existierende Methode auf QUI\Package\Manager aufgerufen2024-01-28T21:18:40ZJan WennrichEs werden diversen nicht existierende Methode auf QUI\Package\Manager aufgerufen```
------ -------------------------------------------------------------------------
Line admin/ajax/system/activateLocalServer.php
------ -----------------------------------------------------------...```
------ -------------------------------------------------------------------------
Line admin/ajax/system/activateLocalServer.php
------ -------------------------------------------------------------------------
10 Call to an undefined method QUI\Package\Manager::activateLocalServer().
------ -------------------------------------------------------------------------
------ -------------------------------------------------------------------------
Line admin/ajax/system/readLocalRepository.php
------ -------------------------------------------------------------------------
12 Call to an undefined method QUI\Package\Manager::readLocalRepository().
------ -------------------------------------------------------------------------
------ -------------------------------------------------------------------
Line admin/ajax/system/update/byfile.php
------ -------------------------------------------------------------------
24 Call to an undefined method QUI\Package\Manager::updatePackage().
------ -------------------------------------------------------------------
```
Können die Ajax Methoden einfach komplett entfernt werden?
Ansonsten sollte der Methodenaufruf einfach entfernt werden, sodass die Ajax-Methode nichts machen?Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1328Vielzählige "call to undefined method" bei Media Klassen/Objekten2024-02-27T10:56:02ZJan WennrichVielzählige "call to undefined method" bei Media Klassen/ObjektenPHPStan meldet an einigen Stellen, an denen Media Klassen verwendet werden, dass undefinierte Methoden aufgerufen werden.
<details><summary>Problematisches Beispiel anzeigen</summary>
```php
$ids = $Media->getChildrenIds([
'where' ...PHPStan meldet an einigen Stellen, an denen Media Klassen verwendet werden, dass undefinierte Methoden aufgerufen werden.
<details><summary>Problematisches Beispiel anzeigen</summary>
```php
$ids = $Media->getChildrenIds([
'where' => [
'type' => [
'type' => 'NOT',
'value' => 'folder'
]
]
]);
foreach ($ids as $id) {
try {
$Item = $Media->get($id);
$Item->generateSHA1();
} catch (QUI\Exception $Exception) {
QUI::getMessagesHandler()->addError(
$Exception->getMessage()
);
}
}
```
</details>
In dem Beispiel wird sichergestellt, dass kein `Folder` als Media Item geladen wird. Bei `Folder` Objekten gibt es die Methode nicht.
Allerdings werden auch `Video` Objekte ausgelesen, bei denen die Methode ebenfalls nicht existiert.
Trotz dem `try-catch` führt das dann dazu, dass ein `Call to undefined method`-Error fliegt.
Um Fehler dieser Art zu verhindern könnte geprüft werden, ob die entsprechende Methode in den Objekte existiert.
Das ist allerdings eine wenig elegante Lösung.
Es wäre schöner, wenn entsprechende Interfaces eingeführt würden, die dann von den Klassen implementiert werden.
An den betroffenen Stellen kann dann geprüft werden, ob das Objekt das entsprechende Interface implementiert.
Für das obige Beispiel wäre das Interface `HashableMediaItem` denkbar, dass die Methode `generateSHA1` definiert.
Im Code kann dann folgendes gemacht werden:
<details><summary>Lösungsorientiertes Beispiel anzeigen</summary>
```php
foreach ($ids as $id) {
try {
$Item = $Media->get($id);
} catch (QUI\Exception $Exception) {
QUI::getMessagesHandler()->addError(
$Exception->getMessage()
);
}
if (!$Item typeof HashableMediaItem) {
continue;
}
$Item->generateSHA1();
}
```
</details>
-----
<details><summary>Fehler anzeigen</summary>
```
------ ----------------------------------------------------------------------
Line admin/ajax/media/create/sha1.php
------ ----------------------------------------------------------------------
27 Call to an undefined method QUI\Projects\Media\Item::generateSHA1().
------ ----------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/deleteCache.php
------ ---------------------------------------------------------------------
14 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ ---------------------------------------------------------------------
------ -------------------------------------------------------------------
Line admin/ajax/media/details.php
------ -------------------------------------------------------------------
47 Call to an undefined method QUI\Projects\Media\Item::getWidth().
51 Call to an undefined method QUI\Projects\Media\Item::getHeight().
75 Call to an undefined method QUI\Projects\Media\Item::getWidth().
79 Call to an undefined method QUI\Projects\Media\Item::getHeight().
------ -------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/file/save.php
------ ---------------------------------------------------------------------
46 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ ---------------------------------------------------------------------
------ ------------------------------------------------------------------------
Line admin/ajax/media/folder/children.php
------ ------------------------------------------------------------------------
35 Call to an undefined method QUI\Projects\Media\Item::getChildrenIds().
76 Call to an undefined method QUI\Projects\Media\Item::getChildrenIds().
------ ------------------------------------------------------------------------
------ ----------------------------------------------------------------------
Line admin/ajax/media/folder/create.php
------ ----------------------------------------------------------------------
28 Call to an undefined method QUI\Projects\Media\Item::createFolder().
------ ----------------------------------------------------------------------
------ -------------------------------------------------------------------
Line admin/ajax/media/folder/download.php
------ -------------------------------------------------------------------
26 Call to an undefined method QUI\Projects\Media\Item::createZIP().
------ -------------------------------------------------------------------
------ --------------------------------------------------------------------
Line admin/ajax/media/folder/firstImage.php
------ --------------------------------------------------------------------
31 Call to an undefined method QUI\Projects\Media\Item::firstImage().
------ --------------------------------------------------------------------
------ -----------------------------------------------------------------
Line admin/ajax/media/folder/getSize.php
------ -----------------------------------------------------------------
26 Call to an undefined method QUI\Projects\Media\Item::getSize().
------ -----------------------------------------------------------------
------ -----------------------------------------------------------------------------
Line admin/ajax/media/folder/recursiveEffects.php
------ -----------------------------------------------------------------------------
27 Call to an undefined method QUI\Projects\Media\Item::setEffectsRecursive().
------ -----------------------------------------------------------------------------
------ ---------------------------------------------------------------------
Line admin/ajax/media/get.php
------ ---------------------------------------------------------------------
25 Call to an undefined method QUI\Projects\Media\Item::getChildren().
------ ---------------------------------------------------------------------
------ --------------------------------------------------------------------
Line admin/ajax/media/getsubfolders.php
------ --------------------------------------------------------------------
30 Call to an undefined method QUI\Projects\Media\Item::getFolders().
36 Call to an undefined method QUI\Projects\Media\Item::getFolders().
------ --------------------------------------------------------------------
------ -------------------------------------------------------------------------
Line admin/ajax/media/url/resized.php
------ -------------------------------------------------------------------------
36 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
------ -------------------------------------------------------------------------
------ -----------------------------------------------------------------------------
Line lib/QUI/Projects/Media.php
------ -----------------------------------------------------------------------------
616 Call to an undefined method QUI\Projects\Media\Item::childWithNameExists().
694 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
------ -----------------------------------------------------------------------------
------ -----------------------------------------------------------------------
Line lib/QUI/Projects/Media/Folder.php
------ -----------------------------------------------------------------------
1379 Call to an undefined method QUI\Projects\Media\Item::deleteCache().
1456 Call to an undefined method QUI\Projects\Media\Item::generateMD5().
1457 Call to an undefined method QUI\Projects\Media\Item::generateSHA1().
1471 Call to an undefined method QUI\Projects\Media\Item::getResizeSize().
1474 Call to an undefined method QUI\Projects\Media\Item::resize().
1522 Call to an undefined method QUI\Projects\Media\Item::uploadFolder().
------ -----------------------------------------------------------------------
------ -------------------------------------------------------------------------
Line lib/QUI/Projects/Media/Utils.php
------ -------------------------------------------------------------------------
105 Call to an undefined method QUI\Projects\Media\Item::hasChildren().
106 Call to an undefined method QUI\Projects\Media\Item::hasSubFolders().
128 Call to an undefined method QUI\Projects\Media\Item::hasChildren().
129 Call to an undefined method QUI\Projects\Media\Item::hasSubFolders().
391 Call to an undefined method QUI\Projects\Media\Item::getWidth().
443 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
463 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
480 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
491 Call to an undefined method QUI\Projects\Media\Item::getSizeCacheUrl().
925 Call to an undefined method QUI\Projects\Media\Item::createSizeCache().
931 Call to an undefined method QUI\Projects\Media\Item::createCache().
1405 Call to an undefined method DOMNode::getAttribute().
------ -------------------------------------------------------------------------
```
</details>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/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/1232Fallback Workspace wenn Backend Nutzer kein Workspace hat.2023-07-10T07:40:03ZMoritz ScholzFallback Workspace wenn Backend Nutzer kein Workspace hat.- Wenn NUtzer importiert werden bekommen diese kein Workspace zugeordnet, hier sollte als Fallback immer der 2er Workspace genutzt werden
- Automatisch angelegten Workspaces fehlt die Sprachvariable
![image](/uploads/c923afd1a4f524a3ec6...- Wenn NUtzer importiert werden bekommen diese kein Workspace zugeordnet, hier sollte als Fallback immer der 2er Workspace genutzt werden
- Automatisch angelegten Workspaces fehlt die Sprachvariable
![image](/uploads/c923afd1a4f524a3ec6c19b10bd8f54a/image.png)1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1182Man kann Mediadateien nicht aktivieren, wenn man sie direkt aus dem CKEditor ...2022-09-09T14:15:55ZMichael DanielczokMan kann Mediadateien nicht aktivieren, wenn man sie direkt aus dem CKEditor Fenster hochläd![image](/uploads/ae73a4eb961a80eafcdc2deb9b2b7b96/image.png)
Man kann das Bild nicht aktivieren. Auch wenn ich das "Bild-Eigenschaften" Fenster schiebe, lässt sich kein Button, der dadrunter ist, klicken. Der Fehler liegt daran, dass d...![image](/uploads/ae73a4eb961a80eafcdc2deb9b2b7b96/image.png)
Man kann das Bild nicht aktivieren. Auch wenn ich das "Bild-Eigenschaften" Fenster schiebe, lässt sich kein Button, der dadrunter ist, klicken. Der Fehler liegt daran, dass das "Bild-Eigenschaften" Fenster einen `z-index` von **10000410** bekommt. Das liegt dann natürlich über allen anderen Fenster. Das Fenster, mit dem der Meldung, hat `z-index` von **100006**.
Interessanterweise kann ich das nicht überall reproduzieren :thinking:
1. Öffne einen Baustein, wo man mehrere Einträge hinzufügen kann und in den Einträgen den Inhalt mit CKEditor bearbeiten kann. Z.B. **Bausteine: Promoslider Wallpaper mit 2 Inhaltsbereichen** (`\QUI\Bricks\Controls\Slider\PromosliderWallpaper2Content`) wäre hier gut zum Testen.
2. Gehe in "Einstellungen" und klicke auf "Hinzufügen"
![image](/uploads/418b96628469dc30b4a2f89c544a1596/image.png)
3. Jetzt z.B. "Linker Inhaltsbereicht" klicken:
![image](/uploads/ec23f8f86c2c528be3087b3636e4ac10/image.png)
4. CKEditor öffnet sich. Hier "Bild Button" klicken (1), neues Fenster zum Bild-Auswahl öffnet sich (2). Hier ist schon das erste "Problem". Es gibt kein Hintergrund-Overlay, dadurch erkennt man das Fenster schlecht. jetzt auf Bild-Auswählen im neuen Fenster klicken (3).
![image](/uploads/3b17955a3589c88e473bafa8d49c3570/image.png)
5. Im neuen Fenster ein Bild hochladen. Oder du hast schon ein nicht aktives Bild. Wenn man das Bild hochgeladen hat ist es noch nicht aktiv (siehe Screenshot).
![image](/uploads/096eca220a644ece15bcbdfa90814267/image.png)
6. Jetzt das Bild anklicken. Jetzt kommt das Info-Fenster **Einfügen einer inaktiven Datei / Ordners**, was man nicht mehr anklicken kann (siehe das erste Screenshot in dem Ticket).
Ja, man kann vor dem Auswählen das Bild mit Rechtsklick aktivieren, aber das machen die normalen Nutzer (wirklich) nicht. Grade so einen Fall gehabt.
**Wichtig:** das passiert nur, wenn der CKEditor schon in einem QUIPopup geöffnet wird. Wenn man z.B. den Inhalt eines Bausteines oder einer Seite bearbeitet und genauso vorgeht, liegt das **Einfügen einer inaktiven Datei / Ordners** tatsächlich ganz oben, siehe Screenshot:
_Inaktive Datei in Baustein-Inhalt per CKEditor hinzufügen:_
![image](/uploads/171b001c945ceda4841816d6de2d9fc0/image.png)Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1160Host und unterschiedliche Sprachen Problem2023-07-10T07:40:58ZHenning LeutzHost und unterschiedliche Sprachen ProblemProblem:
- Projekt besitzt zwei Sprachen (de, en)
- Es ist nur ein vhost eingerichtet (nur de)
- en ist leer (Sprachzuweisung)
![image](/uploads/223f9402354bb06f90243d5d91be34ae/image.png)
Bei Englischsprachigen Links wird dadurch dir...Problem:
- Projekt besitzt zwei Sprachen (de, en)
- Es ist nur ein vhost eingerichtet (nur de)
- en ist leer (Sprachzuweisung)
![image](/uploads/223f9402354bb06f90243d5d91be34ae/image.png)
Bei Englischsprachigen Links wird dadurch direkt auf HOST gegangen.
Der richtige Weg wäre, das auf die Domain des de vhosts gegangen wird
![image](/uploads/515224d55d3467a1b14739de3afd3eb1/image.png)1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/1128URL in site-panel does not update after moving a site2023-07-10T07:37:03ZJan WennrichURL in site-panel does not update after moving a siteSteps to reproduce:
1. Open a site A which has a child site B
1. Remember/Note the site's URL shown in the site panel
1. Right click site A in the sitemap on the left
1. Choose "Ausschneiden"/"Cut"
1. Right click a different site C that'...Steps to reproduce:
1. Open a site A which has a child site B
1. Remember/Note the site's URL shown in the site panel
1. Right click site A in the sitemap on the left
1. Choose "Ausschneiden"/"Cut"
1. Right click a different site C that's not site A or B
1. Choose "Einfügen"/"Paste"
1. Check the site's URL in the site panel and see that it didn't change
1. Close the site panel and reopen it
1. See that the site's URL in the site panel still didn't change
1. Click "Speichern"/"Save" to save the site once
1. See that the site's URL in the site panel still didn't change
1. Close the site panel and reopen it
1. See that the site's URL in the site panel now changed
(I think the URL of the child site B updates just by re-opening the panel without having to save the site. This has to be tested/proven/validated. Maybe it has got to do with the panel that is currently open when moving the site.)
Expected behaviour:
The sites' URLs should updated immediately after moving the site. Re-opening or even worse saving the site should not be necessary.1.8.xHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/940Gelöschte Seite lässt sich in Backend aufmachen und bearbeiten2020-01-06T10:29:11ZMichael DanielczokGelöschte Seite lässt sich in Backend aufmachen und bearbeitenDie Seiten in Papierkorb lassen sich nicht aufmachen. Aber wenn die Seite irgendwo verknüpft war, kann man auf die Verknüpfung klicken und somit die Seite aufmachen.
Ich hatte den Fall bei der Sprachverknüpfung. **Seite_DE** war mit de...Die Seiten in Papierkorb lassen sich nicht aufmachen. Aber wenn die Seite irgendwo verknüpft war, kann man auf die Verknüpfung klicken und somit die Seite aufmachen.
Ich hatte den Fall bei der Sprachverknüpfung. **Seite_DE** war mit der `Seite_EN` verknüpft. Die `Seite_EN` wurde gelöscht (war nur in Papierkorb zu sehen), die Verknüpfung in **Seite_DE** hat immer noch funktioniert. Die `Seite_EN` konnte ich aufmachen und bearbeiten.
> quiqqer/quiqqer:dev-devHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/858Installation eines großen Pakets (urlshortener) über den Store bricht ab2023-10-31T08:23:58ZJan WennrichInstallation eines großen Pakets (urlshortener) über den Store bricht ab```
==> ./debug-2019-04-12.log <==
[2019-04-12 12:20:16] - DEBUG - Install package quiqqer/urlshortener -> install
{
"request": "http:\/\/quiqqer-test.jan.pcsg.eu\/admin\/ajax.php",
"errorFilename": false,
"userId": 92699462...```
==> ./debug-2019-04-12.log <==
[2019-04-12 12:20:16] - DEBUG - Install package quiqqer/urlshortener -> install
{
"request": "http:\/\/quiqqer-test.jan.pcsg.eu\/admin\/ajax.php",
"errorFilename": false,
"userId": 926994626,
"username": "admin",
"IP": "127.0.0.1"
}
==> ./error-2019-04-12.log <==
[2019-04-12 12:20:16] - ERROR - Lockclient encountered a curl error
{
"url": "https:\/\/lock.quiqqer.com\/\/generate",
"error": "Operation timed out after 30000 milliseconds with 0 bytes received",
"request": "http:\/\/quiqqer-test.jan.pcsg.eu\/admin\/ajax.php",
"errorFilename": false,
"userId": 926994626,
"username": "admin",
"IP": "127.0.0.1"
}
[12-Apr-2019 12:20:16 Europe/Berlin] PHP Fatal error: Uncaught Error: Class 'QUI\Lockclient\Exceptions\LockServerException' not found in /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/QUI/Package/Manager.php:1963
Stack trace:
#0 /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/QUI/Package/Manager.php(1021): QUI\Package\Manager->composerRequireOrInstall('quiqqer/urlshor...', '1.0.3')
#1 /var/www/quiqqer-test/packages/quiqqer/quiqqer/admin/ajax/system/packages/installPackage.php(24): QUI\Package\Manager->install('quiqqer/urlshor...', '1.0.3')
#2 /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/QUI/Ajax.php(346): {closure}('quiqqer/urlshor...', '1.0.3', false)
#3 /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/QUI/Ajax.php(207): QUI\Ajax->callRequestFunction('ajax_system_pac...')
#4 /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/ajax.php(101): QUI\Ajax->call()
#5 /var/www/quiqqer-test/packages/quiqqer/quiqqer/admin/ajax.php(21): require('/var/www/quiqqe...')
#6 {main}
thrown in /var/www/quiqqer-test/packages/quiqqer/quiqqer/lib/QUI/Package/Manager.php on line 1963
==> ./warning-2019-04-12.log <==
[2019-04-12 12:20:16] - WARNING - Translation file for /var/www/quiqqer-test/var/locale/en_EN/LC_MESSAGES/quiqqer_colorpicker.mo not found.
{
"file": "\/var\/www\/quiqqer-test\/var\/locale\/en_EN\/LC_MESSAGES\/quiqqer_colorpicker.mo",
"request": "http:\/\/quiqqer-test.jan.pcsg.eu\/admin\/ajax.php",
"errorFilename": false,
"userId": false,
"username": "nobody",
"IP": "127.0.0.1"
}
```
Die Installation kleinerer Pakete (facebook-auth) funktioniert
--------------
Nicht sicher ob dies ein QUIQQER-Issue ist. Wenn nicht, dann bitte verschiebenHenning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/855Neues Projekt mit Demodata anlegen timeoutet2023-10-31T08:20:16ZJan WennrichNeues Projekt mit Demodata anlegen timeoutet![image](https://dev.quiqqer.com/quiqqer/quiqqer/uploads/8c12da1ab16e1e311fb5e7317f83014e/image.png)
Beim zweiten Versuch ohne Demodata ging es.
Erster Versuch taucht nun auch in der Projektverwaltung auf. Da wird wohl der Loader oder ...![image](https://dev.quiqqer.com/quiqqer/quiqqer/uploads/8c12da1ab16e1e311fb5e7317f83014e/image.png)
Beim zweiten Versuch ohne Demodata ging es.
Erster Versuch taucht nun auch in der Projektverwaltung auf. Da wird wohl der Loader oder so nicht richtig geschlossen, wenn Demodaten nicht unterstützt werden.Henning LeutzHenning Leutzhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/824A JavaScript Callback can only be called once2020-04-23T11:33:28ZJan WennrichA JavaScript Callback can only be called onceSince the JavaScript callbacks can be called with parameters it's no longer possible to call a callback multiple times.
The reason is that previously the array stored only the names of the callbacks, thus allowing one callback to ...Since the JavaScript callbacks can be called with parameters it's no longer possible to call a callback multiple times.
The reason is that previously the array stored only the names of the callbacks, thus allowing one callback to exist multiple times in the array.
After introducing parameters to the callbacks, the structure of the array changed. Now the callbacks' name is the key of the array's entry and it's parameters are the value.
If the same callback is added a second time, the previous entry is overwritten.
Therefore the structure of the array needs another rework.
Related source code:
~~https://dev.quiqqer.com/quiqqer/quiqqer/blob/dev/lib/QUI/Ajax.php#L380~~
Permalink: https://dev.quiqqer.com/quiqqer/quiqqer/blob/60d073c2f974671cab28a04c959bf2d75a3b43ed/lib/QUI/Ajax.php#L380Patrick MüllerPatrick Müllerhttps://dev.quiqqer.com/quiqqer/quiqqer/-/issues/736Sortierungsfeld-Wert bei kopierten Seiten2023-11-28T14:36:05ZPatrick MüllerSortierungsfeld-Wert bei kopierten SeitenReproduzieren
---
1. Parent-Seite anlegen
2. Zwei Kind-Seiten anlegen
3. Bei der Parent-Seite die Sortierung auf `manuell` stellen
4. Sortierung speichern
5. Eine der Kind-Seiten kopieren und unter denselben Parent einfügen
6. Die Sortie...Reproduzieren
---
1. Parent-Seite anlegen
2. Zwei Kind-Seiten anlegen
3. Bei der Parent-Seite die Sortierung auf `manuell` stellen
4. Sortierung speichern
5. Eine der Kind-Seiten kopieren und unter denselben Parent einfügen
6. Die Sortierungstabelle der Parent-Seite erneut öffnen bzw. refreshen
Erwartetes Verhalten
---
Die kopierte Kind-Seite ist an letzter Stelle mit dem Wert `3` im Sortierungsfeld.
Tatsächliches Verhalten
---
Die kopierte Seite hat denselben Wert beim Sortierungsfeld wie die Ursprungs-Seite und wurde entsprechend auch so einsortiert. Das ist problematisch, da beim Auslesen der Kind-Seiten dann die kopierte Seite eine Sortierungspriorität hat, die manuell gar nicht so eingestellt wurde.
Hierbei müssten (zumindest bei Sortierungsmodus `manuell`) kopierte Kindseiten eigentlich ans Ende sortiert werden und auch den entsprechenden Sortierungsfeld-Wert erhalten.1.12 (L* L*)Henning LeutzHenning Leutz