Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7231 nelberth 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
7233 nelberth 6
use Laminas\Authentication\AuthenticationService;
7
use Laminas\Authentication\Result as AuthResult;
7231 nelberth 8
use Laminas\Db\Adapter\AdapterInterface;
9
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
10
use Laminas\Mvc\Controller\AbstractActionController;
7233 nelberth 11
use Laminas\Mvc\I18n\Translator;
7231 nelberth 12
use Laminas\Log\LoggerInterface;
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
7233 nelberth 15
use LeadersLinked\Model\HighPerformanceTeamsGroups;
16
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
17
use LeadersLinked\Form\HighPerformanceTeamsGroupsForm;
7231 nelberth 18
use LeadersLinked\Library\Functions;
7233 nelberth 19
use LeadersLinked\Mapper\UserMapper;
20
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
21
use LeadersLinked\Mapper\CompanyMapper;
7276 nelberth 22
use LeadersLinked\Mapper\CompanyUserMapper;
7305 nelberth 23
 
24
 
25
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
26
use LeadersLinked\Form\HighPerformanceTeamsGroupsMembersForm;
27
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
7231 nelberth 28
class HighPerformanceTeamsGroupsController extends AbstractActionController
29
{
30
    /**
31
     *
32
     * @var AdapterInterface
33
     */
34
    private $adapter;
35
 
36
 
37
    /**
38
     *
39
     * @var AbstractAdapter
40
     */
41
    private $cache;
42
 
43
    /**
44
     *
45
     * @var  LoggerInterface
46
     */
47
    private $logger;
48
 
49
    /**
50
     *
51
     * @var array
52
     */
53
    private $config;
54
 
7233 nelberth 55
 
56
 
7231 nelberth 57
    /**
58
     *
59
     * @param AdapterInterface $adapter
60
     * @param AbstractAdapter $cache
61
     * @param LoggerInterface $logger
62
     * @param array $config
63
     */
7233 nelberth 64
    public function __construct($adapter, $cache , $logger, $config)
7231 nelberth 65
    {
66
        $this->adapter      = $adapter;
67
        $this->cache        = $cache;
68
        $this->logger       = $logger;
69
        $this->config       = $config;
7233 nelberth 70
 
71
 
7231 nelberth 72
    }
73
 
7233 nelberth 74
 
75
 
76
 
7231 nelberth 77
    public function indexAction()
78
    {
7233 nelberth 79
 
80
 
7231 nelberth 81
        $currentUserPlugin = $this->plugin('currentUserPlugin');
82
        $currentUser = $currentUserPlugin->getUser();
7233 nelberth 83
        $currentCompany = $currentUserPlugin->getCompany();
7231 nelberth 84
 
7233 nelberth 85
 
7231 nelberth 86
        $request = $this->getRequest();
87
        if($request->isGet()) {
88
 
89
 
90
            $headers  = $request->getHeaders();
91
 
92
            $isJson = false;
93
            if($headers->has('Accept')) {
94
                $accept = $headers->get('Accept');
95
 
96
                $prioritized = $accept->getPrioritized();
97
 
98
                foreach($prioritized as $key => $value) {
99
                    $raw = trim($value->getRaw());
100
 
101
                    if(!$isJson) {
102
                        $isJson = strpos($raw, 'json');
103
                    }
104
 
105
                }
106
            }
107
 
108
            if($isJson) {
109
 
7233 nelberth 110
 
7231 nelberth 111
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
7233 nelberth 112
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/edit');
113
                $allowDelete = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/delete');
7249 nelberth 114
                $allowView = $acl->isAllowed($currentUser->usertype_id,'high-performance-teams/groups/view');
7251 nelberth 115
 
7233 nelberth 116
 
117
                $search = $this->params()->fromQuery('search', []);
118
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
7231 nelberth 119
 
120
 
7233 nelberth 121
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
122
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
123
                $order =  $this->params()->fromQuery('order', []);
124
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
125
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
126
 
127
                $fields =  ['title', 'date'];
128
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
129
 
130
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
131
                    $order_direction = 'ASC';
7231 nelberth 132
                }
133
 
7243 nelberth 134
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7268 nelberth 135
                $paginator = $highPerformanceTeamsGroupsMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction, $currentCompany->id);
7233 nelberth 136
 
7231 nelberth 137
                $items = [];
7233 nelberth 138
 
139
                $records = $paginator->getCurrentItems();
140
 
7253 nelberth 141
 
7231 nelberth 142
                foreach($records as $record)
143
                {
7233 nelberth 144
 
145
 
146
 
7231 nelberth 147
                    $item = [
7233 nelberth 148
                        'title' => $record->title,
149
                        'description' => $record->description,
150
                        'status'=> $record->status,
151
                        'actions' => [
152
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('high-performance-teams/groups/edit', ['id' => $record->uuid]) : '',
153
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/delete', ['id' => $record->uuid]) : '',
7260 nelberth 154
                            'link_view' => $allowView ? $this->url()->fromRoute('high-performance-teams/groups/view', ['id' => $record->uuid]) : '',
7233 nelberth 155
                        ]
156
 
7231 nelberth 157
                    ];
158
 
159
                    array_push($items, $item);
7233 nelberth 160
 
7231 nelberth 161
                }
7233 nelberth 162
 
163
                return new JsonModel([
7231 nelberth 164
                    'success' => true,
7233 nelberth 165
                    'data' => [
166
                        'items' => $items,
167
                        'total' => $paginator->getTotalItemCount(),
168
                    ]
169
                ]);
7231 nelberth 170
 
7233 nelberth 171
            } else  {
7271 nelberth 172
                $formAdd = new HighPerformanceTeamsGroupsForm($this->adapter, $currentCompany->id);
7231 nelberth 173
                $this->layout()->setTemplate('layout/layout-backend');
174
                $viewModel = new ViewModel();
7233 nelberth 175
                $viewModel->setTemplate('leaders-linked/high-performance-teams-groups/index.phtml');
7231 nelberth 176
                $viewModel->setVariables([
7233 nelberth 177
                    'formAdd' => $formAdd,
7231 nelberth 178
                ]);
179
                return $viewModel ;
180
            }
181
        } else {
182
            return new JsonModel([
183
                'success' => false,
184
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
185
            ]);
186
        }
