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;
7811 nelberth 18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\UserMapper;
7818 nelberth 20
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
7811 nelberth 21
use LeadersLinked\Mapper\CompanyMapper;
22
use LeadersLinked\Mapper\CompanyUserMapper;
23
 
7827 nelberth 24
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
7811 nelberth 25
 
7827 nelberth 26
class HighPerformanceTeamsGroupsMembersController extends AbstractActionController
7811 nelberth 27
{
28
    /**
29
     *
30
     * @var AdapterInterface
31
     */
32
    private $adapter;
33
 
34
 
35
    /**
36
     *
37
     * @var AbstractAdapter
38
     */
39
    private $cache;
40
 
41
    /**
42
     *
43
     * @var  LoggerInterface
44
     */
45
    private $logger;
46
 
47
    /**
48
     *
49
     * @var array
50
     */
51
    private $config;
52
 
53
 
54
 
55
    /**
56
     *
57
     * @param AdapterInterface $adapter
58
     * @param AbstractAdapter $cache
59
     * @param LoggerInterface $logger
60
     * @param array $config
61
     */
62
    public function __construct($adapter, $cache , $logger, $config)
63
    {
64
        $this->adapter      = $adapter;
65
        $this->cache        = $cache;
66
        $this->logger       = $logger;
67
        $this->config       = $config;
68
 
69
 
70
    }
71
 
72
 
73
 
74
 
75
    public function indexAction()
76
    {
77
 
7829 nelberth 78
 
7827 nelberth 79
 
7811 nelberth 80
        $currentUserPlugin = $this->plugin('currentUserPlugin');
81
        $currentUser = $currentUserPlugin->getUser();
82
        $currentCompany = $currentUserPlugin->getCompany();
7863 nelberth 83
        $group_uuid= $this->params()->fromRoute('group_uuid');
7811 nelberth 84
 
85
        $request = $this->getRequest();
8053 nelberth 86
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
87
        $allowInvite = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/members/invite');
88
 
89
        $allowDelete = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view/members/delete');
7811 nelberth 90
        if($request->isGet()) {
91
 
92
 
93
            $headers  = $request->getHeaders();
94
 
95
            $isJson = false;
96
            if($headers->has('Accept')) {
97
                $accept = $headers->get('Accept');
98
 
99
                $prioritized = $accept->getPrioritized();
100
 
101
                foreach($prioritized as $key => $value) {
102
                    $raw = trim($value->getRaw());
103
 
104
                    if(!$isJson) {
105
                        $isJson = strpos($raw, 'json');
106
                    }
107
 
108
                }
109
            }
110
 
111
            if($isJson) {
112
 
7864 nelberth 113
 
7820 nelberth 114
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
115
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
116
 
117
                if (!$highPerformanceTeamsGroups) {
118
                    $data = [
119
                        'success' => false,
120
                        'data' => 'ERROR_RECORD_NOT_FOUND'
121
                    ];
122
 
123
                    return new JsonModel($data);
124
                }
7811 nelberth 125
 
7873 nelberth 126
 
7818 nelberth 127
                $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
7891 nelberth 128
                $records = $highPerformanceTeamsGroupsMembersMapper->fetchAllInnerJoinUser($highPerformanceTeamsGroups->id,UserMapper::_TABLE);
129
                $items=[];
130
 
131
                foreach($records as $record)
132
                {
133
 
134
                    $item = [
135
                        'first_name' => $record->first_name,
136
                        'last_name' => $record->last_name,
7910 nelberth 137
                        'image'=>  $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $record->uuid, 'filename' => $record->image]),
8054 nelberth 138
                        'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/view/members/delete', ['group_uuid' => $highPerformanceTeamsGroups->uuid,'user_uuid'=>$record->uuid]) : '',
7891 nelberth 139
 
8053 nelberth 140
 
7868 nelberth 141
                    ];
7891 nelberth 142
 
143
                    array_push($items, $item);
144
 
7868 nelberth 145
                }
7891 nelberth 146
 
147
 
7811 nelberth 148
 
149
                return new JsonModel([
150
                    'success' => true,
151
                    'data' => [
7818 nelberth 152
                        'items' => $items
7811 nelberth 153
                    ]
154
                ]);
155
 
156
            }
