Proyectos de Subversion LeadersLinked - Services

Rev

Rev 548 | Rev 665 | 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
                'industries'            => $industries,
432
                'types'                 => $types,
433
                'privacies'             => $privacies,
434
                'accessibilities'       => $accessibilities,
577 ariadna 435
                /* 'link_members'          => $this->url()->fromRoute('group/my-groups/members', ['id' => $record['uuid']]),
436
                'link_extended'         => $this->url()->fromRoute('group/my-groups/extended', ['id' => $recordUuid]),
437
                'link_image'            => $this->url()->fromRoute('group/my-groups/image', ['id' => $recordUuid]),
438
                'link_cover'            => $this->url()->fromRoute('group/my-groups/cover', ['id' => $recordUuid]),
439
                'link_privacy'          => $this->url()->fromRoute('group/my-groups/privacy', ['id' => $recordUuid]),
440
                'link_website'          => $this->url()->fromRoute('group/my-groups/website', ['id' => $recordUuid]),
441
                'link_industry'         => $this->url()->fromRoute('group/my-groups/industry', ['id' => $recordUuid]),
442
                'link_accessibility'    => $this->url()->fromRoute('group/my-groups/accessibility', ['id' => $recordUuid]),
443
                'link_type'             => $this->url()->fromRoute('group/my-groups/type', ['id' => $recordUuid]),
444
                'link_status'           => $this->url()->fromRoute('group/my-groups/status', ['id' => $recordUuid]), */
545 ariadna 445
            ]);
1 efrain 446
        } else {
447
            $data = [
448
                'success' => false,
449
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
450
            ];
545 ariadna 451
 
1 efrain 452
            return new JsonModel($data);
453
        }
545 ariadna 454
 
1 efrain 455
        return new JsonModel($data);
456
    }
545 ariadna 457
 
458
 
1 efrain 459
    /**
460
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
461
     * @return \Laminas\View\Model\JsonModel
462
     */
463
    public function extendedAction()
464
    {
465
        $currentUserPlugin = $this->plugin('currentUserPlugin');
466
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 467
 
1 efrain 468
        $user_group_id = $this->params()->fromRoute('id');
545 ariadna 469
        $groupMapper = GroupMapper::getInstance($this->adapter);
470
 
1 efrain 471
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
545 ariadna 472
        if (!$group) {
1 efrain 473
            $response = [
474
                'success' => false,
475
                'data' => 'ERROR_INVALID_PARAMETER'
476
            ];
545 ariadna 477
 
1 efrain 478
            return new JsonModel($response);
479
        }
480
 
545 ariadna 481
 
482
        if ($currentUser->id != $group->user_id) {
1 efrain 483
            $response = [
484
                'success' => false,
485
                'data' => 'ERROR_UNAUTHORIZED'
486
            ];
545 ariadna 487
 
1 efrain 488
            return new JsonModel($response);
489
        }
545 ariadna 490
 
491
 
492
 
1 efrain 493
        $request = $this->getRequest();
545 ariadna 494
        if ($request->isGet()) {
1 efrain 495
            $data = [
496
                'success' => true,
497
                'data' => $group->description,
498
            ];
545 ariadna 499
 
1 efrain 500
            return new JsonModel($data);
545 ariadna 501
        } else if ($request->isPost()) {
502
 
503
 
1 efrain 504
            $form = new ExtendedForm();
505
            $dataPost = $request->getPost()->toArray();
545 ariadna 506
 
1 efrain 507
            $form->setData($dataPost);
545 ariadna 508
 
509
            if ($form->isValid()) {
1 efrain 510
                $dataPost = (array) $form->getData();
545 ariadna 511
 
1 efrain 512
                $hydrator = new ObjectPropertyHydrator();
513
                $hydrator->hydrate($dataPost, $group);
545 ariadna 514
 
1 efrain 515
                $groupMapper->updateExtended($group);
545 ariadna 516
 
517
                $this->logger->info('Se actualizo las descripción del grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
518
 
1 efrain 519
                return new JsonModel([
520
                    'success'   => true,
521
                    'data' => $group->description,
522
                ]);
523
            } else {
524
                $messages = [];
525
                $form_messages = (array) $form->getMessages();
545 ariadna 526
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 527
                    $messages[$fieldname] = array_values($field_messages);
528
                }
545 ariadna 529
 
1 efrain 530
                return new JsonModel([
531
                    'success'   => false,
532
                    'data'   => $messages
533
                ]);
534
            }
535
        }
545 ariadna 536
 
537
 
1 efrain 538
        $data = [
539
            'success' => false,
540
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
541
        ];
545 ariadna 542
 
543
 
1 efrain 544
        return new JsonModel($data);
545
    }
