Proyectos de Subversion LeadersLinked - Services

Rev

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

Rev Autor Línea Nro. Línea
308 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
 
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\View\Model\ViewModel;
10
use Laminas\View\Model\JsonModel;
11
 
12
use LeadersLinked\Library\Functions;
13
use LeadersLinked\Model\HabitGoal;
14
use LeadersLinked\Mapper\HabitGoalMapper;
15
use LeadersLinked\Form\Habit\HabitGoalForm;
16
 
17
 
18
class HabitGoalController extends AbstractActionController
19
{
20
    /**
21
     *
22
     * @var \Laminas\Db\Adapter\AdapterInterface
23
     */
24
    private $adapter;
25
 
26
    /**
27
     *
28
     * @var \LeadersLinked\Cache\CacheInterface
29
     */
30
    private $cache;
31
 
32
 
33
    /**
34
     *
35
     * @var \Laminas\Log\LoggerInterface
36
     */
37
    private $logger;
38
 
39
    /**
40
     *
41
     * @var array
42
     */
43
    private $config;
44
 
45
 
46
    /**
47
     *
48
     * @var \Laminas\Mvc\I18n\Translator
49
     */
50
    private $translator;
51
 
52
 
53
    /**
54
     *
55
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
56
     * @param \LeadersLinked\Cache\CacheInterface $cache
57
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
58
     * @param array $config
59
     * @param \Laminas\Mvc\I18n\Translator $translator
60
     */
61
    public function __construct($adapter, $cache, $logger, $config, $translator)
62
    {
63
        $this->adapter      = $adapter;
64
        $this->cache        = $cache;
65
        $this->logger       = $logger;
66
        $this->config       = $config;
67
        $this->translator   = $translator;
68
    }
69
 
70
    public function indexAction()
71
    {
72
 
73
 
74
 
75
        $request = $this->getRequest();
76
 
77
        if($request->isGet()) {
78
            $currentUserPlugin = $this->plugin('currentUserPlugin');
79
            $currentUser = $currentUserPlugin->getUser();
80
 
81
            $acl = $this->getEvent()->getViewModel()->getVariable('acl');
82
            $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'habits/goals/add');
83
            $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'habits/goals/edit');
84
            $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'habits/goals/delete');
85
 
86
 
87
                $search = $this->params()->fromQuery('search');
88
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
89
 
90
                $page               = intval($this->params()->fromQuery('start', 1), 10);
91
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
92
                $order              =  $this->params()->fromQuery('order', []);
93
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
94
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
95
 
96
                $fields =  ['name'];
97
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
98
 
99
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
100
                    $order_direction = 'ASC';
101
                }
102
 
103
                $habitGoalMapper = HabitGoalMapper::getInstance($this->adapter);
104
                $paginator = $habitGoalMapper->fetchAllDataTable($currentUser->id, $search,  $page, $records_x_page, $order_field, $order_direction);
105
 
106
                $items = [];
107
                $records = $paginator->getCurrentItems();
108
                foreach($records as $record)
109
                {
110
                    $item = [
111
                        'id' => $record->id,
112
                        'name' => $record->name,
113
                        'description' => $record->description,
114
                        'actions' => [
115
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('habits/goals/edit', ['id' => $record->uuid ], ['force_canonical' => true]) : '',
116
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('habits/goals/delete', ['id' =>$record->uuid ],  ['force_canonical' => true]) : '',
117
                        ]
118
                    ];
119
 
120
                    array_push($items, $item);
121
                }
122
 
123
                return new JsonModel([
124
                    'success' => true,
125
                    'data' => [
126
                        'items' => $items,
127
                        'total' => $paginator->getTotalItemCount(),
128
                        'link_add' => $allowAdd ? $this->url()->fromRoute('habits/goals/add', [], ['force_canonical' => true]) : '',
129
                    ]
130
                ]);
131
 
132
 
