Completed
Push — master ( 67d57b...8b149d )
by
unknown
06:17
created

TceMainHook::clearCachePostProc()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 5

Importance

Changes 7
Bugs 0 Features 0
Metric Value
c 7
b 0
f 0
dl 0
loc 21
rs 8.7624
ccs 10
cts 10
cp 1
cc 5
eloc 12
nc 4
nop 2
crap 5
1
<?php
2
namespace Aoe\Varnish\TYPO3\Hooks;
3
4
use Aoe\Varnish\Domain\Model\Tag\PageTag;
5
use Aoe\Varnish\Domain\Model\Tag\PageIdTag;
6
use Aoe\Varnish\System\Varnish;
7
use TYPO3\CMS\Core\DataHandling\DataHandler;
8
9
class TceMainHook extends AbstractHook
10
{
11
    /**
12
     * @param array $parameters
13
     * @param DataHandler $parent
14
     *
15
     * @todo implement cache clearing for "clearCache_pageGrandParent", "clearCache_pageSiblingChildren" and
16
     *       and "clearCache_disable"  http://docs.typo3.org/typo3cms/TSconfigReference/PageTsconfig/TCEmain/Index.html
17
     * @todo find a way how to clear all affected pages after changeing a page title in the main menu or footer
18 11
     * because it is not possible through the existings hooks to access the correct page tags which needs be cleared from cache
19
     */
20 11
    public function clearCachePostProc(array $parameters, DataHandler $parent)
21 1
    {
22
        if ($this->isBackendUserInWorkspace($parent)) {
23
            return;
24
        }
25 10
26 10
        /** @var Varnish $varnish */
27 10
        $varnish = $this->objectManager->get(Varnish::class);
28 3
29 3
        // delete all Typo3 pages
30 3
        if (isset($parameters['cacheCmd']) && $parameters['cacheCmd'] === 'pages') {
31 10
            $pageTag = new PageTag('typo3_page');
32
            $varnish->banByTag($pageTag);
33
        } else {
34
            $pageId = $this->extractPageIdFromParameters($parameters);
35
            if ($pageId > 0) {
36
                $pageIdTag = new PageIdTag($pageId);
37
                $varnish->banByTag($pageIdTag);
38
            }
39 10
        }
40
    }
41 10
42 10
    /**
43 10
     * extract page id from all variants of parameters that can be given
44 3
     *
45
     * @param array $parameters
46 7
     * @return integer
47 3
     */
48
    private function extractPageIdFromParameters(array $parameters)
49 4
    {
50 3
        if (isset($parameters['table']) && $parameters['table'] === 'pages'
51
            && isset($parameters['uid']) && is_numeric($parameters['uid'])
52 1
        ) {
53
            return (integer)$parameters['uid'];
54
        }
55
        if (isset($parameters['cacheCmd']) && is_numeric($parameters['cacheCmd'])) {
56
            return (integer)$parameters['cacheCmd'];
57
        }
58
        if (isset($parameters['uid_page']) && is_numeric($parameters['uid_page'])) {
59 11
            return (integer)$parameters['uid_page'];
60
        }
61 11
        return 0;
62 1
    }
63
64 10
    /**
65
     * @param DataHandler $parent
66
     * @return boolean
67
     */
68
    private function isBackendUserInWorkspace(DataHandler $parent)
69
    {
70
        if ($parent->BE_USER->workspace > 0) {
71
            return true;
72
        }
73
        return false;
74
    }
75
}
76