Exemplo n.º 1
0
 /**
  * Creates the new tag.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user is not allowed to create this tag
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the remote ID already exists
  *
  * @param \Netgen\TagsBundle\API\Repository\Values\Tags\TagCreateStruct $tagCreateStruct
  *
  * @return \Netgen\TagsBundle\API\Repository\Values\Tags\Tag The newly created tag
  */
 public function createTag(TagCreateStruct $tagCreateStruct)
 {
     $keywords = $tagCreateStruct->getKeywords();
     if (!empty($tagCreateStruct->parentTagId)) {
         if ($this->canUser('tags', 'add', $this->loadTag($tagCreateStruct->parentTagId)) !== true) {
             throw new UnauthorizedException('tags', 'add');
         }
     } elseif ($this->hasAccess('tags', 'add') !== true) {
         throw new UnauthorizedException('tags', 'add');
     }
     if (empty($tagCreateStruct->mainLanguageCode) || !is_string($tagCreateStruct->mainLanguageCode)) {
         throw new InvalidArgumentValue('mainLanguageCode', $tagCreateStruct->mainLanguageCode, 'TagCreateStruct');
     }
     if (empty($keywords) || !is_array($keywords)) {
         throw new InvalidArgumentValue('keywords', $keywords, 'TagCreateStruct');
     }
     if (!isset($keywords[$tagCreateStruct->mainLanguageCode])) {
         throw new InvalidArgumentValue('keywords', $keywords, 'TagCreateStruct');
     }
     if ($tagCreateStruct->remoteId !== null && (empty($tagCreateStruct->remoteId) || !is_string($tagCreateStruct->remoteId))) {
         throw new InvalidArgumentValue('remoteId', $tagCreateStruct->remoteId, 'TagCreateStruct');
     }
     // check for existence of tag with provided remote ID
     if ($tagCreateStruct->remoteId !== null) {
         try {
             $this->tagsHandler->loadTagInfoByRemoteId($tagCreateStruct->remoteId);
             throw new InvalidArgumentException('tagCreateStruct', 'Tag with provided remote ID already exists');
         } catch (NotFoundException $e) {
             // Do nothing
         }
     } else {
         $tagCreateStruct->remoteId = md5(uniqid(get_class($this), true));
     }
     if (!is_bool($tagCreateStruct->alwaysAvailable)) {
         throw new InvalidArgumentValue('alwaysAvailable', $tagCreateStruct->alwaysAvailable, 'TagCreateStruct');
     }
     $createStruct = new CreateStruct();
     $createStruct->parentTagId = !empty($tagCreateStruct->parentTagId) ? $tagCreateStruct->parentTagId : 0;
     $createStruct->mainLanguageCode = $tagCreateStruct->mainLanguageCode;
     $createStruct->keywords = $keywords;
     $createStruct->remoteId = $tagCreateStruct->remoteId;
     $createStruct->alwaysAvailable = $tagCreateStruct->alwaysAvailable;
     $this->repository->beginTransaction();
     try {
         $newTag = $this->tagsHandler->create($createStruct);
         $this->repository->commit();
     } catch (Exception $e) {
         $this->repository->rollback();
         throw $e;
     }
     return $this->buildTagDomainObject($newTag);
 }
Exemplo n.º 2
0
 /**
  * @covers \Netgen\TagsBundle\Core\SignalSlot\TagsService::createTag
  */
 public function testCreateTag()
 {
     $tagCreateStruct = new TagCreateStruct();
     $tagCreateStruct->parentTagId = '42';
     $tagCreateStruct->mainLanguageCode = 'eng-GB';
     $tagCreateStruct->alwaysAvailable = true;
     $tagCreateStruct->setKeyword('netgen');
     $this->tagsService->expects($this->once())->method('createTag')->with($this->equalTo($tagCreateStruct))->will($this->returnValue(new Tag(array('id' => 24, 'parentTagId' => 42, 'keywords' => array('eng-GB' => 'netgen'), 'mainLanguageCode' => 'eng-GB', 'alwaysAvailable' => true))));
     $this->signalDispatcher->expects($this->once())->method('emit')->with($this->equalTo(new CreateTagSignal(array('tagId' => 24, 'parentTagId' => 42, 'keywords' => array('eng-GB' => 'netgen'), 'mainLanguageCode' => 'eng-GB', 'alwaysAvailable' => true))));
     $signalSlotService = $this->getSignalSlotService();
     $createdTag = $signalSlotService->createTag($tagCreateStruct);
     $this->assertInstanceOf('Netgen\\TagsBundle\\API\\Repository\\Values\\Tags\\Tag', $createdTag);
     $this->assertEquals(24, $createdTag->id);
     $this->assertEquals(42, $createdTag->parentTagId);
     $this->assertEquals(array('eng-GB' => 'netgen'), $createdTag->keywords);
     $this->assertEquals('eng-GB', $createdTag->mainLanguageCode);
     $this->assertEquals(true, $createdTag->alwaysAvailable);
 }