Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7811 nelberth 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
8
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
10
use Laminas\Mvc\Controller\AbstractActionController;
11
use Laminas\Mvc\I18n\Translator;
12
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
7818 nelberth 15
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
7811 nelberth 16
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
7818 nelberth 17
use LeadersLinked\Form\HighPerformanceTeamsGroupsMembersForm;
10313 nelberth 18
 
19
use LeadersLinked\Form\HighPerformanceTeamsGroupsMembersTypeForm;
7811 nelberth 20
use LeadersLinked\Library\Functions;
21
use LeadersLinked\Mapper\UserMapper;
7818 nelberth 22
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
7811 nelberth 23
use LeadersLinked\Mapper\CompanyMapper;
24
use LeadersLinked\Mapper\CompanyUserMapper;
25
 
11688 nelberth 26
use LeadersLinked\Model\ChatGroupUser;
27
 
11689 nelberth 28
use LeadersLinked\Mapper\ConnectionMapper;
11688 nelberth 29
use LeadersLinked\Model\ChatGroup;
30
use LeadersLinked\Mapper\ChatGroupMapper;
31
use LeadersLinked\Mapper\ChatGroupUserMapper;
32
 
33
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
34
use LeadersLinked\Mapper\ChatGroupMessageMapper;
7827 nelberth 35
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
7811 nelberth 36
 
