Proyectos de Subversion LeadersLinked - Services

Rev

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