7948 nelberth 157
        }else if($request->isPost()){
7963 nelberth 158
 
7948 nelberth 159
            $headers  = $request->getHeaders();
160
 
161
            $isJson = false;
162
            if($headers->has('Accept')) {
163
                $accept = $headers->get('Accept');
164
 
165
                $prioritized = $accept->getPrioritized();
166
 
167
                foreach($prioritized as $key => $value) {
168
                    $raw = trim($value->getRaw());
169
 
170
                    if(!$isJson) {
171
                        $isJson = strpos($raw, 'json');
172
                    }
173
 
174
                }
175
            }
176
 
177
            if($isJson) {
8053 nelberth 178
 
7973 nelberth 179
                $dataPost = $request->getPost()->toArray();
180
                $search = $dataPost['search'];
7996 nelberth 181
                $search = empty($search) ? '' : filter_var($search, FILTER_SANITIZE_STRING);
7997 nelberth 182
 
7948 nelberth 183
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
184
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
185
 
186
                if (!$highPerformanceTeamsGroups) {
187
                    $data = [
188
                        'success' => false,
189
                        'data' => 'ERROR_RECORD_NOT_FOUND'
190
                    ];
191
 
192
                    return new JsonModel($data);
193
                }
194
 
7995 nelberth 195
 
7969 nelberth 196
                $userMapper = UserMapper::getInstance($this->adapter);
7994 nelberth 197
                $records = $userMapper->fetchAllSuggestForInvitationByHptgId($highPerformanceTeamsGroups->id,$search);
7948 nelberth 198
                $items=[];
199
 
200
                foreach($records as $record)
201
                {
202
 
203
                    $item = [
204
                        'first_name' => $record->first_name,
205
                        'last_name' => $record->last_name,
206
                        'image'=>  $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $record->uuid, 'filename' => $record->image]),
7997 nelberth 207
                        'email'=> $record->email,
8014 nelberth 208
                        'link_invite'=> $allowInvite ? $this->url()->fromRoute('high-performance-teams/groups/view/members/invite', ['group_uuid' => $highPerformanceTeamsGroups->uuid,'user_uuid'=>$record->uuid]) : '',
7948 nelberth 209
 
210
                    ];
211
 
212
                    array_push($items, $item);
213
 
214
                }
215
 
216
 
217
 
218
                return new JsonModel([
219
                    'success' => true,
220
                    'data' => [
221
                        'items' => $items
222
                    ]
223
                ]);
224
 
225
            }
7811 nelberth 226
        } else {
227
            return new JsonModel([
228
                'success' => false,
229
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
230
            ]);
231
        }
232
    }
233
 
8012 nelberth 234
    public function inviteAction()
