Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15348 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
 
10
use Laminas\Mvc\Controller\AbstractActionController;
11
use Laminas\Log\LoggerInterface;
12
 
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
15
use LeadersLinked\Library\Functions;
16
use LeadersLinked\Mapper\PageMapper;
17
use LeadersLinked\Form\PageForm;
18
use LeadersLinked\Model\Page;
19
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
20
 
21
class PageController extends AbstractActionController
22
{
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
 
30
    /**
31
     *
32
     * @var AbstractAdapter
33
     */
34
    private $cache;
35
 
36
    /**
37
     *
38
     * @var  LoggerInterface
39
     */
40
    private $logger;
41
 
42
    /**
43
     *
44
     * @var array
45
     */
46
    private $config;
47
 
48
 
49
 
50
 
51
    /**
52
     *
53
     * @param AdapterInterface $adapter
54
     * @param AbstractAdapter $cache
55
     * @param LoggerInterface $logger
56
     * @param array $config
57
     */
58
    public function __construct($adapter, $cache , $logger, $config)
59
    {
60
        $this->adapter      = $adapter;
61
        $this->cache        = $cache;
62
        $this->logger       = $logger;
63
        $this->config       = $config;
64
 
65
    }
66
 
67
    public function indexAction()
68
    {
69
        $request = $this->getRequest();
70
 
71
        $request = $this->getRequest();
72
        if($request->isGet()) {
73
 
74
 
75
            $headers  = $request->getHeaders();
76
 
77
            $isJson = false;
78
            if($headers->has('Accept')) {
79
                $accept = $headers->get('Accept');
80
 
81
                $prioritized = $accept->getPrioritized();
82
 
83
                foreach($prioritized as $key => $value) {
84
                    $raw = trim($value->getRaw());
85
 
86
                    if(!$isJson) {
87
                        $isJson = strpos($raw, 'json');
88
                    }
89
 
90
                }
91
            }
92
 
93
            if($isJson) {
94
                $search = $this->params()->fromQuery('search', []);
95
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
96
 
97
                $page               = intval($this->params()->fromQuery('start', 1), 10);
98
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
99
                $order =  $this->params()->fromQuery('order', []);
100
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
101
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
102
 
103
                $fields =  ['title'];
104
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
105
 
106
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
107
                    $order_direction = 'ASC';
108
                }
109
 
110
                $pageMapper = PageMapper::getInstance($this->adapter);
111
 
112
 
113
                $paginator = $pageMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
114
 
115
                $items = [];
116
                $records = $paginator->getCurrentItems();
117
                foreach($records as $record)
118
                {
119
                    $item = [
120
                        'id' => $record->id,
121
                        'title' => $record->title,
122
                        'status' => $record->status,
123
                        'actions' => [
124
                            'link_edit' => $this->url()->fromRoute('publications/pages/edit', ['id' => $record->id ]),
125
                            'link_delete' => $record->fixed == Page::NO ? $this->url()->fromRoute('publications/pages/delete', ['id' => $record->id ]) : '',
126
                        ]
127
                    ];
128
 
129
                    array_push($items, $item);
130
                }
131
 
132
                return new JsonModel([
133
                    'success' => true,
134
                    'data' => [
135
                        'items' => $items,
136
                        'total' => $paginator->getTotalItemCount(),
137
                    ]
138
                ]);
139
 
140
 
141
            } else  {
142
                $form = new PageForm();
143
 
144
                $this->layout()->setTemplate('layout/layout-backend');
145
                $viewModel = new ViewModel();
146
                $viewModel->setTemplate('leaders-linked/pages/index.phtml');
147
                $viewModel->setVariable('form', $form);
148
                return $viewModel ;
149
            }
150
        } else {
151
            return new JsonModel([
152
                'success' => false,
153
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
154
            ]);;
155
        }
156
    }
157
 
158
    public function addAction()
