Proyectos de Subversion LeadersLinked - Services

Rev

Rev 334 | Rev 349 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
346 www 2
 
1 efrain 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
 
14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
16
 
17
use LeadersLinked\Form\MyGroups\CreateForm;
18
use LeadersLinked\Model\Group;
19
use LeadersLinked\Mapper\GroupMapper;
20
use LeadersLinked\Form\MyGroup\AccessibilityForm;
21
use LeadersLinked\Form\MyGroup\CoverForm;
22
use LeadersLinked\Form\MyGroup\ExtendedForm;
23
use LeadersLinked\Form\MyGroup\GroupTypeForm;
24
use LeadersLinked\Form\MyGroup\ImageForm;
25
use LeadersLinked\Form\MyGroup\IndustryForm;
26
use LeadersLinked\Form\MyGroup\PrivacyForm;
27
use LeadersLinked\Form\MyGroup\WebsiteForm;
28
use LeadersLinked\Mapper\IndustryMapper;
29
use LeadersLinked\Mapper\GroupTypeMapper;
30
use LeadersLinked\Mapper\GroupMemberMapper;
31
use LeadersLinked\Mapper\QueryMapper;
32
use LeadersLinked\Model\GroupMember;
283 www 33
use LeadersLinked\Library\Storage;
1 efrain 34
 
35
class MyGroupsController extends AbstractActionController
36
{
37
    /**
38
     *
39
     * @var \Laminas\Db\Adapter\AdapterInterface
40
     */
41
    private $adapter;
42
 
43
    /**
44
     *
45
     * @var \LeadersLinked\Cache\CacheInterface
46
     */
47
    private $cache;
48
 
49
 
50
    /**
51
     *
52
     * @var \Laminas\Log\LoggerInterface
53
     */
54
    private $logger;
55
 
56
    /**
57
     *
58
     * @var array
59
     */
60
    private $config;
61
 
62
 
63
    /**
64
     *
65
     * @var \Laminas\Mvc\I18n\Translator
66
     */
67
    private $translator;
68
 
69
 
70
    /**
71
     *
72
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
73
     * @param \LeadersLinked\Cache\CacheInterface $cache
74
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
75
     * @param array $config
76
     * @param \Laminas\Mvc\I18n\Translator $translator
77
     */
78
    public function __construct($adapter, $cache, $logger, $config, $translator)
79
    {
80
        $this->adapter      = $adapter;
81
        $this->cache        = $cache;
82
        $this->logger       = $logger;
83
        $this->config       = $config;
84
        $this->translator   = $translator;
85
    }
86
 
87
    /**
88
     *
89
     * Generación del listado de perfiles
90
     * {@inheritDoc}
91
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
92
     */
93
    public function indexAction()
94
    {
95
        $currentUserPlugin = $this->plugin('currentUserPlugin');
96
        $currentUser = $currentUserPlugin->getUser();
97
 
98
        $request = $this->getRequest();
99
        if($request->isGet()) {
100
 
101
 
102
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
103
 
104
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
105
                $allowView = $acl->isAllowed($currentUser->usertype_id, 'group/view');
106
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/edit');
107
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/delete');
108
 
109
 
110
                $queryMapper = QueryMapper::getInstance($this->adapter);
111
 
112
                $select = $queryMapper->getSql()->select(GroupMapper::_TABLE);
113
                $select->columns(['id', 'uuid', 'name', 'privacy',  'image', 'status']);
114
                $select->where->equalTo('status', Group::STATUS_ACTIVE);
115
                $select->where->equalTo('network_id', $currentUser->network_id);
116
 
117
                if($search) {
118
                    $select->where->like('name', '%' . $search . '%');
119
                }
120
                $select->where->equalTo('user_id', $currentUser->id);
121
                $select->order('name ASC');
122
 
123
                $records = $queryMapper->fetchAll($select);
124
 
125
 
126
                $values = [
127
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
128
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
129
                ];
130
 
333 www 131
                $storage = Storage::getInstance($this->config, $this->adapter);
1 efrain 132
 
133
                $items = [];
134
                foreach($records as $record)
135
                {
136
 
137
                    $item = [
138
                        'name' => $record['name'],
139
                        'privacy' => $values[$record['privacy']],
283 www 140
                        'image' => $storage->getGroupImageForCodeAndFilename($record['uuid'],  $record['image']),
1 efrain 141
                        'link_view' => $allowView ? $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ])  : '',
142
                        'link_edit' => $allowEdit ? $this->url()->fromRoute('group/my-groups/edit', ['id' => $record['uuid'] ])  : '',
143
                        'link_delete' => $allowDelete ? $this->url()->fromRoute('group/my-groups/delete', ['id' => $record['uuid'] ]) : '',
144
 
145
                    ];
146
 
147
                    array_push($items, $item);
148
                }
149
 
150
 
151
 
152
                $response = [
153
                    'success' => true,
154
                    'data' => $items
155
                ];
156
 
157
                return new JsonModel($response);
158
 
159
 
160
 
161
        } else {
162
            return new JsonModel([
163
                'success' => false,
164
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
165
            ]);
166
        }
