Completed
Push — master ( 89c3e8...c161b3 )
by Craig
05:56 queued 40s
created

ConfigController::configAction()   B

Complexity

Conditions 8
Paths 10

Size

Total Lines 48
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
eloc 28
nc 10
nop 4
dl 0
loc 48
rs 8.4444
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula Foundation - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\ThemeModule\Controller;
15
16
use Doctrine\Common\Collections\Criteria;
17
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
18
use Symfony\Component\HttpFoundation\RedirectResponse;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\Routing\Annotation\Route;
21
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
22
use Zikula\Bundle\CoreBundle\CacheClearer;
23
use Zikula\Bundle\CoreBundle\Composer\MetaData;
24
use Zikula\Bundle\CoreBundle\Controller\AbstractController;
25
use Zikula\ExtensionsModule\Api\ApiInterface\VariableApiInterface;
26
use Zikula\ExtensionsModule\Api\VariableApi;
27
use Zikula\ExtensionsModule\Constant;
28
use Zikula\ExtensionsModule\Entity\RepositoryInterface\ExtensionRepositoryInterface;
29
use Zikula\ThemeModule\Engine\Annotation\Theme;
30
use Zikula\ThemeModule\Form\Type\ThemeType;
31
32
/**
33
 * Class ThemeController
34
 * @Route("/config")
35
 */
36
class ConfigController extends AbstractController
37
{
38
    /**
39
     * @Route("/config")
40
     * @Theme("admin")
41
     * @Template("@ZikulaThemeModule/Config/config.html.twig")
42
     *
43
     * @return array|RedirectResponse
44
     */
45
    public function configAction(
46
        Request $request,
47
        VariableApiInterface $variableApi,
48
        CacheClearer $cacheClearer,
49
        ExtensionRepositoryInterface $extensionRepository
50
    ) {
51
        if (!$this->hasPermission('ZikulaThemeModule::', '::', ACCESS_DELETE)) {
52
            throw new AccessDeniedException();
53
        }
54
55
        $criteria = Criteria::create()
56
            ->where(Criteria::expr()->in("type", [MetaData::TYPE_THEME, MetaData::TYPE_SYSTEM_THEME]))
57
            ->andWhere(Criteria::expr()->eq('state', Constant::STATE_ACTIVE));
58
        $themes = $extensionRepository->matching($criteria)->toArray();
59
        foreach ($themes as $k => $theme) {
60
            if (!isset($theme['capabilities']['admin']['theme']) || (false === $theme['capabilities']['admin']['theme'])) {
61
                unset($themes[$k]);
62
            }
63
        }
64
        $dataValues = [
65
            'Default_Theme' => $variableApi->get(VariableApi::CONFIG, 'defaulttheme'),
66
            'admintheme' => $variableApi->get('ZikulaAdminModule', 'admintheme')
67
        ];
68
        $form = $this->createForm(ThemeType::class,
69
            $dataValues, [
70
                'themes' => $themes
71
            ]
72
        );
73
        $form->handleRequest($request);
74
        if ($form->isSubmitted() && $form->isValid()) {
75
            if ($form->get('save')->isClicked()) {
0 ignored issues
show
Bug introduced by
The method isClicked() does not exist on Symfony\Component\Form\FormInterface. It seems like you code against a sub-type of Symfony\Component\Form\FormInterface such as Symfony\Component\Form\SubmitButton. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

75
            if ($form->get('save')->/** @scrutinizer ignore-call */ isClicked()) {
Loading history...
76
                $formData = $form->getData();
77
78
                // save module vars
79
                $variableApi->set(VariableApi::CONFIG, 'Default_Theme', $formData['Default_Theme']);
80
                $variableApi->set('ZikulaAdminModule', 'admintheme', $formData['admintheme']);
81
                $cacheClearer->clear('twig');
82
                $cacheClearer->clear('symfony.config');
83
84
                $this->addFlash('status', 'Done! Configuration updated.');
85
            }
86
87
            return $this->redirectToRoute('zikulathememodule_config_config');
88
        }
89
90
        return [
91
            'form' => $form->createView(),
92
            'themes' => $themes
93
        ];
94
    }
95
}
96