Completed
Pull Request — master (#34)
by
unknown
01:32
created

ModuleConfigController::setRewritingEnableAction()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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