Completed
Pull Request — master (#33)
by
unknown
01:36
created

ModuleConfigController::getDatatableRules()   F

Complexity

Conditions 13
Paths 408

Size

Total Lines 88

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 88
rs 2.8795
c 0
b 0
f 0
cc 13
nc 408
nop 0

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
            $isUrlSelected = $row['RuleType'] === 'url' ? 'selected' : '';
86
            $isParamsSelected = $row['RuleType'] === 'params' ? 'selected' : '';
87
            $isOnly404Checked = $row['Only404'] ? 'checked' : '';
88
            $rewriteUrlRuleParams = RewriteurlRuleQuery::create()->findPk($row['Id'])->getRewriteUrlParamCollection();
89
            $resultsArray[] = [
90
                'Id' => $row['Id'],
91
                'RuleType' => '<select class="js_rule_type form-control" data-idrule="' . $id . '" required>
92
                                <option value="regex" ' . $isRegexSelected . '>' . Translator::getInstance()->trans("Regex", [], RewriteUrl::MODULE_DOMAIN) . '</option>
93
                                <option value="url" ' . $isUrlSelected . '>' . Translator::getInstance()->trans("URL", [], RewriteUrl::MODULE_DOMAIN) . '</option>
94
                                <option value="params" ' . $isParamsSelected . '>' . Translator::getInstance()->trans("Get Params", [], RewriteUrl::MODULE_DOMAIN) . '</option>
95
                               </select>',
96
                'Value' => $this->renderRaw(
97
                    "RewriteUrl/tab-value-render",
98
                    [
99
                        "REWRITE_URL_PARAMS" => $rewriteUrlRuleParams,
100
                        "VALUE" => $row['Value'],
101
                    ]
102
                ),
103
                'Only404' => '<input class="js_only404 form-control" type="checkbox" style="width: 100%!important;" ' . $isOnly404Checked . '/>',
104
                'RedirectUrl' => '<div class="col-md-12 input-group">
105
                                    <input class="js_url_to_redirect form-control" type="text" placeholder="/path/mypage.html" value="' . $row['RedirectUrl'] . '"/>
106
                                  </div>',
107
                'Position' => '<a href="#" class="u-position-up js_move_rule_position_up" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-up"></i></a>
108
                                <span class="js_editable_rule_position editable editable-click" data-idrule="' . $id . '">' . $row['Position'] . '</span>
109
                               <a href="#" class="u-position-down js_move_rule_position_down" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-down"></i></a>',
110
                'Actions' => '<a href="#" class="js_btn_update_rule btn btn-success" data-idrule="' . $id . '"><span class="glyphicon glyphicon-check"></span></a>
111
                              <a href="#" class="js_btn_remove_rule btn btn-danger" data-idrule="' . $id . '"><span class="glyphicon glyphicon-remove"></span></a>
112
',
113
            ];
114
        }
115
116
        return new JsonResponse([
117
            'draw' => $request->get('draw'),
118
            'recordsTotal' => $recordsTotal,
119
            'recordsFiltered' => $recordsFiltered,
120
            'data' => $resultsArray
121
        ]);
122
    }
123
124
    public function setRewritingEnableAction()
125
    {
126
        $request = $this->getRequest()->request;
127
        $isRewritingEnable = $request->get("rewriting_enable", null);
128
129
        if ($isRewritingEnable !== null) {
130
            ConfigQuery::write("rewriting_enable", $isRewritingEnable ? 1 : 0);
131
            return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
132
        } else {
133
            return $this->jsonResponse(Translator::getInstance()->trans(
134
                "Unable to change the configuration variable.",
135
                [],
136
                RewriteUrl::MODULE_DOMAIN
137
            ), 500);
138
        }
139
    }
140
141
    public function addRuleAction()
142
    {
143
        try {
144
            $request = $this->getRequest()->request;
145
146
            $rule = new RewriteurlRule();
147
148
            $this->fillRuleObjectFields($rule, $request);
149
        } catch (\Exception $ex) {
150
            return $this->jsonResponse($ex->getMessage(), 500);
151
        }
152
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
153
    }
154
155
    public function updateRuleAction()
156
    {
157
        try {
158
            $request = $this->getRequest()->request;
159
160
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
161
            if ($rule == null) {
162
                throw new \Exception(Translator::getInstance()->trans(
163
                    "Unable to find rule to update.",
164
                    [],
165
                    RewriteUrl::MODULE_DOMAIN
166
                ));
167
            }
168
169
            $this->fillRuleObjectFields($rule, $request);
170
        } catch (\Exception $ex) {
171
            return $this->jsonResponse($ex->getMessage(), 500);
172
        }
173
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
174
    }
