Proyectos de Subversion LeadersLinked - Services

Rev

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