Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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