Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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