Proyectos de Subversion LeadersLinked - Services

Rev

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