mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
ENHANCEMENT: Added better support for using DataDifferencer to look at new records.
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@79400 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
546a5b2c89
commit
7e3652216b
@ -37,7 +37,12 @@ class DataDifferencer extends ViewableData {
|
|||||||
|
|
||||||
protected $ignoredFields = array("ID","Version","RecordID");
|
protected $ignoredFields = array("ID","Version","RecordID");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a DataDifferencer to show the changes between $fromRecord and $toRecord.
|
||||||
|
* If $fromRecord is null, this will represent a "creation".
|
||||||
|
*/
|
||||||
function __construct($fromRecord, $toRecord) {
|
function __construct($fromRecord, $toRecord) {
|
||||||
|
if(!$toRecord) user_error("DataDifferencer constructed without a toRecord", E_USER_WARNING);
|
||||||
$this->fromRecord = $fromRecord;
|
$this->fromRecord = $fromRecord;
|
||||||
$this->toRecord = $toRecord;
|
$this->toRecord = $toRecord;
|
||||||
}
|
}
|
||||||
@ -57,13 +62,20 @@ class DataDifferencer extends ViewableData {
|
|||||||
* <ins> and <del> tags.
|
* <ins> and <del> tags.
|
||||||
*/
|
*/
|
||||||
function diffedData() {
|
function diffedData() {
|
||||||
|
if($this->fromRecord) {
|
||||||
$diffed = clone $this->fromRecord;
|
$diffed = clone $this->fromRecord;
|
||||||
$fields = array_keys($diffed->getAllFields());
|
$fields = array_keys($diffed->getAllFields());
|
||||||
|
} else {
|
||||||
|
$diffed = clone $this->toRecord;
|
||||||
|
$fields = array_keys($this->toRecord->getAllFields());
|
||||||
|
}
|
||||||
|
|
||||||
foreach($fields as $field) {
|
foreach($fields as $field) {
|
||||||
if(in_array($field, $this->ignoredFields)) continue;
|
if(in_array($field, $this->ignoredFields)) continue;
|
||||||
|
|
||||||
if($this->fromRecord->$field != $this->toRecord->$field) {
|
if(!$this->fromRecord) {
|
||||||
|
$diffed->$field = "<ins>" . $this->toRecord->$field . "</ins>";
|
||||||
|
} else if($this->fromRecord->$field != $this->toRecord->$field) {
|
||||||
$diffed->$field = Diff::compareHTML($this->fromRecord->$field, $this->toRecord->$field);
|
$diffed->$field = Diff::compareHTML($this->fromRecord->$field, $this->toRecord->$field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,16 +94,25 @@ class DataDifferencer extends ViewableData {
|
|||||||
*/
|
*/
|
||||||
function ChangedFields() {
|
function ChangedFields() {
|
||||||
$changedFields = new DataObjectSet();
|
$changedFields = new DataObjectSet();
|
||||||
|
|
||||||
|
if($this->fromRecord) {
|
||||||
|
$base = $this->fromRecord;
|
||||||
$fields = array_keys($this->fromRecord->getAllFields());
|
$fields = array_keys($this->fromRecord->getAllFields());
|
||||||
|
} else {
|
||||||
|
$base = $this->toRecord;
|
||||||
|
$fields = array_keys($this->toRecord->getAllFields());
|
||||||
|
}
|
||||||
|
|
||||||
foreach($fields as $field) {
|
foreach($fields as $field) {
|
||||||
if(in_array($field, $this->ignoredFields)) continue;
|
if(in_array($field, $this->ignoredFields)) continue;
|
||||||
|
|
||||||
if($this->fromRecord->$field != $this->toRecord->$field) {
|
if(!$this->fromRecord || $this->fromRecord->$field != $this->toRecord->$field) {
|
||||||
$changedFields->push(new ArrayData(array(
|
$changedFields->push(new ArrayData(array(
|
||||||
'Name' => $field,
|
'Name' => $field,
|
||||||
'Title' => $this->fromRecord->fieldLabel($field),
|
'Title' => $base->fieldLabel($field),
|
||||||
'Diff' => Diff::compareHTML($this->fromRecord->$field, $this->toRecord->$field),
|
'Diff' => $this->fromRecord
|
||||||
|
? Diff::compareHTML($this->fromRecord->$field, $this->toRecord->$field)
|
||||||
|
: "<ins>" . $this->toRecord->$field . "</ins>",
|
||||||
'From' => $this->fromRecord->$field,
|
'From' => $this->fromRecord->$field,
|
||||||
'To' => $this->toRecord->$field,
|
'To' => $this->toRecord->$field,
|
||||||
)));
|
)));
|
||||||
|
Loading…
Reference in New Issue
Block a user