/**
  * Finds the field with id $fieldId in $content.
  *
  * @param int $fieldId
  * @param Content $content
  *
  * @return Field
  */
 protected function findFieldInContent($fieldId, Content $content)
 {
     foreach ($content->getFields() as $field) {
         if ($field->id == $fieldId) {
             return $field;
         }
     }
     throw new InvalidArgumentException("Field with id {$fieldId} not found in Content with id {$content->id}");
 }
Esempio n. 2
0
 public function castContent(Content $content, array $a, Stub $stub, $isNested, $filter = 0)
 {
     $info = $content->contentInfo;
     $a = [Caster::PREFIX_VIRTUAL . 'id' => $info->id, Caster::PREFIX_VIRTUAL . 'name' => $info->name] + $a;
     if (!$filter & Caster::EXCLUDE_VERBOSE) {
         $groupedFields = [];
         foreach ($content->getFields() as $field) {
             $groupedFields[$field->languageCode][$field->fieldDefIdentifier] = $field->value;
         }
         $a += [Caster::PREFIX_VIRTUAL . 'names' => $content->versionInfo->getNames(), Caster::PREFIX_VIRTUAL . 'contentInfo' => $info, Caster::PREFIX_VIRTUAL . 'fields' => $groupedFields];
     }
     return $a;
 }
 /**
  * This method returns the complete fields collection
  *
  * @return \eZ\Publish\API\Repository\Values\Content\Field[]
  */
 public function getFields()
 {
     return $this->content->getFields();
 }
