Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17053 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
17013 efrain 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\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Library\Functions;
13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
14
use LeadersLinked\Mapper\HabitEmojiMapper;
15
use LeadersLinked\Form\Habit\HabitEmojiAddForm;
16
use LeadersLinked\Form\Habit\HabitEmojiEditForm;
17
use LeadersLinked\Model\HabitEmoji;
18
use LeadersLinked\Library\Storage;
19
 
20
class HabitEmojiController extends AbstractActionController
21
{
22
    /**
23
     *
24
     * @var \Laminas\Db\Adapter\AdapterInterface
25
     */
26
    private $adapter;
27
 
28
    /**
29
     *
30
     * @var \LeadersLinked\Cache\CacheInterface
31
     */
32
    private $cache;
33
 
34
 
35
    /**
36
     *
37
     * @var \Laminas\Log\LoggerInterface
38
     */
39
    private $logger;
40
 
41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
46
 
47
 
48
    /**
49
     *
50
     * @var \Laminas\Mvc\I18n\Translator
51
     */
52
    private $translator;
53
 
54
 
55
    /**
56
     *
57
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
58
     * @param \LeadersLinked\Cache\CacheInterface $cache
59
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
60
     * @param array $config
61
     * @param \Laminas\Mvc\I18n\Translator $translator
62
     */
63
    public function __construct($adapter, $cache, $logger, $config, $translator)
64
    {
65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
        $this->translator   = $translator;
70
    }
71
 
72
    public function indexAction()
73
    {
74
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
75
        $currentNetwork = $currentNetworkPlugin->getNetwork();
76
 
77
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
78
        $currentUser        = $currentUserPlugin->getUser();
79
        $currentCompany     = $currentUserPlugin->getCompany();
80
 
81
        $request = $this->getRequest();
82
        if($request->isGet()) {
83
 
84
 
85
            $headers  = $request->getHeaders();
86
 
87
            $isJson = false;
88
            if($headers->has('Accept')) {
89
                $accept = $headers->get('Accept');
90
 
91
                $prioritized = $accept->getPrioritized();
92
 
93
                foreach($prioritized as $key => $value) {
94
                    $raw = trim($value->getRaw());
95
 
96
                    if(!$isJson) {
97
                        $isJson = strpos($raw, 'json');
98
                    }
99
 
100
                }
101
            }
102
 
103
            if($isJson) {
104
                $search = $this->params()->fromQuery('search', []);
105
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
106
 
107
                $page               = intval($this->params()->fromQuery('start', 1), 10);
108
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
109
                $order =  $this->params()->fromQuery('order', []);
110
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
111
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
112
 
113
                $fields =  ['name'];
114
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
115
 
116
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
117
                    $order_direction = 'ASC';
118
                }
119
 
120
                $habitEmojiMapper = HabitEmojiMapper::getInstance($this->adapter);
121
                $paginator = $habitEmojiMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search,  $page, $records_x_page, $order_field, $order_direction);
122
 
17018 efrain 123
                $storage = Storage::getInstance($this->config, $this->adapter);
17013 efrain 124
                $path = $storage->getPathHabitEmoji();
125
 
126
                $items = [];
127
                $records = $paginator->getCurrentItems();
128
                foreach($records as $record)
129
                {
130
 
131
 
132
                    switch($record->status)
133
                    {
134
                        case HabitEmoji::STATUS_ACTIVE :
135
                            $status = 'LABEL_ACTIVE';
136
                            break;
137
 
138
                        case HabitEmoji::STATUS_INACTIVE :
139
                            $status = 'LABEL_INACTIVE';
140
                            break;
141
 
142
                        default :
143
                            $status = 'LABEL_UNKNOWN';
144
                            break;
145
                    }
146
 
147
 
148
 
149
                    $item = [
150
                        'name' => $record->name,
151
                        'details' => [
152
                            'status' => $status,
153
                            'order' => $record->order,
154
                            'code' => $record->code,
155
                        ],
156
                        'image' => $storage->getGenericImage($path, $record->uuid, $record->image),
157
                        'actions' => [
158
                            'link_edit' => $this->url()->fromRoute('habits/emojis/edit', ['id' => $record->uuid ]),
159
                            'link_delete' => $this->url()->fromRoute('habits/emojis/delete', ['id' => $record->uuid ]),
160
                        ]
161
                    ];
162
 
163
                    array_push($items, $item);
164
                }
165
 
166
                return new JsonModel([
167
                    'success' => true,
168
                    'data' => [
169
                        'items' => $items,
170
                        'total' => $paginator->getTotalItemCount(),
171
                    ]
172
                ]);
173
            } else  {
174
 
175
                $target_size = $this->config['leaderslinked.image_sizes.emoji'];
176
 
177
                $formAdd = new HabitEmojiAddForm();
178
                $formEdit = new HabitEmojiAddForm();
179
 
180
                $this->layout()->setTemplate('layout/layout-backend');
181
                $viewModel = new ViewModel();
182
                $viewModel->setTemplate('leaders-linked/habits/emojis');
183
                $viewModel->setVariables([
184
                    'formAdd' => $formAdd,
185
                    'formEdit' => $formEdit,
186
                    'targetSize' => $target_size,
187
                ]);
188
                return $viewModel ;
189
            }
190
        } else {
191
            return new JsonModel([
192
                'success' => false,
193
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
194
            ]);;
195
        }