7827 nelberth 37
class HighPerformanceTeamsGroupsMembersController extends AbstractActionController
7811 nelberth 38
{
39
    /**
40
     *
41
     * @var AdapterInterface
42
     */
43
    private $adapter;
44
 
45
 
46
    /**
47
     *
48
     * @var AbstractAdapter
49
     */
50
    private $cache;
51
 
52
    /**
53
     *
54
     * @var  LoggerInterface
55
     */
56
    private $logger;
57
 
58
    /**
59
     *
60
     * @var array
61
     */
62
    private $config;
63
 
64
 
65
 
66
    /**
67
     *
68
     * @param AdapterInterface $adapter
69
     * @param AbstractAdapter $cache
70
     * @param LoggerInterface $logger
71
     * @param array $config
72
     */
73
    public function __construct($adapter, $cache , $logger, $config)
74
    {
75
        $this->adapter      = $adapter;
76
        $this->cache        = $cache;
77
        $this->logger       = $logger;
78
        $this->config       = $config;
79
 
80
 
81
    }
82
 
83
 
84
 
85
 
86
    public function indexAction()
87
    {
88
 
7829 nelberth 89
 
7827 nelberth 90
 
7811 nelberth 91
        $currentUserPlugin = $this->plugin('currentUserPlugin');
92
        $currentUser = $currentUserPlugin->getUser();
93
        $currentCompany = $currentUserPlugin->getCompany();
11083 nelberth 94
        $group_uuid= $this->params()->fromRoute('group_id');
7811 nelberth 95
 
96
        $request = $this->getRequest();
8053 nelberth 97
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
98
        $allowInvite = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/members/invite');
10288 nelberth 99
 
100
        $allowDelete = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/members/delete');
10290 nelberth 101
 
10287 nelberth 102
        $allowEdit = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/members/edit');
10286 nelberth 103
 
11169 nelberth 104
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
105
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
106
 
107
        if (!$highPerformanceTeamsGroups) {
108
            $data = [
109
                        'success' => false,
110
                        'data' => 'ERROR_RECORD_NOT_FOUND'
111
                    ];
10287 nelberth 112
 
11169 nelberth 113
            return new JsonModel($data);
114
        }
11180 nelberth 115
 
116
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
117
        $highPerformanceTeamsGroupsMembers = $highPerformanceTeamsGroupsMembersMapper->fetchAllInnerJoinUser($highPerformanceTeamsGroups->id,UserMapper::_TABLE);
118
        if(!$highPerformanceTeamsGroupsMembers){
119
            return new JsonModel([
120
                'success' => false,
121
                'data' => 'ERROR_RECORD_NOT_FOUND'
122
            ]);
123
        }
124
 
11169 nelberth 125
 
126
        $member = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$currentUser->id);
127
            if(!$member){
128
                return new JsonModel([
129
                    'success' => false,
130
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
131
                ]);
132
            }
133
 
134
        if(!($member->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $member->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
135
                    return new JsonModel([
136
                        'success' => false,
137
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
138
                    ]);
139
                }
140
 
141
            if($member->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$member->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
142
                    $allowDelete=false;
143
                    $allowEdit=false;
144
                }
145
 
7811 nelberth 146
        if($request->isGet()) {
147
 
148
 
149
            $headers  = $request->getHeaders();
150
 
151
            $isJson = false;
152
            if($headers->has('Accept')) {
153
                $accept = $headers->get('Accept');
154
 
155
                $prioritized = $accept->getPrioritized();
156
 
157
                foreach($prioritized as $key => $value) {
158
                    $raw = trim($value->getRaw());
159
 
160
                    if(!$isJson) {
161
                        $isJson = strpos($raw, 'json');
162
                    }
163
 
164
                }
165
            }
166
 
11169 nelberth 167
 
7811 nelberth 168
            if($isJson) {
169
 
11169 nelberth 170
 
10360 nelberth 171
 
10359 nelberth 172
                $items=[];
10358 nelberth 173
                foreach($highPerformanceTeamsGroupsMembers as $record)
7891 nelberth 174
                {
11897 nelberth 175
 
176
                    $userType = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$record->id);
177
 
178
 
179
                    if($userType->status==HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED){
180
                        $contentAllowDelete2=$allowDelete;
10320 nelberth 181
                        $allowDelete=true;
182
                    }
10321 nelberth 183
 
184
                    if($userType->type==HighPerformanceTeamsGroupsMembers::TYPE_CREATOR){
10323 nelberth 185
                        $contentAllowDelete=$allowDelete;
186
                        $contentAllowEdit=$allowEdit;
10321 nelberth 187
                        $allowDelete=false;
188
                        $allowEdit=false;
189
                    }
7891 nelberth 190
                    $item = [
191
                        'first_name' => $record->first_name,
192
                        'last_name' => $record->last_name,
7910 nelberth 193
                        'image'=>  $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $record->uuid, 'filename' => $record->image]),
11083 nelberth 194
                        'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/view/members/delete', ['group_id' => $highPerformanceTeamsGroups->uuid,'user_id'=>$record->uuid]) : '',
195
                        'link_edit' => $allowEdit ? $this->url()->fromRoute('high-performance-teams/groups/view/members/edit', ['group_id' => $highPerformanceTeamsGroups->uuid,'user_id'=>$record->uuid]) : '',
7891 nelberth 196
 
8053 nelberth 197
 
7868 nelberth 198
                    ];
7891 nelberth 199
 
10323 nelberth 200
                    if($userType->type==HighPerformanceTeamsGroupsMembers::TYPE_CREATOR){
201
                        $allowDelete= $contentAllowDelete;
202
                        $allowEdit=$contentAllowEdit;
203
                    }
11897 nelberth 204
                    if($userType->status==HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED){
10339 nelberth 205
                        $allowDelete=$contentAllowDelete2;
206
                    }
7891 nelberth 207
                    array_push($items, $item);
208
 
7868 nelberth 209
                }
7891 nelberth 210
 
211
 
7811 nelberth 212
 
213
                return new JsonModel([
214
                    'success' => true,
215
                    'data' => [
7818 nelberth 216
                        'items' => $items
7811 nelberth 217
                    ]
218
                ]);
219
 
220
            }
