/** * Validates input for updating object states and builds the InputStruct object. * * @param \eZ\Publish\API\Repository\Values\ObjectState\ObjectState $objectState * @param string $identifier * @param string $defaultLanguageCode * @param string[] $names * @param string[] $descriptions * * @return \eZ\Publish\SPI\Persistence\Content\ObjectState\InputStruct */ protected function buildObjectStateUpdateInputStruct(APIObjectState $objectState, $identifier, $defaultLanguageCode, $names, $descriptions) { $inputStruct = new InputStruct(); if ($identifier !== null && (!is_string($identifier) || empty($identifier))) { throw new InvalidArgumentValue('identifier', $identifier); } $inputStruct->identifier = $identifier !== null ? $identifier : $objectState->identifier; if ($defaultLanguageCode !== null && (!is_string($defaultLanguageCode) || empty($defaultLanguageCode))) { throw new InvalidArgumentValue('defaultLanguageCode', $defaultLanguageCode); } $inputStruct->defaultLanguage = $defaultLanguageCode !== null ? $defaultLanguageCode : $objectState->defaultLanguageCode; if ($names !== null && (!is_array($names) || empty($names))) { throw new InvalidArgumentValue('names', $names); } $inputStruct->name = $names !== null ? $names : $objectState->getNames(); if (!isset($inputStruct->name[$inputStruct->defaultLanguage])) { throw new InvalidArgumentValue('names', $inputStruct->name); } foreach ($inputStruct->name as $languageCode => $name) { try { $this->repository->getContentLanguageService()->loadLanguage($languageCode); } catch (NotFoundException $e) { throw new InvalidArgumentValue('names', $inputStruct->name); } if (!is_string($name) || empty($name)) { throw new InvalidArgumentValue('names', $inputStruct->name); } } if ($descriptions !== null && !is_array($descriptions)) { throw new InvalidArgumentValue('descriptions', $descriptions); } $descriptions = $descriptions !== null ? $descriptions : $objectState->getDescriptions(); $descriptions = $descriptions !== null ? $descriptions : array(); $inputStruct->description = array(); foreach ($inputStruct->name as $languageCode => $name) { if (isset($descriptions[$languageCode]) && !empty($descriptions[$languageCode])) { $inputStruct->description[$languageCode] = $descriptions[$languageCode]; } else { $inputStruct->description[$languageCode] = ''; } } return $inputStruct; }
/** * Tests that the resulting ObjectState contains descriptions * * @param \eZ\Publish\API\Repository\Values\ObjectState\ObjectState $result * * @depends testParse */ public function testResultContainsDescriptions($result) { $this->assertEquals(array('eng-GB' => 'Test state description EN', 'eng-US' => 'Test state description EN US'), $result->getDescriptions()); }