Proyectos de Subversion LeadersLinked - Services

Rev

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