133
        } else {
134
            return new JsonModel([
135
                'success' => false,
136
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
137
            ]);;
138
        }
139
    }
140
 
141
 
142
    public function addAction()
143
    {
144
        $request = $this->getRequest();
145
 
146
        if($request->isGet()) {
147
 
148
 
149
            $currentUserPlugin = $this->plugin('currentUserPlugin');
150
            $currentUser = $currentUserPlugin->getUser();
151
 
152
            $skills = [];
153
            $habitSkillMapper = \LeadersLinked\Mapper\HabitSkillMapper::getInstance($this->adapter);
154
            $records = $habitSkillMapper->fetchAllByUserId($currentUser->id);
155
            foreach($records as $record)
156
            {
157
                $skills[ $record->uuid ] = $record->name;
158
            }
159
 
160
            return new JsonModel([
161
                'success'   => true,
162
                'data'   => $skills
163
            ]);
164
 
165
 
166
        } else if($request->isPost()) {
167
            $currentUserPlugin = $this->plugin('currentUserPlugin');
168
            $currentUser = $currentUserPlugin->getUser();
169
 
170
            $form = new  HabitGoalForm($this->adapter, $currentUser->id);
171
            $dataPost = $request->getPost()->toArray();
172
 
173
 
174
            $form->setData($dataPost);
175
 
176
            if($form->isValid()) {
177
 
178
                $dataPost = (array) $form->getData();
179
 
180
 
181
 
182
 
183
                $habitGoal = new HabitGoal();
184
                $habitGoal->network_id  = $currentUser->network_id;
185
                $habitGoal->user_id     = $currentUser->id;
186
                $habitGoal->name        = $dataPost['name'];
187
                $habitGoal->description = $dataPost['description'];
188
                $habitGoal->value       = $dataPost['value'];
189
                $habitGoal->start_date  = $dataPost['start_date'];
190
                $habitGoal->end_date    = $dataPost['end_date'];
191
 
192
 
193
                $habitGoalMapper = \LeadersLinked\Mapper\HabitGoalMapper::getInstance($this->adapter);
194
                $result = $habitGoalMapper->insert($habitGoal );
195
 
196
                if($result) {
197
 
198
                    if(!empty($dataPost['skill_id'])) {
199
                        $habitSkillMapper       = \LeadersLinked\Mapper\HabitSkillMapper::getInstance($this->adapter);
200
                        $habitGoalSkillMapper   = \LeadersLinked\Mapper\HabitGoalSkillMapper::getInstance($this->adapter);
201
 
202
                        foreach($dataPost['skill_id'] as $uuid)
203
                        {
204
                            $habitSkill = $habitSkillMapper->fetchOneByUuid($uuid);
205
                            if($habitSkill->user_id == $currentUser->id) {
206
                                $habitGoalSkill = new \LeadersLinked\Model\HabitGoalSkill();
207
                                $habitGoalSkill->network_id = $currentUser->network_id;
208
                                $habitGoalSkill->user_id    = $currentUser->id;
209
                                $habitGoalSkill->goal_id    = $habitGoal->id;
210
                                $habitGoalSkill->skill_id   = $habitGoal->id;
211
 
212
 
213
 
214
 
215
                                $habitGoalSkillMapper->insert($habitGoalSkill);
216
 
217
                            }
218
                        }
219
                    }
220
 
221
 
222
 
223
 
224
                    $this->logger->info('Se agrego el valor : ' . $habitGoal->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
225
 
226
                    $data = [
227
                        'success'   => true,
228
                        'data'   => 'LABEL_RECORD_ADDED'
229
                    ];
230
                } else {
231
                    $data = [
232
                        'success'   => false,
233
                        'data'      => $habitGoalMapper->getError()
234
                    ];
235
 
236
                }
237
 
238
                return new JsonModel($data);
239
 
240
            } else {
241
                $messages = [];
242
                $form_messages = (array) $form->getMessages();
243
                foreach($form_messages  as $fieldname => $field_messages)
244
                {
245
 
246
                    $messages[$fieldname] = array_values($field_messages);
247
                }
248
 
249
                return new JsonModel([
250
                    'success'   => false,
251
                    'data'   => $messages
252
                ]);
253
            }
254
 
255
        } else {
256
            return new JsonModel([
257
                'success' => false,
258
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
259
            ]);
260
        }
261
    }
262
 
263
    public function editAction()
264
    {
265
        $currentUserPlugin = $this->plugin('currentUserPlugin');
266
        $currentUser = $currentUserPlugin->getUser();
267
 
268
 
269
        $request = $this->getRequest();
270
        $id = $this->params()->fromRoute('id');
271
 
272
 
273
        if(!$id) {
274
            return new JsonModel([
275
                'success'   => false,
276
                'data'   => 'ERROR_INVALID_PARAMETER'
277
            ]);
278
 
279
        }
280
 
281
 
282
 
283
        $habitGoalMapper = HabitGoalMapper::getInstance($this->adapter);
284
        $habitGoal = $habitGoalMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
285
        if(!$habitGoal) {
286
            return new JsonModel([
287
                'success'   => false,
288
                'data'   => 'ERROR_RECORD_NOT_FOUND'
289
            ]);
290
 
291
 
292
        }
293
 
294
 
295
        if($currentUser->id != $habitGoal->user_id) {
296
            return new JsonModel([
297
                'success'   => false,
298
                'data'   => 'ERROR_UNAUTHORIZED'
299
            ]);
300
 
301
        }
302
 
303
        if($request->isGet()) {
304
 
305
            $skills = [];
306
            $habitGoalSkillMapper = \LeadersLinked\Mapper\HabitGoalSkillMapper::getInstance($this->adapter);
307
            $habitSkillMapper = \LeadersLinked\Mapper\HabitSkillMapper::getInstance($this->adapter);
308
 
309
            $records =  $habitGoalSkillMapper->fetchAllByGoalId($habitGoal->id);
310
            foreach($records as $record)
311
            {
312
                $habitSkill = $habitSkillMapper->fetchOne($record->skill_id);
313
 
314
                array_push($skills, $habitSkill->uuid);
315
            }
316
 
317
 
318
 
319
            return new JsonModel([
320
                'success'   => true,
321
                'data'   => [
322
                    'name'          => $habitGoal->name,
323
                    'description'   => $habitGoal->description,
324
                    'value'         => $habitGoal->value,
325
                    'start_date'    => $habitGoal->start_date,
326
                    'end_date'      => $habitGoal->end_date,
327
                    'skill_id'      => $skills
328
                ]
329
            ]);
330
        } else if($request->isPost()) {
331
            $form = new  HabitGoalForm($this->adapter, $currentUser->id);
332
            $dataPost = $request->getPost()->toArray();
333
 
334
 
335
 
336
            $form->setData($dataPost);
337
 
338
            if($form->isValid()) {
339
 
340
                $dataPost = (array) $form->getData();
341
 
342
                $habitGoal->name = $dataPost['name'];
343
                $habitGoal->description = $dataPost['description'];
344
                $habitGoal->value       = $dataPost['value'];
345
                $habitGoal->start_date  = $dataPost['start_date'];
346
                $habitGoal->end_date    = $dataPost['end_date'];
347
 
348
 
349
 
350
                $habitGoalMapper = \LeadersLinked\Mapper\HabitGoalMapper::getInstance($this->adapter);
351
 
352
                $result = $habitGoalMapper->update($habitGoal);
353
 
354
                if($result) {
355
                    $habitGoalSkillMapper   = \LeadersLinked\Mapper\HabitGoalSkillMapper::getInstance($this->adapter);
356
                    $habitGoalSkillMapper->deleteAllByGoalId($habitGoal->id);
357
 
358
                    if(!empty($dataPost['skill_id'])) {
359
                        $habitSkillMapper       = \LeadersLinked\Mapper\HabitSkillMapper::getInstance($this->adapter);
360
                        foreach($dataPost['skill_id'] as $uuid)
361
                        {
362
                            $habitSkill = $habitSkillMapper->fetchOneByUuid($uuid);
363
 
364
 
365
 
366
                            if($habitSkill && $habitSkill->user_id == $currentUser->id) {
367
                                $habitGoalSkill = new \LeadersLinked\Model\HabitGoalSkill();
368
                                $habitGoalSkill->network_id = $currentUser->network_id;
369
                                $habitGoalSkill->user_id    = $currentUser->id;
370
                                $habitGoalSkill->goal_id    = $habitGoal->id;
371
                                $habitGoalSkill->skill_id   = $habitSkill->id;
372
 
373
                                $habitGoalSkillMapper->insert($habitGoalSkill);
374
 
375
                            }
376
                        }
377
                    }
378
 
379
                    $this->logger->info('Se edito el valor : ' . $habitGoal->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
380
 
381
                    $data = [
382
                        'success'   => true,
383
                        'data'   => 'LABEL_RECORD_UPDATED'
384
                    ];
385
                } else {
386
                    $data = [
387
                        'success'   => false,
388
                        'data'      => $habitGoalMapper->getError()
389
                    ];
390
 
391
                }
392
 
393
                return new JsonModel($data);
394
 
395
 
396
            } else {
397
                $messages = [];
398
                $form_messages = (array) $form->getMessages();
399
                foreach($form_messages  as $fieldname => $field_messages)
400
                {
401
 
402
                    $messages[$fieldname] = array_values($field_messages);
403
                }
404
 
405
                return new JsonModel([
406
                    'success'   => false,
407
                    'data'   => $messages
408
                ]);
409
            }
410
 
411
        } else {
412
            return new JsonModel([
413
                'success' => false,
414
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
415
            ]);
416
        }
417
    }
418
 
419
 
420
    public function deleteAction()
421
    {
422
        $currentUserPlugin = $this->plugin('currentUserPlugin');
423
        $currentUser = $currentUserPlugin->getUser();
424
 
425
        $request = $this->getRequest();
426
        $id = $this->params()->fromRoute('id');
427
 
428
        if(!$id) {
429
            return new JsonModel([
430
                'success'   => false,
431
                'data'   => 'ERROR_INVALID_PARAMETER'
432
            ]);
433
        }
434
 
435
 
436
 
437
        $habitGoalMapper = HabitGoalMapper::getInstance($this->adapter);
438
        $habitGoal = $habitGoalMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
439
        if(!$habitGoal) {
440
            return new JsonModel([
441
                'success'   => false,
442
                'data'   => 'ERROR_RECORD_NOT_FOUND'
443
            ]);
444
        }
445
 
446
 
447
        if($currentUser->id != $habitGoal->user_id) {
448
            $response = [
449
                'success' => false,
450
                'data' => 'ERROR_UNAUTHORIZED'
451
            ];
452
 
453
            return new JsonModel($response);
454
        }
455
 
456
 
457
        if($request->isPost()) {
458
            $result = $habitGoalMapper->delete($habitGoal);
459
            if($result) {
460
                $this->logger->info('Se borro el valor : ' .  $habitGoal->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
461
 
462
                return new JsonModel([
463
                    'success' => true,
464
                    'data' => 'LABEL_RECORD_DELETED'
465
                ]);
466
            } else {
467
 
468
                return new JsonModel([
469
                    'success'   => false,
470
                    'data'      => $habitGoalMapper->getError()
471
                ]);
472
 
473
            }
474
 
475
        } else {
476
            return new JsonModel([
477
                'success' => false,
478
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
479
            ]);
480
 
481
        }
482
 
483
 
484
    }
485
}