/** * Tests fields returned by model for given content * @group restContentServices */ public function testGetFieldsByContent() { $content = ezpContent::fromNodeId(2); $res = ezpRestContentModel::getFieldsByContent($content); self::assertInternalType(PHPUnit_Framework_Constraint_IsType::TYPE_ARRAY, $res); foreach ($content->fields as $fieldName => $field) { self::assertArrayHasKey($fieldName, $res, "Result does not contain '{$fieldName}' field, present for given content"); $attributeOutput = ezpRestContentModel::attributeOutputData($field); self::assertSame($attributeOutput, $res[$fieldName], "Result for field '{$fieldName}' must be the same as returned by ezpRestContentModel::attributeOutputData()"); } }
/** * Handles a content request with fields per object or node id * Request: GET /api/content/object/XXX/fields * Request: GET /api/content/node/XXX/fields * * @return ezpRestMvcResult */ public function doViewFields() { $this->setDefaultResponseGroups(array(self::VIEWFIELDS_RESPONSEGROUP_FIELDVALUES)); $isNodeRequested = false; if (isset($this->nodeId)) { $content = ezpContent::fromNodeId($this->nodeId); $isNodeRequested = true; } else { if (isset($this->objectId)) { $content = ezpContent::fromObjectId($this->objectId); } } $result = new ezpRestMvcResult(); // translation parameter if ($this->hasContentVariable('Translation')) { $content->setActiveLanguage($this->getContentVariable('Translation')); } // Handle field values if ($this->hasResponseGroup(self::VIEWFIELDS_RESPONSEGROUP_FIELDVALUES)) { $result->variables['fields'] = ezpRestContentModel::getFieldsByContent($content); } // Handle object/node metadata if ($this->hasResponseGroup(self::VIEWFIELDS_RESPONSEGORUP_METADATA)) { $objectMetadata = ezpRestContentModel::getMetadataByContent($content); if ($isNodeRequested) { $nodeMetadata = ezpRestContentModel::getMetadataByLocation(ezpContentLocation::fetchByNodeId($this->nodeId)); $objectMetadata = array_merge($objectMetadata, $nodeMetadata); } $result->variables['metadata'] = $objectMetadata; } return $result; }