CachesController::actionInvalidate()   A
last analyzed

Complexity

Conditions 5
Paths 6

Size

Total Lines 27
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 5
eloc 16
c 2
b 0
f 0
nc 6
nop 0
dl 0
loc 27
rs 9.4222
1
<?php
2
3
namespace mmikkel\cacheflag\controllers;
4
5
use Craft;
6
use craft\web\Controller;
7
8
use mmikkel\cacheflag\CacheFlag;
9
10
/**
11
 * Class CachesController
12
 * @package mmikkel\cacheflag\controllers
13
 * @since 1.2.0
14
 */
15
class CachesController extends Controller
16
{
17
18
    /** @var array|bool|int */
19
    public array|bool|int $allowAnonymous = self::ALLOW_ANONYMOUS_OFFLINE;
20
21
    /**
22
     * Invalidate all flagged caches, or caches flagged with one or several particular flags
23
     *
24
     * @return bool
25
     */
26
    public function actionInvalidate(): bool
27
    {
28
        $flags = Craft::$app->getRequest()->getParam('flags', []);
29
30
        if (\is_string($flags)) {
31
            $flags = \preg_replace('/\s+/', '', $flags);
32
            $flags = \array_filter(\explode(',', $flags));
33
        } else if (\is_array($flags)) {
34
            $flags = \array_reduce($flags, function (array $carry, string $flag) {
35
                $flag = \preg_replace('/\s+/', '', $flag);
36
                if (\strlen($flag)) {
37
                    $carry[] = $flag;
38
                }
39
                return $carry;
40
            }, []);
41
        }
42
43
        /** @var array $flags */
44
        if (empty($flags)) {
45
            CacheFlag::getInstance()->cacheFlag->invalidateAllFlaggedCaches();
46
            return true;
47
        }
48
49
        $flags = \array_unique($flags);
50
51
        CacheFlag::getInstance()->cacheFlag->invalidateFlaggedCachesByFlags($flags);
52
        return true;
53
    }
54
}
55