public function setUp() { parent::setUp(); $classIdentifier = "ezimagetype_test_class"; $this->imageClass = new ezpClass("eZImageType test class", $classIdentifier, "eZImageType test class"); $this->imageClass->add("Image", "image", "ezimage"); $this->imageClass->store(); $this->imageObject = new ezpObject($classIdentifier, 2); $this->imageObject->name = __METHOD__; $dataMap = $this->imageObject->object->dataMap(); $this->fileAttribute = $dataMap["image"]; $dataType = new eZImageType(); $dataType->fromString($this->fileAttribute, self::IMAGE_FILE_PATH); $this->fileAttribute->store(); $this->imageObject->publish(); $this->imageObject->refresh(); }
/** * Initializes the object attribute with some data. * * @param eZContentObjectAttribute $objectAttribute * @param int $currentVersion * @param eZContentObjectAttribute $originalContentObjectAttribute */ public function initializeObjectAttribute($objectAttribute, $currentVersion, $originalContentObjectAttribute) { if ($currentVersion != false) { $content = $originalContentObjectAttribute->content(); $objectAttribute->setContent($content); $objectAttribute->store(); } }
/** * Init attribute ( also handles version to version copy, and attribute to attribute copy ) * * @param eZContentObjectAttribute $contentObjectAttribute * @param int|null $currentVersion * @param eZContentObjectAttribute $originalContentObjectAttribute */ function initializeObjectAttribute( $contentObjectAttribute, $currentVersion, $originalContentObjectAttribute ) { if ( $currentVersion == false ) { $contentObjectAttribute->setAttribute( 'data_int', 0 ); } else if ( $contentObjectAttribute->attribute( 'id' ) != 0 ) { if ( $originalContentObjectAttribute->attribute( 'data_int' ) != 0 ) { $gmapObject = $originalContentObjectAttribute->attribute( 'content' ); $gmapObject->setAttribute( 'contentobject_attribute_id', $contentObjectAttribute->attribute( 'id' ) );//in case of copy $gmapObject->setAttribute( 'contentobject_version', $contentObjectAttribute->attribute( 'version' ) ); $contentObjectAttribute->setContent( $gmapObject ); $contentObjectAttribute->store(); } } }
/** * Performs necessary actions with attribute data after object is published, * it means that you have access to published nodes. * * @param eZContentObjectAttribute $contentObjectAttribute * @param eZContentObject $contentObject * @param array(eZContentObjectTreeNode) $publishedNodes * @return bool */ function onPublish($contentObjectAttribute, $contentObject, $publishedNodes) { $db = eZDB::instance(); $page = $contentObjectAttribute->content(); foreach ($publishedNodes as $node) { $nodeID = $node->attribute('node_id'); if ($page->getZoneCount() != 0) { foreach ($page->attribute('zones') as $zone) { if ($zone->getBlockCount() != 0) { if ($zone->toBeRemoved()) { foreach ($zone->attribute('blocks') as $index => $block) { $block->setAttribute('action', 'remove'); } } foreach ($zone->attribute('blocks') as $block) { $blockID = $block->attribute('id'); $blockType = $block->attribute('type'); $escapedBlockType = $db->escapeString($blockType); $action = $block->attribute('action'); $fetchParams = $block->attribute('fetch_params'); $zoneID = $block->attribute('zone_id'); $blockName = $block->attribute('name'); $escapedBlockName = $db->escapeString($blockName); switch ($action) { case 'remove': $db->query("UPDATE ezm_block SET is_removed='1' WHERE id='" . $blockID . "'"); break; case 'add': $blockCount = $db->arrayQuery("SELECT COUNT( id ) as count FROM ezm_block WHERE id='" . $blockID . "'"); if ($blockCount[0]['count'] == 0) { $rotationType = 0; $rotationInterval = 0; $overflowID = null; if ($block->hasAttribute('rotation')) { $rotation = $block->attribute('rotation'); $rotationType = $rotation['type']; $rotationInterval = $rotation['interval']; } if ($block->hasAttribute('overflow_id')) { $overflowID = $block->attribute('overflow_id'); } $db->query("INSERT INTO ezm_block ( id, zone_id, name, node_id, overflow_id, block_type, fetch_params, rotation_type, rotation_interval )\n VALUES ( '" . $blockID . "',\n '" . $zoneID . "',\n '" . $escapedBlockName . "',\n '" . $nodeID . "',\n '" . $overflowID . "',\n '" . $escapedBlockType . "',\n '" . $fetchParams . "',\n '" . $rotationType . "',\n '" . $rotationInterval . "' )"); } break; default: $rotationType = 0; $rotationInterval = 0; $overflowID = null; if ($block->hasAttribute('rotation')) { $rotation = $block->attribute('rotation'); $rotationType = $rotation['type']; $rotationInterval = $rotation['interval']; } if ($block->hasAttribute('overflow_id')) { $overflowID = $block->attribute('overflow_id'); } $db->query("UPDATE ezm_block SET name='" . $escapedBlockName . "',\n overflow_id='" . $overflowID . "',\n fetch_params='" . $fetchParams . "',\n rotation_type='" . $rotationType . "',\n rotation_interval='" . $rotationInterval . "'\n WHERE id='" . $blockID . "'"); break; } if ($block->getItemCount() != 0) { foreach ($block->attribute('items') as $item) { $action = $item->attribute('action'); switch ($action) { case 'remove': $db->query("DELETE FROM ezm_pool\n WHERE object_id='" . $item->attribute('object_id') . "'\n AND block_id='" . $blockID . "'"); break; case 'add': $itemCount = $db->arrayQuery("SELECT COUNT( * ) as count FROM ezm_pool\n WHERE block_id='" . $blockID . "'\n AND object_id='" . $item->attribute('object_id') . "'"); if ($itemCount[0]['count'] == 0) { $db->query("INSERT INTO ezm_pool ( block_id, object_id, node_id, priority, ts_publication )\n VALUES ( '" . $blockID . "',\n '" . $item->attribute('object_id') . "',\n '" . $item->attribute('node_id') . "',\n '" . $item->attribute('priority') . "',\n '" . $item->attribute('ts_publication') . "' )"); } break; case 'modify': if ($item->hasAttribute('ts_publication')) { $db->query("UPDATE ezm_pool SET ts_publication='" . $item->attribute('ts_publication') . "'\n WHERE object_id='" . $item->attribute('object_id') . "'\n AND block_id='" . $blockID . "'"); } if ($item->hasAttribute('priority')) { $db->query("UPDATE ezm_pool SET priority='" . $item->attribute('priority') . "'\n WHERE object_id='" . $item->attribute('object_id') . "'\n AND block_id='" . $blockID . "'"); } //if there is ts_hidden and ts_visible, update the two fields. This is the case when add items from history if ($item->hasAttribute('ts_hidden') && $item->hasAttribute('ts_visible')) { $db->query("UPDATE ezm_pool SET ts_hidden='" . $item->attribute('ts_hidden') . "',\n ts_visible='" . $item->attribute('ts_visible') . "' \n WHERE object_id='" . $item->attribute('object_id') . "'\n AND block_id='" . $blockID . "'"); } break; } } } } } } } } if (eZFlowOperations::updateOnPublish()) { $nodeArray = array(); foreach ($publishedNodes as $node) { $nodeArray[] = $node->attribute('node_id'); } eZFlowOperations::update($nodeArray); } foreach ($publishedNodes as $node) { $url = $node->attribute('path_identification_string'); eZURI::transformURI($url, false, 'full'); eZHTTPCacheManager::execute($url); } $page->removeProcessed(); $contentObjectAttribute->content($page); $contentObjectAttribute->store(); return true; }
/** * Performs necessary actions with attribute data after object is published, * it means that you have access to published nodes. * * @param eZContentObjectAttribute $contentObjectAttribute * @param eZContentObject $contentObject * @param array(eZContentObjectTreeNode) $publishedNodes * @return bool */ function onPublish( $contentObjectAttribute, $contentObject, $publishedNodes ) { $db = eZDB::instance(); $page = $contentObjectAttribute->content(); foreach ( $publishedNodes as $publishedNode ) { if ( $publishedNode->isMain() ) $mainNode = $publishedNode; } foreach ( $publishedNodes as $node ) { $nodeID = $node->attribute( 'node_id' ); if ( $page->getZoneCount() != 0 ) { foreach ( $page->attribute( 'zones' ) as $zone ) { if ( $zone->getBlockCount() != 0 ) { if ( $zone->toBeRemoved() ) { foreach ( $zone->attribute( 'blocks' ) as $index => $block ) { $block->setAttribute( 'action', 'remove' ); } } $newItems = array(); foreach ( $zone->attribute( 'blocks' ) as $block ) { $blockID = $block->attribute( 'id' ); $fetchParams = $block->attribute( 'fetch_params' ); $escapedBlockName = $db->escapeString( $block->attribute( 'name' ) ); switch ( $block->attribute( 'action' ) ) { case 'remove': $db->query( "UPDATE ezm_block SET is_removed='1' WHERE id='" . $blockID . "'" ); break; case 'add': $blockCount = $db->arrayQuery( "SELECT COUNT( id ) as count FROM ezm_block WHERE id='" . $blockID ."'" ); if ( $blockCount[0]['count'] == 0 ) { $rotationType = 0; $rotationInterval = 0; $overflowID = null; if ( $block->hasAttribute( 'rotation' ) ) { $rotation = $block->attribute( 'rotation' ); $rotationType = $rotation['type']; $rotationInterval = $rotation['interval']; } if ( $block->hasAttribute( 'overflow_id' ) ) $overflowID = $block->attribute( 'overflow_id' ); $db->query( "INSERT INTO ezm_block ( id, zone_id, name, node_id, overflow_id, block_type, fetch_params, rotation_type, rotation_interval ) VALUES ( '" . $blockID . "', '" . $block->attribute( 'zone_id' ) . "', '" . $escapedBlockName . "', '" . $nodeID . "', '" . $overflowID . "', '" . $db->escapeString( $block->attribute( 'type' ) ) . "', '" . $fetchParams . "', '" . $rotationType . "', '" . $rotationInterval . "' )" ); } break; default: $rotationType = 0; $rotationInterval = 0; $overflowID = null; if ( $block->hasAttribute( 'rotation' ) ) { $rotation = $block->attribute( 'rotation' ); $rotationType = $rotation['type']; $rotationInterval = $rotation['interval']; } if ( $block->hasAttribute( 'overflow_id' ) ) $overflowID = $block->attribute( 'overflow_id' ); // Fixes http://jira.ez.no/browse/EZP-23124 where ezm_block.node_id might be = 0 // due to the way staging handles ezflow // If the block's node id is set to 0, it gets set to the main node ID $blockNodeId = $block->attribute( 'node_id' ) ?: $mainNode->attribute( 'node_id' ); $db->query( "UPDATE ezm_block SET name='" . $escapedBlockName . "', overflow_id='" . $overflowID . "', fetch_params='" . $fetchParams . "', rotation_type='" . $rotationType . "', rotation_interval='" . $rotationInterval ."', node_id='" . $blockNodeId. "' WHERE id='" . $blockID . "'" ); break; } if ( $block->getItemCount() != 0 ) { foreach ( $block->attribute( 'items' ) as $item ) { switch ( $item->attribute( 'action' ) ) { case 'remove': $db->query( "DELETE FROM ezm_pool WHERE object_id='" . $item->attribute( 'object_id' ) . "' AND block_id='" . $blockID . "'" ); break; case 'add': $newItems[] = array( 'blockID' => $blockID, 'objectID' => $item->attribute( 'object_id' ), 'nodeID' => $item->attribute( 'node_id' ), 'priority' => $item->attribute( 'priority' ), 'timestamp' => $item->attribute( 'ts_publication' ), ); break; case 'modify': $updateQuery = array(); if ( $item->hasAttribute( 'ts_publication' ) ) { $updateQuery[] = " ts_publication=" . (int)$item->attribute( 'ts_publication' ); } //make sure to update different node locations of the same object if ( $item->hasAttribute( 'node_id' ) ) { $updateQuery[] = " node_id=" . (int)$item->attribute( 'node_id' ); } if ( $item->hasAttribute( 'priority' ) ) { $updateQuery[] = " priority=" . (int)$item->attribute( 'priority' ); } //if there is ts_hidden and ts_visible, update the two fields. This is the case when add items from history if ( $item->hasAttribute( 'ts_hidden' ) && $item->hasAttribute( 'ts_visible' ) ) { $updateQuery[] = " ts_hidden=" . (int)$item->attribute( 'ts_hidden' ) . ", ts_visible=" . (int)$item->attribute( 'ts_visible' ); } if ( !empty( $updateQuery ) ) { $db->query( "UPDATE ezm_pool SET " . join( ", ", $updateQuery ) . " WHERE object_id=" . (int)$item->attribute( 'object_id' ) . " AND block_id='" . $blockID ."'" ); } break; } } } } if ( !empty( $newItems ) ) { eZFlowPool::insertItems( $newItems ); } } } } } if ( eZFlowOperations::updateOnPublish() ) { $nodeArray = array(); foreach ( $publishedNodes as $node ) { $nodeArray[] = $node->attribute( 'node_id' ); } eZFlowOperations::update( $nodeArray ); } foreach ( $publishedNodes as $node ) { $url = $node->attribute( 'path_identification_string' ); eZURI::transformURI( $url, false, 'full' ); eZHTTPCacheManager::execute( $url ); } $page->removeProcessed(); $contentObjectAttribute->content( $page ); $contentObjectAttribute->store(); return true; }