7811 nelberth 235
    {
8020 nelberth 236
 
8017 nelberth 237
 
238
 
8020 nelberth 239
        $currentUserPlugin = $this->plugin('currentUserPlugin');
7811 nelberth 240
        $currentUser = $currentUserPlugin->getUser();
241
        $currentCompany = $currentUserPlugin->getCompany();
8028 nelberth 242
 
243
        $user_uuid = $this->params()->fromRoute('user_uuid');
8040 nelberth 244
        $group_uuid = $this->params()->fromRoute('group_uuid');
8029 nelberth 245
 
7811 nelberth 246
        $request = $this->getRequest();
247
        if($request->isPost()) {
8031 nelberth 248
 
8047 nelberth 249
 
8023 nelberth 250
                $userMapper = UserMapper::getInstance($this->adapter);
251
                $user = $userMapper->fetchOneByUuid($user_uuid);
252
 
8040 nelberth 253
                if(!$user) {
254
                    return new JsonModel([
255
                        'success' => false,
256
                        'data' => 'ERROR_RECORD_NOT_FOUND'
257
                    ]);
258
                }
259
 
8023 nelberth 260
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
261
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id,$user->id);
8048 nelberth 262
 
263
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
264
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
8049 nelberth 265
 
8050 nelberth 266
                if(!$highPerformanceTeamsGroups) {
8040 nelberth 267
                    return new JsonModel([
268
                        'success' => false,
269
                        'data' => 'ERROR_RECORD_NOT_FOUND'
270
                    ]);
271
                }
8050 nelberth 272
 
8046 nelberth 273
 
8044 nelberth 274
                $highPerformanceTeamsGroupsMember = new HighPerformanceTeamsGroupsMembers();
275
                $highPerformanceTeamsGroupsMember->group_id  = $highPerformanceTeamsGroups->id;
276
                $highPerformanceTeamsGroupsMember->user_id = $user->id;
277
                $highPerformanceTeamsGroupsMember->type = HighPerformanceTeamsGroupsMembers::TYPE_USER;
8053 nelberth 278
 
8038 nelberth 279
                if($companyUser){
8044 nelberth 280
                    $highPerformanceTeamsGroupsMember->status = HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN;
8061 nelberth 281
                    $data = [
282
                        'success'   => true,
283
                        'data'   => 'LABEL_RECORD_ADDED'
284
                    ];
8023 nelberth 285
                }else{
8044 nelberth 286
                    $highPerformanceTeamsGroupsMember->status = HighPerformanceTeamsGroupsMembers::STATUS_INVITED;
8061 nelberth 287
                    $data = [
288
                        'success'   => true,
289
                        'data'   => 'LABEL_USER_COMPANY_HAS_BEEN_REQUESTED'
290
                    ];
8023 nelberth 291
                }
8044 nelberth 292
                $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
293
                $highPerformanceTeamsGroupsMemberMapper->insert($highPerformanceTeamsGroupsMember);
8045 nelberth 294
 
8044 nelberth 295
               if($highPerformanceTeamsGroupsMemberMapper) {
7811 nelberth 296
 
8044 nelberth 297
                    $this->logger->info('Se agrego el miembro de grupo  con el correo: ' . $user->email, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7811 nelberth 298
 
299
                } else {
300
                    $data = [
301
                        'success'   => false,
7818 nelberth 302
                        'data'      => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 303
                    ];
304
 
305
                }
306
 
307
                return new JsonModel($data);
8044 nelberth 308
 
8030 nelberth 309
 
7811 nelberth 310
 
311
        } else {
312
            $data = [
313
                'success' => false,
314
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
315
            ];
316
 
317
            return new JsonModel($data);
318
        }
319
 
320
        return new JsonModel($data);
321
 
322
 
323
    }
324
 
325
 
326
 
