Completed
Push — 2.x-dev-kit ( 6f250c )
by
unknown
02:44
created

ApcCache::cacheAction()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 1 Features 2
Metric Value
c 4
b 1
f 2
dl 0
loc 20
rs 8.8571
cc 6
eloc 11
nc 5
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Sonata Project package.
5
 *
6
 * (c) Thomas Rabaix <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sonata\CacheBundle\Adapter;
13
14
use Sonata\Cache\Adapter\Cache\ApcCache as BaseApcCache;
15
use Symfony\Component\HttpFoundation\Response;
16
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
17
use Symfony\Component\Routing\RouterInterface;
18
19
class ApcCache extends BaseApcCache
20
{
21
    /**
22
     * @var RouterInterface
23
     */
24
    protected $router;
25
26
    /**
27
     * @var string
28
     */
29
    protected $token;
30
31
    /**
32
     * Constructor.
33
     *
34
     * @param RouterInterface $router  A router instance
35
     * @param string          $token   A token to clear the related cache
36
     * @param string          $prefix  A prefix to avoid clash between instances
37
     * @param array           $servers An array of servers
38
     * @param array           $timeout An array of timeout options
39
     */
40
    public function __construct(RouterInterface $router, $token, $prefix, array $servers, array $timeout = array())
41
    {
42
        parent::__construct(null, $prefix, $servers, $timeout);
43
44
        $this->router = $router;
45
        $this->token = $token;
46
    }
47
48
    /**
49
     * Cache action.
50
     *
51
     * @param string $token A configured token
52
     *
53
     * @return Response
54
     *
55
     * @throws AccessDeniedHttpException
56
     */
57
    public function cacheAction($token)
58
    {
59
        if ($this->token == $token) {
60
            if (version_compare(PHP_VERSION, '5.5.0', '>=') && function_exists('opcache_reset')) {
61
                opcache_reset();
62
            }
63
64
            if (extension_loaded('apc') && ini_get('apc.enabled')) {
65
                apc_clear_cache('user');
66
                apc_clear_cache();
67
            }
68
69
            return new Response('ok', 200, array(
70
                'Cache-Control' => 'no-cache, must-revalidate',
71
                'Content-Length' => 2, // to prevent chunked transfer encoding
72
            ));
73
        }
74
75
        throw new AccessDeniedHttpException('invalid token');
76
    }
77
78
    /**
79
     * {@inheritdoc}
80
     */
81
    protected function getUrl()
82
    {
83
        return $this->router->generate('sonata_cache_apc', array('token' => $this->token));
84
    }
85
}
86