167
    }
168
 
169
    /**
170
     *
171
     * Agregar un nuevo perfil
172
     * @return \Laminas\View\Model\JsonModel
173
     */
174
    public function addAction()
175
    {
176
        $request = $this->getRequest();
177
 
178
 
179
        if($request->isPost()) {
180
            $form = new  CreateForm($this->adapter);
181
            $dataPost = $request->getPost()->toArray();
182
 
183
            $form->setData($dataPost);
184
 
185
            if($form->isValid()) {
186
 
187
 
188
                $currentUserPlugin = $this->plugin('currentUserPlugin');
189
                $currentUser = $currentUserPlugin->getUser();
190
 
191
                $dataPost = (array) $form->getData();
192
 
193
                $industryMapper = IndustryMapper::getInstance($this->adapter);
194
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
195
 
196
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
197
                $groupType = $groupTypeMapper->fetchOneByUuid($dataPost['type_id']);
198
 
199
 
200
                $group = new Group();
201
                $group->network_id = $currentUser->network_id;
202
                $group->name = $dataPost['name'];
203
                $group->industry_id = $industry->id;
204
                $group->type_id = $groupType->id;
205
                $group->user_id = $currentUser->id;
206
 
207
                $groupMapper = GroupMapper::getInstance($this->adapter);
208
                $result = $groupMapper->insert($group );
209
 
210
                if($result) {
211
 
212
                    $groupMember = new GroupMember();
213
                    $groupMember->group_id = $group->id;
214
                    $groupMember->user_id = $group->user_id;
215
                    $groupMember->status = GroupMember::STATUS_ACCEPTED;
216
 
217
                    $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
218
                    $groupMemberMapper->insert($groupMember);
219
 
220
 
221
                    $this->logger->info('Se agrego el grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
222
 
223
                    $data = [
224
                        'success'   => true,
225
                        'data'   => 'LABEL_RECORD_ADDED'
226
                    ];
227
                } else {
228
                    $data = [
229
                        'success'   => false,
230
                        'data'      => $group->getError()
231
                    ];
232
 
233
                }
234
 
235
                return new JsonModel($data);
236
 
237
            } else {
238
                $messages = [];
239
                $form_messages = (array) $form->getMessages();
240
                foreach($form_messages  as $fieldname => $field_messages)
241
                {
242
 
243
                    $messages[$fieldname] = array_values($field_messages);
244
                }
245
 
246
                return new JsonModel([
247
                    'success'   => false,
248
                    'data'   => $messages
249
                ]);
250
            }
251
 
252
        } else {
253
            $data = [
254
                'success' => false,
255
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
256
            ];
257
 
258
            return new JsonModel($data);
259
        }
260
 
261
        return new JsonModel($data);
262
    }
263
 
264
    /**
265
     *
266
     * Borrar un perfil excepto el público
267
     * @return \Laminas\View\Model\JsonModel
268
     */
269
    public function deleteAction()
270
    {
271
        $currentUserPlugin = $this->plugin('currentUserPlugin');
272
        $currentUser = $currentUserPlugin->getUser();
273
 
274
        $request = $this->getRequest();
275
        $id = $this->params()->fromRoute('id');
276
 
277
        if(!$id) {
278
            $data = [
279
                'success'   => false,
280
                'data'   => 'ERROR_INVALID_PARAMETER'
281
            ];
282
 
283
            return new JsonModel($data);
284
        }
285
 
286
 
287
 
288
        $groupMapper =GroupMapper::getInstance($this->adapter);
289
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
290
        if(!$group) {
291
            $data = [
292
                'success'   => false,
293
                'data'   => 'ERROR_RECORD_NOT_FOUND'
294
            ];
295
 
296
            return new JsonModel($data);
297
        }
298
 
299
 
300
        if($currentUser->id != $group->user_id) {
301
            $response = [
302
                'success' => false,
303
                'data' => 'ERROR_UNAUTHORIZED'
304
            ];
305
 
306
            return new JsonModel($response);
307
        }
308
 
309
 
310
        if($request->isPost()) {
311
            $result = $groupMapper->delete($group);
312
            if($result) {
313
                $this->logger->info('Se borro el grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
314
 
315
                $data = [
316
                    'success' => true,
317
                    'data' => 'LABEL_RECORD_DELETED'
318
                ];
319
            } else {
320
 
321
                $data = [
322
                    'success'   => false,
323
                    'data'      => $groupMapper->getError()
324
                ];
325
 
326
                return new JsonModel($data);
327
            }
328
 
329
        } else {
330
            $data = [
331
                'success' => false,
332
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
333
            ];
334
 
335
            return new JsonModel($data);
336
        }
337
 
338
        return new JsonModel($data);
339
    }
340
 
341
    /**
342
     * Presenta el perfil con las opciónes de edición de cada sección
343
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
344
     */
345
    public function editAction()
346
    {
347
        $currentUserPlugin = $this->plugin('currentUserPlugin');
348
        $currentUser = $currentUserPlugin->getUser();
349
 
350
        $flashMessenger = $this->plugin('FlashMessenger');
351
 
352
 
353
        $request = $this->getRequest();
354
        $id = $this->params()->fromRoute('id');
355
 
356
 
357
        if(!$id) {
358
            $flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
359
            return $this->redirect()->toRoute('dashboard');
360
        }
361
 
362
 
363
 
364
        $groupMapper =GroupMapper::getInstance($this->adapter);
365
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
366
        if(!$group) {
367
            $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
368
            return $this->redirect()->toRoute('dashboard');
369
        }
370
 
371
 
372
        if($currentUser->id != $group->user_id) {
373
            $flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
374
            return $this->redirect()->toRoute('dashboard');
375
        }
376
 
377
 
378
        if($request->isGet()) {
379
 
380
 
381
 
382
                $accessibilities = [
383
                    Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
384
                    Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
385
                    Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
386
                ];
387
 
388
                $accessibility = $accessibilities[$group->accessibility];
389
 
390
                $privacies = [
391
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
392
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
393
                ];
394
 
395
                $privacy = $privacies[$group->privacy];
396
 
397
                $industryMapper = IndustryMapper::getInstance($this->adapter);
398
                $record = $industryMapper->fetchOne($group->industry_id);
399
 
400
                $industry = $record->name;
401
 
402
 
403
                $industries = [];
404
                $records = $industryMapper->fetchAllActive();
405
                foreach($records as $record)
406
                {
407
                    $industries[$record->uuid] = $record->name;
408
                }
409
 
410
 
411
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
412
                $record = $groupTypeMapper->fetchOne($group->type_id);
413
 
414
                $group_type = $record->name;
415
 
416
                $types = [];
417
                $records =  $groupTypeMapper->fetchAllActive();
418
                foreach($records as $record)
419
                {
420
                    $types[$record->uuid] = $record->name;
421
                }
422
 
423
 
424
 
425
                $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
426
                $total_members = $groupMemberMapper->fetchTotalByGroupId($group->id);
427
 
428
                $image_size_cover = $this->config['leaderslinked.image_sizes.group_cover_upload'];
429
                $image_size_profile = $this->config['leaderslinked.image_sizes.group_image_upload'];
430
 
333 www 431
                $storage = Storage::getInstance($this->config, $this->adapter);
1 efrain 432
 
433
 
434
                return new JsonModel([
435
                    'total_members'         => $total_members,
436
                    'accessibility'         => $accessibility ,
437
                    'privacy'               => $privacy,
438
                    'industry'              => $industry,
439
                    'group_id'              => $group->id,
440
                    'group_type'            => $group_type,
441
                    'group_uuid'            => $group->uuid,
442
                    'name'                  => trim($group->name),
283 www 443
                    'image'                 => $storage->getGroupImage($group),
444
                    'cover'                 => $storage->getGroupCover($group),
1 efrain 445
                    'overview'              => $group->description,
446
                    'website'               => $group->website,
447
                    'image_size_cover'      => $image_size_cover,
448
                    'image_size_profile'    => $image_size_profile,
449
 
450
 
451
                    'industries'            => $industries,
452
                    'types'                 => $types,
453
                    'privacies'             => $privacies,
454
                    'accessibilities'       => $accessibilities
455
                ]);
456
 
457
 
458
        } else {
459
            $data = [
460
                'success' => false,
461
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
462
            ];
463
 
464
            return new JsonModel($data);
465
        }
466
 
467
        return new JsonModel($data);
468
    }
469
 
470
 
471
    /**
472
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
473
     * @return \Laminas\View\Model\JsonModel
474
     */
475
    public function extendedAction()
476
    {
477
        $currentUserPlugin = $this->plugin('currentUserPlugin');
478
        $currentUser = $currentUserPlugin->getUser();
479
 
480
        $user_group_id = $this->params()->fromRoute('id');
481
        $groupMapper =GroupMapper::getInstance($this->adapter);
482
 
483
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
484
        if(!$group) {
485
            $response = [
486
                'success' => false,
487
                'data' => 'ERROR_INVALID_PARAMETER'
488
            ];
489
 
490
            return new JsonModel($response);
491
 
492
        }
493
 
494
 
495
        if($currentUser->id != $group->user_id) {
496
            $response = [
497
                'success' => false,
498
                'data' => 'ERROR_UNAUTHORIZED'
499
            ];
500
 
501
            return new JsonModel($response);
502
        }
503
 
504
 
505
 
506
        $request = $this->getRequest();
507
        if($request->isGet()) {
508
            $data = [
509
                'success' => true,
510
                'data' => $group->description,
511
            ];
512
 
513
            return new JsonModel($data);
514
 
515
 
516
        } else if($request->isPost()) {
517
 
518
 
519
            $form = new ExtendedForm();
520
            $dataPost = $request->getPost()->toArray();
521
 
522
            $form->setData($dataPost);
523
 
524
            if($form->isValid()) {
525
                $dataPost = (array) $form->getData();
526
 
527
                $hydrator = new ObjectPropertyHydrator();
528
                $hydrator->hydrate($dataPost, $group);
529
 
530
                $groupMapper->updateExtended($group);
531
 
532
                $this->logger->info('Se actualizo las descripción del grupo : '.  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
533
 
534
                return new JsonModel([
535
                    'success'   => true,
536
                    'data' => $group->description,
537
                ]);
538
 
539
            } else {
540
                $messages = [];
541
                $form_messages = (array) $form->getMessages();
542
                foreach($form_messages  as $fieldname => $field_messages)
543
                {
544
                    $messages[$fieldname] = array_values($field_messages);
545
                }
546
 
547
                return new JsonModel([
548
                    'success'   => false,
549
                    'data'   => $messages
550
                ]);
551
            }
552
        }
553
 
554
 
555
        $data = [
556
            'success' => false,
557
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
558
        ];
559
 
560
 
561
        return new JsonModel($data);
562
    }
563
 
564
 
565
 
566
    public function imageAction()
567
    {
568
        $currentUserPlugin = $this->plugin('currentUserPlugin');
569
        $currentUser = $currentUserPlugin->getUser();
570
 
571
        $user_group_id    = $this->params()->fromRoute('id');
572
        $operation          = $this->params()->fromRoute('operation');
573
 
574
        $groupMapper =GroupMapper::getInstance($this->adapter);
575
 
576
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
577
        if(!$group) {
578
            $response = [
579
                'success' => false,
580
                'data' => 'ERROR_INVALID_PARAMETER'
581
            ];
582
 
583
            return new JsonModel($response);
584
 
585
        }
586
 
587
 
588
        if($currentUser->id != $group->user_id) {
589
            $response = [
590
                'success' => false,
591
                'data' => 'ERROR_UNAUTHORIZED'
592
            ];
593
 
594
            return new JsonModel($response);
595
        }
596
 
346 www 597
        $storage = Storage::getInstance($this->config, $this->adapter);
1 efrain 598
 
599
        $request = $this->getRequest();
600
        if($request->isPost()) {
601
 
346 www 602
 
603
            $target_path = $storage->getPathGroup();
604
 
1 efrain 605
            if($operation == 'delete') {
606
                $this->logger->info('Se borro el image del grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
607
                if($group->image) {
346 www 608
 
609
                    if(!$storage->deleteFile($target_path, $group->uuid, $group->image)) {
1 efrain 610
                        return new JsonModel([
611
                            'success'   => false,
612
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
613
                        ]);
614
                    }
615
                }
616
 
617
 
618
                $group->image = '';
619
                if(!$groupMapper->updateImage($group)) {
620
                    return new JsonModel([
621
                        'success'   => false,
622
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
623
                    ]);
624
                }
625
 
626
            } else {
627
                $form = new ImageForm($this->config);
628
                $data 	= array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
629
 
630
                $form->setData($data);
631
 
632
                if($form->isValid()) {
633
 
346 www 634
                    list( $target_width, $target_height ) = explode('x', $this->config['leaderslinked.image_sizes.group_image_size']);
635
 
636
 
637
                    $storage->setFiles($request->getFiles()->toArray());
638
                    if(!$storage->setCurrentFilename('image')) {
1 efrain 639
                        return new JsonModel([
640
                            'success'   => false,
641
                            'data'   =>  'ERROR_UPLOAD_FILE'
642
                        ]);
346 www 643
                    }
644
 
645
 
646
 
647
 
648
 
649
                    $source_filename    = $storage->getTmpFilename();
650
                    $filename           = 'group-image-' . uniqid() . '.png';
651
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
652
 
653
                    if($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
1 efrain 654
 
346 www 655
                        if($group->image) {
656
                            $target_path = $storage->getPathGroup();
657
                            $storage->deleteFile($target_path, $group->uuid, $group->image);
658
                        }
1 efrain 659
 
346 www 660
 
661
 
662
 
1 efrain 663
 
346 www 664
                        $group->image = $filename;
665
                        if(!$groupMapper->updateImage($group)) {
1 efrain 666
                            return new JsonModel([
667
                                'success'   => false,
668
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
669
                            ]);
670
                        }
671
                    }
672
 
673
                    $this->logger->info('Se actualizo el image del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
674
 
675
                } else {
676
                    $messages = [];
677
                    $form_messages = (array) $form->getMessages();
678
                    foreach($form_messages  as $fieldname => $field_messages)
679
                    {
680
                        $messages[$fieldname] = array_values($field_messages);
681
                    }
682
 
683
                    return new JsonModel([
684
                        'success'   => false,
685
                        'data'   => $messages
686
                    ]);
687
                }
688
            }
283 www 689
 
690
 
346 www 691
 
1 efrain 692
            return new JsonModel([
693
                'success'   => true,
346 www 694
                'data'      => $storage->getGroupImage($group),
1 efrain 695
 
696
            ]);
697
        }
698
 
699
 
700
        $data = [
701
            'success' => false,
702
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
703
        ];
704
 
705
 
706
        return new JsonModel($data);
707
    }
708
 
709
 
710
    public function coverAction()
711
    {
712
        $currentUserPlugin = $this->plugin('currentUserPlugin');
713
        $currentUser = $currentUserPlugin->getUser();
714
 
715
        $user_group_id  = $this->params()->fromRoute('id');
716
        $operation      = $this->params()->fromRoute('operation');
717
 
718
        $groupMapper = GroupMapper::getInstance($this->adapter);
719
 
720
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
721
        if(!$group) {
722
            $response = [
723
                'success' => false,
724
                'data' => 'ERROR_INVALID_PARAMETER'
725
            ];
726
 
727
            return new JsonModel($response);
728
 
729
        }
730
 
731
 
732
        if($currentUser->id != $group->user_id) {
733
            $response = [
734
                'success' => false,
735
                'data' => 'ERROR_UNAUTHORIZED'
736
            ];
737
 
738
            return new JsonModel($response);
739
        }
740
 
741
 
742
 
743
        $request = $this->getRequest();
744
        if($request->isPost()) {
745
 
346 www 746
            $storage = Storage::getInstance($this->config, $this->adapter);
747
            $target_path = $storage->getPathGroup();
1 efrain 748
 
346 www 749
 
1 efrain 750
            if($operation == 'delete') {
751
                if($group->cover) {
346 www 752
                    if(!$storage->delete($target_path, $group->uuid, $group->cover)) {
1 efrain 753
                        return new JsonModel([
754
                            'success'   => false,
755
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
756
                        ]);
757
                    }
758
                }
759
 
760
                $this->logger->info('Se borro el cover del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
761
 
762
                $group->cover = '';
763
                if(!$groupMapper->updateCover($group)) {
764
                    return new JsonModel([
765
                        'success'   => false,
766
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
767
                    ]);
768
                }
769
 
770
            } else {
771
                $form = new CoverForm($this->config);
772
                $data 	= array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
773
 
774
                $form->setData($data);
775
 
776
                if($form->isValid()) {
777
 
346 www 778
                    $storage->setFiles($request->getFiles()->toArray());
779
                    if(!$storage->setCurrentFilename('cover')) {
780
 
1 efrain 781
                        return new JsonModel([
782
                            'success'   => false,
783
                            'data'   =>  'ERROR_UPLOAD_FILE'
784
                        ]);
785
 
786
 
787
                    }
788
 
346 www 789
                    list( $target_width, $target_height ) = explode('x', $this->config['leaderslinked.image_sizes.group_cover_size']);
790
 
791
 
792
 
793
 
794
 
795
                    $source_filename    = $storage->getTmpFilename();
796
                    $filename           = 'group-cover-' . uniqid() . '.png';
797
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
798
 
799
                    if($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
800
                        if($group->cover) {
801
                            if(!$storage->delete($target_path, $group->uuid, $group->cover)) {
802
                                return new JsonModel([
803
                                    'success'   => false,
804
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
805
                                ]);
806
                            }
807
                        }
808
 
809
                        $group->cover = $filename;
810
                        if(!$groupMapper->updateCover($group)) {
1 efrain 811
                            return new JsonModel([
812
                                'success'   => false,
813
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
814
                            ]);
815
                        }
346 www 816
 
817
                    } else {
1 efrain 818
                        return new JsonModel([
819
                            'success'   => false,
820
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
821
                        ]);
822
                    }
823
 
824
 
825
 
826
 
346 www 827
 
1 efrain 828
                    $this->logger->info('Se actualizo el cover del grupo :  ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
829
 
830
                } else {
831
                    $messages = [];
832
                    $form_messages = (array) $form->getMessages();
833
                    foreach($form_messages  as $fieldname => $field_messages)
834
                    {
835
                        $messages[$fieldname] = array_values($field_messages);
836
                    }
837
 
838
                    return new JsonModel([
839
                        'success'   => false,
840
                        'data'   => $messages
841
                    ]);
842
                }
843
            }
283 www 844
 
333 www 845
            $storage = Storage::getInstance($this->config, $this->adapter);
283 www 846
 
1 efrain 847
            return new JsonModel([
848
                'success'   => true,
283 www 849
                'data' => $storage->getGroupCover($group),
1 efrain 850
 
851
            ]);
852
        }
853
 
854
 
855
        $data = [
856
            'success' => false,
857
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
858
        ];
859
 
860
 
861
        return new JsonModel($data);
862
    }
863
 
864
    public function industryAction()
865
    {
866
 
867
        $currentUserPlugin = $this->plugin('currentUserPlugin');
868
        $currentUser = $currentUserPlugin->getUser();
869
 
870
        $id = $this->params()->fromRoute('id');
871
        if(!$id) {
872
            $response = [
873
                'success' => false,
874
                'data' => 'ERROR_INVALID_PARAMETER'
875
            ];
876
 
877
            return new JsonModel($response);
878
        }
879
 
880
        $groupMapper = GroupMapper::getInstance($this->adapter);
881
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
882
        if(!$group) {
883
            $response = [
884
                'success' => false,
885
                'data' => 'ERROR_RECORD_NOT_FOUND'
886
            ];
887
 
888
            return new JsonModel($response);
889
        }
890
 
891
 
892
        if($currentUser->id != $group->user_id) {
893
            $response = [
894
                'success' => false,
895
                'data' => 'ERROR_UNAUTHORIZED'
896
            ];
897
 
898
            return new JsonModel($response);
899
        }
900
 
901
 
902
 
903
        $request = $this->getRequest();
904
        if($request->isGet()) {
905
            $industryMapper = IndustryMapper::getInstance($this->adapter);
906
            $industry = $industryMapper->fetchOne($group->industry_id);
907
 
908
 
909
 
910
            $data = [
911
                'success' => true,
912
                'data' => $industry->uuid,
913
            ];
914
 
915
            return new JsonModel($data);
916
 
917
 
918
        } else if($request->isPost()) {
919
 
920
 
921
            $form = new IndustryForm($this->adapter);
922
            $dataPost = $request->getPost()->toArray();
923
 
924
            $form->setData($dataPost);
925
 
926
            if($form->isValid()) {
927
                $dataPost = (array) $form->getData();
928
 
929
                $industryMapper = IndustryMapper::getInstance($this->adapter);
930
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
931
 
932
                $group->industry_id = $industry->id;
933
                $groupMapper->updateIndustry($group);
934
 
935
                $this->logger->info('Se actualizo la industria del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
936
 
937
 
938
 
939
                return new JsonModel([
940
                    'success'   => true,
941
                    'data' =>  $industry->name,
942
 
943
                ]);
944
 
945
            } else {
946
                $messages = [];
947
                $form_messages = (array) $form->getMessages();
948
                foreach($form_messages  as $fieldname => $field_messages)
949
                {
950
                    $messages[$fieldname] = array_values($field_messages);
951
                }
952
 
953
                return new JsonModel([
954
                    'success'   => false,
955
                    'data'   => $messages
956
                ]);
957
            }
958
        }
959
 
960
 
961
        $data = [
962
            'success' => false,
963
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
964
        ];
965
 
966
 
967
        return new JsonModel($data);
968
    }
969
 
970
    public function websiteAction()
971
    {
972
        $currentUserPlugin = $this->plugin('currentUserPlugin');
973
        $currentUser = $currentUserPlugin->getUser();
974
 
975
        $id = $this->params()->fromRoute('id');
976
        if(!$id) {
977
            $response = [
978
                'success' => false,
979
                'data' => 'ERROR_INVALID_PARAMETER'
980
            ];
981
 
982
            return new JsonModel($response);
983
        }
984
 
985
        $groupMapper = GroupMapper::getInstance($this->adapter);
986
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
987
        if(!$group) {
988
            $response = [
989
                'success' => false,
990
                'data' => 'ERROR_RECORD_NOT_FOUND'
991
            ];
992
 
993
            return new JsonModel($response);
994
        }
995
 
996
 
997
        if($currentUser->id != $group->user_id) {
998
            $response = [
999
                'success' => false,
1000
                'data' => 'ERROR_UNAUTHORIZED'
1001
            ];
1002
 
1003
            return new JsonModel($response);
1004
        }
1005
 
1006
 
1007
        $request = $this->getRequest();
1008
        if($request->isGet()) {
1009
            $data = [
1010
                'success' => true,
1011
                'data' => $group->website,
1012
            ];
1013
 
1014
            return new JsonModel($data);
1015
 
1016
 
1017
        } else if($request->isPost()) {
1018
 
1019
 
1020
            $form = new WebsiteForm();
1021
            $dataPost = $request->getPost()->toArray();
1022
 
1023
            $form->setData($dataPost);
1024
 
1025
            if($form->isValid()) {
1026
                $dataPost = (array) $form->getData();
1027
 
1028
                $hydrator = new ObjectPropertyHydrator();
1029
                $hydrator->hydrate($dataPost, $group);
1030
 
1031
                $groupMapper->updateWebsite($group);
1032
 
1033
                $this->logger->info('Se actualizo el website de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1034
 
1035
                return new JsonModel([
1036
                    'success'   => true,
1037
                    'data' => $group->website,
1038
                ]);
1039
 
1040
            } else {
1041
                $messages = [];
1042
                $form_messages = (array) $form->getMessages();
1043
                foreach($form_messages  as $fieldname => $field_messages)
1044
                {
1045
                    $messages[$fieldname] = array_values($field_messages);
1046
                }
1047
 
1048
                return new JsonModel([
1049
                    'success'   => false,
1050
                    'data'   => $messages
1051
                ]);
1052
            }
1053
        }
1054
 
1055
 
1056
        $data = [
1057
            'success' => false,
1058
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1059
        ];
1060
 
1061
 
1062
        return new JsonModel($data);
1063
    }
1064
 
1065
    public function accessibilityAction()
1066
    {
1067
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1068
        $currentUser = $currentUserPlugin->getUser();
1069
 
1070
        $id = $this->params()->fromRoute('id');
1071
        if(!$id) {
1072
            $response = [
1073
                'success' => false,
1074
                'data' => 'ERROR_INVALID_PARAMETER'
1075
            ];
1076
 
1077
            return new JsonModel($response);
1078
        }
1079
 
1080
        $groupMapper = GroupMapper::getInstance($this->adapter);
1081
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1082
        if(!$group) {
1083
            $response = [
1084
                'success' => false,
1085
                'data' => 'ERROR_RECORD_NOT_FOUND'
1086
            ];
1087
 
1088
            return new JsonModel($response);
1089
        }
1090
 
1091
 
1092
        if($currentUser->id != $group->user_id) {
1093
            $response = [
1094
                'success' => false,
1095
                'data' => 'ERROR_UNAUTHORIZED'
1096
            ];
1097
 
1098
            return new JsonModel($response);
1099
        }
1100
 
1101
 
1102
        $request = $this->getRequest();
1103
        if($request->isGet()) {
1104
            $data = [
1105
                'success' => true,
1106
                'data' => $group->accessibility,
1107
            ];
1108
 
1109
            return new JsonModel($data);
1110
 
1111
 
1112
        } else if($request->isPost()) {
1113
 
1114
 
1115
            $form = new AccessibilityForm();
1116
            $dataPost = $request->getPost()->toArray();
1117
 
1118
            $form->setData($dataPost);
1119
 
1120
            if($form->isValid()) {
1121
                $dataPost = (array) $form->getData();
1122
 
1123
                $hydrator = new ObjectPropertyHydrator();
1124
                $hydrator->hydrate($dataPost, $group);
1125
 
1126
                $groupMapper->updateAccessibility($group);
1127
 
1128
                 $values = [
1129
                    Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
1130
                    Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
1131
                    Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
1132
                ];
1133
 
1134
                $this->logger->info('Se actualizo el accesibilidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1135
 
1136
                return new JsonModel([
1137
                    'success'   => true,
1138
                    'data' => $values[$group->accessibility]
1139
                 ]);
1140
 
1141
            } else {
1142
                $messages = [];
1143
                $form_messages = (array) $form->getMessages();
1144
                foreach($form_messages  as $fieldname => $field_messages)
1145
                {
1146
                    $messages[$fieldname] = array_values($field_messages);
1147
                }
1148
 
1149
                return new JsonModel([
1150
                    'success'   => false,
1151
                    'data'   => $messages
1152
                ]);
1153
            }
1154
        }
1155
 
1156
 
1157
        $data = [
1158
            'success' => false,
1159
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1160
        ];
1161
 
1162
 
1163
        return new JsonModel($data);
1164
    }
1165
 
1166
    public function privacyAction()
1167
    {
1168
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1169
        $currentUser = $currentUserPlugin->getUser();
1170
 
1171
        $id = $this->params()->fromRoute('id');
1172
        if(!$id) {
1173
            $response = [
1174
                'success' => false,
1175
                'data' => 'ERROR_INVALID_PARAMETER'
1176
            ];
1177
 
1178
            return new JsonModel($response);
1179
        }
1180
 
1181
        $groupMapper = GroupMapper::getInstance($this->adapter);
1182
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1183
        if(!$group) {
1184
            $response = [
1185
                'success' => false,
1186
                'data' => 'ERROR_RECORD_NOT_FOUND'
1187
            ];
1188
 
1189
            return new JsonModel($response);
1190
        }
1191
 
1192
        if($currentUser->id != $group->user_id) {
1193
            $response = [
1194
                'success' => false,
1195
                'data' => 'ERROR_UNAUTHORIZED'
1196
            ];
1197
 
1198
            return new JsonModel($response);
1199
        }
1200
 
1201
 
1202
        $request = $this->getRequest();
1203
        if($request->isGet()) {
1204
            $data = [
1205
                'success' => true,
1206
                'data' => $group->privacy,
1207
            ];
1208
 
1209
            return new JsonModel($data);
1210
 
1211
 
1212
        } else if($request->isPost()) {
1213
 
1214
 
1215
            $form = new PrivacyForm();
1216
            $dataPost = $request->getPost()->toArray();
1217
 
1218
            $form->setData($dataPost);
1219
 
1220
            if($form->isValid()) {
1221
                $dataPost = (array) $form->getData();
1222
 
1223
                $hydrator = new ObjectPropertyHydrator();
1224
                $hydrator->hydrate($dataPost, $group);
1225
 
1226
                $groupMapper->updatePrivacy($group);
1227
 
1228
                $values = [
1229
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
1230
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
1231
                ];
1232
 
1233
 
1234
                $this->logger->info('Se actualizo la privacidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1235
 
1236
                return new JsonModel([
1237
                    'success'   => true,
1238
                    'data' => $values[$group->privacy]
1239
                ]);
1240
 
1241
            } else {
1242
                $messages = [];
1243
                $form_messages = (array) $form->getMessages();
1244
                foreach($form_messages  as $fieldname => $field_messages)
1245
                {
1246
                    $messages[$fieldname] = array_values($field_messages);
1247
                }
1248
 
1249
                return new JsonModel([
1250
                    'success'   => false,
1251
                    'data'   => $messages
1252
                ]);
1253
            }
1254
        }
1255
 
1256
 
1257
        $data = [
1258
            'success' => false,
1259
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1260
        ];
1261
 
1262
 
1263
        return new JsonModel($data);
1264
    }
1265
 
1266
 
1267
 
1268
    public function typeAction()
1269
    {
1270
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1271
        $currentUser = $currentUserPlugin->getUser();
1272
 
1273
        $id = $this->params()->fromRoute('id');
1274
        if(!$id) {
1275
            $response = [
1276
                'success' => false,
1277
                'data' => 'ERROR_INVALID_PARAMETER'
1278
            ];
1279
 
1280
            return new JsonModel($response);
1281
        }
1282
 
1283
        $groupMapper = GroupMapper::getInstance($this->adapter);
1284
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1285
        if(!$group) {
1286
            $response = [
1287
                'success' => false,
1288
                'data' => 'ERROR_RECORD_NOT_FOUND'
1289
            ];
1290
 
1291
            return new JsonModel($response);
1292
        }
1293
 
1294
 
1295
        if($currentUser->id != $group->user_id) {
1296
            $response = [
1297
                'success' => false,
1298
                'data' => 'ERROR_UNAUTHORIZED'
1299
            ];
1300
 
1301
            return new JsonModel($response);
1302
        }
1303
 
1304
 
1305
 
1306
        $request = $this->getRequest();
1307
        if($request->isGet()) {
1308
 
1309
            $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1310
            $groupType = $groupTypeMapper->fetchOne($group->type_id);
1311
 
1312
            $data = [
1313
                'success' => true,
1314
                'data' => $groupType->uuid,
1315
            ];
1316
 
1317
            return new JsonModel($data);
1318
 
1319
 
1320
        } else if($request->isPost()) {
1321
 
1322
 
1323
            $form = new GroupTypeForm($this->adapter);
1324
            $dataPost = $request->getPost()->toArray();
1325
 
1326
            $form->setData($dataPost);
1327
 
1328
            if($form->isValid()) {
1329
                $dataPost = (array) $form->getData();
1330
 
1331
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1332
                $groupType = $groupTypeMapper->fetchOneByUuid($dataPost['type_id']);
1333
 
1334
                $group->type_id = $groupType->id;
1335
                $groupMapper->updateGroupType($group);
1336
 
1337
                $this->logger->info('Se actualizo el tipo del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1338
 
1339
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1340
                $groupType = $groupTypeMapper->fetchOne($group->type_id);
1341
 
1342
                return new JsonModel([
1343
                    'success'   => true,
1344
                    'data' =>  $groupType->name,
1345
 
1346
                ]);
1347
 
1348
            } else {
1349
                $messages = [];
1350
                $form_messages = (array) $form->getMessages();
1351
                foreach($form_messages  as $fieldname => $field_messages)
1352
                {
1353
                    $messages[$fieldname] = array_values($field_messages);
1354
                }
1355
 
1356
                return new JsonModel([
1357
                    'success'   => false,
1358
                    'data'   => $messages
1359
                ]);
1360
            }
1361
        }
1362
 
1363
 
1364
        $data = [
1365
            'success' => false,
1366
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1367
        ];
1368
 
1369
 
1370
        return new JsonModel($data);
1371
    }
1372
 
1373
 
1374
 
1375
 
1376
 
1377
 
1378
 
1379
}