Proyectos de Subversion LeadersLinked - Services

Rev

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