7948 nelberth 221
        }else if($request->isPost()){
7963 nelberth 222
 
7948 nelberth 223
            $headers  = $request->getHeaders();
224
 
225
            $isJson = false;
226
            if($headers->has('Accept')) {
227
                $accept = $headers->get('Accept');
228
 
229
                $prioritized = $accept->getPrioritized();
230
 
231
                foreach($prioritized as $key => $value) {
232
                    $raw = trim($value->getRaw());
233
 
234
                    if(!$isJson) {
235
                        $isJson = strpos($raw, 'json');
236
                    }
237
 
238
                }
239
            }
240
 
241
            if($isJson) {
8053 nelberth 242
 
7973 nelberth 243
                $dataPost = $request->getPost()->toArray();
244
                $search = $dataPost['search'];
7996 nelberth 245
                $search = empty($search) ? '' : filter_var($search, FILTER_SANITIZE_STRING);
7997 nelberth 246
 
7948 nelberth 247
 
248
 
12106 nelberth 249
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
250
                $records = $companyUserMapper->fetchAllSuggestForInvitationByHptgId($highPerformanceTeamsGroups->id,$highPerformanceTeamsGroups->company_id,$search);
7948 nelberth 251
                $items=[];
252
 
253
                foreach($records as $record)
254
                {
255
 
256
                    $item = [
257
                        'first_name' => $record->first_name,
258
                        'last_name' => $record->last_name,
259
                        'image'=>  $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $record->uuid, 'filename' => $record->image]),
7997 nelberth 260
                        'email'=> $record->email,
11083 nelberth 261
                        'link_invite'=> $allowInvite ? $this->url()->fromRoute('high-performance-teams/groups/view/members/invite', ['group_id' => $highPerformanceTeamsGroups->uuid,'user_id'=>$record->uuid]) : '',
7948 nelberth 262
 
263
                    ];
264
 
265
                    array_push($items, $item);
266
 
267
                }
268
 
269
 
270
 
271
                return new JsonModel([
272
                    'success' => true,
273
                    'data' => [
274
                        'items' => $items
275
                    ]
276
                ]);
277
 
278
            }
7811 nelberth 279
        } else {
280
            return new JsonModel([
281
                'success' => false,
282
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
283
            ]);
284
        }
285
    }
286
 
8012 nelberth 287
    public function inviteAction()
7811 nelberth 288
    {
8020 nelberth 289
 
8017 nelberth 290
 
291
 
8020 nelberth 292
        $currentUserPlugin = $this->plugin('currentUserPlugin');
7811 nelberth 293
        $currentUser = $currentUserPlugin->getUser();
294
        $currentCompany = $currentUserPlugin->getCompany();
8028 nelberth 295
 
11097 nelberth 296
        $user_uuid = $this->params()->fromRoute('user_id');
297
        $group_uuid = $this->params()->fromRoute('group_id');
8029 nelberth 298
 
7811 nelberth 299
        $request = $this->getRequest();
300
        if($request->isPost()) {
8031 nelberth 301
 
8047 nelberth 302
 
8023 nelberth 303
                $userMapper = UserMapper::getInstance($this->adapter);
304
                $user = $userMapper->fetchOneByUuid($user_uuid);
305
 
8040 nelberth 306
                if(!$user) {
307
                    return new JsonModel([
308
                        'success' => false,
309
                        'data' => 'ERROR_RECORD_NOT_FOUND'
310
                    ]);
311
                }
312
 
8023 nelberth 313
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
314
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id,$user->id);
8048 nelberth 315
 
316
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
317
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
8049 nelberth 318
 
8050 nelberth 319
                if(!$highPerformanceTeamsGroups) {
8040 nelberth 320
                    return new JsonModel([
321
                        'success' => false,
322
                        'data' => 'ERROR_RECORD_NOT_FOUND'
323
                    ]);
324
                }
8050 nelberth 325
 
10324 nelberth 326
                $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
10325 nelberth 327
 
10324 nelberth 328
                $member = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$currentUser->id);
11170 nelberth 329
                if(!$member){
330
                    return new JsonModel([
331
                        'success' => false,
332
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
333
                    ]);
334
                }
10324 nelberth 335
                if($member->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$member->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
336
                    return new JsonModel([
337
                        'success' => false,
338
                        'data' => 'ERROR_METHOD_NOT_ALLOWED'
339
                    ]);
340
                }
341
 
8044 nelberth 342
                $highPerformanceTeamsGroupsMember = new HighPerformanceTeamsGroupsMembers();
343
                $highPerformanceTeamsGroupsMember->group_id  = $highPerformanceTeamsGroups->id;
