Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1 | Rev 15458 | Ir a la última revisión | | Comparar con el anterior | 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
    {
15348 efrain 69
        $currentUserPlugin = $this->plugin('currentUserPlugin');
70
        $currentUser = $currentUserPlugin->getUser();
1 www 71
 
72
        $request = $this->getRequest();
73
        if($request->isGet()) {
74
 
75
 
76
            $headers  = $request->getHeaders();
77
 
78
            $isJson = false;
79
            if($headers->has('Accept')) {
80
                $accept = $headers->get('Accept');
81
 
82
                $prioritized = $accept->getPrioritized();
83
 
84
                foreach($prioritized as $key => $value) {
85
                    $raw = trim($value->getRaw());
86
 
87
                    if(!$isJson) {
88
                        $isJson = strpos($raw, 'json');
89
                    }
90
 
91
                }
92
            }
93
 
94
            if($isJson) {
95
                $search = $this->params()->fromQuery('search', []);
96
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
97
 
98
                $page               = intval($this->params()->fromQuery('start', 1), 10);
99
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
100
                $order =  $this->params()->fromQuery('order', []);
101
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
102
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
103
 
104
                $fields =  ['title'];
105
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
106
 
107
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
108
                    $order_direction = 'ASC';
109
                }
110
 
111
                $pageMapper = PageMapper::getInstance($this->adapter);
112
 
113
 
15348 efrain 114
                $paginator = $pageMapper->fetchAllDataTable($search, $currentUser->network_id, $page, $records_x_page, $order_field, $order_direction);
1 www 115
 
116
                $items = [];
117
                $records = $paginator->getCurrentItems();
118
                foreach($records as $record)
119
                {
120
                    $item = [
15348 efrain 121
                        'id' => $record->code,
1 www 122
                        'title' => $record->title,
123
                        'status' => $record->status,
124
                        'actions' => [
125
                            'link_edit' => $this->url()->fromRoute('publications/pages/edit', ['id' => $record->id ]),
126
                            'link_delete' => $record->fixed == Page::NO ? $this->url()->fromRoute('publications/pages/delete', ['id' => $record->id ]) : '',
127
                        ]
128
                    ];
129
 
130
                    array_push($items, $item);
131
                }
132
 
133
                return new JsonModel([
134
                    'success' => true,
135
                    'data' => [
136
                        'items' => $items,
137
                        'total' => $paginator->getTotalItemCount(),
138
                    ]
139
                ]);
140
 
141
 
142
            } else  {
143
                $form = new PageForm();
144
 
145
                $this->layout()->setTemplate('layout/layout-backend');
146
                $viewModel = new ViewModel();
147
                $viewModel->setTemplate('leaders-linked/pages/index.phtml');
148
                $viewModel->setVariable('form', $form);
149
                return $viewModel ;
150
            }
151
        } else {
152
            return new JsonModel([
153
                'success' => false,
154
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
155
            ]);;
156
        }
157
    }
158
 
159
    public function addAction()
