/** * Creates the a new Language in the content repository * * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If user does not have access to content translations * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if the languageCode already exists * * @param \eZ\Publish\API\Repository\Values\Content\LanguageCreateStruct $languageCreateStruct * * @return \eZ\Publish\API\Repository\Values\Content\Language */ public function createLanguage(LanguageCreateStruct $languageCreateStruct) { if (!is_string($languageCreateStruct->name) || empty($languageCreateStruct->name)) { throw new InvalidArgumentValue("name", $languageCreateStruct->name, "LanguageCreateStruct"); } if (!is_string($languageCreateStruct->languageCode) || empty($languageCreateStruct->languageCode)) { throw new InvalidArgumentValue("languageCode", $languageCreateStruct->languageCode, "LanguageCreateStruct"); } if (!is_bool($languageCreateStruct->enabled)) { throw new InvalidArgumentValue("enabled", $languageCreateStruct->enabled, "LanguageCreateStruct"); } if ($this->repository->hasAccess('content', 'translations') !== true) { throw new UnauthorizedException('content', 'translations'); } try { if ($this->loadLanguage($languageCreateStruct->languageCode) !== null) { throw new InvalidArgumentException("languageCreateStruct", "language with specified language code already exists"); } } catch (APINotFoundException $e) { // Do nothing } $createStruct = new CreateStruct(array('languageCode' => $languageCreateStruct->languageCode, 'name' => $languageCreateStruct->name, 'isEnabled' => $languageCreateStruct->enabled)); $this->repository->beginTransaction(); try { $createdLanguage = $this->languageHandler->create($createStruct); $this->repository->commit(); } catch (Exception $e) { $this->repository->rollback(); throw $e; } return $this->buildDomainObject($createdLanguage); }
/** * Test create function * * @covers eZ\Publish\Core\Persistence\InMemory\LanguageHandler::create */ public function testCreate() { $struct = new CreateStruct(); $struct->languageCode = 'nor-NB'; $struct->name = 'Norwegian Bokmål'; $struct->isEnabled = false; $language = $this->handler->create($struct); $this->assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\Language', $language); $this->assertEquals(9, $language->id); $this->assertEquals('nor-NB', $language->languageCode); $this->assertEquals('Norwegian Bokmål', $language->name); $this->assertFalse($language->isEnabled); }