Im Moment bereite ich die Migration einer bestehenden Community in ein neues System auf MyBB Basis.
Zusammen mit der Migration wird es einen Betreiberwechsel geben, so dass den bestehenden Usern auch neue Nutzungsbedingungen bzw. eine neue Einverständniserklärung angezeigt werden müsste.
Die User müssen die neuen Bedingungen akzeptieren, sonst wird der Login verwehrt.
Wie könnte ich das realisieren oder habt ihr solche Fälle schon einmal gelöst?
Meine Idee wäre ein Plugin, dass zum einen eine neues Userfeld einführt und zum anderen beim Login dieses Feld abfrägt und ggf. die Erklärung erneut anzeigt. Nur wäre das nicht gerade die simpelste Lösung.
Nein, den Fall gab es bisher noch nicht. Ich würde so vorgehen:
1. In der Tabelle users eine neue Spalte anlegen, z.B. bedingungen_akzeptiert.
2. Eine neue Seite im Forum anlegen, die die Einverständniserklärung enthält.
3. Eine Überprüfung in der global.php einbauen, die
a) guckt, ob der Benutzer angemeldet ist und wenn ja
b) guckt, ob der Benutzer der Erklärung bereits zugestimmt hat.
Hat er das nicht, wird er auf die Seite mit der Erklärung geleitet und hat 2 Buttons: Ablehnen und Zustimmen. Lehnt er ab, wird er wieder abgemeldet, stimmt er zu, wird ein entsprechender Eintrag in der Datenbank vorgenommen, so dass er bei der Überprüfung nicht erneut auf die Seite mit der Erklärung geleitet wird.
Umgehen kann man das nicht, da die Prüfung global stattfindet. D.h. egal welche Seite der Benutzer besuchen will (nachdem er sich angemeldet hat), er kommt immer zur Einverständniserklärung. Nur wenn er dieser zustimmt, kann er das Forum wieder betreten.
Danke für die Tips zur Umsetzung.
Nur würdest du wirklich die Tabelle Users erweitern?
Wie ich die MyBB Datenstruktur verstanden habe, sollten solche Zusatzinformationen in mybb_profilefieds untergebracht werden. ??
Die users Tabelle um eine Spalte zu erweitern ist viel sinnvoller. So kannst du bei der Überprüfung auf eine globale Varibale zurückgreifen:
PHP-Code:
$mybb->user['bedingungen_akzeptiert']
Hallo Michael,
nach langer Zwangspause habe ich jetzt mit der Umsetzung angefangen. Und bin auf ein für mich unerklärliches Problem gestoßen.
Ich habe ein Plugin erstellt, das bei der Aktivierung ein entsprechendes Feld in die DB einfügt, wie du vorgeschlagen hast.
Dein Tipp mit
PHP-Code:
$mybb->user['bedingungen_akzeptiert']
auf das Feld zuzugreifen funktioniert leider nicht.
Das Plugin hängt sich an den Hook "member_do_login_end". Die Funktion wird auch jedesmal aufgerufen.
Der Code in der Funktion ist dann eigentlich sehr simpel:
PHP-Code:
$result = $db->query("SELECT * FROM ".TABLE_PREFIX."users WHERE uid = ".$mybb->user['uid']);
$val = $db->fetch_array($result);
$agree = $val['agreement'];
if($agree != 'yes') {
redirect("changedregisteragreement-page.php", "Die Nutzungsbedingungen haben sich geändert. Sie werden weitergeleitet.");
}
Es wird dann auch zu meiner Seite umgeleitet und dort zeige ich die Einverständniserklärung an. Nach der Bestätigung wird auch der Eintrag in die DB vorgenommen. Danach melde ich den User ab und er muss sich neu einloggen.
ABER ....
Beim zweiten, dritten, vierten, .... Login scheint die Datenbankabfrage erst gar nicht zu laufen! Es wird immer wieder der Redirect ausgeführt. D.h. theoretisch müsste für $agree ein anderer Wert als yes zurückgeliefert werden, obwohl in der DB schon ein yes steht!
Und das verrückte ist, wenn ich vor die IF Abfrage noch ein
einfüge, dann wir auch ein yes angezeigt!
Aber ohne die Ausgabe und den die() Befehl wird immer der Redirect ausgeführt.
Ich bin jetzt ratlos. Hast du evtl. noch eine Idee? Gibt's vielleicht einen Cache, den ich nicht kenne?
Kannst du das Plugin mal bitte hier posten? Du musst $mybb->user['bedingungen_akzeptiert'] natürlich ändern in $mybb->user['agreement'], da die Tabellenspalte in der Datenbank bei dir agreement heißt.
Wie es scheint habe ich das Problem gelöst.
Scheinbar ist in
nicht immer die Userid enthalten.
Da ich mich in den Hook nach dem Login einklinke, ist zwar der Login schon erfolgreich gelaufen und die Userid ermittelt. Aber sie wird noch nicht in die $mybb->user Variable gespeichert.
Daher ist beim ersten Aufruf des Plugins die Userid = 0. Der Query liefert nichts zurück und das Script läuft in die if Abfrage.
Beim zweiten Versuch, z.B. nach einem Reload speichert MyBB irgendwann die Userdaten auch in $mybb->user. Dann funktioniert der Query und die if Abfrage.
Gefixt habe ich das Problem, indem ich statt
die
aus den Login Code in members.php verwende.
MyBB ist zwar übersichtlich programmiert, aber ich wieso müssen identische Daten an so vielen verschiedenen Stellen gespeichert werden? Ich bin mal gespannt, wie Version 1.2 in der Codestruktur aussehen wird.
Das Plugin gebe ich frei, sobald mein Board live geht und ich es noch etwas ausgetestet habe.
$mybb->user['agreement'] konnte aus dem gleichen Grund wie die Userid nicht funktionieren
Hallo,
ich wurde von einem Modeator auf diesen Beitrag verwiesen, nur leider habe ich nichts verstanden was in den oberen Beiträgen steht. Kann mir jemand das bitte ausführlich und jeden Schritt erklären den ich ausführen muss. Bitte es ist sehr wichtig!! Für jede Hilfe wäre ich sehr dankbar!!!!!!!!!!
Super es läuft vielen Dank!!