160
    {
161
        $currentUserPlugin = $this->plugin('currentUserPlugin');
162
        $currentUser = $currentUserPlugin->getUser();
163
 
164
        $request = $this->getRequest();
165
 
166
        if($request->isPost()) {
167
            $form = new  PageForm();
168
            $dataPost = $request->getPost()->toArray();
169
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Page::STATUS_INACTIVE;
170
 
171
            $form->setData($dataPost);
172
 
173
            if($form->isValid()) {
174
                $dataPost = (array) $form->getData();
175
 
176
                $hydrator = new ObjectPropertyHydrator();
177
                $page = new Page();
178
                $hydrator->hydrate($dataPost, $page);
179
 
180
 
181
 
182
                $pageMapper = PageMapper::getInstance($this->adapter);
183
                $result = $pageMapper->insert($page);
184
 
185
                if($result) {
186
                    $this->logger->info('Se agrego la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
187
 
188
                    $data = [
189
                        'success'   => true,
190
                        'data'   => 'LABEL_RECORD_ADDED'
191
                    ];
192
                } else {
193
                    $data = [
194
                        'success'   => false,
195
                        'data'      => $pageMapper->getError()
196
                    ];
197
 
198
                }
199
 
200
                return new JsonModel($data);
201
 
202
            } else {
203
                $messages = [];
204
                $form_messages = (array) $form->getMessages();
205
                foreach($form_messages  as $fieldname => $field_messages)
206
                {
207
 
208
                    $messages[$fieldname] = array_values($field_messages);
209
                }
210
 
211
                return new JsonModel([
212
                    'success'   => false,
213
                    'data'   => $messages
214
                ]);
215
            }
216
 
217
        } else {
218
            $data = [
219
                'success' => false,
220
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
221
            ];
222
 
223
            return new JsonModel($data);
224
        }
225
 
226
        return new JsonModel($data);
227
    }
228
 
229
    public function editAction()
230
    {
231
        $currentUserPlugin = $this->plugin('currentUserPlugin');
232
        $currentUser = $currentUserPlugin->getUser();
233
 
234
        $request = $this->getRequest();
235
 
236
        $id = $this->params()->fromRoute('id');
237
        if(!$id) {
238
            $data = [
239
                'success'   => false,
240
                'data'   => 'ERROR_INVALID_PARAMETER'
241
            ];
242
 
243
            return new JsonModel($data);
244
        }
245
 
246
        $pageMapper = PageMapper::getInstance($this->adapter);
15348 efrain 247
        $page = $pageMapper->fetchOneByCodeAndNetworkId($id, $currentUser->network_id);
1 www 248
        if(!$page) {
249
            $data = [
250
                'success'   => false,
251
                'data'   => 'ERROR_RECORD_NOT_FOUND'
252
            ];
253
 
254
            return new JsonModel($data);
255
        }
256
 
257
        if($request->isPost()) {
258
            $form = new  PageForm();
259
            $dataPost = $request->getPost()->toArray();
260
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : Page::STATUS_INACTIVE;
261
 
262
            $form->setData($dataPost);
263
 
264
            if($form->isValid()) {
265
                $dataPost = (array) $form->getData();
266
                unset($dataPost['id']);
267
 
268
 
269
                $hydrator = new ObjectPropertyHydrator();
270
                $hydrator->hydrate($dataPost, $page);
271
 
272
                $result = $pageMapper->update($page);
273
 
274
                if($result) {
275
                    $this->logger->info('Se actualizo la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
276
 
277
                    $data = [
278
                        'success' => true,
279
                        'data' => 'LABEL_RECORD_UPDATED'
280
                    ];
281
                } else {
282
                    $data = [
283
                        'success'   => false,
284
                        'data'      => $pageMapper->getError()
285
                    ];
286
                }
287
 
288
                return new JsonModel($data);
289
 
290
            } else {
291
                $messages = [];
292
                $form_messages = (array) $form->getMessages();
293
                foreach($form_messages  as $fieldname => $field_messages)
294
                {
295
                    $messages[$fieldname] = array_values($field_messages);
296
                }
297
 
298
                return new JsonModel([
299
                    'success'   => false,
300
                    'data'   => $messages
301
                ]);
302
            }
303
        } else if ($request->isGet()) {
304
            $hydrator = new ObjectPropertyHydrator();
305
 
306
            $data = [
307
                'success' => true,
308
                'data' => $hydrator->extract($page)
309
            ];
310
 
311
            return new JsonModel($data);
312
        } else {
313
            $data = [
314
                'success' => false,
315
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
316
            ];
317
 
318
            return new JsonModel($data);
319
        }
320
 
321
        return new JsonModel($data);
322
    }
323
 
324
    public function deleteAction()
325
    {
326
        $currentUserPlugin = $this->plugin('currentUserPlugin');
327
        $currentUser = $currentUserPlugin->getUser();
328
 
329
        $request = $this->getRequest();
330
 
331
        $id = $this->params()->fromRoute('id');
332
 
333
        if(!$id) {
334
            $data = [
335
                'success'   => false,
336
                'data'   => 'ERROR_INVALID_PARAMETER'
337
            ];
338
 
339
            return new JsonModel($data);
340
        }
341
 
342
        $pageMapper = PageMapper::getInstance($this->adapter);
15348 efrain 343
        $page = $pageMapper->fetchOneByCodeAndNetworkId($id, $currentUser->network_id);
1 www 344
        if(!$page) {
345
            $data = [
346
                'success'   => false,
347
                'data'   => 'ERROR_RECORD_NOT_FOUND'
348
            ];
349
 
350
            return new JsonModel($data);
351
        }
352
 
353
        if($request->isPost()) {
354
            $result = $pageMapper->delete($page);
355
            if($result) {
356
                $this->logger->info('Se borro la página ' . $page->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
357
 
358
                $data = [
359
                    'success' => true,
360
                    'data' => 'LABEL_RECORD_DELETED'
361
                ];
362
            } else {
363
 
364
                $data = [
365
                    'success'   => false,
366
                    'data'      => $pageMapper->getError()
367
                ];
368
 
369
                return new JsonModel($data);
370
            }
371
 
372
        } else {
373
            $data = [
374
                'success' => false,
375
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
376
            ];
377
 
378
            return new JsonModel($data);
379
        }
380
 
381
        return new JsonModel($data);
382
    }
383
}