175
176
177
    public function removeRuleAction()
178
    {
179
        try {
180
            $request = $this->getRequest()->request;
181
182
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
183
            if ($rule == null) {
184
                throw new \Exception(Translator::getInstance()->trans(
185
                    "Unable to find rule to remove.",
186
                    [],
187
                    RewriteUrl::MODULE_DOMAIN
188
                ));
189
            }
190
191
            $rule->delete();
192
        } catch (\Exception $ex) {
193
            return $this->jsonResponse($ex->getMessage(), 500);
194
        }
195
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
196
    }
197
198
    public function moveRulePositionAction()
199
    {
200
        try {
201
            $request = $this->getRequest()->request;
202
203
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
204
            if ($rule == null) {
205
                throw new \Exception(Translator::getInstance()->trans(
206
                    "Unable to find rule to change position.",
207
                    [],
208
                    RewriteUrl::MODULE_DOMAIN
209
                ));
210
            }
211
212
            $type = $request->get("type", null);
213
            if ($type == "up") {
214
                $rule->movePositionUp();
215
            } elseif ($type == "down") {
216
                $rule->movePositionDown();
217
            } elseif ($type == "absolute") {
218
                $position = $request->get("position", null);
219
                if (!empty($position)) {
220
                    $rule->changeAbsolutePosition($position);
221
                }
222
            }
223
        } catch (\Exception $ex) {
224
            return $this->jsonResponse($ex->getMessage(), 500);
225
        }
226
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
227
    }
228
229
    protected function fillRuleObjectFields(RewriteurlRule $rule, $request)
230
    {
231
        $ruleType = $request->get("ruleType", null);
232
        if ($ruleType !== "regex" && $ruleType !== "url" && $ruleType !== "params") {
233
            throw new \Exception(Translator::getInstance()->trans("Unknown rule type.", [], RewriteUrl::MODULE_DOMAIN));
234
        }
235
236
        $value = $request->get("value", null);
237
        if (empty($value) && in_array($ruleType, ["regex", "url"]) ) {
238
            throw new \Exception(Translator::getInstance()->trans("Condition value cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
239
        }
240
241
        $redirectUrl = $request->get("redirectUrl", null);
242
        if (empty($redirectUrl)) {
243
            throw new \Exception(Translator::getInstance()->trans("Redirect url cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
244
        }
245
246
        $paramRuleArray = array();
247
        if ($ruleType == "params") {
248
            $paramRuleArray = $request->get("paramRules", null);
249
            if (empty($paramRuleArray)) {
250
                throw new \Exception(Translator::getInstance()->trans("At least one GET parameter is required.", [], RewriteUrl::MODULE_DOMAIN));
251
            }
252
        }
253
254
        $rule->setRuleType($ruleType);
255
        $rule->setValue($value);
256
        $rule->setOnly404($request->get("only404", 1));
257
        $rule->setRedirectUrl($redirectUrl);
258
        if (empty($rule->getPosition())) {
259
            $rule->setPosition($rule->getNextPosition());
260
        }
261
262
        $rule->deleteAllRelatedParam();
263
264
        $rule->save();
265
266
        if ($ruleType == "params") {
267
            foreach ($paramRuleArray as $paramRule) {
268
                if (!array_key_exists("paramName", $paramRule) || empty($paramRule["paramName"])) {
269
                    throw new \Exception(Translator::getInstance()->trans(
270
                        "Param name is empty.",
271
                        [],
272
                        RewriteUrl::MODULE_DOMAIN
273
                    ));
274
                }
275
                if (!array_key_exists("condition", $paramRule) || empty($paramRule["condition"])) {
276
                    throw new \Exception(Translator::getInstance()->trans(
277
                        "Param condition is empty.",
278
                        [],
279
                        RewriteUrl::MODULE_DOMAIN
280
                    ));
281
                }
282
283
                $paramRuleObject = new RewriteurlRuleParam();
284
                $paramRuleObject->setParamName($paramRule["paramName"]);
285
                $paramRuleObject->setParamCondition($paramRule["condition"]);
286
                $paramRuleObject->setParamValue($paramRule["paramValue"]);
287
                $paramRuleObject->setIdRule($rule->getId());
288
                $paramRuleObject->save();
289
            }
290
        }
291
    }
292
}
293