[Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

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

[Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von homtata » Do 18. Apr 2019, 11:30

Heyho,
es gibt bei einer Neuinstallation von 4.10.0 folgendes Verhalten, das sehr unschön ist - ich denke, ich kann den Weg dahin recht gut beschreiben:

- Man legt eine Installation mit Demo-Mandant an (der ist zweisprachig, dt./engl.).
- Nun macht man sich nicht die Mühe, jede Kategorie und Artikel in englisch zu löschen, sondern löscht einfach die Sprache - das führt in der concatlang zu durchaus richtigen Löschungen, und in der concat werden die Kategorien korrekterweise nicht gelöscht, sondern behalten (weil in Sprache 1 ja noch da).
- Nun bearbeitet man Sprache 1 (dt) und löscht dort Kategorien raus. Die nun in KEINER Sprache mehr vorhandenen Kategorien werden aber NICHT aus der concat gelöscht.
- Klickt man nach dem ersten Login auf Content/Artikel, dann werden fälschlicherweise ALLE diese leeren Kategorien als Geisterkategorien angezeigt (ohne Name, weil ja nix in der concatlang drin, nur Spiegelstrich).
- Klickt man ERNEUT auf Content/Artikel, wird der Baum nun korrekt sprachabhängig angezeigt.

Vermutung:
Beim ersten Aufruf ist an irgendeiner Stelle die Sprachvariable nicht frühzeitig korrekt gesetzt, und dann werden die Geisterkategorien einfach mit angezeigt statt aussortiert anhand der concatlang. Die Frage ist nur: wie ist der Fehler zu beheben? Denn das stellt alle mehrsprachigen Installationen vor ein Problem.

Die Geisterkategorieren haben übrigens folgenden Quellcode (43 ist die idcat der gelöschten Kategorie):

Code: Alles auswählen

<li class="con_sync" id="43-0---0-0-0-0-1"><div class="con_sync"><em><span> </span></em><a class="off_error_locked" href="#" title="idcat: 43"></a></div>
</li>

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von Faar » Do 18. Apr 2019, 12:08

homtata hat geschrieben:
Do 18. Apr 2019, 11:30
ich denke, ich kann den Weg dahin recht gut beschreiben:
:(

sondern löscht einfach die Sprache - das führt in der concatlang zu durchaus richtigen Löschungen, und in der concat werden die Kategorien korrekterweise nicht gelöscht, sondern behalten (weil in Sprache 1 ja noch da).
Jein. Das trifft nur dann zu, wenn die Kategorien sauber synchronisiert wurden. Ansonsten kann es in Sprache 2 Kategorien geben, die nicht in Sprache 1 sind.
- Nun bearbeitet man Sprache 1 (dt) und löscht dort Kategorien raus. Die nun in KEINER Sprache mehr vorhandenen Kategorien werden aber NICHT aus der concat gelöscht.
Hattest Du oben nicht gesagt, dass aus der concat "richtigerweise" keine Kategorien gelöscht werden, weil sie ja für die 1. Sprache noch gebraucht würde? Folglich gäbe es Deiner Logik nach gar keine Kategorien, die KEINER Sprache zugeordnet sind.
- Klickt man nach dem ersten Login auf Content/Artikel, dann werden fälschlicherweise ALLE diese leeren Kategorien als Geisterkategorien angezeigt (ohne Name, weil ja nix in der concatlang drin, nur Spiegelstrich).
Hier wirds noch seltsamer: Wenn die Löschung der Sprache auch die Kategorien korrekt löschen würde, gäbe es nichts, was angezeigt werden könnte. Aber es gäbe noch eine Tabelle namens con_cat_tree, die ja auch Kategorien-IDs auflistet.
Wobei weiterhin davon auszugehen wäre, dass bei einer reinen Sprachsynchronistation, alle Cat-IDs einer 1. Sprache zugeordnet wären.
Also kann das gar nicht sein, der Logik folgend. Auch con_cat_tree müsste korrekt sein.
- Klickt man ERNEUT auf Content/Artikel, wird der Baum nun korrekt sprachabhängig angezeigt.
Javascript-Cache?
Mach mal Strg + Shift + Entf und lösch den Cache oder Deine Session im Backend.
Die Geisterkategorieren haben übrigens folgenden Quellcode (43 ist die idcat der gelöschten Kategorie):
Nochmal, wenn es eine synchronisierte Version ist, gibt es keine gelöschte Kategorie-id, sondern höchstens gelöschte idcatlang.

Code: Alles auswählen

<li class="con_sync" id="43-0---0-0-0-0-1"><div class="con_sync"><em><span> </span></em><a class="off_error_locked" href="#" title="idcat: 43"></a></div>
</li>
seltsam. Sieht mir fast nach einer Versionierung aus.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von homtata » Do 18. Apr 2019, 12:45

Hier musste nix synchronisiert werden. Der Demo-Mandant wurde unverändert eingespielt, dann begannen die Löschungen (engl. komplett) und Umbau (dt.). Ich habe keinen vergleichbaren unbearbeiteten Mandanten, um z.B. zu sehen,, ob die idcat(s) 43-48 rein deutsche oder dt./engl. Kombinationen sind.

Sollte es sich dabei um rein ENGLISCHE idcats gehandelt haben, dann werden diese final nicht aus der concat gelöscht (mag Absicht sein, ist aber auch nicht der Kern des Problems). Sollte es sich um doppelsprachige idcats gehandelt haben, dann werden sie nach der Löschung in DEUTSCH nicht aus der concat entfernt (auch nicht das Kernproblem). Das ist prinzipiell auch gar nicht das Problem, denn aus der concatlang ergibt sich, welche der in concat gesammelten idcats in welcher Sprache vorhanden sind und welche nicht, und concattree kann dann die Reihenfolge korrekt zusammenbauen.

Fakt ist: in der concat stehen idcat(s), die in keiner Sprache (mehr) vorhanden sind, die aber beim ersten Aufruf von Content/Artikel mit ausgegeben werden, beim zweiten nicht. Das liegt m.E. an einer einmalig fehlerhaft (nicht) gesetzten Sprachvariable, die die Ergebnisse aus concat und concatlang mixt statt concat gemäß concatlang zu filtern.

Nein, es ist KEIN Cache-Fehler. Es muss etwas beim Umbau von Contenido passiert sein. Der Fehler ist verlässlich nach jedem ersten Login ins Backend da und würde in der Art seines Auftretens auch nicht erklären, warum bei jedem ERSTEN Klick auf "Artikel" der Baum spinnt, beim zweiten nicht.

Die Artikelversionierung ist NICHT aktiv, sondern "disabled".

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von Faar » Do 18. Apr 2019, 14:04

Du klingst leicht genervt :?

Probier mal das:

Code: Alles auswählen

SELECT * FROM con_cat WHERE NOT EXISTS ( SELECT idcat FROM con_cat_lang WHERE 1 )
Ich hoffe, ich habe es richtig aufgesetzt, denn ich habe kein Beispiel wo es solche falsche IDs gäbe.
Eventuell muss es auch genau andersrum sein, falls in der con_cat mehr IDs stehen als in der con_cat_lang.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von homtata » Mi 24. Apr 2019, 09:05

Huhu, nein, ich will nicht genervt klingen, aber ich hatte es denke ich wirklich ziemlich deutlich beschrieben, wie der Fehler auftritt. An der DB will ich aktuell gar nicht primär rumschrauen - es geht mir eher darum, dass irgendwo in einer Quelldatei ein Fehler sein muss, der bei vielen meiner mehrsprachigen Kunden sehr schnell auftreten müsste nach einer Bearbeitung und ich lieber gern wüsste, wo wir welcher Quelldatei ansetzen müssen, um den Darstellungsfehler gleich beim ersten Klick auszumerzen. Die Redakteure werden durch solche Bugs sehr schnell verunsichert, und ich will nicht bei jeder Änderung durch einen Redakteur die Datenbank händisch bereinigen ;-)

Und JA in der concat stehen MEHR Einträge als in der concatlang, auch das hatte ich so geschrieben - die concatlang stimmt und zeigt ausschließlich die vorhandenen Kategorien, während die concat noch Kategorien enthält, die es in beiden Sprachen noch gibt (und concattree sicher auch, sonst würde das System bei fehlender Sprachvariable die eigentlich zu unterdrückenden Kategorien nicht an der ehemals korrekten Stelle einsortieren).

Es ist also wie beschrieben eher ein Fehler in einer beim ersten Klick auf "Artikel" noch nicht gesetzten Sprachvariable, die das korrekte Filtern für diese Sprache unterdrückt. Ich weiß nur nicht, wo und wann im Frameset das alles initialisiert wird.

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von Faar » Mi 24. Apr 2019, 09:51

So, Forum geht wieder.
homtata hat geschrieben:
Mi 24. Apr 2019, 09:05
An der DB will ich aktuell gar nicht primär rumschrauen
Mit einem SELECT schraubst Du ja auch nicht, sondern liest nur Daten aus. Es soll dir nur zeigen, ob es wirklich Unterschiede gibt.
Aber die hast du offenbar auch so schon gesehen.
- es geht mir eher darum, dass irgendwo in einer Quelldatei ein Fehler sein muss, ... wo wir welcher Quelldatei ansetzen müssen
Murat oder der alte Mann (Oldperl) wissen vielleicht auswendig, wo man suchen müsste.
Der Logik nach dürften Daten aus der con_cat_lang erst gelöscht werden, nachdem Daten aus der con_cat erfolgreich (!) gelöscht wurden.
Das Stichwort "Transaktion" würde hier passen.
Weil nur die con_cat_lang den Bezug zur Sprache hat, die con_cat nicht.

Angenommen, die Reihenfolge stimmt im Quellcode nicht, wäre das Problem erkannt.
Aber auch angenommen, die Reihenfolge würde stimmen aber z.B. im SQL befindet sich ein Fehler, würde es zu einem solchen Datenmüll kommen, wenn zugleich die Fehlerauswertung oder Erfolgs-Kontrolle nicht stimmt (oder gar nicht vorhanden ist).
1. Erste-SQL soll aus con_cat löschen, tut es aber nicht und keine Konsequenz folgt
2. Zweite-SQL löscht aus con_cat_lang, weil aus 1. keine Konsequenz erfolgt ist.

Lösung: Quelldatei(en) finden und auf obiges Verhalten prüfen.

Daten richtig löschen ist eine Kunst, wird oft unterschätzt.
Ich weiß nur nicht, wo und wann im Frameset das alles initialisiert wird.
hm, guck mal in der main.php

Edit:
oder hier: include.lang_edit.php
Zeile 55
Aber da passiert nichts außer der Darstellung der Sprachen im Backend.

Code: Alles auswählen

if ($action == "lang_newlanguage") {

    $page->displayOk(i18n("Created new language successfully!"));
:?

Man muss wahrscheinlich hier in diesen Klassen suchen:
$oLanguage = new cApiLanguage($idlang);
$page = new cGuiPage("lang_edit");

Es ist tiefer versteckt:
https://api.contenido.org/latest/source ... #1307-1345
Fehlt noch, wo das eigentlich angestupst wird.

Da:
https://api.contenido.org/latest/source ... ml#104-259
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4086
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von Oldperl » Mi 24. Apr 2019, 16:33

Servus,

vielen Dank @homtata, endlich mal Jemand der das Geisterkategorie-Problem recht gut beschreibt. Das die Löschfunktion(en) noch etwas buggy sind - seit, warte mal, 4.5.x oder 4.6.x - ist ja bekannt. Dass das Problem aber mit in die 4.9er und damit auch in die 4.10 gewandert ist wusste ich noch nicht.
Zumindest ist das nun mal ein nachvollziehbarer Ablauf damit man besser nach dem Bug suchen kann.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

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

Re: [Bug] Kategorien werden nicht gelöscht bzw. unterdrückt

Beitrag von homtata » Mi 24. Apr 2019, 16:56

Ich habe an einer anderen Installation noch einen Test gefahren, um besser eingrenzen zu können, und: Überraschung.

Dort ist es so, dass nicht einfach die Sprache gelöscht wurde, sondern ich habe gezielt EINE Kategorie in Englisch und in Deutsch gelöscht, und DANN ist diese Kategorie auch in concat raus. Das scheint aber nicht zu passieren, wenn man über Administration/Sprachen eine Sprache löscht - löscht man in der Folge dann zugehörige deutsche Kategorien, scheinen diese nicht final gelöscht zu werden. Vielleicht liegt das Problem auch weniger in der concat als in der concattree? Keine Ahnung. Auf jeden Fall sind bei obigem Vorgehen wohl keine Geisterkategorien beim ersten Klick da, aber in der anderen Installation definitiv...

Antworten