Änderungen von Benutzerdaten anzeigen
Änderungen von Benutzerdaten anzeigen
Hallo,
ich weiß nicht ob ich das schon mal angesprochen hatte oder ob es ein anderer gemacht hat. Ich habe jetzt nichts gefunden.
Ich würde es wirklich gut finden, wenn den Admins bzw. dem Vorstand Änderungen der Mitgliedsdaten mitgeteilt würden.
Ich habe da 2 Überlegungen. Entweder in Form eines Protokolls oder in Form eines Datenbankabgleichs.
Protokoll
Wenn ein User etwas ändert, werden die Änderungen eines Users in einem Protokoll festgehalten.
Der Admin oder der Vorstand findet (wo weiß ich nicht) einen Link wo er sich das Userprotokoll anzeigen lassen kann. Dort sieht er dann alle Änderungen die der User gemacht hat.
UserXY hat am xx.xx.xxxx xx:xx Uhr folgende Daten geändert:
Adresse neu - Musterstrasse 12 (alt - Altmannsstrasse 2)
Telefon neu - 02315554652458 (alt - 5454545455454554)
User22Y hat am xx.xx.xxxx xx:xx Uhr folgende Daten geändert:
Nachname neu - Beutel (alt - Hirte)
Hochzeitstag 01.01.2010
Der Admin bzw. der Vorstand kann dann durch Anklicken von Kontrollkästchen die Informationen löschen bzw. zu Kenntnis nehmen.
Eine einfachere Möglichkeit wäre der Datenbankabgleich.
Die persönlichen Daten werden ja in Datenbank-Tabellen gespeichert. Hier könnte man ein Abbild der Tabellen erstellen mit dem Zusatz alt.
Wenn ein User nun seine Daten ändert, werden die Daten, die derzeit gespeichert sind, in die Tabelle_alt gespeichert und die neuen Daten eben in die Normale. Wobei in die Tabelle_alt nur die Daten gespeichert werden sollten die auch tatsächlich geändert wurden.
Beispiel - User ändert Daten (Alt = Neu)
Dieter = Dieter (wird nicht in Tabelle_alt gespeichert)
Hummel = Hummel (wird nicht in Tabelle_alt gespeichert)
Musterstasse = Beutelweg (Musterstrasse wird in Tabelle_alt gespeichert)
12 = 24 (12 wird in Tabelle_alt gespeichert)
usw.
Musterstrasse und die Hausnummer 12 werden in die Tabelle_alt gespeichert. Da die Tabelle genau so aufgebaut ist wie die normele Usertabelle, sind in Tabelle_alt alle Werte bzw. Spaltennamen gleich oder auch mit dem Zusatz alt (z.B. username_alt)
Jetzt kann man eine Liste erstellen und die Änderungen anzeigen lassen, da man ja in der Tabelle_alt weiß was sich geändert hat.
Man würde also eine Liste mit den Usern sehen (wie bei Rollen) und die Daten die sich geändert haben würde andersfarbig oder verlinkt mit Tooltip. Geht man mit der Maus drüber so würde man z.B. bei Adresse die alte Adresse im Tooltip sehen.
Also, ich würde die Möglichkeit, dass man sieht was sich ändert echt begrüßen.
Gruss
Dj_PD
ich weiß nicht ob ich das schon mal angesprochen hatte oder ob es ein anderer gemacht hat. Ich habe jetzt nichts gefunden.
Ich würde es wirklich gut finden, wenn den Admins bzw. dem Vorstand Änderungen der Mitgliedsdaten mitgeteilt würden.
Ich habe da 2 Überlegungen. Entweder in Form eines Protokolls oder in Form eines Datenbankabgleichs.
Protokoll
Wenn ein User etwas ändert, werden die Änderungen eines Users in einem Protokoll festgehalten.
Der Admin oder der Vorstand findet (wo weiß ich nicht) einen Link wo er sich das Userprotokoll anzeigen lassen kann. Dort sieht er dann alle Änderungen die der User gemacht hat.
UserXY hat am xx.xx.xxxx xx:xx Uhr folgende Daten geändert:
Adresse neu - Musterstrasse 12 (alt - Altmannsstrasse 2)
Telefon neu - 02315554652458 (alt - 5454545455454554)
User22Y hat am xx.xx.xxxx xx:xx Uhr folgende Daten geändert:
Nachname neu - Beutel (alt - Hirte)
Hochzeitstag 01.01.2010
Der Admin bzw. der Vorstand kann dann durch Anklicken von Kontrollkästchen die Informationen löschen bzw. zu Kenntnis nehmen.
Eine einfachere Möglichkeit wäre der Datenbankabgleich.
Die persönlichen Daten werden ja in Datenbank-Tabellen gespeichert. Hier könnte man ein Abbild der Tabellen erstellen mit dem Zusatz alt.
Wenn ein User nun seine Daten ändert, werden die Daten, die derzeit gespeichert sind, in die Tabelle_alt gespeichert und die neuen Daten eben in die Normale. Wobei in die Tabelle_alt nur die Daten gespeichert werden sollten die auch tatsächlich geändert wurden.
Beispiel - User ändert Daten (Alt = Neu)
Dieter = Dieter (wird nicht in Tabelle_alt gespeichert)
Hummel = Hummel (wird nicht in Tabelle_alt gespeichert)
Musterstasse = Beutelweg (Musterstrasse wird in Tabelle_alt gespeichert)
12 = 24 (12 wird in Tabelle_alt gespeichert)
usw.
Musterstrasse und die Hausnummer 12 werden in die Tabelle_alt gespeichert. Da die Tabelle genau so aufgebaut ist wie die normele Usertabelle, sind in Tabelle_alt alle Werte bzw. Spaltennamen gleich oder auch mit dem Zusatz alt (z.B. username_alt)
Jetzt kann man eine Liste erstellen und die Änderungen anzeigen lassen, da man ja in der Tabelle_alt weiß was sich geändert hat.
Man würde also eine Liste mit den Usern sehen (wie bei Rollen) und die Daten die sich geändert haben würde andersfarbig oder verlinkt mit Tooltip. Geht man mit der Maus drüber so würde man z.B. bei Adresse die alte Adresse im Tooltip sehen.
Also, ich würde die Möglichkeit, dass man sieht was sich ändert echt begrüßen.
Gruss
Dj_PD
So hallo erstmal!
Ich habe mir mal so ein Ding gebastelt.
Ich gebe also bei einem Datenbankfeld (usf) eine neue Eigenschaft dazu, nämlich usf_needapproval
Wenn jetzt jemand ein solches Feld mit dieser Eigenschaft ändert, dann lasse ich mir den alten Wert merken.
Dazu kommt dann noch ein neues Rollenrecht, das einem User die Berechtigung verschafft, solche Änderungs-Anträge zu bestätigen.
Alle "Änderungsanträge" können dann in einem modul angezeigt werden und entweder bestätigt oder rückgängig gemacht werden. Zudem wird bei jeder Änderung ein Timestamp in der Datenbank hinterlegt, damit man das Ganze auch als Liste rauslassen kann a la "Was hat sich im letzten Jahr alles geändert".
Wenn ihr bisschen Ahnung von PHP/MySQL habt, könnt ihr euch das implementieren.
bedeutet allerdings, dass ihr beispielsweise Klassen anpassen müsst. Ich hab das nämlich nicht alles dynamisch programmiert... Also bei dem nächsten Update wäre das dann wieder weg...
Das ist halt bei admidio alles recht blöd, weil ich gerne überall Code reinschreibe wo ich will... Vielleicht geb ich, wenn ich mit meinen vielen Anpassungen fertig bin einfach mal eine Version raus, bei der man nichts von den Original-Dateien überschreiben muss. Zur Zeit hab ich allerdings nicht so viel Zeit, da unsere Mitgliederverwaltung bis Ende März stehen muss.
Also wer interesse hat, bitte melden!
Ich habe mir mal so ein Ding gebastelt.
Ich gebe also bei einem Datenbankfeld (usf) eine neue Eigenschaft dazu, nämlich usf_needapproval
Wenn jetzt jemand ein solches Feld mit dieser Eigenschaft ändert, dann lasse ich mir den alten Wert merken.
Dazu kommt dann noch ein neues Rollenrecht, das einem User die Berechtigung verschafft, solche Änderungs-Anträge zu bestätigen.
Alle "Änderungsanträge" können dann in einem modul angezeigt werden und entweder bestätigt oder rückgängig gemacht werden. Zudem wird bei jeder Änderung ein Timestamp in der Datenbank hinterlegt, damit man das Ganze auch als Liste rauslassen kann a la "Was hat sich im letzten Jahr alles geändert".
Wenn ihr bisschen Ahnung von PHP/MySQL habt, könnt ihr euch das implementieren.
bedeutet allerdings, dass ihr beispielsweise Klassen anpassen müsst. Ich hab das nämlich nicht alles dynamisch programmiert... Also bei dem nächsten Update wäre das dann wieder weg...
Das ist halt bei admidio alles recht blöd, weil ich gerne überall Code reinschreibe wo ich will... Vielleicht geb ich, wenn ich mit meinen vielen Anpassungen fertig bin einfach mal eine Version raus, bei der man nichts von den Original-Dateien überschreiben muss. Zur Zeit hab ich allerdings nicht so viel Zeit, da unsere Mitgliederverwaltung bis Ende März stehen muss.
Also wer interesse hat, bitte melden!
-
- Beiträge: 119
- Registriert: 30. Jun 2008, 20:05
- Wohnort: Baden
- Kontaktdaten:
So. Hoffe, ich hab alle Dateien zusammenbekommen. War mein erster admidio-Versuch.
Ich glaube, das müsste nochmal alles überprüft werden. Habe einfach die Dateien, wo ich glaube, die Änderungen gemacht zu haben zusammengefasst. Falls was fehlt, bzw. ne Fehlermeldung kommt, einfach nochmal schreiben.
Da ich in dem ganzen sourceforge und svn- nicht drin bin, kann ich bei dem admidio-Projekt erstmal nicht mitmachen. Versuch allerdings mitlerweile, meine Module immer neu zu erzeugen und keine Dateien zu überschreiben, so dass ich das dann später irgendwann mal auch commiten kann.
Muss wie gesagt gerade admidio um einige Funktionen erweitern und hab da ne harte Deadline. Wenn es alles entspannter wird, kann ich das auch mal zusammenfassen und hier posten.
Übrigens stört mich total, dass kein Smarty eingebaut ist. Hatte überlegt, das einzubauen, es aber jetzt erstmal aufgegeben. Kennt jemand denn eine schönes cm-framework mit smarty?
http://uploaded.to/file/j5j6ro
Ich glaube, das müsste nochmal alles überprüft werden. Habe einfach die Dateien, wo ich glaube, die Änderungen gemacht zu haben zusammengefasst. Falls was fehlt, bzw. ne Fehlermeldung kommt, einfach nochmal schreiben.
Da ich in dem ganzen sourceforge und svn- nicht drin bin, kann ich bei dem admidio-Projekt erstmal nicht mitmachen. Versuch allerdings mitlerweile, meine Module immer neu zu erzeugen und keine Dateien zu überschreiben, so dass ich das dann später irgendwann mal auch commiten kann.
Muss wie gesagt gerade admidio um einige Funktionen erweitern und hab da ne harte Deadline. Wenn es alles entspannter wird, kann ich das auch mal zusammenfassen und hier posten.
Übrigens stört mich total, dass kein Smarty eingebaut ist. Hatte überlegt, das einzubauen, es aber jetzt erstmal aufgegeben. Kennt jemand denn eine schönes cm-framework mit smarty?
http://uploaded.to/file/j5j6ro
Die Datenbank muss natürlich um ein paar Felder erweitert werden:
Tabelle: adm_user_fields
--> usf_needapprove
Tabelle: adm_user_data
--> usd_needaproval (Da hab ich das Feld wohl falsch geschrieben, naja, mein Englisch...)
--> usd_changed (Hier lasse ich einfach von MySQL einen Timestamp schreiben, wenn die Daten geändert wurden)
Tabelle: adm_roles
--> rol_approve_userdata
Hoffe, das wars...
Tabelle: adm_user_fields
--> usf_needapprove
Tabelle: adm_user_data
--> usd_needaproval (Da hab ich das Feld wohl falsch geschrieben, naja, mein Englisch...)
--> usd_changed (Hier lasse ich einfach von MySQL einen Timestamp schreiben, wenn die Daten geändert wurden)
Tabelle: adm_roles
--> rol_approve_userdata
Hoffe, das wars...
-
- Beiträge: 119
- Registriert: 30. Jun 2008, 20:05
- Wohnort: Baden
- Kontaktdaten:
-
- Beiträge: 119
- Registriert: 30. Jun 2008, 20:05
- Wohnort: Baden
- Kontaktdaten:
Wenn ich auf den Knopf "Neue Änderungsanträge" klicke kommt folgende Fehlermeldung:
Was ich noch nicht verstehe: Müssen dann die Änderungen von allen Datenfeldern bestätigt werden? Kann man einstellen welche Felder bestätigt werden müssen?
Und zuletzt: Lässt sich einstellen dass für Mitglieder bestimmter Rollen die Bestätigung erforderlich ist? Das wäre nützlich wenn ich alle Mitglieder denen ich keine selbsständige Änderung zutraue in einer Rolle zusammenfassen könnte. Greift diese Einstellung auch für Profilfotos?
Mein Fehler oder fehlende Tabelle?S Q L - E R R O R
CODE: 1054
Unknown column 'usd.usd_changed' in 'field list'
B A C K T R A C E
FILE: adm_program/system/db/mysql.php
LINE: 193
CALL: DB->db_error()
FILE: adm_program/system/db/mysql.php
LINE: 77
CALL: MySqlDB->db_error()
FILE: adm_program/administration/approve_data/approve_data.php
LINE: 45
CALL: MySqlDB->query()
Was ich noch nicht verstehe: Müssen dann die Änderungen von allen Datenfeldern bestätigt werden? Kann man einstellen welche Felder bestätigt werden müssen?
Und zuletzt: Lässt sich einstellen dass für Mitglieder bestimmter Rollen die Bestätigung erforderlich ist? Das wäre nützlich wenn ich alle Mitglieder denen ich keine selbsständige Änderung zutraue in einer Rolle zusammenfassen könnte. Greift diese Einstellung auch für Profilfotos?
Hallo
Also das ganze ist natürlich alles auf mich selber angepasst. Also solltet ihr euch ein bisschen mit php auskennen, wenn ihr das einpflegt.
Der Fehler, der bei dir ausgegeben wird bedeutet schlichtweg, dass du in der Tabelle adm_user_data das Feld usd_changed hinzufügen musst. Typ ist datetime.
Tabellen habe ich nicht zusätzlich hinzugefügt (zumindest für dieses Modul nicht.)
Das Modul funktioniert so, dass du in /adm_program/administration/organization/fields.php Dem entsprechenden Feld die Eigenschaft verpasst usd_needapprove. Ähnlich wie für die usd_visible o.ä.
Bei den Rollen vergibst du ein Rollenrecht an einen Benutzer, das diesem Benutzer erlaubt, solche Feldänderungen zu bestätigen.
Habe nochmal dran gearbeitet, weil mir das ganze immer noch etwas inkonsistent erscheint. Jetzt lasse ich mir zudem noch die User-ID abspeichern von dem, der die Daten geändert hat und kann die Rollenmitglidschaften automatisch beenden, wenn ein Sterbedatum eingetragen ist und dieses bestätigt wird.
Also das ganze ist natürlich alles auf mich selber angepasst. Also solltet ihr euch ein bisschen mit php auskennen, wenn ihr das einpflegt.
Der Fehler, der bei dir ausgegeben wird bedeutet schlichtweg, dass du in der Tabelle adm_user_data das Feld usd_changed hinzufügen musst. Typ ist datetime.
Tabellen habe ich nicht zusätzlich hinzugefügt (zumindest für dieses Modul nicht.)
Das Modul funktioniert so, dass du in /adm_program/administration/organization/fields.php Dem entsprechenden Feld die Eigenschaft verpasst usd_needapprove. Ähnlich wie für die usd_visible o.ä.
Bei den Rollen vergibst du ein Rollenrecht an einen Benutzer, das diesem Benutzer erlaubt, solche Feldänderungen zu bestätigen.
Habe nochmal dran gearbeitet, weil mir das ganze immer noch etwas inkonsistent erscheint. Jetzt lasse ich mir zudem noch die User-ID abspeichern von dem, der die Daten geändert hat und kann die Rollenmitglidschaften automatisch beenden, wenn ein Sterbedatum eingetragen ist und dieses bestätigt wird.
Auch hier wollte ich nochmal antworten und auch nochmal Danke für die super Info geben.
Ich werde mir das nun mal anschauen, würde mich aber auch freuen, wenn die Admins bzw. die Entwickler diese Klasse Sache evtl. berücksichtigen und evtl. komplett mit in das Script einbauen.
Finde diese Funktion wirklich klasse.
Vielleicht kann man das ja irgendwann noch so erweitern, dass man ein allgemeines Cronjob-Plugin erstellt, welches einmal oder sonst wie oft ausgeführt wird und alle Änderungen der Seite per EMail an den Admin oder einer Rolle schickt.
So würde man eben einmal am Tag eine kurze Mail mit:
"Heute sind
3 neue Gästebucheinträge gemacht worden.
24 Änderungsanträge gestellt worden.
3 neue Link eingegangen
1 neuer Termin hinzu gekommen"
Sorry, wollte nicht vom Thema abweichen.
Ich werde mir das nun mal anschauen, würde mich aber auch freuen, wenn die Admins bzw. die Entwickler diese Klasse Sache evtl. berücksichtigen und evtl. komplett mit in das Script einbauen.
Finde diese Funktion wirklich klasse.
Vielleicht kann man das ja irgendwann noch so erweitern, dass man ein allgemeines Cronjob-Plugin erstellt, welches einmal oder sonst wie oft ausgeführt wird und alle Änderungen der Seite per EMail an den Admin oder einer Rolle schickt.
So würde man eben einmal am Tag eine kurze Mail mit:
"Heute sind
3 neue Gästebucheinträge gemacht worden.
24 Änderungsanträge gestellt worden.
3 neue Link eingegangen
1 neuer Termin hinzu gekommen"
Sorry, wollte nicht vom Thema abweichen.
Ich habe das jetzt schon eine ganze Weile so laufen. Tatsächlich laufen sehr viele Mails auf. Scheinbar ändert das Script bei jedem Speichern der Profildaten das Datumformat des Geburtstages, außerdem wird das Land in eine Abkürzung umgewandelt. Ich habe die Benachrichtigungen einfach mal auf die wichtigen Daten begrenzt, das kann ja jeder nach Belieben anpassen. Hier der Code:ukos hat geschrieben:Achso nochwas!
Wenn eine einfache Email-Bestätigung reicht, dann schreib doch einfach in die User-Klasse bei $user->save() vorher eine mail() - Funktion dazu. Könnte allerdings sein, dass du dich dann vor Mails nicht mehr retten kannst
Code: Alles auswählen
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
/////// Mailmodul: Änderungen der Profile werden /////
/////// test@ .de /////
/////// geschickt. @Frederic /////
////////////////////////////////////////////////////////
/////// Änderungen werden nur verschickt, wenn es sich um Adressänderungen handelt! ////////
if (($field_name == "TITEL") OR ($field_name == "LAST_NAME") OR ($field_name == "FIRST_NAME") OR ($field_name == "EMAIL") OR ($field_name == "ADDRESS") OR ($field_name == "POSTCODE") OR ($field_name == "CITY") OR ($field_name == "TELEFON PRIVAT") OR ($field_name == "HANDY PRIVAT"))
{
$mailmodul_zeile_1 = 'Hallo, '.$this->getValue('Vorname').' '.$this->getValue('Nachname').' hat seine Daten geaendert ('.$field_name.').'." \r\n \r\n";
$mailmodul_zeile_2 = 'Alter Wert: '.$this->userFieldData[$field_name]->getValue('usd_value')."\r\n".'Neuer Wert: '.$field_value;
$mailmodul_nachricht = $mailmodul_zeile_1.$mailmodul_zeile_2;
mail('test@ .de', 'Datenänderungen', $mailmodul_nachricht);
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
Das Ganze hab ich in die Datei /adm_program/system/classes/user.php ab Zeile 477 eingefügt (admidio-2.2.7).
Vielleicht kann das ja jemand gebrauchen.
Hallo !
Ansonsten Kanu vielen Dank für die Zeilen...
Gruß
Lars
Ich habe den Quelltext mal bei mir eingebaut (admidio 2.2.9) und bin soweit sehr zufrieden. Die Angaben zum Vor- und Nachnamen sind im Orginal aber falsch benannt. Zeile "$mailmodul_zeile_1..." ist hier korrigiert.kanu hat geschrieben:Code: Alles auswählen
//////////////////////////////////////////////////////// //////////////////////////////////////////////////////// /////// Mailmodul: Änderungen der Profile werden ///// /////// test@ .de ///// /////// geschickt. @Frederic ///// //////////////////////////////////////////////////////// /////// Änderungen werden nur verschickt, wenn es sich um Adressänderungen handelt! //////// if (($field_name == "TITEL") OR ($field_name == "LAST_NAME") OR ($field_name == "FIRST_NAME") OR ($field_name == "EMAIL") OR ($field_name == "ADDRESS") OR ($field_name == "POSTCODE") OR ($field_name == "CITY") OR ($field_name == "TELEFON PRIVAT") OR ($field_name == "HANDY PRIVAT")) { $mailmodul_zeile_1 = 'Hallo, '.$this->getValue('FIRST_NAME').' '.$this->getValue('LAST_NAME').' hat seine Daten geaendert ('.$field_name.').'." \r\n \r\n"; $mailmodul_zeile_2 = 'Alter Wert: '.$this->userFieldData[$field_name]->getValue('usd_value')."\r\n".'Neuer Wert: '.$field_value; $mailmodul_nachricht = $mailmodul_zeile_1.$mailmodul_zeile_2; mail('test@ .de', 'Datenänderungen', $mailmodul_nachricht); } //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////// ////////////////////////////////////////////////////////
Das Ganze hab ich in die Datei /adm_program/system/classes/user.php ab Zeile 477 eingefügt (admidio-2.2.7).
Vielleicht kann das ja jemand gebrauchen.
Ansonsten Kanu vielen Dank für die Zeilen...
Gruß
Lars