Proyectos de Subversion LeadersLinked - Services

Rev

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

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