/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return array */ public static function getAttributeContent(eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute) { $availableEnumerations = array(); foreach ($contentObjectAttribute->content()->ObjectEnumerations as $enumeration) { $availableEnumerations[] = array('id' => $enumeration->EnumID, 'element' => $enumeration->EnumElement, 'value' => $enumeration->EnumValue); } return array('content' => $availableEnumerations, 'has_rendered_content' => false, 'rendered' => null); }
/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return array */ public static function getAttributeContent( eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute ) { return array( 'content' => $contentObjectAttribute->content()->KeywordArray, 'has_rendered_content' => false, 'rendered' => null, ); }
/** * Returns the content of the matrix to be stored in Solr * * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return array */ public static function getAttributeContent(eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute) { $rows = $contentObjectAttribute->content()->attribute('rows'); $target = array('has_rendered_content' => false, 'rendered' => null, 'content' => array()); foreach ($rows['sequential'] as $elt) { $target['content'][] = $elt['columns']; } return $target; }
/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return json encoded string for further processing * required first level elements 'method', 'version_format', 'data_type_identifier', 'content' * optional first level element is 'rendered' which should store (template) rendered xhtml snippets */ public static function getAttributeContent(eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute) { $dataTypeIdentifier = $contentObjectAttribute->attribute('data_type_string'); $attributeContents = $contentObjectAttribute->content(); $doc = new DOMDocument('1.0'); $doc->loadXML($attributeContents->attribute('xml_data')); $xpath = new DOMXPath($doc); $content = $doc->saveXML($xpath->query('/*')->item(0)); $target = array('content' => $content, 'has_rendered_content' => $contentObjectAttribute->hasContent(), 'rendered' => $attributeContents->attribute('output')->attribute('output_text')); return $target; }
/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return array with keys 'content', 'has_rendered_content', 'rendered' * required first level elements 'method', 'version_format', 'data_type_identifier', 'content' * optional first level element is 'rendered' which should store (template) rendered xhtml snippets */ public static function getAttributeContent( eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute ) { $target = array( 'content' => $contentObjectAttribute->content(), 'has_rendered_content' =>false, 'rendered' => null ); return $target ; }
/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @param eZContentClassAttribute $contentClassAttribute the content class of the attribute to serialize * @return array */ public static function getAttributeContent(eZContentObjectAttribute $contentObjectAttribute, eZContentClassAttribute $contentClassAttribute) { $selectedOptionsList = array_fill_keys($contentObjectAttribute->content(), true); $availableOptionsArray = $contentObjectAttribute->attribute('class_content'); $finalAvailableOptions = array(); foreach ($availableOptionsArray['options'] as $availableOption) { if (isset($selectedOptionsList[$availableOption['id']])) { $finalAvailableOptions[] = array('name' => $availableOption['name'], 'id' => $availableOption['id']); } } return array('content' => $finalAvailableOptions, 'has_rendered_content' => false, 'rendered' => null); }
/** * Returns string representation of a content object attribute * * @param eZContentObjectAttribute $contentObjectAttribute * * @return string */ public function toString($contentObjectAttribute) { /** @var $eZTags eZTags */ $eZTags = $contentObjectAttribute->content(); if (!$eZTags instanceof eZTags) { return ''; } $returnArray = array(); $returnArray[] = $eZTags->attribute('id_string'); $returnArray[] = $eZTags->attribute('keyword_string'); $returnArray[] = $eZTags->attribute('parent_string'); $returnArray[] = $eZTags->attribute('locale_string'); return implode('|#', $returnArray); }
/** * Tests the attribute's content */ public function testContent() { $this->createObject($this->dataSet()); self::assertEquals($this->attribute->content(), $this->dataSet()->content); $this->destroyObject(); }
/** * 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; }
/** * Returns an eZDiffContent object with the detected changes * * @param eZContentObjectAttribute $old * @param eZContentObjectAttribute $new * @param array|bool $options * * @return eZDiffContent */ function diff($old, $new, $options = false) { $diff = new eZDiff(); $diff->setDiffEngineType($diff->engineType("text")); $diff->initDiffEngine(); return $diff->diff($old->content(), $new->content()); }
/** * 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; }
/** * Returns string representation of a content object attribute data for simplified export * * @param eZContentObjectAttribute $objectAttribute * * @return string */ public function toString($objectAttribute) { $content = $objectAttribute->content(); if (count($content) == 1) { return $content[0]; } return serialize($content); }
/** * Stores the object attribute * * @param eZContentObjectAttribute $attribute */ function storeObjectAttribute($attribute) { $eztags = $attribute->content(); if ($eztags instanceof eZTags) { $eztags->store($attribute); } }
/** * Generate title of attribute * * @param eZContentObjectAttribute $contentObjectAttribute * @param string|null $name * * @return string */ function title($contentObjectAttribute, $name = null) { unset($name); //CodeSniffer tricks.. return (string) $contentObjectAttribute->content(); }