Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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