Defekte jos_user Nutzertabellen mit Fixuser reparieren |
Wie viele Joomla Entwickler, hatten auch wir wieder einmal das Problem der asynchronen Nutzertabellen. Ein Kunde fügte aus seiner alten Mambo Präsenz eine Schnittmenge der Nutzerdaten in die Datenbank der neuen Joomla-Webseite. Damit wollte er etwas Gutes tun...leider. Dabei wurde natürlich nur die jos_users Tabelle aktualisiert. Die ebenfalls zuständigen ACL-Tabellen wie jos_core_acl_aro oder jos_core_acl_groups_aro_map wurden nicht angefasst. Diese sind für die Rechteverwaltung innerhalb von Joomla zuständig. So kam es dazu, dass im Joomla Backend bei der Anzeige der Nutzer im User Manager eine fehlerhafte Darstellung die Folge war. Von angeblich 274 vorhandenen Nutzern wurden nur 21 dargestellt. Community Builder User-Tabellen reparierenZum Glück war in diesem Fall keine Community Builder Komponente vorhanden. Hin und wieder hatten wir, nach wilden Migrationsorgien, richtig Arbeit damit, asynchrone Nutzertabellen zu reparieren. Der Usermanager des Community Builder mag fehlerhafte Nutzertabellen ebenso wenig wie der Standard Joomla User Manager. Dabei sind die nötigen Handgriffe, welche die zuständigen Tabellen reparieren, recht trivial. Langweilig wird es nur, wenn es sich dabei um mehrere tausend Datensätze handelt. Dann kann eigentlich nur ein Skript oder eine Migrationskomponente weiterhelfen. Meistens wird diese jedoch eingesetzt, bevor das Kind in den Brunnen gefallen ist. Sind erstmal Asynchronitäten aufgetreten, verliert man sich schnell im Detail und richtet im schlimmsten Fall noch mehr Schaden an. Meistens hilft nur die komplette Rekonstruktion der Nutzertabellen. Community Builder selbst hat unter dem Menüpunkt „Tools“ eine Option mit der Asynchronitäten zwischen der Standard jos_users und der jos_comprofiler aufgedeckt und repariert werden können. Das funktioniert auch einwandfrei, wenn die jos_users in Ordnung ist. Ist die Standard User Tabelle asynchron, kann auch Community Builder nichts ausrichten und gibt in der Listenansicht fehlerhafte Angaben aus. Was stimmt mit der User-Tabelle jos_users nicht?
Höchstwahrscheinlich gar nichts. Das Problem sind (meistens) die nicht vorhandenen Einträge in den ACL-Tabellen. Wie bei unserem Kunden oben, werden diese häufig vergessen. Ich habe das mal rekonstruiert und in eine Nutzertabelle 16 neue Datensätze eingefügt, ohne die ACL-Tabellen zu berücksichtigen. Man sieht in dem Bild Sobald man in der Footer-Navigation weiter klickt, erscheint eine leere Seite. Das ist das Resultat einer asynchronen Nutzer Tabelle (eigentlich ist es ja eine asynchrone Rechtetabelle). In der zuständigen com_users Komponente (Joomla Standard) wird bei der Abfrage der totalen Datensätze (Footer Navigation) nur die jos_users Tabelle abgefragt. Da sich in dieser alle 18 Datensätze befinden, wird mit dieser Zahl gearbeitet. Bei der Abfrage, welche die tatsächlichen Nutzerdaten, die für die Liste relevant sind, aus der Datenbank liest, werden korrekterweise auch die ACL-Tabellen berücksichtigt. Da diese von den 16 fehlerhaft migrierten Datensätzen keine enthalten, werden nur die zwei synchronen Datensätze geliefert. Das ist an dieser Stelle etwas fahrig programmiert, da zumindest eine Warnung nützlich wäre. Fixuser 0.1 repariert asynchrone jos_users Nutzer Tabellen
Diesen Blogeintrag zu schreiben hat (jetzt schon) länger gedauert, als diese kleine Komponente zusammenzuschrauben. Fixuser basiert auf der Standard com_users und beinhaltet einige wenige Anpassungen, welche beim Reparieren von defekten Nutzer-Tabellen hilfreich sind.
In der Spalte „State“ wird gekennzeichnet, ob der Datensatz synchronisiert werden muss oder in Ordnung ist. Die Spalte „Group“ stellt die Gruppe des Nutzers dar oder den String „broken“, falls der Datensatz asynchron ist. Im Bild sehen Sie die zwei synchronen Nutzer ganz unten.
Wenn Sie einen Datensatz reparieren
möchten, können Sie einfach auf das rote Kreuz ganz links
klicken, oder Sie markieren mehrere Datensätze und klicken auf
die Schaltfläche „Fix“ oben rechts. Ansonsten
sollte das Handhaben der Komponente relativ klar sein. Möchten
Sie grundsätzlich alle asynchronen Datensätze reparieren,
klicken Sie auf „Fix all“ und falls sie einen oder mehrere
asynchrone Datensätze entfernen möchten, klicken sie auf
„Remove“. Die entstandene Komponente können Sie im Download-Bereich herunterladen (Download Fixuser für J1.0.x). Nach der Installation wird sofort angezeigt, ob Asynchronitäten in Ihrem System vorhanden sind. Nachdem Sie Ihre Nutzertabelle synchronisiert haben, sollte auch Community Builder keine Probleme haben über den Tools-Bereich eine Synchronisierung durchzuführen.
Wichtig! Lesezeichen setzen Hits: 11953 Kommentar schreiben
|