Esempio n. 4
0
 /**
  * Asserts that $copiedContent is valid copy of $originalContent.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Content $originalContent
  * @param \eZ\Publish\API\Repository\Values\Content\Content $copiedContent
  */
 protected function assertCopyContentValues(APIContent $originalContent, APIContent $copiedContent)
 {
     $this->assertNotEquals($originalContent->id, $copiedContent->id, 'Id of content copy is equal to id od original content');
     $this->assertSameClassPropertiesCorrect(array('contentTypeId', 'sectionId', 'published', 'ownerId', 'alwaysAvailable', 'mainLanguageCode'), $originalContent->contentInfo, $copiedContent->contentInfo);
     $this->assertNotEquals($originalContent->contentInfo->id, $copiedContent->contentInfo->id);
     $this->assertNotEquals($originalContent->contentInfo->remoteId, $copiedContent->contentInfo->remoteId);
     $this->assertSameClassPropertiesCorrect(array('versionNo', 'names', 'creatorId', 'initialLanguageCode', 'languageCodes'), $originalContent->versionInfo, $copiedContent->versionInfo);
     $this->assertNotEquals($originalContent->versionInfo->id, $copiedContent->versionInfo->id);
     $originalFields = $originalContent->getFields();
     $copiedFields = $copiedContent->getFields();
     $this->assertCount(count($originalFields), $copiedFields, 'Count of fields copied does not match the count of original fields');
     foreach ($originalFields as $fieldIndex => $originalField) {
         $this->assertSameClassPropertiesCorrect(array('fieldDefIdentifier', 'value', 'languageCode'), $originalField, $copiedFields[$fieldIndex]);
         $this->assertNotEquals($originalField->id, $copiedFields[$fieldIndex]->id);
     }
 }
 protected function assertFieldIds(Content $content1, Content $content2)
 {
     $fields1 = $this->mapFields($content1->getFields());
     $fields2 = $this->mapFields($content2->getFields());
     foreach ($fields1 as $fieldDefinitionIdentifier => $languageFieldIds) {
         foreach ($languageFieldIds as $languageCode => $fieldId) {
             $this->assertEquals($fields2[$fieldDefinitionIdentifier][$languageCode], $fieldId);
         }
     }
 }
 /**
  * Test for the updateContent() method.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Content $content
  *
  * @return void
  * @see \eZ\Publish\API\Repository\ContentService::updateContent()
  * @depends eZ\Publish\API\Repository\Tests\ContentServiceTest::testUpdateContent
  */
 public function testUpdateContentSetsExpectedFields($content)
 {
     $actual = $this->normalizeFields($content->getFields());
     $expected = array(new Field(array('id' => 0, 'value' => true, 'languageCode' => 'eng-GB', 'fieldDefIdentifier' => 'description')), new Field(array('id' => 0, 'value' => true, 'languageCode' => 'eng-US', 'fieldDefIdentifier' => 'description')), new Field(array('id' => 0, 'value' => true, 'languageCode' => 'eng-GB', 'fieldDefIdentifier' => 'name')), new Field(array('id' => 0, 'value' => true, 'languageCode' => 'eng-US', 'fieldDefIdentifier' => 'name')));
     $this->assertEquals($expected, $actual);
 }
 /**
  * Asserts that $copiedContent is valid copy of $originalContent
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Content $originalContent
  * @param \eZ\Publish\API\Repository\Values\Content\Content $copiedContent
  */
 protected function assertCopyContentValues(APIContent $originalContent, APIContent $copiedContent)
 {
     $this->assertNotEquals($originalContent->id, $copiedContent->id, "Id of content copy is equal to id od original content");
     $this->assertSameClassPropertiesCorrect(array("contentTypeId", "sectionId", "published", "ownerId", "alwaysAvailable", "mainLanguageCode"), $originalContent->contentInfo, $copiedContent->contentInfo);
     $this->assertNotEquals($originalContent->contentInfo->id, $copiedContent->contentInfo->id);
     $this->assertNotEquals($originalContent->contentInfo->remoteId, $copiedContent->contentInfo->remoteId);
     $this->assertSameClassPropertiesCorrect(array("versionNo", "names", "creatorId", "initialLanguageCode", "languageCodes"), $originalContent->versionInfo, $copiedContent->versionInfo);
     $this->assertNotEquals($originalContent->versionInfo->id, $copiedContent->versionInfo->id);
     $originalFields = $originalContent->getFields();
     $copiedFields = $copiedContent->getFields();
     $this->assertCount(count($originalFields), $copiedFields, "Count of fields copied does not match the count of original fields");
     foreach ($originalFields as $fieldIndex => $originalField) {
         $this->assertSameClassPropertiesCorrect(array("fieldDefIdentifier", "value", "languageCode"), $originalField, $copiedFields[$fieldIndex]);
         $this->assertNotEquals($originalField->id, $copiedFields[$fieldIndex]->id);
     }
 }
 /**
  * Creates a filtered version of <b>$content</b> when the given <b>$languages</b>
  * is not <b>NULL</b> and not empty. The returned Content instance will only
  * contain fields for the given language codes.
  *
  * @param \eZ\Publish\API\Repository\Values\Content\Content $content
  * @param string[] $languageCodes
  *
  * @return \eZ\Publish\API\Repository\Values\Content\Content
  */
 private function filterFieldsByLanguages(Content $content, array $languageCodes = null)
 {
     $contentType = $this->repository->getContentTypeService()->loadContentType($content->contentTypeId);
     $fieldDefinitions = $contentType->getFieldDefinitions();
     foreach ($content->getFields() as $field) {
         foreach ($fieldDefinitions as $fieldDefinition) {
             if ($fieldDefinition->identifier === $field->fieldDefIdentifier) {
                 // @todo: Refactor out of here for clarity!
                 $this->pseudoExternalStorage->handleLoad($fieldDefinition, $field, $content);
             }
         }
     }
     if (empty($languageCodes)) {
         return $content;
     }
     $fields = array();
     foreach ($content->getFields() as $field) {
         if (false === $contentType->getFieldDefinition($field->fieldDefIdentifier)->isTranslatable) {
             $fields[] = $field;
         } else {
             if (in_array($field->languageCode, $languageCodes)) {
                 $fields[] = $field;
             }
         }
     }
     return $this->copyContentObject($content, array('fields' => $fields));
 }