public function getData()
    {
        $data = array();

        /* @var $contentClassAttribute eZContentClassAttribute */
        $contentClassAttribute = $this->ContentObjectAttribute->attribute( 'contentclass_attribute' );

        switch( $contentClassAttribute->attribute('identifier') )
        {
            case 'download_ressource':
                $data = array();

                $pdfNameFieldName           = parent::generateSubattributeFieldName($contentClassAttribute, 'name', 'string');
                $pdfNodeIdFieldName         = parent::generateSubattributeFieldName($contentClassAttribute, 'main_node_id', 'int');
                $pdfExpirationDateFieldName = parent::generateSubattributeFieldName($contentClassAttribute, 'expiration_date', 'date');
                $pdfContentFieldName        = 'attr_download_ressource_content_mt'; // <= meta suffix used to avoid polluting copyfields
                $pdfNameValues              = array();
                $pdfNodeIdValues            = array();
                $pdfExpirationDateValues    = array();
                $pdfContentValues           = array();
                $content                    = $this->ContentObjectAttribute->content();

                /* @var $version eZContentObjectVersion */
                $version        = $this->ContentObjectAttribute->objectVersion();
                $objectDatamap  = $version->dataMap();

                foreach ( $content['relation_list'] as $relationItem )
                {
                    $subObjectID = $relationItem['contentobject_id'];

                    if ( !$subObjectID || $relationItem['contentclass_identifier'] != "pdf" )
                    {
                        continue;
                    }

                    /* @var $subObject eZContentObjectVersion */
                    $subObject = eZContentObject::fetch($subObjectID);

                    if ( !$subObject || $relationItem['in_trash'] )
                    {
                        continue;
                    }

                    $dataMap           = $subObject->dataMap();
                    $pdfNameValues[]   = $subObject->name();
                    $pdfNodeIdValues[] = $subObject->mainNodeID();

                    /* @var $objectDateAttribute eZContentObjectAttribute */
                    $expirationDate      = gmdate(DATE_ATOM, 0).'Z';
                    $objectDateAttribute = $objectDatamap['online_date'];

                    if( $objectDateAttribute->hasContent() && $dataMap['expiration_duration']->hasContent() )
                    {
                        $expiration = (int)$dataMap['expiration_duration']->content();

                        /* @var $objectDateContent eZDateTime */
                        $objectDateContent = $objectDateAttribute->content();

                        if( $objectDateContent->timeStamp() )
                        {
                            $expirationDate = self::convertTimestampToDate( $objectDateContent->timeStamp() + ($expiration * 24 * 3600) );
                        }
                    }

                    $pdfExpirationDateValues[] = $expirationDate;

                    // pdf content
                    $subobjectPDFAttribute = $dataMap['file'];
                    if( $subobjectPDFAttribute->hasContent() )
                    {
                        /* @var $pdfContentBinaryFile eZBinaryFile */
                        $pdfContentBinaryFile = $subobjectPDFAttribute->content();
                        $pdfClusterFile       = eZClusterFileHandler::instance( $pdfContentBinaryFile->filePath() );
                        $pdfContent           = $pdfClusterFile->processFile( array(__CLASS__, 'pdfToText') );

                        if( $pdfContent )
                        {
                            $pdfContentValues[] = $pdfContent;
                        }
                    }
                }

                if( !empty($pdfNameValues) )
                {
                    $data[$pdfNameFieldName] = $pdfNameValues;
                }

                if( !empty($pdfNodeIdValues) )
                {
                    $data[$pdfNodeIdFieldName] = $pdfNodeIdValues;
                }

                if( !empty($pdfExpirationDateValues) )
                {
                    $data[$pdfExpirationDateFieldName] = $pdfExpirationDateValues;
                }

                if( !empty($pdfContentValues) )
                {
                    $data[$pdfContentFieldName] = implode("\n", $pdfContentValues);
                }

                return $data;
            case 'media_content':
                $mediaTitleFieldName       = parent::generateSubattributeFieldName( $contentClassAttribute, 'title', 'text' );
                $mediaDescriptionFieldName = parent::generateSubattributeFieldName( $contentClassAttribute, 'description', 'text' );
                $mediaKeywordsFieldName    = parent::generateSubattributeFieldName( $contentClassAttribute, 'keywords', 'text' );
                $mediaTitleValues          = array();
                $mediaDescriptionValues    = array();
                $mediaKeywordsValues       = array();

                $content = $this->ContentObjectAttribute->content();

                /* @var $version eZContentObjectVersion */
                $version        = $this->ContentObjectAttribute->objectVersion();
                $objectDatamap  = $version->dataMap();

                foreach ( $content['relation_list'] as $relationItem )
                {
                    $subObjectID = $relationItem['contentobject_id'];

                    if ( !$subObjectID )
                    {
                        continue;
                    }

                    /* @var $subObject eZContentObject */
                    $subObject = eZContentObject::fetch($subObjectID);

                    if ( !$subObject || $relationItem['in_trash'] )
                    {
                        continue;
                    }

                    $dataMap = $subObject->dataMap();

                    if( isset( $dataMap['headline'] ) && $dataMap['headline']->hasContent() )
                    {
                        $mediaTitleValues[] = $dataMap['headline']->content();
                    }

                    if( isset( $dataMap['description'] ) && $dataMap['description']->hasContent() )
                    {
                        $mediaDescriptionValues[] = $dataMap['description']->content();
                    }

                    if( isset( $dataMap['additional_keywords']) && $dataMap['additional_keywords']->hasContent() )
                    {
                        $mediaKeywordsValues[] = $dataMap['additional_keywords']->content();
                    }
                }

                if( !empty( $mediaTitleValues ) )
                {
                    $data[$mediaTitleFieldName] = $mediaTitleValues;
                }

                if( !empty( $mediaDescriptionValues ) )
                {
                    $data[$mediaDescriptionFieldName] = strip_tags( $mediaDescriptionValues );
                }

                if( !empty( $mediaKeywordsValues ) )
                {
                    $data[$mediaKeywordsFieldName] = $mediaKeywordsValues;
                }

                return $data;
            default:
                return parent::getData();
            break;
        }
    }