327
     public function editAction(){
328
 
329
        $currentUserPlugin = $this->plugin('currentUserPlugin');
330
        $currentUser = $currentUserPlugin->getUser();
331
        $currentCompany = $currentUserPlugin->getCompany();
332
        $request = $this->getRequest();
333
        $uuid = $this->params()->fromRoute('id');
334
 
335
 
336
        if(!$uuid) {
337
            $data = [
338
                'success'   => false,
339
                'data'   => 'ERROR_INVALID_PARAMETER'
340
            ];
341
 
342
            return new JsonModel($data);
343
        }
344
 
7818 nelberth 345
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
346
        $group = $highPerformanceTeamsGroupsMembersMapper->fetchOneByUuid($uuid);
7811 nelberth 347
 
348
        if (!$group) {
349
            $data = [
350
                'success' => false,
351
                'data' => 'ERROR_RECORD_NOT_FOUND'
352
            ];
353
 
354
            return new JsonModel($data);
355
        }
356
 
357
        if ($group->company_id != $currentCompany->id) {
358
            return new JsonModel([
359
                'success' => false,
360
                'data' => 'ERROR_UNAUTHORIZED'
361
            ]);
362
        }
363
 
364
        if($request->isPost()) {
7818 nelberth 365
            $form = new  HighPerformanceTeamsGroupsMembersForm($this->adapter, $currentCompany->id);
7811 nelberth 366
            $dataPost = $request->getPost()->toArray();
7818 nelberth 367
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroupsMembers::STATUS_INACTIVE;
7811 nelberth 368
            $form->setData($dataPost);
369
 
370
            if($form->isValid()) {
371
                $dataPost = (array) $form->getData();
372
 
373
                $hydrator = new ObjectPropertyHydrator();
374
                $hydrator->hydrate($dataPost, $group);
7818 nelberth 375
                $result = $highPerformanceTeamsGroupsMembersMapper->update($group);
7811 nelberth 376
 
377
                if($result) {
378
                    $this->logger->info('Se actualizo el grupo de alto rendimiento ' . $group->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
379
 
380
                    $data = [
381
                        'success' => true,
382
                        'data' => 'LABEL_RECORD_UPDATED'
383
                    ];
384
                } else {
385
                    $data = [
386
                        'success'   => false,
7818 nelberth 387
                        'data'      => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 388
                    ];
389
                }
390
 
391
                return new JsonModel($data);
392
 
393
            } else {
394
                $messages = [];
395
                $form_messages = (array) $form->getMessages();
396
                foreach($form_messages  as $fieldname => $field_messages)
397
                {
398
                    $messages[$fieldname] = array_values($field_messages);
399
                }
400
 
401
                return new JsonModel([
402
                    'success'   => false,
403
                    'data'   => $messages
404
                ]);
405
            }
406
        }else if ($request->isGet()) {
407
            $hydrator = new ObjectPropertyHydrator();
408
 
409
            $data = [
410
                'success' => true,
411
                'data' => $hydrator->extract($group)
412
            ];
413
 
414
            return new JsonModel($data);
415
        } else {
416
            $data = [
417
                'success' => false,
418
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
419
            ];
420
 
421
            return new JsonModel($data);
422
        }
423
 
424
        return new JsonModel($data);
425
 
426
    }
427
 
428
 
429
 
430
 
431
    public function deleteAction(){
8053 nelberth 432
 
433
 
434
 
7811 nelberth 435
        $currentUserPlugin = $this->plugin('currentUserPlugin');
436
        $currentCompany = $currentUserPlugin->getCompany();
437
        $currentUser = $currentUserPlugin->getUser();
438
 
439
        $request = $this->getRequest();
8053 nelberth 440
        $group_uuid = $this->params()->fromRoute('group_uuid');
8055 nelberth 441
        $user_uuid = $this->params()->fromRoute('user_uuid');
8057 nelberth 442
        if (!$group_uuid) {
443
            $data = [
444
                'success' => false,
445
                'data' => 'ERROR_INVALID_PARAMETER'
446
            ];
447
 
448
            return new JsonModel($data);
449
        }
450
 
451
        if (!$user_uuid) {
452
            $data = [
453
                'success' => false,
454
                'data' => 'ERROR_INVALID_PARAMETER'
455
            ];
456
 
457
            return new JsonModel($data);
458
        }
459
 
460
        if ($request->isPost()) {
461
 
462
 
463
 
8058 nelberth 464
 
8055 nelberth 465
            $userMapper = UserMapper::getInstance($this->adapter);
466
            $user = $userMapper->fetchOneByUuid($user_uuid);
7811 nelberth 467
 
8055 nelberth 468
            if (!$user) {
469
                $data = [
470
                    'success' => false,
471
                    'data' => 'ERROR_RECORD_NOT_FOUND'
472
                ];
7811 nelberth 473
 
8055 nelberth 474
                return new JsonModel($data);
475
            }
8059 nelberth 476
 
8055 nelberth 477
            $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
478
            $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
479
 
8059 nelberth 480
            if (!$highPerformanceTeamsGroups) {
8055 nelberth 481
                $data = [
482
                    'success' => false,
483
                    'data' => 'ERROR_RECORD_NOT_FOUND'
484
                ];
485
 
486
                return new JsonModel($data);
487
            }
8059 nelberth 488
 
8055 nelberth 489
            $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
490
            $highPerformanceTeamsGroupsMembers = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id,$user->id);
491
            $result = $highPerformanceTeamsGroupsMembersMapper->delete($highPerformanceTeamsGroupsMembers->id);
8056 nelberth 492
 
7811 nelberth 493
            if ($result) {
8055 nelberth 494
                $this->logger->info('Se borro el grupo el miembro con el email de  ' . $user->email, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7811 nelberth 495
 
496
                $data = [
497
                    'success' => true,
498
                    'data' => 'LABEL_RECORD_DELETED'
499
                ];
500
            } else {
501
 
502
                $data = [
503
                    'success' => false,
7818 nelberth 504
                    'data' => $highPerformanceTeamsGroupsMembersMapper->getError()
7811 nelberth 505
                ];
506
 
507
                return new JsonModel($data);
508
            }
509
        } else {
510
            $data = [
511
                'success' => false,
512
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
513
            ];
514
 
515
            return new JsonModel($data);
516
        }
517
 
518
        return new JsonModel($data);
519
    }
520
 
521
 
522
 
523
 
524
}