unable to find class 'wcf\system\option\user\group\UserGroupOptionType'

  • Affected App
    WoltLab Suite Core

    Nach der Deinstallation eines meiner Plugins (ob diese erfolgreich verlaufen ist oder nicht, kann ich nicht sagen. Das ganze ist nicht in meinem Forum aufgetreten) erhält man beim Aufruf des Frontends/Backends folgende Fehlermeldung.


    Woher kann wcf\system\cache\builder\UserGroupPermissionCacheBuilder->getTypeObject(null) stammen? Mein Plugin hat keine Veränderungen am Caching vorgenommen oder eine Cache-Klasse implementiert.

    Den Cache unter wcf/cache habe ich bereits geleert. Erfolglos.

    • Official Post

    Auf wcf1_option.optionType liegt keinerlei Foreign Key oder ähnlichem, wie kann es sein, dass eine Option keinen Typen mehr angibt? Das ist ein reines Textfeld und sollte niemals leer sein, bzw. kann es im Standardfall eigentlich auch nicht.


    SQL
    SELECT * FROM wcf1_option WHERE optionType = '';
  • Ich habe soeben mal die Abfrage (https://github.com/WoltLab/WCF…Builder.class.php#L31-L39) ausgeführt:

    SQL
    SELECT option_table.optionName, option_table.optionType, option_value.optionValue FROM wcf1_user_group_option_value option_value LEFT JOIN wcf1_user_group_option option_table ON (option_table.optionID = option_value.optionID) WHERE option_value.groupID IN (1,2,3,4) ORDER BY `option_table`.`optionType` ASC

    Dabei erhalte ich einige NULL-Werte.

    • Official Post

    Dabei erhalte ich einige NULL-Werte.

    Entweder stehe ich gerade auf dem Schlauch, oder aber es gibt Einträge in wcf1_user_group_option_value für die keine Option mehr existiert?

    SQL
    SELECT ugov.* FROM wcf1_user_group_option_value ugov LEFT JOIN wcf1_user_group_option ugo ON (ugo.optionID = ugov.optionID) WHERE ugo.optionID IS NULL
  • Ja, das liefert mir 3 optionIDs (222, 223, 224) für jede Gruppe zurück. Diese existieren unter wcf1_user_group_option nicht. Die neuste ist 221. Mein Plugin installiert 3 Gruppenrechte - das waren dann wohl diese.


    Wie kann es passieren, dass diese nicht deinstalliert wurden? Ich kann sonst keine Überreste meines Plugins finden. Und eine Fehlermeldung gab es bei der Deinstallation auch nicht. In den Logs finde ich auch nichts Interessantes zur Deinstallation.


    Kann ich folgende Abfrage durchführen, welche das Problem beheben sollte?

    DELETE FROM wcf1_user_group_option_value WHERE optionID IN (222, 223, 224);

    • Official Post

    Wie kann es passieren, dass diese nicht deinstalliert wurden?

    Fehlende Foreign-Keys vielleicht?

    SQL
    SHOW CREATE TABLE wcf1_user_group_option_value;



    Kann ich folgende Abfrage durchführen, welche das Problem beheben sollte?

    Ja, danach bitte noch den Cache löschen und deine manuellen Änderungen an der Datei rückgängig machen.

  • Code
    CREATE TABLE `wcf1_user_group_option_value` (
     `groupID` int(10) NOT NULL,
     `optionID` int(10) NOT NULL,
     `optionValue` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
     UNIQUE KEY `groupID` (`groupID`,`optionID`),
     KEY `33cc326ca96a344ca75f24bc4094d954_fk` (`optionID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    • Official Post

    Die Foreign-Keys fehlen komplett, da hätten mindestens zwei Stück sein müssen, zum Vergleich:

    SQL
    CREATE TABLE `wcf1_user_group_option_value` (
     `groupID` int(10) NOT NULL,
     `optionID` int(10) NOT NULL,
     `optionValue` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
     UNIQUE KEY `groupID` (`groupID`,`optionID`),
     KEY `33cc326ca96a344ca75f24bc4094d954_fk` (`optionID`),
     CONSTRAINT `24a3c8c00e7c00343d205d1c403c2349_fk` FOREIGN KEY (`groupID`) REFERENCES `wcf1_user_group` (`groupID`) ON DELETE CASCADE,
     CONSTRAINT `33cc326ca96a344ca75f24bc4094d954_fk` FOREIGN KEY (`optionID`) REFERENCES `wcf1_user_group_option` (`optionID`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  • D.h. ohne Änderungen an der Tabelle krachts bei der nächsten Plugin-Deinstallation mit Gruppenrechten vermutlich wieder?

    Nee, ändern musst Du nichts... irgendwie ist Deine Tabelle "kaputt", weil die beiden Forgein Keys sind standard! Die sollten von allein da sein.

    • Official Post

    Ja, und von alleine verschwinden die Keys auch nicht. Das könnte das Ergebnis eines unsachgemäßen Restore der Tabelle bzw. Datenbank sein, etwa wenn zu einem Zeitpunkt mal kein InnoDB verfügbar war. Obwohl, in dem Fall würde die Tabelle stillschweigend als MyISAM angelegt werden, die obige Tabelle ist laut Ausgabe aber InnoDB.


    Ggf. sind auch weitere Tabellen betroffen, das lässt sich pauschal nicht abschließend sagen. Das manuelle Anlegen der Foreign Keys (auf die Namen achten!) dürfte das Problem zu mindestens für diese Tabelle erstmal lösen.

  • Da es sich hierbei nicht um mein Forum handelt und das Problem dann ja auch nicht durch mein Plugin kam, lass ich den Admin nochmal ein Thema erstellen (oder ihn auf dieses verweisen), damit er in Erfahrung bringen kann, wo überall die FKs fehlen.


    Danke dir soweit!

  • Ich würde mich hier gerne mal einklinken... Denn ich habe ein ähnliches Problem in unserem Forum, wo wohl auch einige Keys verloren gegangen sind und wir bis heute nicht wissen wodurch. Mit Hilfe dieses Themas konnte ich zum glück unser Forum wieder zurückholen, indem auch nach der Deinstallation auf einmal einige IDs nicht mit deinstalliert wurden, wie hier oben auch im Beispiel.


    Auch fehlen in unserer wcf1_user_group_option_value einige Keys. Wie kann ich diese wieder herstellen? Denn ich glaube auch bei weiteren Installationen & Deinstallationen wird es in Zukunft bei uns zu Fehlern kommen. Das ist super lästig und ärgerlich. Zudem habe ich auch Angst weiterhin Updates einzuspielen od. später auf höhere Versionen zu aktualisieren, da ich diesen Fehler ja immer mitziehen werde.


    Code: wcf1_user_group_option_value
    CREATE TABLE `wcf1_user_group_option_value` (
      `groupID` int(10) NOT NULL,
      `optionID` int(10) NOT NULL,
      `optionValue` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
      UNIQUE KEY `groupID` (`groupID`,`optionID`),
      KEY `33cc326ca96a344ca75f24bc4094d954_fk` (`optionID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

    Betriebssystem - Linux (Debian) // Burning Board® Version - 4.1.8
    PHP Version - 5.6.14-0+deb8u1 // MySQL-Version - 5.5.5-10.0.22-MariaDB-1~jessie-log
    Webserver - Hiawatha v10.0


    :!: www.miui-ger.de :!:

  • Vorher Backup (ja, auch bei einer "kaputten DB") machen. Und dann folgende SQL-Statements an die DB senden.

    Code
    ALTER TABLE `wcf1_user_group_option_value` ADD CONSTRAINT `24a3c8c00e7c00343d205d1c403c2349_fk` FOREIGN KEY (`groupID`) REFERENCES `wcf1_user_group` (`groupID`) ON DELETE CASCADE;

    und

    Code
    ALTER TABLE `wcf1_user_group_option_value` ADD CONSTRAINT `33cc326ca96a344ca75f24bc4094d954_fk` FOREIGN KEY (`optionID`) REFERENCES `wcf1_user_group_option` (`optionID`) ON DELETE CASCADE;

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!