344
                $highPerformanceTeamsGroupsMember->user_id = $user->id;
345
                $highPerformanceTeamsGroupsMember->type = HighPerformanceTeamsGroupsMembers::TYPE_USER;
8053 nelberth 346
 
8038 nelberth 347
                if($companyUser){
8044 nelberth 348
                    $highPerformanceTeamsGroupsMember->status = HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN;
8061 nelberth 349
                    $data = [
350
                        'success'   => true,
351
                        'data'   => 'LABEL_RECORD_ADDED'
352
                    ];
8023 nelberth 353
                }else{
11778 nelberth 354
                    $connectionMapper = ConnectionMapper::getInstance($this->adapter);
355
                    $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
356
                    if(!$connection) {
357
                        return new JsonModel([
358
                            'success' => false,
359
                            'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
360
                        ]);
361
                    }
8044 nelberth 362
                    $highPerformanceTeamsGroupsMember->status = HighPerformanceTeamsGroupsMembers::STATUS_INVITED;
8061 nelberth 363
                    $data = [
364
                        'success'   => true,
365
                        'data'   => 'LABEL_USER_COMPANY_HAS_BEEN_REQUESTED'
366
                    ];
8023 nelberth 367
                }
10324 nelberth 368
                $highPerformanceTeamsGroupsMembersMapper->insert($highPerformanceTeamsGroupsMember);
8045 nelberth 369
 
10324 nelberth 370
               if($highPerformanceTeamsGroupsMembersMapper) {
11687 nelberth 371
                    if($companyUser){
372
 
373
                        $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
374
                        $chatGroup = $chatGroupMapper->fetchOneHptg($highPerformanceTeamsGroups->id);
375
                        if(!$chatGroup) {
376
                            return new JsonModel([
377
                                'success' => false,
378
                                'data' => 'ERROR_CHAT_GROUP_NOT_FOUND'
379
                            ]);
380
                        }
381
 
382
                        $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
11774 nelberth 383
                        $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
11687 nelberth 384
 
385
                        $userMapper = UserMapper::getInstance($this->adapter);
386
                        $user = $userMapper->fetchOneByUuid($user_uuid);
387
 
388
                        if(!$user) {
389
                            return new JsonModel([
390
                                'success' => false,
391
                                'data' => 'ERROR_USER_NOT_FOUND'
392
                            ]);
393
                        }
394
 
395
                        if($chatGroupOwner->user_id == $user->id) {
396
                            return new JsonModel([
397
                                'success' => false,
398
                                'data' => 'ERROR_CHAT_I_CAN_NOT_ADD_HIMSELF'
399
                            ]);
400
                        }
401
 
402
 
403
                        $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $user->id);
404
                        if($chatGroupUser) {
405
                            return new JsonModel([
406
                                'success' => false,
407
                                'data' => 'ERROR_THIS_USER_ALREADY_EXISTS_IN_THIS_GROUP'
408
                            ]);
409
                        }
410
 
411
 
412
                        $chatGroupUser = new ChatGroupUser();
413
                        $chatGroupUser->group_id    = $chatGroup->id;
414
                        $chatGroupUser->user_id     = $user->id;
415
                        $chatGroupUser->owner       = ChatGroupUser::OWNER_NO;
416
 
417
                        $result = $chatGroupUserMapper->insert($chatGroupUser);
418
                        if(!$result) {
419
                            return new JsonModel([
420
                                'success' => false,
421
                                'data' => $chatGroupUserMapper->getError()
422
                            ]);
423
                        }
11688 nelberth 424
 
11687 nelberth 425
 
426
                    }
427
 
8044 nelberth 428
                    $this->logger->info('Se agrego el miembro de grupo  con el correo: ' . $user->email, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7811 nelberth 429
 
11687 nelberth 430
                    $data = [
431
                        'success'   => true,
432
                        'data'   => 'LABEL_RECORD_ADDED'
433
                    ];
7811 nelberth 434
                } else {
435
                    $data = [
436
                        'success'   => false,
7818 nelberth 437
                        'data'      => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 438
                    ];
439
 
440
                }
