Proyectos de Subversion LeadersLinked - Services

Rev

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