Änderungen von Benutzerdaten anzeigen

Hast du Vorschläge, was wir an Admidio noch verbessern könnten ? Hier kannst du uns deine Vorstellung an neuen Funktionen mitteilen.
Dj_PD
Beiträge: 61
Registriert: 23. Okt 2009, 12:04

Änderungen von Benutzerdaten anzeigen

Beitrag von Dj_PD »

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
kanu
Beiträge: 103
Registriert: 22. Okt 2009, 17:27
Wohnort: Dortmund

Beitrag von kanu »

Mir würde schon eine einfache Emailbenachrichtigung über die Änderung reichen. Das wäre wahrscheinlich deutlich einfacher zu machen, weil man die Daten dann nicht extra doppelt Speichern muss.
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

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!

Bild

Bild
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

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 :D :D
superminis
Beiträge: 119
Registriert: 30. Jun 2008, 20:05
Wohnort: Baden
Kontaktdaten:

Beitrag von superminis »

@ukos:

Hast du das für Admidio 2.1.8 entwickelt?

dann würde ich mich freuen wenn du mir deinen Code zur Verfügugung stellen würdest.
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

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
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

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...
superminis
Beiträge: 119
Registriert: 30. Jun 2008, 20:05
Wohnort: Baden
Kontaktdaten:

Beitrag von superminis »

Danke ukos. Ich versuche dann einmal mein Glück :-)
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

Du kannst ja erstmal nur das Zeug aus dem administration-Ordner reinkopieren und dann schauen, welche Datenbankfelder als nicht vorhanden angezeigt werden und welche user-objekt Dinger fehlen.
Zudem ist glaub bei user->save() nochmal was drin.
superminis
Beiträge: 119
Registriert: 30. Jun 2008, 20:05
Wohnort: Baden
Kontaktdaten:

Beitrag von superminis »

Wenn ich auf den Knopf "Neue Änderungsanträge" klicke kommt folgende Fehlermeldung:
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()
Mein Fehler oder fehlende Tabelle?

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?
ukos
Beiträge: 13
Registriert: 13. Mär 2010, 17:43
Kontaktdaten:

Beitrag von ukos »

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.
Dj_PD
Beiträge: 61
Registriert: 23. Okt 2009, 12:04

Beitrag von Dj_PD »

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.
kanu
Beiträge: 103
Registriert: 22. Okt 2009, 17:27
Wohnort: Dortmund

Beitrag von kanu »

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 :D :D
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:

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.
kanu
Beiträge: 103
Registriert: 22. Okt 2009, 17:27
Wohnort: Dortmund

Beitrag von kanu »

Aus irgendeinem Grund wird der Name der Person, bei der die Änderungen vorgenommen wurden, nicht ausgelesen. Hat jemand eine Idee, wie man den in die Mail einbauen könnte? Bzw. auf welche Variable ich zugreifen muss?

Ich stehe gerade auf dem Schlauch, glaube ich...
Lars
Beiträge: 4
Registriert: 23. Jan 2012, 20:11
Wohnort: Leverkusen

Beitrag von Lars »

Hallo !
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.
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.

Ansonsten Kanu vielen Dank für die Zeilen...

Gruß
Lars
Antworten