/** * Unit test for eZContentObject::fetchIDArray() * * Outline: * 1) Create more than 1000 objects * 2) Call fetchIDArray() on these object's ids * 3) Check that they were all returned */ public function testFetchIDArray() { $contentObjectIDArray = array(); $object = new ezpObject( "article", 2 ); $object->title = __FUNCTION__; $object->publish(); $contentObjectIDArray[] = $object->attribute( 'id' ); for( $i = 0; $i < 20; $i++ ) { $newObject = $object->copy(); $contentObjectIDArray[] = $newObject->attribute( 'id' ); } $contentObjects = eZContentObject::fetchIDArray( $contentObjectIDArray ); // we will store the objects we find in this array $matchedContentObjectsIDArray = array(); foreach( $contentObjectIDArray as $contentObjectID ) { $this->assertArrayHasKey( $contentObjectID, $contentObjects, "eZContentObject #{$contentObjectID} should be a key from the return value" ); $this->assertInstanceOf( 'eZContentObject', $contentObjects[$contentObjectID], "Key for eZContentObject #{$contentObjectID} isn't an eZContentObject" ); $this->assertEquals( $contentObjectID, $contentObjects[$contentObjectID]->attribute( 'id' ), "eZContentObject's id for key #{$contentObjectID} doesn't match" ); $matchedContentObjectsIDArray[] = $contentObjectID; } // Check that all the objects from the original array were returned $this->assertTrue( count( array_diff( $matchedContentObjectsIDArray, $contentObjectIDArray ) ) == 0, "Not all objects from original ID array were returned" ); }
/** * Clears template-block cache and template-block with subtree_expiry parameter caches for specified object * without checking 'TemplateCache' ini setting. * * @param int|array|bool $objectID (list of) object ID, if false only ordinary template block caches will be cleared * Support for array value available {@since 5.0}. * @param bool $checkViewCacheClassSettings Check whether ViewCache class settings should be verified */ public static function clearTemplateBlockCache($objectID, $checkViewCacheClassSettings = false) { // ordinary template block cache eZContentObject::expireTemplateBlockCache(); if (empty($objectID)) { return; } // subtree template block cache $nodeList = false; if (is_array($objectID)) { $objects = eZContentObject::fetchIDArray($objectID); } else { $objects = array($objectID => eZContentObject::fetch($objectID)); } $ini = eZINI::instance('viewcache.ini'); foreach ($objects as $object) { if ($object instanceof eZContentObject) { $getAssignedNodes = true; if ($checkViewCacheClassSettings) { $objectClassIdentifier = $object->attribute('class_identifier'); if ($ini->hasVariable($objectClassIdentifier, 'ClearCacheBlocks') && $ini->variable($objectClassIdentifier, 'ClearCacheBlocks') === 'disabled') { $getAssignedNodes = false; } } if ($getAssignedNodes) { $nodeList = array_merge($nodeList !== false ? $nodeList : array(), $object->assignedNodes()); } } } eZSubtreeCache::cleanup($nodeList); }
function prefetch() { $relatedObjectIDArray = array(); $nodeIDArray = array(); // Fetch all links and cache urls $linkIDArray = $this->getAttributeValueArray('link', 'url_id'); if (count($linkIDArray) > 0) { $inIDSQL = implode(', ', $linkIDArray); $db = eZDB::instance(); $linkArray = $db->arrayQuery("SELECT * FROM ezurl WHERE id IN ( {$inIDSQL} ) "); foreach ($linkArray as $linkRow) { $url = str_replace('&', '&', $linkRow['url']); $this->LinkArray[$linkRow['id']] = $url; } } $linkRelatedObjectIDArray = $this->getAttributeValueArray('link', 'object_id'); $linkNodeIDArray = $this->getAttributeValueArray('link', 'node_id'); // Fetch all embeded objects and cache by ID $objectRelatedObjectIDArray = $this->getAttributeValueArray('object', 'id'); $embedRelatedObjectIDArray = $this->getAttributeValueArray('embed', 'object_id'); $embedInlineRelatedObjectIDArray = $this->getAttributeValueArray('embed-inline', 'object_id'); $embedNodeIDArray = $this->getAttributeValueArray('embed', 'node_id'); $embedInlineNodeIDArray = $this->getAttributeValueArray('embed-inline', 'node_id'); $relatedObjectIDArray = array_merge($linkRelatedObjectIDArray, $objectRelatedObjectIDArray, $embedRelatedObjectIDArray, $embedInlineRelatedObjectIDArray); $relatedObjectIDArray = array_unique($relatedObjectIDArray); if (count($relatedObjectIDArray) > 0) { $this->ObjectArray = eZContentObject::fetchIDArray($relatedObjectIDArray); } $nodeIDArray = array_merge($linkNodeIDArray, $embedNodeIDArray, $embedInlineNodeIDArray); $nodeIDArray = array_unique($nodeIDArray); if (count($nodeIDArray) > 0) { $nodes = eZContentObjectTreeNode::fetch($nodeIDArray); if (is_array($nodes)) { foreach ($nodes as $node) { $nodeID = $node->attribute('node_id'); $this->NodeArray["{$nodeID}"] = $node; } } elseif ($nodes) { $node = $nodes; $nodeID = $node->attribute('node_id'); $this->NodeArray["{$nodeID}"] = $node; } } }
/** * Returns objects related to this tag * * @return array */ function getRelatedObjects() { // Not an easy task to fetch published objects with API and take care of current_version, status // and attribute version, so just use SQL to fetch all related object ids in one go $tagID = (int) $this->attribute('id'); $db = eZDB::instance(); $result = $db->arrayQuery("SELECT DISTINCT(o.id) AS object_id FROM eztags_attribute_link l\n INNER JOIN ezcontentobject o ON l.object_id = o.id\n AND l.objectattribute_version = o.current_version\n AND o.status = " . eZContentObject::STATUS_PUBLISHED . "\n WHERE l.keyword_id = {$tagID}"); if (is_array($result) && !empty($result)) { $objectIDArray = array(); foreach ($result as $r) { array_push($objectIDArray, $r['object_id']); } return eZContentObject::fetchIDArray($objectIDArray); } return array(); }