ModuleConfigController::fillRuleObjectFields()   C
last analyzed

Complexity

Conditions 15
Paths 24

Size

Total Lines 63

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 63
rs 5.9166
c 0
b 0
f 0
cc 15
nc 24
nop 2

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace RewriteUrl\Controller\Admin;
4
5
use Propel\Runtime\ActiveQuery\Criteria;
6
use RewriteUrl\Model\RewriteurlRule;
7
use RewriteUrl\Model\RewriteurlRuleParam;
8
use RewriteUrl\Model\RewriteurlRuleQuery;
9
use RewriteUrl\RewriteUrl;
10
use Thelia\Controller\Admin\BaseAdminController;
11
use Thelia\Core\HttpFoundation\JsonResponse;
12
use Thelia\Core\Security\AccessManager;
13
use Thelia\Core\Security\Resource\AdminResources;
14
use Thelia\Core\Translation\Translator;
15
use Thelia\Model\ConfigQuery;
16
17
class ModuleConfigController extends BaseAdminController
18
{
19
    public function viewConfigAction($params = array())
20
    {
21
        if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), 'GoogleShoppingXml', AccessManager::VIEW)) {
22
            return $response;
23
        }
24
25
        $isRewritingEnabled = ConfigQuery::isRewritingEnable();
26
27
        return $this->render(
28
            "RewriteUrl/module-configuration",
29
            [
30
                "isRewritingEnabled" => $isRewritingEnabled
31
            ]
32
        );
33
    }
34
35
    public function getDatatableRules()
36
    {
37
        $request = $this->getRequest();
38
39
        $requestSearchValue = $request->get('search') ? '%' . $request->get('search')['value'] . '%' : "";
40
        $recordsTotal = RewriteurlRuleQuery::create()->count();
41
        $search = RewriteurlRuleQuery::create();
42
        if ("" !== $requestSearchValue) {
43
            $search
44
                ->filterByValue($requestSearchValue, Criteria::LIKE)
45
                ->_or()
46
                ->filterByRedirectUrl($requestSearchValue)
47
            ;
48
        }
49
50
        $recordsFiltered = $search->count();
51
52
        $orderColumn = $request->get('order')[0]['column'];
53
        $orderDirection = $request->get('order')[0]['dir'];
54
        switch ($orderColumn) {
55
            case '0':
56
                $search->orderByRuleType($orderDirection);
57
                break;
58
            case '1':
59
                $search->orderByValue($orderDirection);
60
                break;
61
            case '2':
62
                $search->orderByOnly404($orderDirection);
63
                break;
64
            case '3':
65
                $search->orderByRedirectUrl($orderDirection);
66
                break;
67
            case '4':
68
                $search->orderByPosition($orderDirection);
69
                break;
70
            default:
71
                $search->orderByPosition();
72
                break;
73
        }
74
75
        $search
76
            ->offset($request->get('start'))
77
            ->limit($request->get('length'))
78
        ;
79
        $searchArray = $search->find()->toArray();
80
81
        $resultsArray = [];
82
        foreach ($searchArray as $row) {
83
            $id = $row['Id'];
84
            $isRegexSelected = $row['RuleType'] === 'regex' ? 'selected' : '';
85
            $isParamsSelected = $row['RuleType'] === 'params' ? 'selected' : '';
86
            $isOnly404Checked = $row['Only404'] ? 'checked' : '';
87
            $rewriteUrlRuleParams = RewriteurlRuleQuery::create()->findPk($row['Id'])->getRewriteUrlParamCollection();
88
            $resultsArray[] = [
89
                'Id' => $row['Id'],
90
                'RuleType' => '<select class="js_rule_type form-control" data-idrule="' . $id . '" required>
91
                                <option value="regex" ' . $isRegexSelected . '>' . Translator::getInstance()->trans("Regex", [], RewriteUrl::MODULE_DOMAIN) . '</option>
92
                                <option value="params" ' . $isParamsSelected . '>' . Translator::getInstance()->trans("Get Params", [], RewriteUrl::MODULE_DOMAIN) . '</option>
93
                               </select>',
94
                'Value' => $this->renderRaw(
95
                    "RewriteUrl/tab-value-render",
96
                    [
97
                        "REWRITE_URL_PARAMS" => $rewriteUrlRuleParams,
98
                        "VALUE" => $row['Value'],
99
                    ]
100
                ),
101
                'Only404' => '<input class="js_only404 form-control" type="checkbox" style="width: 100%!important;" ' . $isOnly404Checked . '/>',
102
                'RedirectUrl' => '<div class="col-md-12 input-group">
103
                                    <input class="js_url_to_redirect form-control" type="text" placeholder="/path/mypage.html" value="' . $row['RedirectUrl'] . '"/>
104
                                  </div>',
105
                'Position' => '<a href="#" class="u-position-up js_move_rule_position_up" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-up"></i></a>
106
                                <span class="js_editable_rule_position editable editable-click" data-idrule="' . $id . '">' . $row['Position'] . '</span>
107
                               <a href="#" class="u-position-down js_move_rule_position_down" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-down"></i></a>',
108
                'Actions' => '<a href="#" class="js_btn_update_rule btn btn-success" data-idrule="' . $id . '"><span class="glyphicon glyphicon-check"></span></a>
109
                              <a href="#" class="js_btn_remove_rule btn btn-danger" data-idrule="' . $id . '"><span class="glyphicon glyphicon-remove"></span></a>
110
',
111
            ];
112
        }
113
114
        return new JsonResponse([
115
            'draw' => $request->get('draw'),
116
            'recordsTotal' => $recordsTotal,
117
            'recordsFiltered' => $recordsFiltered,
118
            'data' => $resultsArray
119
        ]);
120
    }
121
122
    public function setRewritingEnableAction()