546
 
545 ariadna 547
 
548
 
1 efrain 549
    public function imageAction()
550
    {
551
        $currentUserPlugin = $this->plugin('currentUserPlugin');
552
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 553
 
1 efrain 554
        $user_group_id    = $this->params()->fromRoute('id');
545 ariadna 555
 
556
        $groupMapper = GroupMapper::getInstance($this->adapter);
557
 
1 efrain 558
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
545 ariadna 559
        if (!$group) {
1 efrain 560
            $response = [
561
                'success' => false,
562
                'data' => 'ERROR_INVALID_PARAMETER'
563
            ];
545 ariadna 564
 
1 efrain 565
            return new JsonModel($response);
566
        }
545 ariadna 567
 
568
 
569
        if ($currentUser->id != $group->user_id) {
1 efrain 570
            $response = [
571
                'success' => false,
572
                'data' => 'ERROR_UNAUTHORIZED'
573
            ];
545 ariadna 574
 
1 efrain 575
            return new JsonModel($response);
576
        }
545 ariadna 577
 
346 www 578
        $storage = Storage::getInstance($this->config, $this->adapter);
545 ariadna 579
 
1 efrain 580
        $request = $this->getRequest();
545 ariadna 581
        if ($request->isPost()) {
546 ariadna 582
            $operation          = $this->params()->fromRoute('operation');
346 www 583
            $target_path = $storage->getPathGroup();
545 ariadna 584
 
585
            if ($operation == 'delete') {
1 efrain 586
                $this->logger->info('Se borro el image del grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
545 ariadna 587
                if ($group->image) {
588
 
589
                    if (!$storage->deleteFile($target_path, $group->uuid, $group->image)) {
1 efrain 590
                        return new JsonModel([
591
                            'success'   => false,
592
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
593
                        ]);
594
                    }
595
                }
545 ariadna 596
 
597
 
1 efrain 598
                $group->image = '';
545 ariadna 599
                if (!$groupMapper->updateImage($group)) {
1 efrain 600
                    return new JsonModel([
601
                        'success'   => false,
602
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
603
                    ]);
604
                }
605
            } else {
606
                $form = new ImageForm($this->config);
545 ariadna 607
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
608
 
1 efrain 609
                $form->setData($data);
545 ariadna 610
 
611
                if ($form->isValid()) {
612
 
613
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.group_image_size']);
614
 
615
 
346 www 616
                    $storage->setFiles($request->getFiles()->toArray());
545 ariadna 617
                    if (!$storage->setCurrentFilename('image')) {
1 efrain 618
                        return new JsonModel([
619
                            'success'   => false,
620
                            'data'   =>  'ERROR_UPLOAD_FILE'
621
                        ]);
346 www 622
                    }
623
 
545 ariadna 624
 
625
 
626
 
627
 
346 www 628
                    $source_filename    = $storage->getTmpFilename();
629
                    $filename           = 'group-image-' . uniqid() . '.png';
630
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
545 ariadna 631
 
632
                    if ($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
633
 
634
                        if ($group->image) {
346 www 635
                            $target_path = $storage->getPathGroup();
636
                            $storage->deleteFile($target_path, $group->uuid, $group->image);
637
                        }
545 ariadna 638
 
639
 
640
 
641
 
642
 
346 www 643
                        $group->image = $filename;
545 ariadna 644
                        if (!$groupMapper->updateImage($group)) {
1 efrain 645
                            return new JsonModel([
646
                                'success'   => false,
647
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
648
                            ]);
649
                        }
650
                    }
651
 
652
                    $this->logger->info('Se actualizo el image del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
653
                } else {
654
                    $messages = [];
655
                    $form_messages = (array) $form->getMessages();
545 ariadna 656
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 657
                        $messages[$fieldname] = array_values($field_messages);
658
                    }
545 ariadna 659
 
1 efrain 660
                    return new JsonModel([
661
                        'success'   => false,
662
                        'data'   => $messages
663
                    ]);
664
                }
665
            }
545 ariadna 666
 
667
 
668
 
1 efrain 669
            return new JsonModel([
670
                'success'   => true,
346 www 671
                'data'      => $storage->getGroupImage($group),
545 ariadna 672
 
1 efrain 673
            ]);
674
        }
545 ariadna 675
 
676
 
1 efrain 677
        $data = [
678
            'success' => false,
679
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
680
        ];
545 ariadna 681
 
682
 
1 efrain 683
        return new JsonModel($data);
684
    }
685
 
545 ariadna 686
 
1 efrain 687
    public function coverAction()
688
    {
689
        $currentUserPlugin = $this->plugin('currentUserPlugin');
690
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 691
 
1 efrain 692
        $user_group_id  = $this->params()->fromRoute('id');
545 ariadna 693
 
1 efrain 694
        $groupMapper = GroupMapper::getInstance($this->adapter);
545 ariadna 695
 
1 efrain 696
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
545 ariadna 697
        if (!$group) {
1 efrain 698
            $response = [
699
                'success' => false,
700
                'data' => 'ERROR_INVALID_PARAMETER'
701
            ];
545 ariadna 702
 
1 efrain 703
            return new JsonModel($response);
704
        }
705
 
545 ariadna 706
 
707
        if ($currentUser->id != $group->user_id) {
1 efrain 708
            $response = [
709
                'success' => false,
710
                'data' => 'ERROR_UNAUTHORIZED'
711
            ];
545 ariadna 712
 
1 efrain 713
            return new JsonModel($response);
714
        }
545 ariadna 715
 
716
 
717
 
1 efrain 718
        $request = $this->getRequest();
545 ariadna 719
        if ($request->isPost()) {
547 ariadna 720
            $operation      = $this->params()->fromRoute('operation');
545 ariadna 721
 
346 www 722
            $storage = Storage::getInstance($this->config, $this->adapter);
723
            $target_path = $storage->getPathGroup();
545 ariadna 724
 
725
 
726
            if ($operation == 'delete') {
727
                if ($group->cover) {
728
                    if (!$storage->delete($target_path, $group->uuid, $group->cover)) {
1 efrain 729
                        return new JsonModel([
730
                            'success'   => false,
731
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
732
                        ]);
733
                    }
734
                }
545 ariadna 735
 
1 efrain 736
                $this->logger->info('Se borro el cover del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
545 ariadna 737
 
1 efrain 738
                $group->cover = '';
545 ariadna 739
                if (!$groupMapper->updateCover($group)) {
1 efrain 740
                    return new JsonModel([
741
                        'success'   => false,
742
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
743
                    ]);
744
                }
745
            } else {
746
                $form = new CoverForm($this->config);
545 ariadna 747
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
748
 
1 efrain 749
                $form->setData($data);
545 ariadna 750
 
751
                if ($form->isValid()) {
752
 
346 www 753
                    $storage->setFiles($request->getFiles()->toArray());
545 ariadna 754
                    if (!$storage->setCurrentFilename('cover')) {
755
 
1 efrain 756
                        return new JsonModel([
757
                            'success'   => false,
758
                            'data'   =>  'ERROR_UPLOAD_FILE'
759
                        ]);
760
                    }
346 www 761
 
545 ariadna 762
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.group_cover_size']);
763
 
764
 
765
 
766
 
767
 
346 www 768
                    $source_filename    = $storage->getTmpFilename();
769
                    $filename           = 'group-cover-' . uniqid() . '.png';
770
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
545 ariadna 771
 
772
                    if ($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
773
                        if ($group->cover) {
774
                            if (!$storage->delete($target_path, $group->uuid, $group->cover)) {
346 www 775
                                return new JsonModel([
776
                                    'success'   => false,
777
                                    'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
778
                                ]);
779
                            }
780
                        }
545 ariadna 781
 
346 www 782
                        $group->cover = $filename;
545 ariadna 783
                        if (!$groupMapper->updateCover($group)) {
1 efrain 784
                            return new JsonModel([
785
                                'success'   => false,
786
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
787
                            ]);
788
                        }
346 www 789
                    } else {
1 efrain 790
                        return new JsonModel([
791
                            'success'   => false,
792
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
793
                        ]);
794
                    }
545 ariadna 795
 
796
 
797
 
798
 
799
 
1 efrain 800
                    $this->logger->info('Se actualizo el cover del grupo :  ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
801
                } else {
802
                    $messages = [];
803
                    $form_messages = (array) $form->getMessages();
545 ariadna 804
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 805
                        $messages[$fieldname] = array_values($field_messages);
806
                    }
545 ariadna 807
 
1 efrain 808
                    return new JsonModel([
809
                        'success'   => false,
810
                        'data'   => $messages
811
                    ]);
812
                }
813
            }
545 ariadna 814
 
333 www 815
            $storage = Storage::getInstance($this->config, $this->adapter);
545 ariadna 816
 
1 efrain 817
            return new JsonModel([
818
                'success'   => true,
283 www 819
                'data' => $storage->getGroupCover($group),
545 ariadna 820
 
1 efrain 821
            ]);
822
        }
545 ariadna 823
 
824
 
1 efrain 825
        $data = [
826
            'success' => false,
827
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
828
        ];
545 ariadna 829
 
830
 
1 efrain 831
        return new JsonModel($data);
832
    }
545 ariadna 833
 
1 efrain 834
    public function industryAction()
835
    {
545 ariadna 836
 
1 efrain 837
        $currentUserPlugin = $this->plugin('currentUserPlugin');
838
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 839
 
1 efrain 840
        $id = $this->params()->fromRoute('id');
545 ariadna 841
        if (!$id) {
1 efrain 842
            $response = [
843
                'success' => false,
844
                'data' => 'ERROR_INVALID_PARAMETER'
845
            ];
545 ariadna 846
 
1 efrain 847
            return new JsonModel($response);
848
        }
545 ariadna 849
 
1 efrain 850
        $groupMapper = GroupMapper::getInstance($this->adapter);
851
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
545 ariadna 852
        if (!$group) {
1 efrain 853
            $response = [
854
                'success' => false,
855
                'data' => 'ERROR_RECORD_NOT_FOUND'
856
            ];
545 ariadna 857
 
1 efrain 858
            return new JsonModel($response);
859
        }
860
 
545 ariadna 861
 
862
        if ($currentUser->id != $group->user_id) {
1 efrain 863
            $response = [
864
                'success' => false,
865
                'data' => 'ERROR_UNAUTHORIZED'
866
            ];
545 ariadna 867
 
1 efrain 868
            return new JsonModel($response);
869
        }
545 ariadna 870
 
871
 
872
 
1 efrain 873
        $request = $this->getRequest();
545 ariadna 874
        if ($request->isGet()) {
1 efrain 875
            $industryMapper = IndustryMapper::getInstance($this->adapter);
876
            $industry = $industryMapper->fetchOne($group->industry_id);
545 ariadna 877
 
878
 
879
 
1 efrain 880
            $data = [
881
                'success' => true,
882
                'data' => $industry->uuid,
883
            ];
545 ariadna 884
 
1 efrain 885
            return new JsonModel($data);
545 ariadna 886
        } else if ($request->isPost()) {
887
 
888
 
1 efrain 889
            $form = new IndustryForm($this->adapter);
890
            $dataPost = $request->getPost()->toArray();
545 ariadna 891
 
1 efrain 892
            $form->setData($dataPost);
545 ariadna 893
 
894
            if ($form->isValid()) {
1 efrain 895
                $dataPost = (array) $form->getData();
896
 
897
                $industryMapper = IndustryMapper::getInstance($this->adapter);
898
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
545 ariadna 899
 
1 efrain 900
                $group->industry_id = $industry->id;
901
                $groupMapper->updateIndustry($group);
545 ariadna 902
 
1 efrain 903
                $this->logger->info('Se actualizo la industria del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
904
 
545 ariadna 905
 
906
 
1 efrain 907
                return new JsonModel([
908
                    'success'   => true,
909
                    'data' =>  $industry->name,
545 ariadna 910
 
1 efrain 911
                ]);
912
            } else {
913
                $messages = [];
914
                $form_messages = (array) $form->getMessages();
545 ariadna 915
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 916
                    $messages[$fieldname] = array_values($field_messages);
917
                }
545 ariadna 918
 
1 efrain 919
                return new JsonModel([
920
                    'success'   => false,
921
                    'data'   => $messages
922
                ]);
923
            }
924
        }
545 ariadna 925
 
926
 
1 efrain 927
        $data = [
928
            'success' => false,
929
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
930
        ];
545 ariadna 931
 
932
 
1 efrain 933
        return new JsonModel($data);
934
    }
545 ariadna 935
 
1 efrain 936
    public function websiteAction()
937
    {
938
        $currentUserPlugin = $this->plugin('currentUserPlugin');
939
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 940
 
1 efrain 941
        $id = $this->params()->fromRoute('id');
545 ariadna 942
        if (!$id) {
1 efrain 943
            $response = [
944
                'success' => false,
945
                'data' => 'ERROR_INVALID_PARAMETER'
946
            ];
545 ariadna 947
 
1 efrain 948
            return new JsonModel($response);
949
        }
545 ariadna 950
 
1 efrain 951
        $groupMapper = GroupMapper::getInstance($this->adapter);
952
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
545 ariadna 953
        if (!$group) {
1 efrain 954
            $response = [
955
                'success' => false,
956
                'data' => 'ERROR_RECORD_NOT_FOUND'
957
            ];
545 ariadna 958
 
1 efrain 959
            return new JsonModel($response);
960
        }
961
 
545 ariadna 962
 
963
        if ($currentUser->id != $group->user_id) {
1 efrain 964
            $response = [
965
                'success' => false,
966
                'data' => 'ERROR_UNAUTHORIZED'
967
            ];
545 ariadna 968
 
1 efrain 969
            return new JsonModel($response);
970
        }
545 ariadna 971
 
972
 
1 efrain 973
        $request = $this->getRequest();
545 ariadna 974
        if ($request->isGet()) {
1 efrain 975
            $data = [
976
                'success' => true,
977
                'data' => $group->website,
978
            ];
545 ariadna 979
 
1 efrain 980
            return new JsonModel($data);
545 ariadna 981
        } else if ($request->isPost()) {
982
 
983
 
1 efrain 984
            $form = new WebsiteForm();
985
            $dataPost = $request->getPost()->toArray();
545 ariadna 986
 
1 efrain 987
            $form->setData($dataPost);
545 ariadna 988
 
989
            if ($form->isValid()) {
1 efrain 990
                $dataPost = (array) $form->getData();
545 ariadna 991
 
1 efrain 992
                $hydrator = new ObjectPropertyHydrator();
993
                $hydrator->hydrate($dataPost, $group);
545 ariadna 994
 
1 efrain 995
                $groupMapper->updateWebsite($group);
545 ariadna 996
 
1 efrain 997
                $this->logger->info('Se actualizo el website de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
545 ariadna 998
 
1 efrain 999
                return new JsonModel([
1000
                    'success'   => true,
1001
                    'data' => $group->website,
1002
                ]);
1003
            } else {
1004
                $messages = [];
1005
                $form_messages = (array) $form->getMessages();
545 ariadna 1006
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 1007
                    $messages[$fieldname] = array_values($field_messages);
1008
                }
545 ariadna 1009
 
1 efrain 1010
                return new JsonModel([
1011
                    'success'   => false,
1012
                    'data'   => $messages
1013
                ]);
1014
            }
1015
        }
545 ariadna 1016
 
1017
 
1 efrain 1018
        $data = [
1019
            'success' => false,
1020
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1021
        ];
545 ariadna 1022
 
1023
 
1 efrain 1024
        return new JsonModel($data);
1025
    }
545 ariadna 1026
 
1 efrain 1027
    public function accessibilityAction()
1028
    {
1029
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1030
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 1031
 
1 efrain 1032
        $id = $this->params()->fromRoute('id');
545 ariadna 1033
        if (!$id) {
1 efrain 1034
            $response = [
1035
                'success' => false,
1036
                'data' => 'ERROR_INVALID_PARAMETER'
1037
            ];
545 ariadna 1038
 
1 efrain 1039
            return new JsonModel($response);
1040
        }
545 ariadna 1041
 
1 efrain 1042
        $groupMapper = GroupMapper::getInstance($this->adapter);
1043
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
545 ariadna 1044
        if (!$group) {
1 efrain 1045
            $response = [
1046
                'success' => false,
1047
                'data' => 'ERROR_RECORD_NOT_FOUND'
1048
            ];
545 ariadna 1049
 
1 efrain 1050
            return new JsonModel($response);
1051
        }
1052
 
545 ariadna 1053
 
1054
        if ($currentUser->id != $group->user_id) {
1 efrain 1055
            $response = [
1056
                'success' => false,
1057
                'data' => 'ERROR_UNAUTHORIZED'
1058
            ];
545 ariadna 1059
 
1 efrain 1060
            return new JsonModel($response);
1061
        }
545 ariadna 1062
 
1063
 
1 efrain 1064
        $request = $this->getRequest();
545 ariadna 1065
        if ($request->isGet()) {
1 efrain 1066
            $data = [
1067
                'success' => true,
1068
                'data' => $group->accessibility,
1069
            ];
545 ariadna 1070
 
1 efrain 1071
            return new JsonModel($data);
545 ariadna 1072
        } else if ($request->isPost()) {
1073
 
1074
 
1 efrain 1075
            $form = new AccessibilityForm();
1076
            $dataPost = $request->getPost()->toArray();
545 ariadna 1077
 
1 efrain 1078
            $form->setData($dataPost);
545 ariadna 1079
 
1080
            if ($form->isValid()) {
1 efrain 1081
                $dataPost = (array) $form->getData();
1082
 
1083
                $hydrator = new ObjectPropertyHydrator();
1084
                $hydrator->hydrate($dataPost, $group);
545 ariadna 1085
 
1 efrain 1086
                $groupMapper->updateAccessibility($group);
545 ariadna 1087
 
1088
                $values = [
1 efrain 1089
                    Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
1090
                    Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
1091
                    Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
1092
                ];
545 ariadna 1093
 
1 efrain 1094
                $this->logger->info('Se actualizo el accesibilidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
545 ariadna 1095
 
1 efrain 1096
                return new JsonModel([
1097
                    'success'   => true,
1098
                    'data' => $values[$group->accessibility]
545 ariadna 1099
                ]);
1 efrain 1100
            } else {
1101
                $messages = [];
1102
                $form_messages = (array) $form->getMessages();
545 ariadna 1103
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 1104
                    $messages[$fieldname] = array_values($field_messages);
1105
                }
545 ariadna 1106
 
1 efrain 1107
                return new JsonModel([
1108
                    'success'   => false,
1109
                    'data'   => $messages
1110
                ]);
1111
            }
1112
        }
545 ariadna 1113
 
1114
 
1 efrain 1115
        $data = [
1116
            'success' => false,
1117
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1118
        ];
545 ariadna 1119
 
1120
 
1 efrain 1121
        return new JsonModel($data);
1122
    }
545 ariadna 1123
 
1 efrain 1124
    public function privacyAction()
1125
    {
1126
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1127
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 1128
 
1 efrain 1129
        $id = $this->params()->fromRoute('id');
545 ariadna 1130
        if (!$id) {
1 efrain 1131
            $response = [
1132
                'success' => false,
1133
                'data' => 'ERROR_INVALID_PARAMETER'
1134
            ];
545 ariadna 1135
 
1 efrain 1136
            return new JsonModel($response);
1137
        }
545 ariadna 1138
 
1 efrain 1139
        $groupMapper = GroupMapper::getInstance($this->adapter);
1140
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
545 ariadna 1141
        if (!$group) {
1 efrain 1142
            $response = [
1143
                'success' => false,
1144
                'data' => 'ERROR_RECORD_NOT_FOUND'
1145
            ];
545 ariadna 1146
 
1 efrain 1147
            return new JsonModel($response);
1148
        }
1149
 
545 ariadna 1150
        if ($currentUser->id != $group->user_id) {
1 efrain 1151
            $response = [
1152
                'success' => false,
1153
                'data' => 'ERROR_UNAUTHORIZED'
1154
            ];
545 ariadna 1155
 
1 efrain 1156
            return new JsonModel($response);
1157
        }
545 ariadna 1158
 
1159
 
1 efrain 1160
        $request = $this->getRequest();
545 ariadna 1161
        if ($request->isGet()) {
1 efrain 1162
            $data = [
1163
                'success' => true,
1164
                'data' => $group->privacy,
1165
            ];
545 ariadna 1166
 
1 efrain 1167
            return new JsonModel($data);
545 ariadna 1168
        } else if ($request->isPost()) {
1169
 
1170
 
1 efrain 1171
            $form = new PrivacyForm();
1172
            $dataPost = $request->getPost()->toArray();
545 ariadna 1173
 
1 efrain 1174
            $form->setData($dataPost);
545 ariadna 1175
 
1176
            if ($form->isValid()) {
1 efrain 1177
                $dataPost = (array) $form->getData();
545 ariadna 1178
 
1 efrain 1179
                $hydrator = new ObjectPropertyHydrator();
1180
                $hydrator->hydrate($dataPost, $group);
545 ariadna 1181
 
1 efrain 1182
                $groupMapper->updatePrivacy($group);
545 ariadna 1183
 
1 efrain 1184
                $values = [
1185
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
1186
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
1187
                ];
1188
 
545 ariadna 1189
 
1 efrain 1190
                $this->logger->info('Se actualizo la privacidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
545 ariadna 1191
 
1 efrain 1192
                return new JsonModel([
1193
                    'success'   => true,
1194
                    'data' => $values[$group->privacy]
1195
                ]);
1196
            } else {
1197
                $messages = [];
1198
                $form_messages = (array) $form->getMessages();
545 ariadna 1199
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 1200
                    $messages[$fieldname] = array_values($field_messages);
1201
                }
545 ariadna 1202
 
1 efrain 1203
                return new JsonModel([
1204
                    'success'   => false,
1205
                    'data'   => $messages
1206
                ]);
1207
            }
1208
        }
545 ariadna 1209
 
1210
 
1 efrain 1211
        $data = [
1212
            'success' => false,
1213
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1214
        ];
545 ariadna 1215
 
1216
 
1 efrain 1217
        return new JsonModel($data);
1218
    }
545 ariadna 1219
 
1220
 
1221
 
1 efrain 1222
    public function typeAction()
1223
    {
1224
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1225
        $currentUser = $currentUserPlugin->getUser();
545 ariadna 1226
 
1 efrain 1227
        $id = $this->params()->fromRoute('id');
545 ariadna 1228
        if (!$id) {
1 efrain 1229
            $response = [
1230
                'success' => false,
1231
                'data' => 'ERROR_INVALID_PARAMETER'
1232
            ];
545 ariadna 1233
 
1 efrain 1234
            return new JsonModel($response);
1235
        }
545 ariadna 1236
 
1 efrain 1237
        $groupMapper = GroupMapper::getInstance($this->adapter);
1238
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
545 ariadna 1239
        if (!$group) {
1 efrain 1240
            $response = [
1241
                'success' => false,
1242
                'data' => 'ERROR_RECORD_NOT_FOUND'
1243
            ];
545 ariadna 1244
 
1 efrain 1245
            return new JsonModel($response);
1246
        }
1247
 
545 ariadna 1248
 
1249
        if ($currentUser->id != $group->user_id) {
1 efrain 1250
            $response = [
1251
                'success' => false,
1252
                'data' => 'ERROR_UNAUTHORIZED'
1253
            ];
545 ariadna 1254
 
1 efrain 1255
            return new JsonModel($response);
1256
        }
545 ariadna 1257
 
1258
 
1259
 
1 efrain 1260
        $request = $this->getRequest();
545 ariadna 1261
        if ($request->isGet()) {
1262
 
1 efrain 1263
            $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1264
            $groupType = $groupTypeMapper->fetchOne($group->type_id);
545 ariadna 1265
 
1 efrain 1266
            $data = [
1267
                'success' => true,
1268
                'data' => $groupType->uuid,
1269
            ];
545 ariadna 1270
 
1 efrain 1271
            return new JsonModel($data);
545 ariadna 1272
        } else if ($request->isPost()) {
1273
 
1274
 
1 efrain 1275
            $form = new GroupTypeForm($this->adapter);
1276
            $dataPost = $request->getPost()->toArray();
545 ariadna 1277
 
1 efrain 1278
            $form->setData($dataPost);
545 ariadna 1279
 
1280
            if ($form->isValid()) {
1 efrain 1281
                $dataPost = (array) $form->getData();
545 ariadna 1282
 
1 efrain 1283
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1284
                $groupType = $groupTypeMapper->fetchOneByUuid($dataPost['type_id']);
545 ariadna 1285
 
1 efrain 1286
                $group->type_id = $groupType->id;
1287
                $groupMapper->updateGroupType($group);
545 ariadna 1288
 
1 efrain 1289
                $this->logger->info('Se actualizo el tipo del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
545 ariadna 1290
 
1 efrain 1291
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
1292
                $groupType = $groupTypeMapper->fetchOne($group->type_id);
545 ariadna 1293
 
1 efrain 1294
                return new JsonModel([
1295
                    'success'   => true,
1296
                    'data' =>  $groupType->name,
545 ariadna 1297
 
1 efrain 1298
                ]);
1299
            } else {
1300
                $messages = [];
1301
                $form_messages = (array) $form->getMessages();
545 ariadna 1302
                foreach ($form_messages  as $fieldname => $field_messages) {
1 efrain 1303
                    $messages[$fieldname] = array_values($field_messages);
1304
                }
545 ariadna 1305
 
1 efrain 1306
                return new JsonModel([
1307
                    'success'   => false,
1308
                    'data'   => $messages
1309
                ]);
1310
            }
1311
        }
545 ariadna 1312
 
1313
 
1 efrain 1314
        $data = [
1315
            'success' => false,
1316
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1317
        ];
545 ariadna 1318
 
1319
 
1 efrain 1320
        return new JsonModel($data);
1321
    }
1322
}