Skip to content

Commit

Permalink
Add two new accessors to ChangeSetItem
Browse files Browse the repository at this point in the history
You shouldnt 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
  • Loading branch information
Hamish Friedlander committed Apr 11, 2016
1 parent 50455ce commit e2a1a8f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
26 changes: 26 additions & 0 deletions model/versioning/ChangeSetItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -283,4 +283,30 @@ public function can($perm, $member = null, $context = array()) {
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)
]);
}
}
21 changes: 21 additions & 0 deletions tests/model/ChangeSetItemTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,25 @@ function testChangeType() {
'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()
);
}
}

0 comments on commit e2a1a8f

Please sign in to comment.