187
    }
7244 nelberth 188
 
7231 nelberth 189
    public function addAction()
190
    {
7233 nelberth 191
      $currentUserPlugin = $this->plugin('currentUserPlugin');
192
        $currentUser = $currentUserPlugin->getUser();
193
        $currentCompany = $currentUserPlugin->getCompany();
194
 
7231 nelberth 195
        $request = $this->getRequest();
196
        if($request->isPost()) {
7271 nelberth 197
            $form = new  HighPerformanceTeamsGroupsForm($this->adapter, $currentCompany->id);
7231 nelberth 198
            $dataPost = $request->getPost()->toArray();
199
 
200
            $form->setData($dataPost);
201
 
202
            if($form->isValid()) {
203
                $dataPost = (array) $form->getData();
7233 nelberth 204
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroups::STATUS_INACTIVE;
205
                $dataPost['company_id']=$currentCompany->id;
7231 nelberth 206
 
7233 nelberth 207
                $hydrator = new ObjectPropertyHydrator();
208
                $highPerformanceTeamsGroups = new HighPerformanceTeamsGroups();
209
                $hydrator->hydrate($dataPost, $highPerformanceTeamsGroups);
7231 nelberth 210
 
7233 nelberth 211
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7248 nelberth 212
 
7233 nelberth 213
                $result = $highPerformanceTeamsGroupsMapper->insert($highPerformanceTeamsGroups);
7231 nelberth 214
 
215
                if($result) {
7304 nelberth 216
 
7296 nelberth 217
                        $highPerformanceTeamsGroupsMember = new HighPerformanceTeamsGroupsMembers();
218
                        $highPerformanceTeamsGroupsMember->group_id  = $highPerformanceTeamsGroups->id;
7306 nelberth 219
 
7296 nelberth 220
                        $highPerformanceTeamsGroupsMember->user_id = $currentUser->id;
221
                        $highPerformanceTeamsGroupsMember->status = HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN;
222
                        $highPerformanceTeamsGroupsMember->type = HighPerformanceTeamsGroupsMembers::TYPE_CREATOR;
223
                        $highPerformanceTeamsGroupsMemberMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
7305 nelberth 224
 
7296 nelberth 225
                        $highPerformanceTeamsGroupsMemberMapper->insert($highPerformanceTeamsGroupsMember);
226
 
7287 nelberth 227
 
7244 nelberth 228
                    $this->logger->info('Se agrego el grupo de alto rendimiento ' . $highPerformanceTeamsGroups->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7231 nelberth 229
 
230
                    $data = [
231
                        'success'   => true,
232
                        'data'   => 'LABEL_RECORD_ADDED'
233
                    ];
234
                } else {
235
                    $data = [
236
                        'success'   => false,
7246 nelberth 237
                        'data'      => $highPerformanceTeamsGroupsMapper->getError()
7231 nelberth 238
                    ];
239
 
240
                }
241
 
242
                return new JsonModel($data);
243
 
244
            } else {
245
                $messages = [];
246
                $form_messages = (array) $form->getMessages();
247
                foreach($form_messages  as $fieldname => $field_messages)
248
                {
249
 
250
                    $messages[$fieldname] = array_values($field_messages);
251
                }
252
 
253
                return new JsonModel([
254
                    'success'   => false,
255
                    'data'   => $messages
256
                ]);
257
            }
7233 nelberth 258
 
7275 nelberth 259
        }else if ($request->isGet()) {
260
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
261
            $userMapper = UserMapper::getInstance($this->adapter);
262
            $datosCompanyUser = $companyUserMapper->fetchAllByCompanyId($currentCompany->id);
263
 
264
            $users=[];
265
 
266
            foreach($datosCompanyUser as $record){
267
                $datosUser = $userMapper->fetchOne($record->user_id);
268
 
269
                    $user=[
270
                        'uuid'=>$datosUser->uuid,
271
                        'email'=>$datosUser->email,
272
                        'first_name'=>$datosUser->first_name,
273
                        'last_name'=>$datosUser->last_name,
274
 
275
                    ];
276
                    array_push($users, $user);
277
 
278
            }
279
 
280
            return new JsonModel([
281
                'success' => true,
282
                'data' => $users
283
 
284
            ]);
7231 nelberth 285
        } else {
286
            $data = [
287
                'success' => false,
288
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
289
            ];
290
 
291
            return new JsonModel($data);
292
        }
293
 
294
        return new JsonModel($data);
7233 nelberth 295
 
296
 
7231 nelberth 297
    }
7233 nelberth 298
 
299
 
7259 nelberth 300
 
7233 nelberth 301
     public function editAction(){
302
 
303
        $currentUserPlugin = $this->plugin('currentUserPlugin');
304
        $currentUser = $currentUserPlugin->getUser();
305
        $currentCompany = $currentUserPlugin->getCompany();
7231 nelberth 306
        $request = $this->getRequest();
7233 nelberth 307
        $uuid = $this->params()->fromRoute('id');
308
 
7231 nelberth 309
 
7233 nelberth 310
        if(!$uuid) {
7231 nelberth 311
            $data = [
312
                'success'   => false,
313
                'data'   => 'ERROR_INVALID_PARAMETER'
314
            ];
315
 
316
            return new JsonModel($data);
317
        }
318
 
7233 nelberth 319
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7259 nelberth 320
        $group = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($uuid);
7233 nelberth 321
 
7259 nelberth 322
        if (!$group) {
7231 nelberth 323
            $data = [
324
                'success' => false,
7233 nelberth 325
                'data' => 'ERROR_RECORD_NOT_FOUND'
7231 nelberth 326
            ];
327
 
328
            return new JsonModel($data);
329
        }
7233 nelberth 330
 
7259 nelberth 331
        if ($group->company_id != $currentCompany->id) {
7233 nelberth 332
            return new JsonModel([
7231 nelberth 333
                'success' => false,
334
                'data' => 'ERROR_UNAUTHORIZED'
7233 nelberth 335
            ]);
336
        }
337
 
338
        if($request->isPost()) {
7271 nelberth 339
            $form = new  HighPerformanceTeamsGroupsForm($this->adapter, $currentCompany->id);
7231 nelberth 340
            $dataPost = $request->getPost()->toArray();
7233 nelberth 341
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : HighPerformanceTeamsGroups::STATUS_INACTIVE;
7231 nelberth 342
            $form->setData($dataPost);
343
 
344
            if($form->isValid()) {
345
                $dataPost = (array) $form->getData();
346
 
347
                $hydrator = new ObjectPropertyHydrator();
7259 nelberth 348
                $hydrator->hydrate($dataPost, $group);
349
                $result = $highPerformanceTeamsGroupsMapper->update($group);
7231 nelberth 350
 
7233 nelberth 351
                if($result) {
7259 nelberth 352
                    $this->logger->info('Se actualizo el grupo de alto rendimiento ' . $group->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7233 nelberth 353
 
354
                    $data = [
355
                        'success' => true,
356
                        'data' => 'LABEL_RECORD_UPDATED'
357
                    ];
358
                } else {
359
                    $data = [
360
                        'success'   => false,
361
                        'data'      => $highPerformanceTeamsGroupsMapper->getError()
362
                    ];
363
                }
7231 nelberth 364
 
7233 nelberth 365
                return new JsonModel($data);
7231 nelberth 366
 
367
            } else {
368
                $messages = [];
369
                $form_messages = (array) $form->getMessages();
370
                foreach($form_messages  as $fieldname => $field_messages)
371
                {
372
                    $messages[$fieldname] = array_values($field_messages);
373
                }
374
 
375
                return new JsonModel([
376
                    'success'   => false,
377
                    'data'   => $messages
378
                ]);
379
            }
7233 nelberth 380
        }else if ($request->isGet()) {
381
            $hydrator = new ObjectPropertyHydrator();
382
 
383
            $data = [
384
                'success' => true,
7259 nelberth 385
                'data' => $hydrator->extract($group)
7231 nelberth 386
            ];
387
 
7233 nelberth 388
            return new JsonModel($data);
389
        } else {
390
            $data = [
7231 nelberth 391
                'success' => false,
7233 nelberth 392
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
7231 nelberth 393
            ];
394
 
7233 nelberth 395
            return new JsonModel($data);
7231 nelberth 396
        }
397
 
7233 nelberth 398
        return new JsonModel($data);
7231 nelberth 399
 
7233 nelberth 400
    }
7231 nelberth 401
 
402
 
7233 nelberth 403
 
404
 
405
    public function deleteAction(){
406
        $currentUserPlugin = $this->plugin('currentUserPlugin');
407
        $currentCompany = $currentUserPlugin->getCompany();
408
        $currentUser = $currentUserPlugin->getUser();
409
 
410
        $request = $this->getRequest();
411
        $uuid = $this->params()->fromRoute('id');
7231 nelberth 412
 
413
 
7233 nelberth 414
        if (!$uuid) {
415
            $data = [
7231 nelberth 416
                'success' => false,
417
                'data' => 'ERROR_INVALID_PARAMETER'
418
            ];
7233 nelberth 419
 
420
            return new JsonModel($data);
7231 nelberth 421
        }
422
 
7233 nelberth 423
 
424
 
425
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
7259 nelberth 426
        $group = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($uuid);
7233 nelberth 427
 
7259 nelberth 428
        if (!$group) {
7233 nelberth 429
            $data = [
7231 nelberth 430
                'success' => false,
431
                'data' => 'ERROR_RECORD_NOT_FOUND'
432
            ];
7233 nelberth 433
 
434
            return new JsonModel($data);
7231 nelberth 435
        }
7233 nelberth 436
 
7259 nelberth 437
        if ($group->company_id != $currentCompany->id) {
7233 nelberth 438
            return new JsonModel([
7231 nelberth 439
                'success' => false,
440
                'data' => 'ERROR_UNAUTHORIZED'
7233 nelberth 441
            ]);
442
        }
443
 
444
        if ($request->isPost()) {
7231 nelberth 445
 
446
 
7259 nelberth 447
            $result = $highPerformanceTeamsGroupsMapper->delete($group->id);
7233 nelberth 448
            if ($result) {
7259 nelberth 449
                $this->logger->info('Se borro el grupo de alto rendimiento  ' . $group->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
7233 nelberth 450
 
451
                $data = [
452
                    'success' => true,
453
                    'data' => 'LABEL_RECORD_DELETED'
454
                ];
7231 nelberth 455
            } else {
7233 nelberth 456
 
457
                $data = [
458
                    'success' => false,
459
                    'data' => $highPerformanceTeamsGroupsMapper->getError()
460
                ];
461
 
462
                return new JsonModel($data);
7231 nelberth 463
            }
7233 nelberth 464
        } else {
465
            $data = [
7231 nelberth 466
                'success' => false,
7233 nelberth 467
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
7231 nelberth 468
            ];
7233 nelberth 469
 
7231 nelberth 470
            return new JsonModel($data);
471
        }
7233 nelberth 472
 
7231 nelberth 473
        return new JsonModel($data);
474
    }
475
 
7233 nelberth 476
 
477
 
7259 nelberth 478
 
7233 nelberth 479
}