Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
11 / 11
FrontExtension
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
6
100.00% covered (success)
100.00%
11 / 11
 getFilters
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 uriIdFilter
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 userTopRoleFilter
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
6 / 6
 getName
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
<?php
/*
 * This file is part of the Incipio package.
 *
 * (c) Théo FIDRY <theo.fidry@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace FrontBundle\Twig;
use FrontBundle\Utils\RoleHierarchyHelper;
/**
 * Class FrontExtension: class used to create custom Twig functionalities and filters.
 *
 * @author Théo FIDRY <theo.fidry@gmail.com>
 */
class FrontExtension extends \Twig_Extension
{
    /**
     * {@inheritdoc}
     */
    public function getFilters()
    {
        return [
            new \Twig_SimpleFilter('uriId', [$this, 'uriIdFilter']),
            new \Twig_SimpleFilter('userTopRole', [$this, 'userTopRoleFilter']),
        ];
    }
    /**
     * Extract the ID which is given in URI form (typically in the @id tag).
     *
     * This is done by extracting the last part of the URI.
     *
     * @example
     *
     *  uriIdFilter('/api/users/101')            // "101"
     *  uriIdFilter('/api/mandates/AaKxazRT')    // "AaKxazRT"
     *  uriIdFilter('/api/')                     // ""
     *
     * @param $uri
     *
     * @return string
     */
    public function uriIdFilter($uri)
    {
        return substr(strrchr($uri, '/'), 1);
    }
    /**
     * Reformat role in a clean way. This filter assumes that the roles passed are known to {@see
     * RoleHierarchyHelper} and formatted following the ROLE_%s mask.
     *
     * @example
     *  roleFilter(['ROLE_USER'])         // "user"
     *  roleFilter(['ROLE_ADMIN'])        // "admin"
     *  roleFilter(['ROLE_SUPER_ADMIN'])  // "root"
     *
     * @param array $roles Array of valid Symfony roles.
     *
     * @return string Formatted top role if role known, empty string otherwise.
     */
    public function userTopRoleFilter(array $roles)
    {
        $topRole = RoleHierarchyHelper::getTopLevelRole($roles);
        if (null === $topRole) {
            return '';
        }
        if ('ROLE_SUPER_ADMIN' === $topRole) {
            return 'root';
        }
        return strtolower(substr($topRole, 5));
    }
    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'front_extension';
    }
}