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

ModuleConfigController::viewConfigAction()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
rs 9.7666
c 0
b 0
f 0
cc 2
nc 2
nop 1
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 getRules()
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
        $search->clearOrderByColumns();
53
        switch ($request->get('order')[0]['column']) {
54
            case '0':
55
                $search->orderByRuleType($request->get('order')[0]['dir']);
56
                break;
57
            case '1':
58
                $search->orderByValue($request->get('order')[0]['dir']);
59
                break;
60
            case '2':
61
                $search->orderByOnly404($request->get('order')[0]['dir']);
62
                break;
63
            case '3':
64
                $search->orderByRedirectUrl($request->get('order')[0]['dir']);
65
                break;
66
            case '4':
67
                $search->orderByPosition($request->get('order')[0]['dir']);
68
                break;
69
            default:
70
                $search->orderByPosition();
71
                break;
72
        }
73
74
        $search
75
            ->offset($request->get('start'))
76
            ->limit($request->get('length'))
77
        ;
78
        $searchArray = $search->find()->toArray();
79
80
        $resultsArray = [];
81
        foreach ($searchArray as $row) {
82
            $id = $row['Id'];
83
            $isRegexSelected = $row['RuleType'] === 'regex' ? 'selected' : '';
84
            $isParamsSelected = $row['RuleType'] === 'params' ? 'selected' : '';
85
            $isOnly404Checked = $row['Only404'] ? 'checked' : '';
86
            $rewriteUrlRuleParams = RewriteurlRuleQuery::create()->findPk($row['Id'])->getRewriteUrlParamCollection();
87
            $resultsArray[] = [
88
                'Id' => $row['Id'],
89
                'RuleType' => '<select class="js_rule_type form-control" data-idrule="' . $id . '" required>
90
                                <option value="regex" ' . $isRegexSelected . '>' . Translator::getInstance()->trans("Regex", [], RewriteUrl::MODULE_DOMAIN) . '</option>
91
                                <option value="params" ' . $isParamsSelected . '>' . Translator::getInstance()->trans("Get Params", [], RewriteUrl::MODULE_DOMAIN) . '</option>
92
                               </select>',
93
                'Value' => $this->renderRaw(
94
                    "RewriteUrl/tab-value-render",
95
                    [
96
                        "REWRITE_URL_PARAMS" => $rewriteUrlRuleParams,
97
                        "VALUE" => $row['Value'],
98
                    ]
99
                ),
100
                'Only404' => '<input class="js_only404 form-control" type="checkbox" style="width: 100%!important;" ' . $isOnly404Checked . '/>',
101
                'RedirectUrl' => '<div class="col-md-12 input-group">
102
                                    <input class="js_url_to_redirect form-control" type="text" placeholder="/path/mypage.html" value="' . $row['RedirectUrl'] . '"/>
103
                                  </div>',
104
                'Position' => '<a href="#" class="u-position-up js_move_rule_position_up" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-up"></i></a>
105
                                <span class="js_editable_rule_position editable editable-click" data-idrule="' . $id . '">' . $row['Position'] . '</span>
106
                               <a href="#" class="u-position-down js_move_rule_position_down" data-idrule="' . $id . '"><i class="glyphicon glyphicon-arrow-down"></i></a>',
107
                'Actions' => '<a href="#" class="js_btn_update_rule btn btn-success" data-idrule="' . $id . '"><span class="glyphicon glyphicon-check"></span></a>
108
                              <a href="#" class="js_btn_remove_rule btn btn-danger" data-idrule="' . $id . '"><span class="glyphicon glyphicon-remove"></span></a>
109
',
110
            ];
111
        }
112
113
        return new JsonResponse([
114
            'draw' => $request->get('draw'),
115
            'recordsTotal' => $recordsTotal,
116
            'recordsFiltered' => $recordsFiltered,
117
            'data' => $resultsArray
118
        ]);
119
    }
120
121
    public function setRewritingEnableAction()
122
    {
123
        $request = $this->getRequest()->request;
124
        $isRewritingEnable = $request->get("rewriting_enable", null);
125
126
        if ($isRewritingEnable !== null) {
127
            ConfigQuery::write("rewriting_enable", $isRewritingEnable ? 1 : 0);
128
            return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
129
        } else {
130
            return $this->jsonResponse(Translator::getInstance()->trans(
131
                "Unable to change the configuration variable.",
132
                [],
133
                RewriteUrl::MODULE_DOMAIN
134
            ), 500);
135
        }
136
    }
