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

setIndexRedirectionEnableAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 2
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
135
            throw new BadRequestHttpException('Unable to change the configuration variable.');
136
        }
137
        ConfigQuery::write("rewriting_enable", $isRewritingEnable ? 1 : 0);
138
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
139
140
    }
141
    
142
    public function setIndexRedirectionEnableAction()
143
    {
144
        $request = $this->getRequest()->request;
145
        $isIndexRedirectionEnable = $request->get("index_redirection_enable", null);
146
147
        if ($isIndexRedirectionEnable === null) {
148
149
            throw new BadRequestHttpException('Missing index_redirection_enable parameter in url');
150
        }
151
        RewriteUrl::setConfigValue("index_redirection_enable", $isIndexRedirectionEnable);
152
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
153
154
    }
155
156
    public function setHttpsRedirectionEnableAction()
157
    {
158
        $request = $this->getRequest()->request;
159
        $isHttpsRedirectionEnable = $request->get("https_redirection_enable", null);
160
161
        if ($isHttpsRedirectionEnable === null) {
162
163
            throw new BadRequestHttpException('Missing https_redirection_enable parameter in url');
164
        }
165
        RewriteUrl::setConfigValue("https_redirection_enable", $isHttpsRedirectionEnable);
166
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
167
168
    }
169
170
    public function addRuleAction()
171
    {
172
        try {
173
            $request = $this->getRequest()->request;
174
175
            $rule = new RewriteurlRule();
176
177
            $this->fillRuleObjectFields($rule, $request);
178
        } catch (\Exception $ex) {
179
            return $this->jsonResponse($ex->getMessage(), 500);
180
        }
181
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
182
    }
183
184
    public function updateRuleAction()
185
    {
186
        try {
187
            $request = $this->getRequest()->request;
188
189
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
190
            if ($rule == null) {
191
                throw new \Exception(Translator::getInstance()->trans(
192
                    "Unable to find rule to update.",
193
                    [],
194
                    RewriteUrl::MODULE_DOMAIN
195
                ));
196
            }
197
198
            $this->fillRuleObjectFields($rule, $request);
199
        } catch (\Exception $ex) {
200
            return $this->jsonResponse($ex->getMessage(), 500);
201
        }
202
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
203
    }
204
205
206
    public function removeRuleAction()
207
    {
208
        try {
209
            $request = $this->getRequest()->request;
210
211
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
212
            if ($rule == null) {
213
                throw new \Exception(Translator::getInstance()->trans(
214
                    "Unable to find rule to remove.",
215
                    [],
216
                    RewriteUrl::MODULE_DOMAIN
217
                ));
218
            }
219
220
            $rule->delete();
221
        } catch (\Exception $ex) {
222
            return $this->jsonResponse($ex->getMessage(), 500);
223
        }
224
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
225
    }
226
227
    public function moveRulePositionAction()
228
    {
229
        try {
230
            $request = $this->getRequest()->request;
231
232
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
233
            if ($rule == null) {
234
                throw new \Exception(Translator::getInstance()->trans(
235
                    "Unable to find rule to change position.",
236
                    [],
237
                    RewriteUrl::MODULE_DOMAIN
238
                ));
239
            }
240
241
            $type = $request->get("type", null);
242
            if ($type == "up") {
243
                $rule->movePositionUp();
244
            } elseif ($type == "down") {
245
                $rule->movePositionDown();
246
            } elseif ($type == "absolute") {
247
                $position = $request->get("position", null);
248
                if (!empty($position)) {
249
                    $rule->changeAbsolutePosition($position);
250
                }
251
            }
252
        } catch (\Exception $ex) {
253
            return $this->jsonResponse($ex->getMessage(), 500);
254
        }
255
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
256
    }
257
258
    protected function fillRuleObjectFields(RewriteurlRule $rule, $request)
259
    {
260
        $ruleType = $request->get("ruleType", null);
261
        if ($ruleType !== "regex" && $ruleType !== "params") {
262
            throw new \Exception(Translator::getInstance()->trans("Unknown rule type.", [], RewriteUrl::MODULE_DOMAIN));
263
        }
264
265
        $regexValue = $request->get("value", null);
266
        if ($ruleType == "regex" && empty($regexValue)) {
267
            throw new \Exception(Translator::getInstance()->trans("Regex value cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
268
        }
269
270
        $redirectUrl = $request->get("redirectUrl", null);
271
        if (empty($redirectUrl)) {
272
            throw new \Exception(Translator::getInstance()->trans("Redirect url cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
273
        }
274
275
        $paramRuleArray = array();
276
        if ($ruleType == "params") {
277
            $paramRuleArray = $request->get("paramRules", null);
278
            if (empty($paramRuleArray)) {
279
                throw new \Exception(Translator::getInstance()->trans("At least one GET parameter is required.", [], RewriteUrl::MODULE_DOMAIN));
280
            }
281
        }
282
283
        $rule->setRuleType($ruleType);
284
        $rule->setValue($regexValue);
285
        $rule->setOnly404($request->get("only404", 1));
286
        $rule->setRedirectUrl($redirectUrl);
287
        if (empty($rule->getPosition())) {
288
            $rule->setPosition($rule->getNextPosition());
289
        }
290
291
        $rule->deleteAllRelatedParam();
292
293
        $rule->save();
294
295
        if ($ruleType == "params") {
296
            foreach ($paramRuleArray as $paramRule) {
297
                if (!array_key_exists("paramName", $paramRule) || empty($paramRule["paramName"])) {
298
                    throw new \Exception(Translator::getInstance()->trans(
299
                        "Param name is empty.",
300
                        [],
301
                        RewriteUrl::MODULE_DOMAIN
302
                    ));
303
                }
304
                if (!array_key_exists("condition", $paramRule) || empty($paramRule["condition"])) {
305
                    throw new \Exception(Translator::getInstance()->trans(
306
                        "Param condition is empty.",
307
                        [],
308
                        RewriteUrl::MODULE_DOMAIN
309
                    ));
310
                }
311
312
                $paramRuleObject = new RewriteurlRuleParam();
313
                $paramRuleObject->setParamName($paramRule["paramName"]);
314
                $paramRuleObject->setParamCondition($paramRule["condition"]);
315
                $paramRuleObject->setParamValue($paramRule["paramValue"]);
316
                $paramRuleObject->setIdRule($rule->getId());
317
                $paramRuleObject->save();
318
            }
319
        }
320
    }
321
}
322