441
 
442
                return new JsonModel($data);
8044 nelberth 443
 
8030 nelberth 444
 
7811 nelberth 445
 
446
        } else {
447
            $data = [
448
                'success' => false,
449
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
450
            ];
451
 
452
            return new JsonModel($data);
453
        }
454
 
455
        return new JsonModel($data);
456
 
457
 
458
    }
459
 
460
 
461
 
462
     public function editAction(){
463
 
464
        $currentUserPlugin = $this->plugin('currentUserPlugin');
465
        $currentUser = $currentUserPlugin->getUser();
466
        $currentCompany = $currentUserPlugin->getCompany();
467
        $request = $this->getRequest();
10283 nelberth 468
 
11097 nelberth 469
        $group_uuid = $this->params()->fromRoute('group_id');
470
        $user_uuid = $this->params()->fromRoute('user_id');
10293 nelberth 471
 
7811 nelberth 472
 
10283 nelberth 473
        if(!$group_uuid) {
7811 nelberth 474
            $data = [
475
                'success'   => false,
476
                'data'   => 'ERROR_INVALID_PARAMETER'
477
            ];
478
 
479
            return new JsonModel($data);
480
        }
481
 
10283 nelberth 482
        if(!$user_uuid) {
483
            $data = [
484
                'success'   => false,
485
                'data'   => 'ERROR_INVALID_PARAMETER'
486
            ];
487
 
488
            return new JsonModel($data);
489
        }
10296 nelberth 490
 
10299 nelberth 491
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
10297 nelberth 492
 
10328 nelberth 493
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
10301 nelberth 494
 
10328 nelberth 495
        if (!$highPerformanceTeamsGroups) {
7811 nelberth 496
            $data = [
497
                'success' => false,
498
                'data' => 'ERROR_RECORD_NOT_FOUND'
499
            ];
500
 
501
            return new JsonModel($data);
502
        }
10328 nelberth 503
 
504
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
505
        $member = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$currentUser->id);
11170 nelberth 506
        if(!$member){
507
            return new JsonModel([
508
                'success' => false,
509
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
510
            ]);
511
        }
10328 nelberth 512
        if($member->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$member->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
513
            return new JsonModel([
514
                'success' => false,
515
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
516
            ]);
517
        }
7811 nelberth 518
 
10283 nelberth 519
        $userMapper = UserMapper::getInstance($this->adapter);
520
        $user = $userMapper->fetchOneByUuid($user_uuid);
10302 nelberth 521
 
10328 nelberth 522
 
523
        $highPerformanceTeamsGroupsMembers=$highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$user->id);
524
        if($highPerformanceTeamsGroupsMembers->type==HighPerformanceTeamsGroupsMembers::TYPE_CREATOR){
525
            return new JsonModel([
526
                'success' => false,
527
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
528
            ]);
529
        }
10298 nelberth 530
 
