Zusätzliche Funktion beim Speichern von Profilfeldern

Hast du Probleme Admidio einzurichten? Hier kannst du Fragen rund um die Einrichtung stellen.
Antworten
judormagen
Beiträge: 42
Registriert: 6. Aug 2009, 16:28

Zusätzliche Funktion beim Speichern von Profilfeldern

Beitrag von judormagen »

Hi!

Sobald ein Feld eines Profils geändert wird, möchte ich die Speicherung in meiner Tabelle 'history' loggen.

Den Aufbau der Tabelle findet ihr in meiner Topic zum Thema neue Tabelle anlegen.

Könnt ihr mir sagen, wo ich den Code einfügen muss, wenn für jedes Feld gecheckt werden soll, ob es sich verändert hat, um dann USER;TIMESTAMP;VORHERWERT;NACHHERWERT in die Tabelle zu speichern?

Vielen Dank!
judormagen
Beiträge: 42
Registriert: 6. Aug 2009, 16:28

Beitrag von judormagen »

Ich habe das jetzt in der user.php (Zeile 475) wie folgt gelöst. Für Anmerkungen bin ich sehr dankbar :-)

Code: Alles auswählen

            // nur Updaten, wenn sich auch der Wert geaendert hat
            if($update_field == true
            && $field_value  != $this->userFieldData[$field_name]->getValue('usd_value'))
            {
                //Eintrag in Historie schreiben (ohne Geburtsdatum wegen Formatanpassung)
                if($field_name != 'BIRTHDAY')
                {
                $his_message = $g_l10n->get('PRO_FIELD_EDITED', $field_name, $this->userFieldData[$field_name]->getValue('usd_value'), $field_value);
                
                $history = new TableAccess($g_db, TBL_HISTORY, 'his');
                $history->setValue('his_text', $his_message);
                $history->save();
                }
                
                //Durchfuehren
                $return_code = $this->userFieldData[$field_name]->setValue('usd_value', $field_value);
            }
judormagen
Beiträge: 42
Registriert: 6. Aug 2009, 16:28

Beitrag von judormagen »

Okay, hier entsteht ein Problem bei der Installation, vermutlich weil dort ja auch der Webmaster angelegt wird.
Ihr habt ja mehr Übersicht über den Code: Wie mache ich es am besten anders, so dass es funktioniert?

Dankeeeeeeee!
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hmm, eigentlich dürfte da kein Problem bei der Installation geschehen.

Evtl. war die Tabelle History zu dem Zeitpunkt noch nicht angelegt, wenn du das erste mal darauf zugreifst ?

Hast du die Tabelle auch in die db.sql eingetragen ?

Gruß
Fasse
judormagen
Beiträge: 42
Registriert: 6. Aug 2009, 16:28

Beitrag von judormagen »

Das habe ich mir auch gedacht. Die Tabelle ist zwar eingetragen, aber vllt noch nicht angelegt.

Leider fehlt mir etwas du Übersicht und gestern auch ein wenig die Zeit um sie zu bekommen ;-)

So viel weiss ich:
Der Fehler entsteht, so weit ich mich erinnere in der table_access.php bei Zeile 85. $this->db schien nicht mit einem Objekt belegt zu sein.

Mein Workaround bisher (nicht besonders schön, aber tut...):

Code: Alles auswählen

            // nur Updaten, wenn sich auch der Wert geaendert hat
            if($update_field == true
            && $field_value  != $this->userFieldData[$field_name]->getValue('usd_value'))
            {
                //Eintrag in Historie schreiben (ohne Geburtsdatum wegen Formatanpassung und mit Pruefung von $g_db, wegen Fehler bei Installation)
                //plus Feld darf nicht vorher leer gewesen sein, sonst sehr viele fehlerhafte Eintraege beim Fuellen der Pflichtfelder
                if($field_name != 'BIRTHDAY' && !empty($g_db) && $this->userFieldData[$field_name]->getValue('usd_value') != '')
                {
                $his_message = $g_l10n->get('PRO_FIELD_EDITED', $field_name, $this->userFieldData[$field_name]->getValue('usd_value'), $field_value);
                
                $history = new TableAccess($g_db, TBL_HISTORY, 'his');
                $history->setValue('his_text', $his_message);
                $history->setValue('his_profile_id', $this->userFieldData[$field_name]->getValue('usd_usr_id'));
                $history->save();
                }
                
                //Durchfuehren
                $return_code = $this->userFieldData[$field_name]->setValue('usd_value', $field_value);
            }
Benutzeravatar
fasse
Administrator
Beiträge: 6228
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Noch ein Hinweis:
$g_db ist innerhalb der Klassen nicht bekannt.
Du musst dort $this->db nutzen.
judormagen
Beiträge: 42
Registriert: 6. Aug 2009, 16:28

Beitrag von judormagen »

Ha, endlich wieder internet...

Habs jetzt mal geändert. Wundert mich etwas, dass es vorher trotzdem geklappt hat.
Später mal sehen, ob die Installation damit immernoch klappt, im laufenden Betrieb funktioniert die Funktion.
Antworten