62 lines
1.6 KiB
PHP
62 lines
1.6 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Trinity\Bundle\ContentManagerBundle\Page;
|
||
|
|
||
|
use Symfony\Component\HttpFoundation\Request;
|
||
|
|
||
|
class DecoratorStrategy implements DecoratorStrategyInterface
|
||
|
{
|
||
|
protected $ignoreRoutes;
|
||
|
protected $ignoreRoutePatterns;
|
||
|
protected $ignoreUriPatterns;
|
||
|
|
||
|
/**
|
||
|
* @param array $ignoreRoutes
|
||
|
* @param array $ignoreRoutePatterns
|
||
|
* @param array $ignoreUriPatterns
|
||
|
*/
|
||
|
public function __construct(array $ignoreRoutes, array $ignoreRoutePatterns, array $ignoreUriPatterns)
|
||
|
{
|
||
|
$this->ignoreRoutes = $ignoreRoutes;
|
||
|
$this->ignoreRoutePatterns = $ignoreRoutePatterns;
|
||
|
$this->ignoreUriPatterns = $ignoreUriPatterns;
|
||
|
}
|
||
|
|
||
|
public function isRequestDecorable(Request $request)
|
||
|
{
|
||
|
return $this->isRouteNameDecorable($request->get('_route')) && $this->isRouteUriDecorable($request->getPathInfo());
|
||
|
}
|
||
|
|
||
|
public function isRouteNameDecorable($routeName)
|
||
|
{
|
||
|
if (!$routeName) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
foreach ($this->ignoreRoutes as $route) {
|
||
|
if ($routeName == $route) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach ($this->ignoreRoutePatterns as $routePattern) {
|
||
|
if (preg_match(sprintf('#%s#s', $routePattern), $routeName)) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public function isRouteUriDecorable($uri)
|
||
|
{
|
||
|
foreach ($this->ignoreUriPatterns as $uriPattern) {
|
||
|
if (preg_match(sprintf('#%s#s', $uriPattern), $uri)) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|