Datensatzliste bearbeiten (Jobqueue)

#1
Hallo,

Ich möchte mir basierend auf der Jobqueue eine Anzeige der Nutzeraktionen im ISPConfig bauen.

Gibt es eine Möglichkeit die Daten aus dem data Feld der sys_datalog vor der Anzeige noch durch einen "Parser" zu schicken?

Die blanke Anzeige ist zu verwirrend. Ich würde das gerne etwas aufbereiten.

/LG mare
 

Till

Administrator
#2
Es handelt sich dabei ja um ein serialisiertes PHP Array, as kannst Du mit der PHP Funktion unserailize() wieder in ein Array zurück wandeln und dann die Daten beliebig als HTML aufbereiten.
 
#3
Hallo Till,

Das habe ich hinbekommen und mir auch eine Detailsseite dazu gebaut.
Ich hätte gerne das array_diff_assoc zwischen new und alt in der Tabellenansicht und wollte eigentlich wissen, an welcher Stelle ich die Variable data noch bearbeiten kann bevor sie in der List ausgegeben wird.

/LG René
 

Till

Administrator
#4
Ich verstehe glaube ich nicht so ganz, was Du meinst. Du kannst doch Daten beliebig mit PHP ausgeben und auch zu einem beliebigen Zeitpunkt laden und bearbeiten. Der Inhalt von Data ist unveränderlich und gibt den alten und neuen Zustand der DTabelle bei einer Änderung wieder.
 
#5
HI,

Ok, ich versuchs nochmal ;-)

Ich habe die Jobqueue genommen und als History umgebaut. Dabei kann man noch die Nutzer einschränken und auch die Volltextsuche im Feld data der sys_datalog funktioniert. (Um z.B: nach E-Mailadressen zu suchen.)
(liste.png)

In den Details werden dann die Daten des Array im DB Feld data angezeigt.
(details.png)

Meine Frage war jetzt, ob/wie/wo ich in der Listenansicht (liste.png) die Daten aus dem Feld sys_datalog.data vorher noch bearbeiten kann.
Wenn ich dort {tmpl_var name="data"} eintrage habe ich ja die Rohdaten.
Ich würde diese gerne für die Listenansicht aufbereiten und dann ausgeben.
 

Anhänge

Till

Administrator
#6
Das kannst Du durch überschreiben bzw. erweitern der Funktion prepareDataRow($rec) der Klasse listform_actions erreichen, von der die Listenansicht abgeleitet ist. Siehe dazu auch listform_actions.inc.php Datei in interface/lib/classes/
 
#7
Hallo Till,

Volltreffer ;-)
Genau das meinte ich . Danke.

Allerdings bekomme ich bei einem

if ($key=="data") $tmp = unserialize(stripslashes($rec[$key]));
oder
if ($key=="data") $tmp = unserialize($rec[$key]);


die Fehlermeldung
unserialize(): Error at offset 5 of 3200 bytes in ...

in $rec[$key] steht
a:2:{s:3:"old";a:28{s:11:"mailuser_id";s:3:"183";s:10:"sys_userid";s:1:"1";s:11:" ............
 

Till

Administrator
#8
Welchen Datentyp hat die data Spalte in der mysql DB bei Dir? Möglicherweise ist die zu klein, falls Du nicht das aktuelle ISPConfig 3.0.3.3 einsetzt.
 
#9
Ich habe die 3.0.3.3 als Basisversion im Einsatz.
Der Datensatztyp ist longtext.

Wenn ich (in der Detailansicht) die Daten direkt aus der DB lese und durchs unserialize schicke funktioniert es auch. Ich kann nur leider keinen Unterschied zwischen der direkten Ausgabe und dem $row[$key] sehen.
 

Till

Administrator
#10
Lass Dir am besten mal beides vor dem unserialize ausgeben, kopier es zeile unter zeile in einen text-editor und vergleiche sie mal. Es könnte sein dass die Daten bereits in der listform bzw. listform_actions Klasse "bearbeitet" worden sind.
 
#11
Im Browser sahen die Strings identisch aus.
(Muß ja auch so sein :cool:)

Ich habe ein
$fp = fopen("/tmp/detail.txt",w) ;
fputs($fp,$record['data']) ;
fclose($fp) ;

eingebaut und dann das Übel gefunden :
a:2:{s:3:"old";a

Ein :
$tmp = unserialize(htmlspecialchars_decode($rec[$key]));
hat es dann gerichtet.

Danke für deine Hilfe.
 

Werbung

Top