/**
  * Test for issue #15230: php fatal error in fetch reverse_related_object
  *
  * This tests checks that eZContentFunctionCollection::fetchReverseRelatedObjects
  * and eZContentFunctionCollection::fetchRelatedObjectsCount won't throw a
  * fatal error if provided with a non-existing object ID
  *
  * @link http://issues.ez.no/15230
  */
 public function testIssue15230()
 {
     $nonExistingArticleID = 100000000;
     $this->assertFalse(eZContentFunctionCollection::fetchRelatedObjects($nonExistingArticleID, false, true, false, false), "eZContentFunctionCollection::fetchRelatedObjects({$nonExistingArticleID}) should have returned false");
     $this->assertFalse(eZContentFunctionCollection::fetchRelatedObjectsCount($nonExistingArticleID, false, true, false, false), "eZContentFunctionCollection::fetchRelatedObjectsCount({$nonExistingArticleID}) should have returned false");
     $this->assertFalse(eZContentFunctionCollection::fetchReverseRelatedObjects($nonExistingArticleID, false, true, false, false, false), "eZContentFunctionCollection::fetchReverseRelatedObjects({$nonExistingArticleID}) should have returned false");
     $this->assertFalse(eZContentFunctionCollection::fetchReverseRelatedObjectsCount($nonExistingArticleID, false, true, false, false, false), "eZContentFunctionCollection::fetchReverseRelatedObjectsCount({$nonExistingArticleID}) should have returned false");
 }
 /**
  * Unit test for eZContentFunctionCollection::fetchReverseRelatedObjects
  */
 public function testFetchReverseRelatedObjects()
 {
     $object1 = new ezpObject('article', 2);
     $object1->title = __FUNCTION__ . ' A';
     $object1->publish();
     $object2 = new ezpObject('article', 2);
     $object2->title = __FUNCTION__ . ' B';
     $object2->addContentObjectRelation($object1->attribute('id'));
     $object2->publish();
     $ret = eZContentFunctionCollection::fetchReverseRelatedObjects($object1->attribute('id'), false, true, false, false, false);
     $this->assertInternalType('array', $ret);
     $this->assertArrayHasKey('result', $ret);
     $this->assertInternalType('array', $ret['result']);
     $this->assertTrue(count($ret['result']) == 1);
     $this->assertInstanceOf('eZContentObject', $ret['result'][0]);
     $this->assertEquals($object2->attribute('id'), $ret['result'][0]->attribute('id'));
 }
 public static function fetchReverseRelatedObjectsID($objectID, $attributeID, $allRelations)
 {
     if (!is_array($allRelations) || $allRelations === array()) {
         $allRelations = array('common', 'xml_embed', 'attribute');
         if (eZContentObject::isObjectRelationTyped()) {
             $allRelations[] = 'xml_link';
         }
     }
     $relatedObjectsTyped = array();
     foreach ($allRelations as $relationType) {
         $relatedObjectsTyped[$relationType] = eZContentFunctionCollection::fetchReverseRelatedObjects($objectID, $attributeID, array($relationType), false, array(), null);
     }
     $relatedObjectsTypedIDArray = array();
     foreach ($relatedObjectsTyped as $relationTypeName => $relatedObjectsByType) {
         $relatedObjectsTypedIDArray[$relationTypeName] = array();
         foreach ($relatedObjectsByType['result'] as $relatedObjectByType) {
             $relatedObjectsTypedIDArray[$relationTypeName][] = $relatedObjectByType->ID;
         }
     }
     return array('result' => $relatedObjectsTypedIDArray);
 }