[BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

[BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Do 21. Jan 2021, 23:57

Hallo zusammen,

in manchen meiner Installationen tritt ein Fehler auf, und ich vermute, es hängt ziemlich sicher mit der MySQL-Version 8 zusammen. In Installationen mit 5.x ist der Fehler bisher jedenfalls nicht aufgetreten.

Ist in einer Kategorie z.B. ein Startartikel online und ein weiterer Artikel in der gleichen Kategorie offline gesetzt, wird das Kategorie-Icon unter Content->Artikel fälschlicherweise dunkelrot.
Damit Contenido überhaupt unter MySQL 8 läuft, habe ich die von xmurrix zusammengetragenen Anpassungen durchgeführt, um den strict-mode "auszuhebeln".

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Fr 22. Jan 2021, 16:36

Hast du einen Screenshot davon?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von xmurrix » Sa 23. Jan 2021, 09:02

Hallo homtata,

wird das Problem gelöst, wenn du in der Datei contenido/includes/include.con_str_overview.php ziemlich unten die Abfrage, die den Kategoriebaum von der Datenbank holt, wie folgt änderst?:

Code: Alles auswählen

$sql = "SELECT DISTINCT " .
        "a.idcat, " .
        "a.parentid, " .
        "a.preid, " .
        "a.postid, " .
        "a.parentid, " .
        "b.name, " .
        "b.idlang, " .
        "b.visible, " .
        "b.public, " .
        "c.idtree, " .
        "c.level, " .
        "d.idtpl " .
        "FROM {$cfg['tab']['cat']} AS a " .
        "LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " .
        "LEFT JOIN {$cfg['tab']['cat_tree']} AS c ON (a.idcat = c.idcat AND b.idcat = c.idcat) " .
        "LEFT JOIN {$cfg["tab"]["tpl_conf"]} AS d ON b.idtplcfg = d.idtplcfg " .
        "WHERE " .
        "   a.idclient = {$client} " .
        "ORDER BY b.idlang {$sOrder}, c.idtree ASC ";
Diese Abfrage wurde in CONTENIDO zuletzt geändert, damit es mit neueren MySQL-Versionen funktioniert. Vielleicht steht auch etwas darüber in der errorlog.txt drin.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Sa 23. Jan 2021, 23:50

Hallo faar,
für dich mal noch einen Screenshot.
Screenshot 2021-01-23 234843_ConFehlerCatIcon.png
(16.7 KiB) Noch nie heruntergeladen

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Sa 23. Jan 2021, 23:54

@xmurrix: nein, diese Änderung bringt leider nichts...

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Mo 25. Jan 2021, 10:04

homtata hat geschrieben:
Sa 23. Jan 2021, 23:50
Hallo faar,
für dich mal noch einen Screenshot.
Danke :)
Also, meines bescheidenen Wissens nach wird das über ein Javascript gesteuert und der Artikelbaum dadurch aktualisiert.
Man müsste folglich wissen, was genau das Javascript da macht.
@xmurrix: nein, diese Änderung bringt leider nichts...
Diese Datei wird vielleicht gar nicht berührt?
Hab die SQL mal phpmyadmin tauglich gemacht und bei mir spuckt es fein die Ergebnisse mit visible und public aus, hab aber auch MySQL 5,7 laufen:

Code: Alles auswählen

SELECT DISTINCT a.idcat, a.parentid, a.preid, a.postid, a.parentid, b.name, b.idlang, b.visible, b.public, c.idtree, c.level, d.idtpl FROM con_cat AS a LEFT JOIN con_cat_lang AS b ON a.idcat = b.idcat LEFT JOIN con_cat_tree AS c ON (a.idcat = c.idcat AND b.idcat = c.idcat) LEFT JOIN con_template_conf AS d ON b.idtplcfg = d.idtplcfg WHERE a.idclient = 1 ORDER BY b.idlang ASC, c.idtree ASC
edit: das vorletzte ASC ist von mir gesetzt worden, weil ich nicht wusste, was genau die Variable da rein schreiben würden.
Zum Test mit der DB reicht es.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Mo 25. Jan 2021, 10:48

@faar: wie schon gesagt, tritt der Fehler ausschließlich unter SQL8 auf und hat mit der JS-Aktualisierung nix zu tun. Der Baum ist bei jedem Neuaufruf falsch. Das Icon wird aus welchen Gründen auch immer unter SQL8 ggf. falsch berechnet, sobald ein offline-Artikel darin steht.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Mo 25. Jan 2021, 11:30

homtata hat geschrieben:
Mo 25. Jan 2021, 10:48
@faar: wie schon gesagt, tritt der Fehler ausschließlich unter SQL8 auf und hat mit der JS-Aktualisierung nix zu tun. Der Baum ist bei jedem Neuaufruf falsch. Das Icon wird aus welchen Gründen auch immer unter SQL8 ggf. falsch berechnet, sobald ein offline-Artikel darin steht.
Hast Du denn die oben genannte SQL einmal in phpmyadmin dieser DB eingegeben, um zu sehen, was passiert?
PHPMyAdmin gibt Auskunft über den Fehler.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Mo 25. Jan 2021, 22:50

@faar:
mit Ausnahme der tatsächlich absichtlich offline gestellten Kategorien (die auf visible = 0) stehen alle anderen Kategorien in der Datenbank auf visible = 1 und public = 1. Auf dieser Ebene liegt der Fehler also nicht.
Das war aber auch nicht zu erwarten. Der SQL-Befehl fragt ja lediglich Kategoriezustände unabhängig vom Zustand der darin liegenden Artikel ab, aber genau DA liegt ja die Krux. DAS verfälscht die Anzeige. NATÜRLICH stehen die falsch angezeigten Kategorien auf visible = 1, denn das war vor dem Update unter SQL 5.7 auch schon so.
Der Fehler liegt unter SQL8 in der Auswertung/Bewertung der zur Kategorie gehörenden Artikel.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Mo 25. Jan 2021, 23:31

Ich habe mal gesucht, wo denn die Icons erzeugt werden für die Folder in der Artikelansicht. Das geschieht in besagter include.con_str_overview.php ungefähr ab Zeile 105.

Code: Alles auswählen

            if ($aValue['online'] == 1) {
                // Category is online

                if ($aValue['public'] == 0) {
                    // Category is locked
                    if ($aValue['no_start'] || $aValue['no_online']) {
                        $aAnchorClass = 'on_error_locked';
                    } else {
                        $aAnchorClass = 'on_locked';
                    }
                } else {
                    // Category is public
                    if ($aValue['no_start'] || $aValue['no_online']) {
                        $aAnchorClass = 'on_error';
                    } else {
                        $aAnchorClass = 'on';
                    }
                }
und der Fehler müsste in der Fehlbewertung dieser Zeile liegen:

Code: Alles auswählen

 if ($aValue['no_start'] || $aValue['no_online']) {
Wenn ich nicht ganz falsch laufe, dann wird die Bewertung der ARTIKELzustände in den SQL-Befehlen in den Zeilen 429 und 446 vorgenommen. Ich habe den starken Verdacht, dass der "SUM(a.online)"-Befehl dort anders funktioniert.

EDIT: Da ich dachte, dass der Fehler möglicherweise in einer nicht kompatiblen Struktur in der DB besteht, habe ich in con_art_lang mal die Spalte "online" so umgestellt, dass der default NULL statt "0" ist und einige Artikel von "0" auf NULL umgestellt. Das hat aber nichts gebracht, also habe ich es zurückgestellt.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Di 26. Jan 2021, 10:49

Moin Homtata 8)
homtata hat geschrieben:
Mo 25. Jan 2021, 23:31
Ich habe mal gesucht, wo denn die Icons erzeugt werden für die Folder in der Artikelansicht. Das geschieht in besagter include.con_str_overview.php ungefähr ab Zeile 105.

Code: Alles auswählen

            if ($aValue['online'] == 1) {
                // Category is online

                if ($aValue['public'] == 0) {
                    // Category is locked
                    if ($aValue['no_start'] || $aValue['no_online']) {
                        $aAnchorClass = 'on_error_locked';
                    } else {
                        $aAnchorClass = 'on_locked';
                    }
                } else {
                    // Category is public
                    if ($aValue['no_start'] || $aValue['no_online']) {
                        $aAnchorClass = 'on_error';
                    } else {
                        $aAnchorClass = 'on';
                    }
                }
und der Fehler müsste in der Fehlbewertung dieser Zeile liegen:

Code: Alles auswählen

 if ($aValue['no_start'] || $aValue['no_online']) {
Die zweite Array-Variable in der IF Bedingung wird niemals wahr, weil ganz oben "no_online" bereits ausgeschlossen wurde: if ($aValue['online'] == 1)
Es fragt defacto also nur ab, ob ein Startartikel da ist.
Schau mal, was passiert, wenn du den Startartikel auf blau stellst.
Außer in $aValue stehen Werte für Kategorien und Artikel lustig parallel nebeneinander und $aValue['no_online'] meint einen Artikel $aValue['online'] meint eine Kategorie. :?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Di 26. Jan 2021, 10:55

homtata hat geschrieben:
Mo 25. Jan 2021, 22:50
@faar:
Ja, Homtata?
Der Fehler liegt unter SQL8 in der Auswertung/Bewertung der zur Kategorie gehörenden Artikel.
Ich hätte halt mit der SQL-Abfrage verglichen, ob das Ergebnis der Abfrage überein stimmt mit dem, was in den DB-Tabellen steht (aufwändig :? ) um zu sehen, ob die Abfrage mit dem IST der DB überein stimmt.
Und dann hätte ich geschaut, ob das Ergebnis mit dem überein stimmt, was im Contenido Artikelbaum angezeigt wird und was Du bei den Artikeln und Kategorien tatsächlich eingestellt hast.

Wenn die Abfrage mit den Tabelleninhalten überein stimmt, liegt es schon mal nicht nicht an der SQL-Abfrage und damit wohl kaum an MySQL 8.
Dann bleibt noch PHP und Javascript.

So meinte ich halt.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von homtata » Di 26. Jan 2021, 13:08

Vermutlich ging einer meiner letzten Posts gestern abend verloren. Den von faar vorgeschlagenen SQL-query hatte ich natürlich ausgeführt, aber wie aus der übersichtlichen Datenbank und beim query zu erwarten war, werden die reinen Kategorie-Einträge richtig abgefragt. Daran liegts nicht.

Das Problem ensteht vielmehr in include.con_str_overview.php und zwar in den Zeilen 431 resp. 448 in der SUM-Funktion. Diese summiert (eigentlich) die online/offline-Zustände der Artikel einer Kategorie auf; "online" ist die gleichnamige Spalte in con_art_lang und ist vom Typ tinyint(1).

Grob gesagt scheint SQL8 nicht mit der "0" umgehen zu können.
Unter SQL 5.7 rechnet die Abfrage bei zwei online- und einem offline-Artikel:
(1 + 1 + 0 ) = 2
Unter SQL 8 führt das derzeit zu:
(1 + 1 + "FEHLER") = 0 bzw. falsch

Als Workaround lässt sich in beide Querys einbauen (als Where-Bedingung), dass nur Einträge mit dem Wert a.online = 1 berücksichtigt werden zum Aufsummieren. Das macht folgenden geänderten Quellcode ab Zeile 429:

Code: Alles auswählen

if ($syncoptions == -1) {
    $sql2 = "SELECT
                c.idcat AS idcat,
                SUM(a.online) AS online,
                d.startidartlang
            FROM
                " . $cfg["tab"]["art_lang"] . " AS a,
                " . $cfg["tab"]["art"] . " AS b,
                " . $cfg["tab"]["cat_art"] . " AS c,
                " . $cfg["tab"]["cat_lang"] . " AS d
            WHERE
                a.idlang = " . cSecurity::toInteger($lang) . " AND
                a.idart = b.idart AND
                b.idclient = '" . cSecurity::toInteger($client) . "' AND
                a.online = 1 AND
                b.idart = c.idart AND
                c.idcat = d.idcat
            GROUP BY c.idcat, online, d.startidartlang";
} else {
    $sql2 = "SELECT
                c.idcat AS idcat,
                SUM(a.online) AS online,
                d.startidartlang
            FROM
                " . $cfg["tab"]["art_lang"] . " AS a,
                " . $cfg["tab"]["art"] . " AS b,
                " . $cfg["tab"]["cat_art"] . " AS c,
                " . $cfg["tab"]["cat_lang"] . " AS d
            WHERE
                a.idart = b.idart AND
                b.idclient = '" . cSecurity::toInteger($client) . "' AND
                a.online = 1 AND
                b.idart = c.idart AND
                c.idcat = d.idcat
            GROUP BY c.idcat, online, d.startidartlang";
}
Mit dieser Änderung stimmen die Summen wieder und die Icons erhalten die korrekte Farbe. Im Zweifelsfalls dies bitte mit in den Core übernehmen oder eine passendere Lösung finden, aber ich bin nicht so der Datenbankspezi :-)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von Faar » Di 26. Jan 2021, 16:38

homtata hat geschrieben:
Di 26. Jan 2021, 13:08
Grob gesagt scheint SQL8 nicht mit der "0" umgehen zu können.
Unter SQL 5.7 rechnet die Abfrage bei zwei online- und einem offline-Artikel:
(1 + 1 + 0 ) = 2
Unter SQL 8 führt das derzeit zu:
(1 + 1 + "FEHLER") = 0 bzw. falsch
Hallo Homtata,
das ist sehr interessant und ich habe noch nichts gefunden, was auf dieses Problem hinweisen würde. SUM ignoriert angeblich NULL und SUM braucht Zahlen, mehr steht da aber auch nicht. 0 ist eine Zahl.
Vielleicht ist der Eintrag falsch oder die Abfrage zum Eintrag falsch, wenn 0 zu "Fehler" führt.
Wenn das mit Deiner Lösung funktioniert, ist das erstmal eine Lösung aber noch nicht die Erklärung für die genaue Ursache.
(1 + 1 + 0 ) = 2 sollte immer gehen.

Ich hab noch nirgends MySQL 8 und kann es darum nicht nachvollziehen.
Muss ich mal schauen, ob ich irgendwo MySQL 8 nutzen kann.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch

Beitrag von xmurrix » Mi 27. Jan 2021, 13:12

Hallo homtata,

ich habe mir die Tabelle "con_art_lang" angesehen, das Feld "online" in der Tabelle ist vom Typ tinyint(1), kann nicht NULL haben und hat als default den Wert 0. Also stehen da die Zahlen 1 oder 0 drin.

Wenn nun in MySQL 8 die Summe von (1 + 1 + 0) einen Fehler liefert, scheint das ein Problem in MySQL zu liegen. Vermutlich wird der Wert 0 nicht als Zahl interpretiert und verursacht einen Fehler in der SUM() Funktion.
Du kannst aber in der include.con_str_overview.php versuchen, den Wert im Feld "online" explizit in eine Zahl umzuwandeln, vielleicht löst das das Problem mit MySQL 8.

Code: Alles auswählen

...
SUM(CAST(a.online AS UNSIGNED)) AS online,
...
In was für einem SQL-Mode läuft denn die Datenbank?
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Antworten