123
    {
124
        $request = $this->getRequest()->request;
125
        $isRewritingEnable = $request->get("rewriting_enable", null);
126
127
        if ($isRewritingEnable !== null) {
128
            ConfigQuery::write("rewriting_enable", $isRewritingEnable ? 1 : 0);
129
            return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
130
        } else {
131
            return $this->jsonResponse(Translator::getInstance()->trans(
132
                "Unable to change the configuration variable.",
133
                [],
134
                RewriteUrl::MODULE_DOMAIN
135
            ), 500);
136
        }
137
    }
138
139
    public function addRuleAction()
140
    {
141
        try {
142
            $request = $this->getRequest()->request;
143
144
            $rule = new RewriteurlRule();
145
146
            $this->fillRuleObjectFields($rule, $request);
147
        } catch (\Exception $ex) {
148
            return $this->jsonResponse($ex->getMessage(), 500);
149
        }
150
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
151
    }
152
153
    public function updateRuleAction()
154
    {
155
        try {
156
            $request = $this->getRequest()->request;
157
158
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
159
            if ($rule == null) {
160
                throw new \Exception(Translator::getInstance()->trans(
161
                    "Unable to find rule to update.",
162
                    [],
163
                    RewriteUrl::MODULE_DOMAIN
164
                ));
165
            }
166
167
            $this->fillRuleObjectFields($rule, $request);
168
        } catch (\Exception $ex) {
169
            return $this->jsonResponse($ex->getMessage(), 500);
170
        }
171
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
172
    }
173
174
175
    public function removeRuleAction()
176
    {
177
        try {
178
            $request = $this->getRequest()->request;
179
180
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
181
            if ($rule == null) {
182
                throw new \Exception(Translator::getInstance()->trans(
183
                    "Unable to find rule to remove.",
184
                    [],
185
                    RewriteUrl::MODULE_DOMAIN
186
                ));
187
            }
188
189
            $rule->delete();
190
        } catch (\Exception $ex) {
191
            return $this->jsonResponse($ex->getMessage(), 500);
192
        }
193
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
194
    }
195
196
    public function moveRulePositionAction()
197
    {
198
        try {
199
            $request = $this->getRequest()->request;
200
201
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
202
            if ($rule == null) {
203
                throw new \Exception(Translator::getInstance()->trans(
204
                    "Unable to find rule to change position.",
205
                    [],
206
                    RewriteUrl::MODULE_DOMAIN
207
                ));
208
            }
209
210
            $type = $request->get("type", null);
211
            if ($type == "up") {
212
                $rule->movePositionUp();
213
            } elseif ($type == "down") {
214
                $rule->movePositionDown();
215
            } elseif ($type == "absolute") {
216
                $position = $request->get("position", null);
217
                if (!empty($position)) {
218
                    $rule->changeAbsolutePosition($position);
219
                }
220
            }
221
        } catch (\Exception $ex) {
222
            return $this->jsonResponse($ex->getMessage(), 500);
223
        }
224
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
225
    }
226
227
    protected function fillRuleObjectFields(RewriteurlRule $rule, $request)
228
    {
229
        $ruleType = $request->get("ruleType", null);
230
        if ($ruleType !== "regex" && $ruleType !== "params") {
231
            throw new \Exception(Translator::getInstance()->trans("Unknown rule type.", [], RewriteUrl::MODULE_DOMAIN));
232
        }
233
234
        $regexValue = $request->get("value", null);
235
        if ($ruleType == "regex" && empty($regexValue)) {
236
            throw new \Exception(Translator::getInstance()->trans("Regex value cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
237
        }
238
239
        $redirectUrl = $request->get("redirectUrl", null);
240
        if (empty($redirectUrl)) {
241
            throw new \Exception(Translator::getInstance()->trans("Redirect url cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
242
        }
243
244
        $paramRuleArray = array();
245
        if ($ruleType == "params") {
246
            $paramRuleArray = $request->get("paramRules", null);
247
            if (empty($paramRuleArray)) {
248
                throw new \Exception(Translator::getInstance()->trans("At least one GET parameter is required.", [], RewriteUrl::MODULE_DOMAIN));
249
            }
250
        }
251
252
        $rule->setRuleType($ruleType);
253
        $rule->setValue($regexValue);
254
        $rule->setOnly404($request->get("only404", 1));
255
        $rule->setRedirectUrl($redirectUrl);
256
        if (empty($rule->getPosition())) {
257
            $rule->setPosition($rule->getNextPosition());
258
        }
259
260
        $rule->deleteAllRelatedParam();
261
262
        $rule->save();
263
264
        if ($ruleType == "params") {
265
            foreach ($paramRuleArray as $paramRule) {
266
                if (!array_key_exists("paramName", $paramRule) || empty($paramRule["paramName"])) {
267
                    throw new \Exception(Translator::getInstance()->trans(
268
                        "Param name is empty.",
269
                        [],
270
                        RewriteUrl::MODULE_DOMAIN
271
                    ));
272
                }
273
                if (!array_key_exists("condition", $paramRule) || empty($paramRule["condition"])) {
274
                    throw new \Exception(Translator::getInstance()->trans(
275
                        "Param condition is empty.",
276
                        [],
277
                        RewriteUrl::MODULE_DOMAIN
278
                    ));
279
                }
280
281
                $paramRuleObject = new RewriteurlRuleParam();
282
                $paramRuleObject->setParamName($paramRule["paramName"]);
283
                $paramRuleObject->setParamCondition($paramRule["condition"]);
284
                $paramRuleObject->setParamValue($paramRule["paramValue"]);
285
                $paramRuleObject->setIdRule($rule->getId());
286
                $paramRuleObject->save();
287
            }
288
        }
289
    }
290
}
291