Proyectos de Subversion LeadersLinked - Services

Rev

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