public function testHasOnes() { /** @var DataDifferencerTest_Object $obj1 */ $obj1 = $this->objFromFixture('DataDifferencerTest_Object', 'obj1'); $image1 = $this->objFromFixture('Image', 'image1'); $image2 = $this->objFromFixture('Image', 'image2'); $relobj1 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj1'); $relobj2 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj2'); // create a new version $beforeVersion = $obj1->Version; $obj1->ImageID = $image2->ID; $obj1->HasOneRelationID = $relobj2->ID; $obj1->write(); $afterVersion = $obj1->Version; $this->assertNotEquals($beforeVersion, $afterVersion); /** @var DataDifferencerTest_Object $obj1v1 */ $obj1v1 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $beforeVersion); /** @var DataDifferencerTest_Object $obj1v2 */ $obj1v2 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $afterVersion); $differ = new DataDifferencer($obj1v1, $obj1v2); $obj1Diff = $differ->diffedData(); $this->assertContains($image1->Name, $obj1Diff->getField('Image')); $this->assertContains($image2->Name, $obj1Diff->getField('Image')); $this->assertContains('<ins>obj2</ins><del>obj1</del>', str_replace(' ', '', $obj1Diff->getField('HasOneRelationID'))); }
/** * @param int $from * @param int $to * * @return string */ public function humanizedChanges($from, $to) { if (!$from) { return _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.UPLOADEDFILE', "Uploaded file"); } $fromRecord = Versioned::get_version($this->owner->class, $this->owner->ID, $from); $toRecord = Versioned::get_version($this->owner->class, $this->owner->ID, $to); $diff = new DataDifferencer($fromRecord, $toRecord); $changes = $diff->changedFieldNames(); $k = array_search('LastEdited', $changes); if ($k !== false) { unset($changes[$k]); } $output = array(); foreach ($changes as $change) { $human = $change; if ($change == "ParentID") { // updated folder ID $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.MOVEDFOLDER', "Moved file"); } elseif ($change == 'Title') { $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDTITLE', "Updated title to ") . $fromRecord->Title; } elseif ($change == 'Name') { $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDFILE', "Renamed file to ") . $fromRecord->Filename; } elseif ($change == 'File') { // check to make sure the files are actually different if ($fromRecord->getHash() != $toRecord->getHash()) { $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDFILE', "Replaced file"); } else { $human = false; } } else { $human = false; } if ($human) { $output[] = $human; } } return implode(", ", $output); }
/** * Compare two version, and return the diff between them. * * @param string $from The version to compare from. * @param string $to The version to compare to. * * @return DataObject */ public function compareVersions($from, $to) { $owner = $this->owner; $fromRecord = Versioned::get_version($owner->class, $owner->ID, $from); $toRecord = Versioned::get_version($owner->class, $owner->ID, $to); $diff = new DataDifferencer($fromRecord, $toRecord); return $diff->diffedData(); }