Thankomat Migration WBB3.1.x -> WBB4.x

  • Hallo Ihr,

    wie viele von Euch, haben wie wir in Ihrem Forum ebenfalls den Thankomat. Eine Übernahme der "Danksagungen" ist von hause aus nicht geplant.
    Anhand eines Mysql-Query und einem anschließendem Update der Ansichten, werden Danksagungen aus dem WBB3 zu Likes im WBB4 migriert.


    WCF2=Datenbank der WCF2.0 Installation
    WCF = Datenbank WCF 1.1 Installation

    PHP
    TRUNCATE WCF2.wcf1_like;
    INSERT INTO `WCF2.wcf1_like`(`objectID`, `objectTypeID`, `objectUserID`, `userID`, `time`, `likeValue`) 
        SELECT p.postID, '81', p.userID, t.userID, '0', '1' 
            FROM WCF.wbb1_1_post AS p, WCF.wbb1_1_thank_user AS t 
            WHERE p.postID=t.postID
            AND p.userID IN (SELECT b.userID FROM WCF2.wcf1_user as b);

    Nach dem Import müssen alle Ansichten aktualisiert werden!

    Bitte macht vor dem Ausführen einen Backup Eurer Datenbank, ich hafte nicht für Fehler.

    Edited once, last by gine78 (January 21, 2014 at 3:43 PM).

  • Könntest du das ggf. etwas weiter ausführen.
    Wo definiere ich die DBs bzw. bau ich die Verbindung auf vorallem wenn ich die DBs auf unterschiedlichen Servern habe?

    Hallo,
    klar kann ich das weiter ausführen, da ich aber nicht der Entwickler von dem Plugin bin, sondern nur meine Lösung des Problems publizieren möchte, habe ich es Kurz gehalten.

    Dieser Weg setzt voraus, dass beide Datenbanken auf einem Server liegen. Ansonsten bist Du gezwungen, einen Dump auf deinem neuen Server einzuspielen. (google: mysqldump Datenbank)
    Die DB'S werden direkt im Script (welcher kein PHP ist) definiert. (ausführbar auf Konsolenebene oder im phpmyadmin) Siehe: WCF2 und WCF.
    Den Truncate musst Du nicht ausführen, diesen habe ich nur eingebaut, um evtl. vorhandene alte bedankungen zu löschen. (Ansonsten kann es bei einem Import zum Feher kommen).

    Ansonsten:
    WCF stellt dabei die alte Datebank incl. dem Thankomat dar.
    WCF2 ist die neue WCF2.0 Datenbank.

    Diese beiden Strings findest Du im Code und kannst sie durch Deine Datenbanknamen ersetzen.

  • Ich versuche auch gerade den Import der Thanks ins Like-System, allerdings per PHP-Skript. Meine Frage ist aber eher allgemeiner Natur: Kann es sein, dass Likes gelöscht werden, wenn ein User gelöscht wird? Weil ich bekomme folgende Fehlermeldung:

    Code
    Cannot add or update a child row: a foreign key constraint fails (`wcf2`.`wcf1_like`, CONSTRAINT `04e00530ba9c0514d896e251eb7b6119_fk` FOREIGN KEY (`objectUserID`) REFERENCES `wcf1_user` (`userID`) ON DELETE SET NULL)


    Ich vermute hier, dass der einzutragende User in der Usertabelle nicht existiert. Das wäre ja blöd, wenn solche Likes verloren gehen würden.

    EDIT: Hab's mal getestet und tatsächlich — mit dem Löschen eines Users werden alle seine Likes gelöscht. Skandalös!

    Edited once, last by King555 (March 2, 2014 at 3:39 AM).

  • Ich find's auf jeden Fall schlecht. Das wirft meine Pläne ziemlich durcheinander, weil ich die Thanks im WBB 3.1 als Hilfreich-Kennzeichnungen für Tutorials & Co. verwendet habe. Wenn nun bei jeder Userlöschung (und ich räume regelmäßig mit inaktiven Usern auf) die ganzen Likes (die ich in "Hilfreichs" umbenenne) verschwinden, muss ich mir dringend was anderes überlegen.

  • Dann erstell eine temporäre Tabelle, mit den jeweiligen Likes als Gesamtzahl und gebe diese wieder. So kannst Du unabhängig von den Benutzern-/Likes arbeiten. Bei jedem neuen Like-/Dislike, wird einfach der Datensatz in der temporären Tabelle geändert.

    Die nötigen EventListener existieren. Es sollte im ganzen also kein Problem darstellen.

  • Mit Gesamtzahlen arbeite ich ungern. Dann hat man an irgendeiner Stelle was vergessen und dann wird die Gesamtzahl nicht korrekt verändert. Trotzdem danke für den Tipp.

    Unterm Strich muss ich aber sagen, ich will den Thankomat zurück... ;(

  • Aber mal was anderes: Ich sehe gerade, dass man auch Gästen das Recht geben kann, Inhalte zu liken. Das funktioniert aber nicht (weil's offensichtlich ja nicht vorgesehen ist). Ist es also ein Bug, dass man überhaupt den Haken setzen kann?

  • Kann es sein, dass es noch viel schlimmer ist als ich dachte und sogar die Likes in Postings entfernt werden, wenn der entsprechende Autor nicht mehr existiert?

    Also User 1 erstellt ein Posting, User 2 liked es. User 1 wird gelöscht. Verschwindet nun das Like von User 2, obwohl User 2 noch existiert?

  • Habe allerdings soeben folgendes festgestellt: Ich kann auch Postings von gelöschten Usern liken. Dann wird als objectUserID "NULL" eingetragen. Das dürfte doch nicht gehen, oder?

  • Das letzte war wohl falscher Alarm von mir. Likes in Postings von gelöschten Usern bleiben doch bestehen! Die UserID wird dann auf "NULL" gesetzt. Entsprechend muss ich das auch in meinem Konverter machen, damit es klappt.

    Nur Likes der gelöschten User verschwinden also.

  • So, ich habe jetzt auch mal nach nachgesehen: Im Fall das der Benutzer gelöscht wird bzw. der Datensatz, wird der Like-/Dislike-Datensatz "genullt" - besser gesagt die userObjectID zumindest.

  • So, da hier offenbar bereits funktionelle Lösungsansätze bestehen, schliesse ich mich den Fragen gleich mal an. Die Erfahreren werden sofort erkennen, dass sich mein Kenntnisstand auch recht niedrigem Niveau befindet.
    Ich habe zwei Datenbanken - eine aus dem Wbb3 - diese nennt sich festforum_wbb1 und eine weitere aus dem wbb4 welche mit testforum_wbb4 bezeichnet ist.
    Die Datenbanknutzer haben ich mit "alt" für die DB des Wbb3 und "neu" für die DB des Wbb4 bezeichnet. Ich erhalte in jedem Falle eine access denied-Fehlermeldung, also fehlende Zugriffsrechte.
    Darum meine Frage, welchem Denkfehler sitze ich auf? Den truncate-Befehl habe ich weggelassen.

    Quote

    INSERT INTO `neu.wcf1_like`(`objectID`, `objectTypeID`, `objectUserID`, `userID`, `time`, `likeValue`)
    SELECT p.postID, '81', p.userID, t.userID, '0', '1'
    FROM alt.wbb1_1_post AS p, alt.wbb1_1_thank_user AS t
    WHERE p.postID=t.postID
    AND p.userID IN (SELECT b.userID FROM alt.wcf1_user as b);

    Vielen Dank bereits im Voraus für die Hilfestellung, bin völlig übermüdet und nach vielen durchgearbeiteten Nächten nicht mehr besonders aufnahmefähig. Die zitierten Befehle habe ich sowohl im der alten als auch in der neuen DB ausprobiert, wobei nur eine richtig sein kann...

Participate now!

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