Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

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