public function loadTagByUrl($url, array $languages)
    {
        if ($this->hasAccess('tags', 'read') === false) {
            throw new UnauthorizedException('tags', 'read');
        }

        $keywordArray = explode('/', trim($url, '/'));
        if (!is_array($keywordArray) || empty($keywordArray)) {
            throw new InvalidArgumentValue('url', $url);
        }

        $parentId = 0;
        $spiTag = null;

        if (!empty($languages)) {
            foreach ($keywordArray as $keyword) {
                if (empty($keyword)) {
                    continue;
                }

                $spiTag = $this->tagsHandler->loadTagByKeywordAndParentId($keyword, $parentId, $languages);

                // Reasoning behind this is that the FIRST item sorted by languages must be matched to the keyword
                // If not, it means that the tag is not translated to the correct keyword in the most prioritized language
                $spiTagKeywords = [];
                foreach ($languages as $language) {
                    if (isset($spiTag->keywords[$language])) {
                        $spiTagKeywords[$language] = $spiTag->keywords[$language];
                    }
                }

                if ($spiTag->alwaysAvailable) {
                    if (!isset($spiTagKeywords[$spiTag->mainLanguageCode]) && isset($spiTag->keywords[$spiTag->mainLanguageCode])) {
                        $spiTagKeywords[$spiTag->mainLanguageCode] = $spiTag->keywords[$spiTag->mainLanguageCode];
                    }
                }

                $spiTagKeywords = array_values($spiTagKeywords);
                if (!empty($spiTagKeywords) && $spiTagKeywords[0] !== $keyword) {
                    throw new BaseNotFoundException('tag', $url);
                }

                $parentId = $spiTag->id;
            }
        }

        if (!$spiTag instanceof SPITag) {
            throw new BaseNotFoundException('tag', $url);
        }

        return $this->buildTagDomainObject($spiTag);
    }
public function loadTagByUrl($url, array $languages)
    {
        if ($this->hasAccess('tags', 'read') === false) {
            throw new UnauthorizedException('tags', 'read');
        }

        $keywordArray = explode('/', trim($url, '/'));
        if (!is_array($keywordArray) || empty($keywordArray)) {
            throw new InvalidArgumentValue('url', $url);
        }

        $parentId = 0;
        $spiTag = null;

        if (!empty($languages)) {
            foreach ($keywordArray as $keyword) {
                if (empty($keyword)) {
                    continue;
                }

                $spiTag = $this->tagsHandler->loadTagByKeywordAndParentId($keyword, $parentId, $languages);

                // Reasoning behind this is that the FIRST item sorted by languages must be matched to the keyword
                // If not, it means that the tag is not translated to the correct keyword in the most prioritized language
                $spiTagKeywords = [];
                foreach ($languages as $language) {
                    if (isset($spiTag->keywords[$language])) {
                        $spiTagKeywords[$language] = $spiTag->keywords[$language];
                    }
                }

                if ($spiTag->alwaysAvailable) {
                    if (!isset($spiTagKeywords[$spiTag->mainLanguageCode]) && isset($spiTag->keywords[$spiTag->mainLanguageCode])) {
                        $spiTagKeywords[$spiTag->mainLanguageCode] = $spiTag->keywords[$spiTag->mainLanguageCode];
                    }
                }

                $spiTagKeywords = array_values($spiTagKeywords);
                if (!empty($spiTagKeywords) && $spiTagKeywords[0] !== $keyword) {
                    throw new BaseNotFoundException('tag', $url);
                }

                $parentId = $spiTag->id;
            }
        }

        if (!$spiTag instanceof SPITag) {
            throw new BaseNotFoundException('tag', $url);
        }

        return $this->buildTagDomainObject($spiTag);
    }
public function loadTagByUrl ( $ url , array $ languages ) { if ( $ this -> hasAccess ( 'tags' , 'read' ) === false ) { throw new UnauthorizedException ( 'tags' , 'read' ) ; } $ keywordArray = explode ( '/' , trim ( $ url , '/' ) ) ; if ( ! is_array ( $ keywordArray ) || empty ( $ keywordArray ) ) { throw new InvalidArgumentValue ( 'url' , $ url ) ; } $ parentId = 0 ; $ spiTag = null ; if ( ! empty ( $ languages ) ) { foreach ( $ keywordArray as $ keyword ) { if ( empty ( $ keyword ) ) { continue ; } $ spiTag = $ this -> tagsHandler -> loadTagByKeywordAndParentId ( $ keyword , $ parentId , $ languages ) ; // Reasoning behind this is that the FIRST item sorted by languages must be matched to the keyword // If not, it means that the tag is not translated to the correct keyword in the most prioritized language $ spiTagKeywords = [ ] ; foreach ( $ languages as $ language ) { if ( isset ( $ spiTag -> keywords [ $ language ] ) ) { $ spiTagKeywords [ $ language ] = $ spiTag -> keywords [ $ language ] ; } } if ( $ spiTag -> alwaysAvailable ) { if ( ! isset ( $ spiTagKeywords [ $ spiTag -> mainLanguageCode ] ) && isset ( $ spiTag -> keywords [ $ spiTag -> mainLanguageCode ] ) ) { $ spiTagKeywords [ $ spiTag -> mainLanguageCode ] = $ spiTag -> keywords [ $ spiTag -> mainLanguageCode ] ; } } $ spiTagKeywords = array_values ( $ spiTagKeywords ) ; if ( ! empty ( $ spiTagKeywords ) && $ spiTagKeywords [ 0 ] !== $ keyword ) { throw new BaseNotFoundException ( 'tag' , $ url ) ; } $ parentId = $ spiTag -> id ; } } if ( ! $ spiTag instanceof SPITag ) { throw new BaseNotFoundException ( 'tag' , $ url ) ; } return $ this -> buildTagDomainObject ( $ spiTag ) ; }
Loads a tag object from its URL.

@param string $url
@param string[] $languages

@throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If the current user is not allowed to read tags
@throws \eZ\Publish\API\Repository\Exceptions\NotFoundException If the specified tag is not found

@return \Netgen\TagsBundle\API\Repository\Values\Tags\Tag
Loads a tag object from its URL .