/** * @param eZContentObjectAttribute $contentObjectAttribute the attribute to serialize * @return array for further processing */ public static function getAttributeData ( eZContentObjectAttribute $contentObjectAttribute ) { $dataTypeIdentifier = $contentObjectAttribute->attribute( 'data_type_string' ); $contentClassAttribute = eZContentClassAttribute::fetch( $contentObjectAttribute->attribute( 'contentclassattribute_id' ) ); $attributeHandler = $dataTypeIdentifier . 'SolrStorage'; // prefill the array with generic metadata first $target = array ( 'data_type_identifier' => $dataTypeIdentifier, 'version_format' => self::STORAGE_VERSION_FORMAT, 'attribute_identifier' => $contentClassAttribute->attribute( 'identifier' ), 'has_content' => $contentObjectAttribute->hasContent(), ); if ( class_exists( $attributeHandler ) ) { $attributeContent = call_user_func( array( $attributeHandler, 'getAttributeContent' ), $contentObjectAttribute, $contentClassAttribute ); return array_merge( $target, $attributeContent, array( 'content_method' => self::CONTENT_METHOD_CUSTOM_HANDLER ) ); } else { $target = array_merge( $target, array( 'content_method' => self::CONTENT_METHOD_TOSTRING, 'content' => $contentObjectAttribute->toString(), '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 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 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'); $attributeID = $contentObjectAttribute->attribute("id"); $version = $contentObjectAttribute->attribute("version"); if (!$contentObjectAttribute->hasContent()) { $content = null; } else { $binaryFile = eZBinaryFile::fetch($attributeID, $version); $content = $binaryFile->storedFileInfo(); } // This is not really the place, but for now initiate the safeguarding of the file itself here $archiveFileHandler = ezpFileArchiveFactory::getFileArchiveHandler('filesystem'); // todo: insert check if handler is really returned and of the right class before calling the archive action // maybe use the attribute id as prefix as well, may be useful for bookkeeping/recovery and potentially easier restore as well $archiveResult = $archiveFileHandler->archiveFile($content['filepath'], array($content['filepath']), $attributeID, 'ezbinaryfile'); $target = array('content' => $content, 'has_rendered_content' => false, 'rendered' => null, 'archived' => true, 'archive' => $archiveResult); return $target; }