From 35e642d0bf43c0451f6899944c0f9882f7c12438 Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Tue, 12 Apr 2016 08:54:38 +1200 Subject: [PATCH] Add two new accessors to ChangeSetItem You shouldn't have to worry about exactly formatting the reference to get a ChangeSetItem related to a DataObject, and doing it that way makes you vulnerable to breakages like introduced in previous API change --- model/versioning/ChangeSetItem.php | 27 +++++++++++++++++++++++++++ tests/model/ChangeSetItemTest.php | 21 +++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/model/versioning/ChangeSetItem.php b/model/versioning/ChangeSetItem.php index ce4b5f802..4b21c0a09 100644 --- a/model/versioning/ChangeSetItem.php +++ b/model/versioning/ChangeSetItem.php @@ -318,4 +318,31 @@ class ChangeSetItem extends DataObject implements Thumbnail { // Default permissions return (bool)Permission::checkMember($member, ChangeSet::config()->required_permission); } + + /** + * Get the ChangeSetItems that reference a passed DataObject + * + * @param DataObject $object + * @return DataList + */ + public static function get_for_object($object) { + return ChangeSetItem::get()->filter([ + 'ObjectID' => $object->ID, + 'ObjectClass' => ClassInfo::baseDataClass($object) + ]); + } + + /** + * Get the ChangeSetItems that reference a passed DataObject + * + * @param int $objectID The ID of the object + * @param string $objectClass The class of the object (or any parent class) + * @return DataList + */ + public static function get_for_object_by_id($objectID, $objectClass) { + return ChangeSetItem::get()->filter([ + 'ObjectID' => $objectID, + 'ObjectClass' => ClassInfo::baseDataClass($objectClass) + ]); + } } diff --git a/tests/model/ChangeSetItemTest.php b/tests/model/ChangeSetItemTest.php index 31b5907a5..f311911c6 100644 --- a/tests/model/ChangeSetItemTest.php +++ b/tests/model/ChangeSetItemTest.php @@ -73,4 +73,25 @@ class ChangeSetItemTest extends SapphireTest { 'Objects that have been deleted and then unpublished should return no change' ); } + + function testGetForObject() { + $object = new ChangeSetItemTest_Versioned(['Foo' => 1]); + $object->write(); + + $item = new ChangeSetItem([ + 'ObjectID' => $object->ID, + 'ObjectClass' => ClassInfo::baseDataClass($object) + ]); + $item->write(); + + $this->assertEquals( + ChangeSetItemTest_Versioned::get()->byID($object->ID)->toMap(), + ChangeSetItem::get_for_object($object)->first()->Object()->toMap() + ); + + $this->assertEquals( + ChangeSetItemTest_Versioned::get()->byID($object->ID)->toMap(), + ChangeSetItem::get_for_object_by_id($object->ID, $object->ClassName)->first()->Object()->toMap() + ); + } }