Completed
Pull Request — master (#168)
by
unknown
03:11
created

PersonalSettingsController   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 4
Bugs 1 Features 0
Metric Value
wmc 8
c 4
b 1
f 0
lcom 1
cbo 6
dl 0
loc 112
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A settingsAction() 0 48 3
A changeSettingAction() 0 23 3
A getPersonalSettingsManager() 0 4 1
A saveStash() 0 7 1
1
<?php
2
3
/*
4
 * This file is part of the ONGR package.
5
 *
6
 * (c) NFQ Technologies UAB <[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 ONGR\SettingsBundle\Controller;
13
14
use ONGR\SettingsBundle\Form\Type\SettingsType;
15
use ONGR\SettingsBundle\Settings\Personal\PersonalSettingsManager;
16
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
17
use Symfony\Component\HttpFoundation\JsonResponse;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\HttpFoundation\Response;
20
21
/**
22
 * Controller for managing General (private) settings.
23
 */
24
class PersonalSettingsController extends Controller
25
{
26
    /**
27
     * Main action for changing settings.
28
     *
29
     * @param Request $request
30
     *
31
     * @return \Symfony\Component\HttpFoundation\Response
32
     * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException
33
     */
34
    public function settingsAction(Request $request)
35
    {
36
        $manager = $this->getPersonalSettingsManager();
37
38
        // Handle form.
39
        $settingsData = $this->get('stash')->getItem('ongr_settings')->get();
40
        $settingsMap = $manager->getSettingsMap();
41
        $options = [
42
            'settingsStructure' => $settingsMap,
43
        ];
44
45
        $form = $this->createForm(SettingsType::class, $settingsData, $options);
46
        $form->handleRequest($request);
47
        if ($form->isValid()) {
48
            $manager->setSettingsFromForm($form->getData());
49
            $redirectResponse = $this->redirect($request->getUri());
50
            $settings = $manager->getSettings();
51
            $this->saveStash($settings);
52
            return $redirectResponse;
53
        }
54
55
        // Build settings layout within categories.
56
        $categoryMap = $manager->getCategoryMap();
57
        foreach ($settingsMap as $settingId => $setting) {
58
            $categoryMap[$setting['category']]['settings'][$settingId] = array_merge(
59
                $setting,
60
                [
61
                    'link' => $request->getUriForPath(
62
                        $this->generateUrl(
63
                            'ongr_settings_personal_settings_change',
64
                            [
65
                                'encodedName' => base64_encode($settingId),
66
                            ]
67
                        )
68
                    ),
69
                ]
70
            );
71
        }
72
73
        // Render.
74
        return $this->render(
75
            'ONGRSettingsBundle:Settings:settings.html.twig',
76
            [
77
                'form' => $form->createView(),
78
                'categories' => $categoryMap,
79
            ]
80
        );
81
    }
82
83
    /**
84
     * Creates new Setting.
85
     *
86
     * @param Request $request     Request to process, not used here.
87
     * @param string  $encodedName Base64 encoded setting name.
88
     *
89
     * @return JsonResponse
90
     */
91
    public function changeSettingAction(Request $request, $encodedName)
0 ignored issues
show
Unused Code introduced by
The parameter $request is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
92
    {
93
        $manager = $this->getPersonalSettingsManager();
94
95
        $name = base64_decode($encodedName);
96
97
        $settingsStructure = $manager->getSettingsMap();
98
        if (array_key_exists($name, $settingsStructure)) {
99
            $settings = $this->get('stash')->getItem('ongr_settings')->get();
100
            if (array_key_exists($name, $settings)) {
101
                $settings[$name] = !$settings[$name];
102
            } else {
103
                $settings[$name] = true;
104
            }
105
106
            $manager->setSettingsFromStash($settings);
107
            $this->saveStash($manager->getSettings());
108
109
            return new JsonResponse();
110
        } else {
111
            return new JsonResponse(Response::$statusTexts[403], 403);
112
        }
113
    }
114
115
    /**
116
     * @return PersonalSettingsManager
117
     */
118
    protected function getPersonalSettingsManager()
119
    {
120
        return $this->get('ongr_settings.settings.personal_settings_manager');
121
    }
122
123
    /**
124
     * Sets cookie values from settings based on settings map.
125
     *
126
     * @param array $settings
127
     */
128
    protected function saveStash(array $settings)
129
    {
130
        $pool = $this->get('stash');
131
        $stashSettings = $pool->getItem('ongr_settings');
132
        $stashSettings->set($settings);
133
        $pool->save($stashSettings);
134
    }
135
}
136