7811 nelberth 531
        if($request->isPost()) {
10330 nelberth 532
 
533
            $form = new  HighPerformanceTeamsGroupsMembersTypeForm($this->adapter, $currentCompany->id);
534
            $dataPost = $request->getPost()->toArray();
535
            $form->setData($dataPost);
10331 nelberth 536
 
7811 nelberth 537
            if($form->isValid()) {
538
                $dataPost = (array) $form->getData();
10332 nelberth 539
 
540
                $hydrator = new ObjectPropertyHydrator();
541
                $hydrator->hydrate($dataPost, $highPerformanceTeamsGroupsMembers);
10333 nelberth 542
 
543
                $result = $highPerformanceTeamsGroupsMembersMapper->update($highPerformanceTeamsGroupsMembers);
10334 nelberth 544
 
7811 nelberth 545
                if($result) {
11755 nelberth 546
 
10337 nelberth 547
                    $this->logger->info('Se actualizo el miembro ' .$user->first_name.' en el grupo '. $highPerformanceTeamsGroups->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
548
 
7811 nelberth 549
                    $data = [
550
                        'success' => true,
551
                        'data' => 'LABEL_RECORD_UPDATED'
552
                    ];
553
                } else {
554
                    $data = [
555
                        'success'   => false,
7818 nelberth 556
                        'data'      => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 557
                    ];
558
                }
559
 
560
                return new JsonModel($data);
561
 
562
            } else {
563
                $messages = [];
564
                $form_messages = (array) $form->getMessages();
565
                foreach($form_messages  as $fieldname => $field_messages)
566
                {
567
                    $messages[$fieldname] = array_values($field_messages);
568
                }
569
 
570
                return new JsonModel([
571
                    'success'   => false,
572
                    'data'   => $messages
573
                ]);
574
            }
575
        }else if ($request->isGet()) {
576
            $hydrator = new ObjectPropertyHydrator();
577
 
578
            $data = [
579
                'success' => true,
10298 nelberth 580
                'data' => $highPerformanceTeamsGroupsMembers->type
7811 nelberth 581
            ];
582
 
583
            return new JsonModel($data);
584
        } else {
585
            $data = [
586
                'success' => false,
587
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
588
            ];
589
 
590
            return new JsonModel($data);
591
        }
592
 
593
        return new JsonModel($data);
594
 
595
    }
596
 
597
 
598
 
599
 
600
    public function deleteAction(){
8053 nelberth 601
 
602
 
603
 
7811 nelberth 604
        $currentUserPlugin = $this->plugin('currentUserPlugin');
605
        $currentCompany = $currentUserPlugin->getCompany();
606
        $currentUser = $currentUserPlugin->getUser();
607
 
608
        $request = $this->getRequest();
11083 nelberth 609
        $group_uuid = $this->params()->fromRoute('group_id');
610
        $user_uuid = $this->params()->fromRoute('user_id');
8057 nelberth 611
        if (!$group_uuid) {
612
            $data = [
613
                'success' => false,
614
                'data' => 'ERROR_INVALID_PARAMETER'
615
            ];
616
 
617
            return new JsonModel($data);
618
        }
619
 
620
        if (!$user_uuid) {
621
            $data = [
622
                'success' => false,
623
                'data' => 'ERROR_INVALID_PARAMETER'
624
            ];
625
 
626
            return new JsonModel($data);
627
        }
10328 nelberth 628
 
8057 nelberth 629
 
630
        if ($request->isPost()) {
8058 nelberth 631
 
8055 nelberth 632
            $userMapper = UserMapper::getInstance($this->adapter);
633
            $user = $userMapper->fetchOneByUuid($user_uuid);
7811 nelberth 634
 
8055 nelberth 635
            if (!$user) {
636
                $data = [
637
                    'success' => false,
638
                    'data' => 'ERROR_RECORD_NOT_FOUND'
639
                ];
7811 nelberth 640
 
8055 nelberth 641
                return new JsonModel($data);
642
            }
8059 nelberth 643
 
8055 nelberth 644
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
645
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
646
 
8059 nelberth 647
            if (!$highPerformanceTeamsGroups) {
8055 nelberth 648
                $data = [
649
                    'success' => false,
650
                    'data' => 'ERROR_RECORD_NOT_FOUND'
651
                ];
652
 
653
                return new JsonModel($data);
654
            }
10328 nelberth 655
 
656
            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
657
            $highPerformanceTeamsGroupsMembers=$highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$user->id);
10341 nelberth 658
            if($highPerformanceTeamsGroupsMembers->user_id!=$currentUser->id){
659
 
10338 nelberth 660
                $member = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$currentUser->id);
11170 nelberth 661
                if(!$member){
662
                    return new JsonModel([
663
                        'success' => false,
664
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
665
                    ]);
666
                }
10338 nelberth 667
                if($member->type==HighPerformanceTeamsGroupsMembers::TYPE_MODERATOR||$member->type==HighPerformanceTeamsGroupsMembers::TYPE_USER){
668
                    return new JsonModel([
669
                        'success' => false,
11890 nelberth 670
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
10338 nelberth 671
                    ]);
672
                }
673
 
674
 
675
                if($highPerformanceTeamsGroupsMembers->type==HighPerformanceTeamsGroupsMembers::TYPE_CREATOR){
676
                    return new JsonModel([
677
                        'success' => false,
11891 nelberth 678
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
10338 nelberth 679
                    ]);
680
                }
11887 nelberth 681
            }else{
11888 nelberth 682
                if($highPerformanceTeamsGroupsMembers->status != HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED){
11887 nelberth 683
                    return new JsonModel([
684
                        'success' => false,
11890 nelberth 685
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
11887 nelberth 686
                    ]);
687
                }
10328 nelberth 688
            }
