Example #1
0
 /**
  * Creates a synonym for $tag.
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user is not allowed to create a synonym
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the target tag is a synonym
  *
  * @param \Netgen\TagsBundle\API\Repository\Values\Tags\SynonymCreateStruct $synonymCreateStruct
  *
  * @return \Netgen\TagsBundle\API\Repository\Values\Tags\Tag The created synonym
  */
 public function addSynonym(SynonymCreateStruct $synonymCreateStruct)
 {
     $keywords = $synonymCreateStruct->getKeywords();
     if ($this->hasAccess('tags', 'addsynonym') !== true) {
         throw new UnauthorizedException('tags', 'addsynonym');
     }
     $mainTag = $this->tagsHandler->loadTagInfo($synonymCreateStruct->mainTagId);
     if ($mainTag->mainTagId > 0) {
         throw new InvalidArgumentValue('mainTagId', $synonymCreateStruct->mainTagId, 'SynonymCreateStruct');
     }
     if (empty($synonymCreateStruct->mainLanguageCode) || !is_string($synonymCreateStruct->mainLanguageCode)) {
         throw new InvalidArgumentValue('mainLanguageCode', $synonymCreateStruct->mainLanguageCode, 'SynonymCreateStruct');
     }
     if (empty($keywords) || !is_array($keywords)) {
         throw new InvalidArgumentValue('keywords', $keywords, 'SynonymCreateStruct');
     }
     if (!isset($keywords[$synonymCreateStruct->mainLanguageCode])) {
         throw new InvalidArgumentValue('keywords', $keywords, 'SynonymCreateStruct');
     }
     if ($synonymCreateStruct->remoteId !== null && (empty($synonymCreateStruct->remoteId) || !is_string($synonymCreateStruct->remoteId))) {
         throw new InvalidArgumentValue('remoteId', $synonymCreateStruct->remoteId, 'SynonymCreateStruct');
     }
     // check for existence of tag with provided remote ID
     if ($synonymCreateStruct->remoteId !== null) {
         try {
             $this->tagsHandler->loadTagInfoByRemoteId($synonymCreateStruct->remoteId);
             throw new InvalidArgumentException('synonymCreateStruct', 'Tag with provided remote ID already exists');
         } catch (NotFoundException $e) {
             // Do nothing
         }
     } else {
         $synonymCreateStruct->remoteId = md5(uniqid(get_class($this), true));
     }
     if (!is_bool($synonymCreateStruct->alwaysAvailable)) {
         throw new InvalidArgumentValue('alwaysAvailable', $synonymCreateStruct->alwaysAvailable, 'SynonymCreateStruct');
     }
     $createStruct = new SPISynonymCreateStruct();
     $createStruct->mainTagId = $synonymCreateStruct->mainTagId;
     $createStruct->mainLanguageCode = $synonymCreateStruct->mainLanguageCode;
     $createStruct->keywords = $keywords;
     $createStruct->remoteId = $synonymCreateStruct->remoteId;
     $createStruct->alwaysAvailable = $synonymCreateStruct->alwaysAvailable;
     $this->repository->beginTransaction();
     try {
         $newTag = $this->tagsHandler->addSynonym($createStruct);
         $this->repository->commit();
     } catch (Exception $e) {
         $this->repository->rollback();
         throw $e;
     }
     return $this->buildTagDomainObject($newTag);
 }
Example #2
0
 /**
  * @covers \Netgen\TagsBundle\Core\SignalSlot\TagsService::addSynonym
  */
 public function testAddSynonym()
 {
     $synonymCreateStruct = new SynonymCreateStruct();
     $synonymCreateStruct->mainTagId = '42';
     $synonymCreateStruct->mainLanguageCode = 'eng-GB';
     $synonymCreateStruct->alwaysAvailable = true;
     $synonymCreateStruct->setKeyword('netgenlabs');
     $this->tagsService->expects($this->once())->method('addSynonym')->with($this->equalTo($synonymCreateStruct))->will($this->returnValue(new Tag(array('id' => 24, 'keywords' => array('eng-GB' => 'netgenlabs'), 'mainTagId' => 42, 'mainLanguageCode' => 'eng-GB', 'alwaysAvailable' => true))));
     $this->signalDispatcher->expects($this->once())->method('emit')->with($this->equalTo(new AddSynonymSignal(array('tagId' => 24, 'mainTagId' => 42, 'keywords' => array('eng-GB' => 'netgenlabs'), 'mainLanguageCode' => 'eng-GB', 'alwaysAvailable' => true))));
     $signalSlotService = $this->getSignalSlotService();
     $synonym = $signalSlotService->addSynonym($synonymCreateStruct);
     $this->assertInstanceOf('Netgen\\TagsBundle\\API\\Repository\\Values\\Tags\\Tag', $synonym);
     $this->assertEquals(24, $synonym->id);
     $this->assertEquals(42, $synonym->mainTagId);
     $this->assertEquals(array('eng-GB' => 'netgenlabs'), $synonym->keywords);
     $this->assertEquals('eng-GB', $synonym->mainLanguageCode);
     $this->assertEquals(true, $synonym->alwaysAvailable);
 }