Proyectos de Subversion LeadersLinked - Services

Rev

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