196
    }
197
 
198
 
199
 
200
    public function addAction()
201
    {
202
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
203
        $currentUser        = $currentUserPlugin->getUser();
204
        $currentCompany     = $currentUserPlugin->getCompany();
205
 
206
        $request            = $this->getRequest();
207
 
208
 
209
        if($request->isPost()) {
210
            $form = new  HabitEmojiAddForm();
211
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
212
            $dataPost['status'] = empty($dataPost['status'])  ? HabitEmoji::STATUS_INACTIVE : $dataPost['status'];
213
 
214
 
215
            $form->setData($dataPost);
216
 
217
            if($form->isValid()) {
218
                $dataPost = (array) $form->getData();
219
 
220
                $habitEmoji = new HabitEmoji();
221
                $habitEmoji->company_id = $currentCompany->id;
222
                $habitEmoji->name = $dataPost['name'];
223
                $habitEmoji->order = $dataPost['order'];
224
                $habitEmoji->code = $dataPost['code'];
225
                $habitEmoji->status = $dataPost['status'];
226
                $habitEmoji->image = '';
227
 
228
                $habitEmojiMapper = HabitEmojiMapper::getInstance($this->adapter);
229
                if($habitEmojiMapper->insert($habitEmoji)) {
230
 
231
                    $habitEmoji = $habitEmojiMapper->fetchOne($habitEmoji->id);
232
 
17052 stevensc 233
                    $storage = Storage::getInstance($this->config, $this->adapter);
234
                    $storage->setFiles($this->getRequest()->getFiles()->toArray());
235
 
236
                    if (!$storage->setCurrentFilename('image')) {
237
                        return new JsonModel([
238
                            'success'   => false,
239
                            'data'      => 'ERROR_UPLOAD_IMAGE'
240
                        ]);
241
                    }
242
 
17013 efrain 243
                    $target_size = $this->config['leaderslinked.image_sizes.emoji'];
244
                    list($target_width, $target_height) = explode('x', $target_size);
245
 
17052 stevensc 246
                    $source_filename = $storage->getTmpFilename();
247
                    $filename = 'habit-emoji-' . uniqid() . '.png';
248
                    $target_filename = $storage->composePathToFilename(
249
                        Storage::TYPE_HABIT_EMOJI,
250
                        $habitEmoji->uuid,
251
                        $filename
252
                    );
253
 
254
                    if (!$storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
255
                        return new JsonModel([
256
                            'success'   => false,
257
                            'data'      => 'ERROR_UPLOAD_IMAGE'
258
                        ]);
259
                    }
260
 
261
                    $habitEmoji->image = $filename;
17013 efrain 262
 
17052 stevensc 263
                    if(!$habitEmojiMapper->update($habitEmoji)) {
264
                        return new JsonModel([
265
                            'success'   => false,
266
                            'data'      => $habitEmojiMapper->getError()
267
                        ]);
17013 efrain 268
                    }
269
 
270
                    $this->logger->info('Se agrego el emoji ' . $habitEmoji->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
271
 
272
                    $data = [
273
                        'success'   => true,
274
                        'data'   => 'LABEL_RECORD_ADDED'
275
                    ];
276
                } else {
277
                    $data = [
278
                        'success'   => false,
279
                        'data'      => $habitEmojiMapper->getError()
280
                    ];
281
 
282
                }
283
 
284
                return new JsonModel($data);
285
 
286
            } else {
287
                $messages = [];
288
                $form_messages = (array) $form->getMessages();
289
                foreach($form_messages  as $fieldname => $field_messages)
290
                {
291
 
292
                    $messages[$fieldname] = array_values($field_messages);
293
                }
294
 
295
                return new JsonModel([
296
                    'success'   => false,
297
                    'data'   => $messages
298
                ]);
299
            }
300
 
301
        } else {
302
            $data = [
303
                'success' => false,
304
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
305
            ];
306
 
307
            return new JsonModel($data);
308
        }
309
 
310
        return new JsonModel($data);
311
    }
312
 
313
    /**
314
     *
315
     * Borrar un perfil excepto el público
316
     * @return \Laminas\View\Model\JsonModel
317
     */
318
    public function deleteAction()
319
    {
320
        $currentUserPlugin = $this->plugin('currentUserPlugin');
321
        $currentUser    = $currentUserPlugin->getUser();
322
        $currentCompany = $currentUserPlugin->getCompany();
323
 
324
        $request        = $this->getRequest();
325
        $id         = $this->params()->fromRoute('id');
326
 
327
 
328
 
329
        $habitEmojiMapper = HabitEmojiMapper::getInstance($this->adapter);
330
        $habitEmoji = $habitEmojiMapper->fetchOneByUuid($id);
331
        if(!$habitEmoji) {
332
            return new JsonModel([
333
                'success'   => false,
334
                'data'   => 'ERROR_RECORD_NOT_FOUND'
335
            ]);
336
        }
337
 
338
        if($habitEmoji->company_id != $currentCompany->id) {
339
            return new JsonModel([
340
                'success'   => false,
341
                'data'   => 'ERROR_UNAUTHORIZED'
342
            ]);
343
        }
344
 
345
        if($request->isPost()) {
346
 
347
            $result =  $habitEmojiMapper->delete($habitEmoji);
348
            if($result) {
349
                $this->logger->info('Se borro el emoji : ' .  $habitEmoji->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
350
 
351
                if($habitEmoji->image) {
17054 stevensc 352
                    $storage = Storage::getInstance($this->config, $this->adapter);
17018 efrain 353
                    $target_path = $storage->getPathHabitEmoji();
17054 stevensc 354
                    $storage->deleteFile($target_path, $habitEmoji->uuid, $habitEmoji->image);
17013 efrain 355
                }
356
 
357
                $data = [
358
                    'success' => true,
359
                    'data' => 'LABEL_RECORD_DELETED'
360
                ];
361
            } else {
362
 
363
                $data = [
364
                    'success'   => false,
365
                    'data'      => $habitEmojiMapper->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
 
383
 
384
    public function editAction()
385
    {
386
        $currentUserPlugin = $this->plugin('currentUserPlugin');
387
        $currentUser    = $currentUserPlugin->getUser();
388
        $currentCompany = $currentUserPlugin->getCompany();
389
 
390
        $request    = $this->getRequest();
391
        $id    = $this->params()->fromRoute('id');
392
 
393
 
394
        $habitEmojiMapper = HabitEmojiMapper::getInstance($this->adapter);
395
        $habitEmoji = $habitEmojiMapper->fetchOneByUuid($id);
396
        if(!$habitEmoji) {
397
            return new JsonModel([
398
                'success'   => false,
399
                'data'   => 'ERROR_RECORD_NOT_FOUND'
400
            ]);
401
        }
402
 
403
 
404
        if($habitEmoji->company_id != $currentCompany->id) {
405
            return new JsonModel([
406
                'success'   => false,
407
                'data'   => 'ERROR_UNAUTHORIZED'
408
            ]);
409
        }
410
 
411
        if($request->isGet()) {
17018 efrain 412
            $storage = Storage::getInstance($this->config, $this->adapter);
17013 efrain 413
            $path = $storage->getPathHabitEmoji();
414
 
415
            $data = [
416
                'success' => true,
417
                'data' => [
418
                    'name' => $habitEmoji->name,
419
                    'order' => $habitEmoji->order,
420
                    'status' => $habitEmoji->status,
421
                    'code' => $habitEmoji->code,
422
                    'image' => $habitEmoji->image ? $storage->getGenericImage($path,  $habitEmoji->uuid, $habitEmoji->image) : '',
423
                ]
424
            ];
425
 
426
            return new JsonModel($data);
427
        }
428
        else if($request->isPost()) {
429
            $form = new  HabitEmojiEditForm();
430
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
431
            $dataPost['status'] = empty($dataPost['status'])  ? HabitEmoji::STATUS_INACTIVE : $dataPost['status'];
432
 
433
 
434
            $form->setData($dataPost);
435
 
436
            if($form->isValid()) {
437
                $dataPost = (array) $form->getData();
438
 
439
                $habitEmoji->name = $dataPost['name'];
440
                $habitEmoji->order = $dataPost['order'];
441
                $habitEmoji->code = $dataPost['code'];
442
                $habitEmoji->status = $dataPost['status'];
443
 
444
                if($habitEmojiMapper->update($habitEmoji)) {
445
 
446
 
447
 
448
                    $target_size = $this->config['leaderslinked.image_sizes.emoji'];
449
                    list($target_width, $target_height) = explode('x', $target_size);
450
 
17053 stevensc 451
                    $storage = Storage::getInstance($this->config, $this->adapter);
452
                    $storage->setFiles($this->getRequest()->getFiles()->toArray());
17013 efrain 453
 
17053 stevensc 454
                    if (!$storage->setCurrentFilename('image')) {
455
                        return new JsonModel([
456
                            'success'   => false,
457
                            'data'      => 'ERROR_UPLOAD_IMAGE'
458
                        ]);
459
                    }
17013 efrain 460
 
17053 stevensc 461
                    $target_path =  $storage->getPathHabitEmoji();
462
                    $target_size = $this->config['leaderslinked.image_sizes.emoji'];
463
                    list($target_width, $target_height) = explode('x', $target_size);
17018 efrain 464
 
17053 stevensc 465
                    $source_filename = $storage->getTmpFilename();
466
                    $filename = 'habit-emoji-' . uniqid() . '.png';
467
                    $target_filename = $storage->composePathToFilename(
468
                        Storage::TYPE_HABIT_EMOJI,
469
                        $habitEmoji->uuid,
470
                        $filename
471
                    );
472
 
473
                    if (!$storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
474
                        return new JsonModel([
475
                            'success'   => false,
476
                            'data'      => 'ERROR_UPLOAD_IMAGE'
477
                        ]);
17013 efrain 478
                    }
17053 stevensc 479
 
480
                    if ($habitEmoji->image) {
481
                        $storage->deleteFile($target_path, $habitEmoji->uuid, $habitEmoji->image);
482
                    }
483
 
484
                    $habitEmoji->image = $filename;
17013 efrain 485
 
17053 stevensc 486
                    if(!$habitEmojiMapper->update($habitEmoji)) {
487
                        return new JsonModel([
488
                            'success'   => false,
489
                            'data'      => $habitEmojiMapper->getError()
490
                        ]);
491
                    }
17013 efrain 492
 
493
                    $this->logger->info('Se edito el emoji' . $habitEmoji->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
494
 
495
                    $data = [
496
                        'success'   => true,
497
                        'data'   => 'LABEL_RECORD_UPDATED'
498
                    ];
499
                } else {
500
                    $data = [
501
                        'success'   => false,
502
                        'data'      => $habitEmojiMapper->getError()
503
                    ];
504
 
505
                }
506
 
507
                return new JsonModel($data);
508
 
509
            } else {
510
                $messages = [];
511
                $form_messages = (array) $form->getMessages();
512
                foreach($form_messages  as $fieldname => $field_messages)
513
                {
514
 
515
                    $messages[$fieldname] = array_values($field_messages);
516
                }
517
 
518
                return new JsonModel([
519
                    'success'   => false,
520
                    'data'   => $messages
521
                ]);
522
            }
523
        } else {
524
            $data = [
525
                'success' => false,
526
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
527
            ];
528
 
529
            return new JsonModel($data);
530
        }
531
 
532
        return new JsonModel($data);
533
    }
534
 
535
 
536
}