11697 nelberth 689
 
11887 nelberth 690
 
11691 nelberth 691
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
11694 nelberth 692
            $chatGroup = $chatGroupMapper->fetchOneHptg($highPerformanceTeamsGroups->id);
11691 nelberth 693
            if(!$chatGroup) {
694
                return new JsonModel([
695
                    'success' => false,
11704 nelberth 696
                    'data' => 'ERROR_CHAT_GROUP_NOT_FOUND'
11691 nelberth 697
                ]);
698
            }
10344 nelberth 699
 
11691 nelberth 700
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
701
            $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
702
 
11718 nelberth 703
 
11691 nelberth 704
            $userMapper = UserMapper::getInstance($this->adapter);
705
            $user = $userMapper->fetchOneByUuid($user_uuid);
706
 
707
            if(!$user) {
708
                return new JsonModel([
709
                    'success' => false,
11704 nelberth 710
                    'data' => 'ERROR_USER_NOT_FOUND'
11691 nelberth 711
                ]);
712
            }
713
 
714
            if($chatGroupOwner->user_id == $user->id) {
715
                return new JsonModel([
716
                    'success' => false,
11704 nelberth 717
                    'data' => 'ERROR_CHAT_I_CAN_NOT_REMOVE_MYSELF'
11691 nelberth 718
                ]);
719
            }
720
 
721
 
8056 nelberth 722
 
11690 nelberth 723
 
11691 nelberth 724
            $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $user->id);
725
            if(!$chatGroupUser) {
726
                return new JsonModel([
727
                    'success' => false,
11704 nelberth 728
                    'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
11691 nelberth 729
                ]);
730
            }
731
 
11690 nelberth 732
 
11691 nelberth 733
            $response = $chatGroupUserMapper->deleteByGroupIdAndUserId($chatGroup->id, $user->id);
11695 nelberth 734
            if(!$response) {
11691 nelberth 735
                return new JsonModel([
736
                    'success' => false,
11701 nelberth 737
                    'data' => $chatGroupMapper->getError()
11691 nelberth 738
                ]);
11695 nelberth 739
            }
11691 nelberth 740
 
11703 nelberth 741
            $result = $highPerformanceTeamsGroupsMembersMapper->delete($highPerformanceTeamsGroupsMembers->id);
11691 nelberth 742
            if ($result) {
11690 nelberth 743
 
10345 nelberth 744
                $this->logger->info('Se borro el grupo el miembro con el email de  ' . $user->email, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
10353 nelberth 745
                if($highPerformanceTeamsGroupsMembers->user_id==$currentUser->id){
10352 nelberth 746
                    return new JsonModel([
747
                        'success' => true,
748
                        'data' => 'LABEL_RECORD_DELETED',
749
                        'reload'=>true
750
                    ]);
751
                }
752
 
10350 nelberth 753
 
7811 nelberth 754
                $data = [
755
                    'success' => true,
10352 nelberth 756
                    'data' => 'LABEL_RECORD_DELETED',
757
                    'reload'=>false
7811 nelberth 758
                ];
759
            } else {
760
 
761
                $data = [
762
                    'success' => false,
7818 nelberth 763
                    'data' => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 764
                ];
765
 
766
                return new JsonModel($data);
767
            }
768
        } else {
769
            $data = [
770
                'success' => false,
771
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
772
            ];
773
 
774
            return new JsonModel($data);
775
        }
776
 
777
        return new JsonModel($data);
778
    }
779
 
780
 
781
 
782
 
783
}