137
138
    public function addRuleAction()
139
    {
140
        try {
141
            $request = $this->getRequest()->request;
142
143
            $rule = new RewriteurlRule();
144
145
            $this->fillRuleObjectFields($rule, $request);
146
        } catch (\Exception $ex) {
147
            return $this->jsonResponse($ex->getMessage(), 500);
148
        }
149
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
150
    }
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
197
    public function moveRulePositionAction()
198
    {
199
        try {
200
            $request = $this->getRequest()->request;
201
202
            $rule = RewriteurlRuleQuery::create()->findOneById($request->get("id"));
203
            if ($rule == null) {
204
                throw new \Exception(Translator::getInstance()->trans(
205
                    "Unable to find rule to change position.",
206
                    [],
207
                    RewriteUrl::MODULE_DOMAIN
208
                ));
209
            }
210
211
            $type = $request->get("type", null);
212
            if ($type == "up") {
213
                $rule->movePositionUp();
214
            } elseif ($type == "down") {
215
                $rule->movePositionDown();
216
            } elseif ($type == "absolute") {
217
                $position = $request->get("position", null);
218
                if (!empty($position)) {
219
                    $rule->changeAbsolutePosition($position);
220
                }
221
            }
222
        } catch (\Exception $ex) {
223
            return $this->jsonResponse($ex->getMessage(), 500);
224
        }
225
        return $this->jsonResponse(json_encode(["state" => "Success"]), 200);
226
    }
227
228
229
230
    protected function fillRuleObjectFields(RewriteurlRule $rule, $request)
231
    {
232
        $ruleType = $request->get("ruleType", null);
233
        if ($ruleType !== "regex" && $ruleType !== "params") {
234
            throw new \Exception(Translator::getInstance()->trans("Unknown rule type.", [], RewriteUrl::MODULE_DOMAIN));
235
        }
236
237
        $regexValue = $request->get("value", null);
238
        if ($ruleType == "regex" && empty($regexValue)) {
239
            throw new \Exception(Translator::getInstance()->trans("Regex value cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
240
        }
241
242
        $redirectUrl = $request->get("redirectUrl", null);
243
        if (empty($redirectUrl)) {
244
            throw new \Exception(Translator::getInstance()->trans("Redirect url cannot be empty.", [], RewriteUrl::MODULE_DOMAIN));
245
        }
246
247
        $paramRuleArray = array();
248
        if ($ruleType == "params") {
249
            $paramRuleArray = $request->get("paramRules", null);
250
            if (empty($paramRuleArray)) {
251
                throw new \Exception(Translator::getInstance()->trans("At least one GET parameter is required.", [], RewriteUrl::MODULE_DOMAIN));
252
            }
253
        }
254
255
256
257
        $rule->setRuleType($ruleType);
258
        $rule->setValue($regexValue);
259
        $rule->setOnly404($request->get("only404", 1));
260
        $rule->setRedirectUrl($redirectUrl);
261
        if (empty($rule->getPosition())) {
262
            $rule->setPosition($rule->getNextPosition());
263
        }
264
265
266
        $rule->deleteAllRelatedParam();
267
268
        $rule->save();
269
270
        if ($ruleType == "params") {
271
            foreach ($paramRuleArray as $paramRule) {
272
                if (!array_key_exists("paramName", $paramRule) || empty($paramRule["paramName"])) {
273
                    throw new \Exception(Translator::getInstance()->trans(
274
                        "Param name is empty.",
275
                        [],
276
                        RewriteUrl::MODULE_DOMAIN
277
                    ));
278
                }
279
                if (!array_key_exists("condition", $paramRule) || empty($paramRule["condition"])) {
280
                    throw new \Exception(Translator::getInstance()->trans(
281
                        "Param condition is empty.",
282
                        [],
283
                        RewriteUrl::MODULE_DOMAIN
284
                    ));
285
                }
286
287
                $paramRuleObject = new RewriteurlRuleParam();
288
                $paramRuleObject->setParamName($paramRule["paramName"]);
289
                $paramRuleObject->setParamCondition($paramRule["condition"]);
290
                $paramRuleObject->setParamValue($paramRule["paramValue"]);
291
                $paramRuleObject->setIdRule($rule->getId());
292
                $paramRuleObject->save();
293
            }
294
        }
295
    }
296
}
297