コード例 #2
0
 public function getPlainTextRepresentation(eZContentObjectAttribute $contentObjectAttribute = null)
 {
     return parent::getPlainTextRepresentation($contentObjectAttribute);
 }
コード例 #3
0
 /**
  * test for getData()
  */
 public function testGetData()
 {
     $providerArray = array();
     #start 1 : the simplest attribute
     $content1 = "Hello world";
     $ezcca1 = new eZContentClassAttribute(array('identifier' => 'title', 'data_type_string' => 'ezstring'));
     $ezcoa1 = new eZContentObjectAttributeTester(array("data_type_string" => 'ezstring', "id" => 100123, "data_text" => $content1, "contentclass_attribute" => $ezcca1));
     $fieldName1 = ezfSolrDocumentFieldBase::getFieldName($ezcca1);
     $expectedData1 = array($fieldName1 => $content1);
     $providerArray[] = array($expectedData1, $ezcoa1);
     #end 1
     #start 2 : attribute with subattributes
     $ezcca2 = new eZContentClassAttribute(array('identifier' => 'dummy', 'data_type_string' => 'dummy_example'));
     $ezcoa2 = new eZContentObjectAttributeTester(array("data_type_string" => 'dummy_example', "id" => 100124, "contentclass_attribute" => $ezcca2));
     $fieldList2 = ezfSolrDocumentFieldBase::getFieldNameList($ezcca2);
     $expectedData2 = array();
     foreach ($fieldList2 as $fieldName) {
         $expectedData2[$fieldName] = 'DATA_FOR_' . $fieldName;
     }
     $fieldName2 = ezfSolrDocumentFieldBase::getFieldName($ezcca2);
     $providerArray[] = array($expectedData2, $ezcoa2);
     #end 2
     #start 3 : object relations
     $expectedData3 = array();
     $tester3 = new ezfSolrDocumentFieldObjectRelationTester(new eZContentObjectAttribute(array()));
     $time3 = time();
     $image3 = new ezpObject("image", 2);
     $image3->name = __METHOD__ . $time3;
     $image3->caption = __METHOD__ . $time3;
     $imageId3 = $image3->publish();
     // $image3->object->clearCache();
     $dataMapImage3 = $image3->dataMap;
     // eZContentObjectAttribute objects, attributes of the related Image
     $imageName3 = $dataMapImage3['name'];
     $imageCaption3 = $dataMapImage3['caption'];
     $article3 = new ezpObject("article", 2);
     $articleId3 = $article3->publish();
     // Create object relation
     $article3->object->addContentObjectRelation($imageId3, $article3->current_version, 154, eZContentObject::RELATION_ATTRIBUTE);
     $dataMapArticle3 = $article3->attribute('data_map');
     $ezcoa3 = $dataMapArticle3['image'];
     $ezcoa3->setAttribute('data_int', $imageId3);
     $ezcoa3->store();
     $ezcca3 = $ezcoa3->attribute('contentclass_attribute');
     $defaultFieldName3 = ezfSolrDocumentFieldBase::generateAttributeFieldName($ezcca3, ezfSolrDocumentFieldObjectRelation::$subattributesDefinition[ezfSolrDocumentFieldObjectRelation::DEFAULT_SUBATTRIBUTE]);
     $expectedData3[$defaultFieldName3] = $tester3->getPlainTextRepresentation($ezcoa3);
     // required to allow another call to metaData()
     // on $ezcoa3 in getPlainTextRepresentation, called from the getData() method :
     eZContentObject::recursionProtectionEnd();
     $fieldNameImageName3 = ezfSolrDocumentFieldBase::generateSubattributeFieldName($ezcca3, $imageName3->attribute('contentclass_attribute_identifier'), ezfSolrDocumentFieldObjectRelation::getClassAttributeType($imageName3->attribute('contentclass_attribute')));
     $expectedData3[$fieldNameImageName3] = trim(implode(' ', array_values(ezfSolrDocumentFieldBase::getInstance($imageName3)->getData())), "\t\r\n ");
     $fieldNameImageCaption3 = ezfSolrDocumentFieldBase::generateSubattributeFieldName($ezcca3, $imageCaption3->attribute('contentclass_attribute_identifier'), ezfSolrDocumentFieldObjectRelation::getClassAttributeType($imageCaption3->attribute('contentclass_attribute')));
     $expectedData3[$fieldNameImageCaption3] = trim(implode(' ', array_values(ezfSolrDocumentFieldBase::getInstance($imageCaption3)->getData())), "\t\r\n ");
     $image3 = eZContentObject::fetch($imageId3);
     $metaAttributeValues = eZSolr::getMetaAttributesForObject($image3);
     foreach ($metaAttributeValues as $metaInfo) {
         $expectedData3[ezfSolrDocumentFieldBase::generateSubmetaFieldName($metaInfo['name'], $ezcca3)] = ezfSolrDocumentFieldBase::preProcessValue($metaInfo['value'], $metaInfo['fieldType']);
     }
     $providerArray[] = array($expectedData3, $ezcoa3);
     #end 3
     // Let's perform the actual testing :
     foreach ($providerArray as $input) {
         $expected = $input[0];
         $contentObjectAttribute = $input[1];
         $instance = ezfSolrDocumentFieldBase::getInstance($contentObjectAttribute);
         self::assertEquals($expected, $instance->getData());
     }
 }