159
    {
160
        $currentUserPlugin = $this->plugin('currentUserPlugin');
161
        $currentUser = $currentUserPlugin->getUser();
162
 
163
        $request = $this->getRequest();
164
 
165
        if($request->isPost()) {
166
            $form = new  PageForm();
167
            $dataPost = $request->getPost()->toArray();
168
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Page::STATUS_INACTIVE;
169
 
170
            $form->setData($dataPost);
171
 
172
            if($form->isValid()) {
173
                $dataPost = (array) $form->getData();
174
 
175
                $hydrator = new ObjectPropertyHydrator();
176
                $page = new Page();
177
                $hydrator->hydrate($dataPost, $page);
178
 
179
 
180
 
181
                $pageMapper = PageMapper::getInstance($this->adapter);
182
                $result = $pageMapper->insert($page);
183
 
184
                if($result) {
185
                    $this->logger->info('Se agrego la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
186
 
187
                    $data = [
188
                        'success'   => true,
189
                        'data'   => 'LABEL_RECORD_ADDED'
190
                    ];
191
                } else {
192
                    $data = [
193
                        'success'   => false,
194
                        'data'      => $pageMapper->getError()
195
                    ];
196
 
197
                }
198
 
199
                return new JsonModel($data);
200
 
201
            } else {
202
                $messages = [];
203
                $form_messages = (array) $form->getMessages();
204
                foreach($form_messages  as $fieldname => $field_messages)
205
                {
206
 
207
                    $messages[$fieldname] = array_values($field_messages);
208
                }
209
 
210
                return new JsonModel([
211
                    'success'   => false,
212
                    'data'   => $messages
213
                ]);
214
            }
215
 
216
        } else {
217
            $data = [
218
                'success' => false,
219
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
220
            ];
221
 
222
            return new JsonModel($data);
223
        }
224
 
225
        return new JsonModel($data);
226
    }
227
 
228
    public function editAction()
229
    {
230
        $currentUserPlugin = $this->plugin('currentUserPlugin');
231
        $currentUser = $currentUserPlugin->getUser();
232
 
233
        $request = $this->getRequest();
234
 
235
        $id = $this->params()->fromRoute('id');
236
        if(!$id) {
237
            $data = [
238
                'success'   => false,
239
                'data'   => 'ERROR_INVALID_PARAMETER'
240
            ];
241
 
242
            return new JsonModel($data);
243
        }
244
 
245
        $pageMapper = PageMapper::getInstance($this->adapter);
246
        $page = $pageMapper->fetchOne($id);
247
        if(!$page) {
248
            $data = [
249
                'success'   => false,
250
                'data'   => 'ERROR_RECORD_NOT_FOUND'
251
            ];
252
 
253
            return new JsonModel($data);
254
        }
255
 
256
        if($request->isPost()) {
257
            $form = new  PageForm();
258
            $dataPost = $request->getPost()->toArray();
259
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Page::STATUS_INACTIVE;
260
 
261
            $form->setData($dataPost);
262
 
263
            if($form->isValid()) {
264
                $dataPost = (array) $form->getData();
265
                unset($dataPost['id']);
266
 
267
 
268
                $hydrator = new ObjectPropertyHydrator();
269
                $hydrator->hydrate($dataPost, $page);
270
 
271
                $result = $pageMapper->update($page);
272
 
273
                if($result) {
274
                    $this->logger->info('Se actualizo la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
275
 
276
                    $data = [
277
                        'success' => true,
278
                        'data' => 'LABEL_RECORD_UPDATED'
279
                    ];
280
                } else {
281
                    $data = [
282
                        'success'   => false,
283
                        'data'      => $pageMapper->getError()
284
                    ];
285
                }
286
 
287
                return new JsonModel($data);
288
 
289
            } else {
290
                $messages = [];
291
                $form_messages = (array) $form->getMessages();
292
                foreach($form_messages  as $fieldname => $field_messages)
293
                {
294
                    $messages[$fieldname] = array_values($field_messages);
295
                }
296
 
297
                return new JsonModel([
298
                    'success'   => false,
299
                    'data'   => $messages
300
                ]);
301
            }
302
        } else if ($request->isGet()) {
303
            $hydrator = new ObjectPropertyHydrator();
304
 
305
            $data = [
306
                'success' => true,
307
                'data' => $hydrator->extract($page)
308
            ];
309
 
310
            return new JsonModel($data);
311
        } else {
312
            $data = [
313
                'success' => false,
314
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
315
            ];
316
 
317
            return new JsonModel($data);
318
        }
319
 
320
        return new JsonModel($data);
321
    }
322
 
323
    public function deleteAction()
324
    {
325
        $currentUserPlugin = $this->plugin('currentUserPlugin');
326
        $currentUser = $currentUserPlugin->getUser();
327
 
328
        $request = $this->getRequest();
329
 
330
        $id = $this->params()->fromRoute('id');
331
 
332
        if(!$id) {
333
            $data = [
334
                'success'   => false,
335
                'data'   => 'ERROR_INVALID_PARAMETER'
336
            ];
337
 
338
            return new JsonModel($data);
339
        }
340
 
341
        $pageMapper = PageMapper::getInstance($this->adapter);
342
        $page = $pageMapper->fetchOne($id);
343
        if(!$page) {
344
            $data = [
345
                'success'   => false,
346
                'data'   => 'ERROR_RECORD_NOT_FOUND'
347
            ];
348
 
349
            return new JsonModel($data);
350
        }
351
 
352
        if($request->isPost()) {
353
            $result = $pageMapper->delete($page);
354
            if($result) {
355
                $this->logger->info('Se borro la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
356
 
357
                $data = [
358
                    'success' => true,
359
                    'data' => 'LABEL_RECORD_DELETED'
360
                ];
361
            } else {
362
 
363
                $data = [
364
                    'success'   => false,
365
                    'data'      => $pageMapper->getError()
366
                ];
367
 
368
                return new JsonModel($data);
369
            }
370
 
371
        } else {
372
            $data = [
373
                'success' => false,
374
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
375
            ];
376
 
377
            return new JsonModel($data);
378
        }
379
 
380
        return new JsonModel($data);
381
    }
382
}