Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
15457 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
 
9
 
10
use Laminas\Mvc\Controller\AbstractActionController;
11
use Laminas\Log\LoggerInterface;
12
 
13
use Laminas\View\Model\ViewModel;
14
use Laminas\View\Model\JsonModel;
15
use LeadersLinked\Library\Functions;
16
use LeadersLinked\Mapper\UserMapper;
17
use LeadersLinked\Mapper\UserPasswordMapper;
18
 
19
use LeadersLinked\Model\User;
20
use LeadersLinked\Form\ChangePasswordForm;
21
use LeadersLinked\Model\CompanyUser;
22
use LeadersLinked\Mapper\CompanyUserMapper;
23
use LeadersLinked\Mapper\CompanyUserRoleMapper;
24
use LeadersLinked\Mapper\RoleMapper;
25
use LeadersLinked\Model\UserType;
26
use LeadersLinked\Model\UserPassword;
27
use PhpOffice\PhpSpreadsheet\IOFactory;
28
use LeadersLinked\Form\UserUploadForm;
29
use LeadersLinked\Mapper\CompanyServiceMapper;
30
use LeadersLinked\Model\CompanyService;
31
use LeadersLinked\Model\Role;
32
use LeadersLinked\Mapper\CompanyRoleMapper;
33
use LeadersLinked\Model\CompanyUserRole;
34
use LeadersLinked\Model\Notification;
35
use LeadersLinked\Model\EmailTemplate;
36
use LeadersLinked\Mapper\NotificationMapper;
37
use LeadersLinked\Mapper\UserNotificationSettingMapper;
38
use LeadersLinked\Mapper\EmailTemplateMapper;
39
use LeadersLinked\Library\QueueEmail;
40
use LeadersLinked\Mapper\NetworkMapper;
41
use LeadersLinked\Model\Network;
42
 
43
class UserRequestAccessController extends AbstractActionController
44
{
45
    /**
46
     *
47
     * @var AdapterInterface
48
     */
49
    private $adapter;
50
 
51
 
52
    /**
53
     *
54
     * @var AbstractAdapter
55
     */
56
    private $cache;
57
 
58
    /**
59
     *
60
     * @var  LoggerInterface
61
     */
62
    private $logger;
63
 
64
 
65
    /**
66
     *
67
     * @var array
68
     */
69
    private $config;
70
 
71
 
72
    /**
73
     *
74
     * @param AdapterInterface $adapter
75
     * @param AbstractAdapter $cache
76
     * @param LoggerInterface $logger
77
     * @param array $config
78
     */
79
    public function __construct($adapter, $cache , $logger, $config)
80
    {
81
        $this->adapter      = $adapter;
82
        $this->cache        = $cache;
83
        $this->logger       = $logger;
84
        $this->config       = $config;
85
 
86
    }
87
 
88
    public function indexAction()
89
    {
90
        $currentUserPlugin = $this->plugin('currentUserPlugin');
91
        $currentUser = $currentUserPlugin->getUser();
92
        $currentCompany = $currentUserPlugin->getCompany();
93
 
94
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
95
        $network = $currentNetworkPlugin->getNetwork();
96
 
97
 
98
        $request = $this->getRequest();
99
 
100
        if($request->isGet())
101
 
102
 
103
            $headers  = $request->getHeaders();
104
 
105
            $isJson = false;
106
            if($headers->has('Accept')) {
107
                $accept = $headers->get('Accept');
108
 
109
                $prioritized = $accept->getPrioritized();
110
 
111
                foreach($prioritized as $key => $value) {
112
                    $raw = trim($value->getRaw());
113
 
114
                    if(!$isJson) {
115
                        $isJson = strpos($raw, 'json');
116
                    }
117
 
118
                }
119
            }
120
 
121
            if($isJson) {
122
            {
123
 
124
                $search = $this->params()->fromQuery('search', []);
125
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
126
 
127
                //$page               = intval($this->params()->fromQuery('start', 1), 10);
128
                //$records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
129
 
130
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
131
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
132
 
133
                $order =  $this->params()->fromQuery('order', []);
134
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
135
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
136
 
137
                $fields =  ['first_name', 'last_name', 'email'];
138
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
139
 
140
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
141
                    $order_direction = 'ASC';
142
                }
143
 
144
 
145
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
146
                $allowApprove = $acl->isAllowed($currentUser->usertype_id, 'users/request-access/approve');
147
                $allowReject = $acl->isAllowed($currentUser->usertype_id, 'users/request-access/reject');
148
 
149
                $userMapper = UserMapper::getInstance($this->adapter);
150
                $paginator = $userMapper->fetchAllDataTableRequestAccessPendingByNetworkId($network->id, $search, $page, $records_x_page, $order_field, $order_direction);
151
 
152
                $items = [];
153
                $records = $paginator->getCurrentItems();
154
 
155
                foreach($records as $record)
156
                {
157
                    $actions = [];
158
 
159
 
160
                    $actions['link_approve'] = $allowApprove ? $this->url()->fromRoute('users/request-access/approve', ['id' => $record->uuid ]) : '';
161
                    $actions['link_reject'] = $allowReject ? $this->url()->fromRoute('users/request-access/reject', ['id' => $record->uuid ]) : '';
162
 
163
                    $item = [
164
 
165
 
166
                        'first_name' => $record->first_name,
167
                        'last_name' => $record->last_name,
168
                        'email' => $record->email,
169
                        'actions' => $actions
170
                    ];
171
 
172
                    array_push($items, $item);
173
                }
174
            }
175
 
176
            return new JsonModel([
177
                'success' => true,
178
                'data' => [
179
                    'items' => $items,
180
                    'total' => $paginator->getTotalItemCount(),
181
                ]
182
            ]);
183
 
184
 
185
 
186
        }
187
        else if($request->isGet()) {
188
            $this->layout()->setTemplate('layout/layout-backend');
189
            $viewModel = new ViewModel();
190
            $viewModel->setTemplate('leaders-linked/users-request-access/index.phtml');
191
 
192
            return $viewModel ;
193
 
194
        } else {
195
            return new JsonModel([
196
                'success' => false,
197
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
198
            ]);;
199
        }
200
    }
201
 
202
 
203
 
204
 
205
    public function approveAction()
206
    {
207
        $currentUserPlugin = $this->plugin('currentUserPlugin');
208
        $currentUser = $currentUserPlugin->getUser();
209
 
210
        //$currentCompany = $currentUserPlugin->getCompany();
211
 
212
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
213
        $currentNetwork = $currentNetworkPlugin->getNetwork();
214
 
215
        $request = $this->getRequest();
216
 
217
 
218
        if($request->isPost()) {
219
 
220
            $uuid = $this->params()->fromRoute('id');
221
            if(!$uuid) {
222
                return new JsonModel([
223
                    'success'   => false,
224
                    'data'      => 'ERROR_INVALID_PARAMETER'
225
                ]);
226
            }
227
 
228
            $userMapper = UserMapper::getInstance($this->adapter);
229
            $user = $userMapper->fetchOneByUuid($uuid);
230
 
231
            if(!$user) {
232
                return new JsonModel([
233
                    'success'   => false,
234
                    'data'      => 'ERROR_USER_NOT_FOUND'
235
                ]);
236
            }
237
 
238
            if($user->network_id !=  $currentNetwork->id) {
239
                return new JsonModel([
240
                    'success'   => false,
241
                    'data'      => 'ERROR_UNAUTHORIZED'
242
                ]);
243
            }
244
 
245
            if($user->request_access != User::REQUEST_ACCESS_PENDING) {
246
                return new JsonModel([
247
                    'success'   => false,
248
                    'data'      => 'ERROR_REQUEST_ACCESS_IS_NOT_PENDING'
249
                ]);
250
            }
251
 
252
 
253
            $user->request_access = User::REQUEST_ACCESS_APPROVED;
254
            $result = $userMapper->update($user);
255
            if($result) {
256
 
257
 
258
                $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
259
                $emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_REQUEST_ACCESS_APPROVED, $currentNetwork->id);
260
 
261
                if($emailTemplate) {
262
                    $arrayCont = [
263
                        'firstname'             => $user->first_name,
264
                        'lastname'              => $user->last_name,
265
                        'other_user_firstname'  => '',
266
                        'other_user_lastname'   => '',
267
                        'company_name'          => '',
268
                        'group_name'            => '',
269
                        'content'               => '',
270
                        'code'                  => '',
271
                        'link'                  => $this->url()->fromRoute('home', [], ['force_canonical' => true])
272
                    ];
273
 
274
                    $email = new QueueEmail($this->adapter);
275
                    $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
276
                }
277
 
278
 
279
                $this->logger->info('Usted autorizo el acceso al usuario : ' .   trim($user->first_name . ' ' . $user->last_name) . '('  . $user->email . ')  ha sido autorizado ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
280
 
281
                return new JsonModel([
282
                    'success'   => true,
283
                    'data'      =>  'LABEL_USER_REQUEST_ACCESS_HAS_BEEN_APPROVED'
284
                ]);
285
            }  else {
286
 
287
                return new JsonModel([
288
                    'success'   => false,
289
                    'data'      => $userMapper->getError()
290
                ]);
291
            }
292
 
293
 
294
        }
295
 
296
 
297
 
298
        return new JsonModel([
299
            'success' => false,
300
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
301
        ]);
302
    }
303
 
304
 
305
 
306
    public function rejectAction()
307
    {
308
        $currentUserPlugin = $this->plugin('currentUserPlugin');
309
        $currentUser = $currentUserPlugin->getUser();
310
 
311
        //$currentCompany = $currentUserPlugin->getCompany();
312
 
313
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
314
        $currentNetwork = $currentNetworkPlugin->getNetwork();
315
 
316
        $request = $this->getRequest();
317
 
318
 
319
        if($request->isPost()) {
320
 
321
            $uuid = $this->params()->fromRoute('id');
322
            if(!$uuid) {
323
                return new JsonModel([
324
                    'success'   => false,
325
                    'data'      => 'ERROR_INVALID_PARAMETER'
326
                ]);
327
            }
328
 
329
            $userMapper = UserMapper::getInstance($this->adapter);
330
            $user = $userMapper->fetchOneByUuid($uuid);
331
 
332
            if(!$user) {
333
                return new JsonModel([
334
                    'success'   => false,
335
                    'data'      => 'ERROR_USER_NOT_FOUND'
336
                ]);
337
            }
338
 
339
            if($user->network_id !=  $currentNetwork->id) {
340
                return new JsonModel([
341
                    'success'   => false,
342
                    'data'      => 'ERROR_UNAUTHORIZED'
343
                ]);
344
            }
345
 
346
            if($user->request_access != User::REQUEST_ACCESS_PENDING) {
347
                return new JsonModel([
348
                    'success'   => false,
349
                    'data'      => 'ERROR_REQUEST_ACCESS_IS_NOT_PENDING'
350
                ]);
351
            }
352
 
353
 
354
            $user->request_access = User::REQUEST_ACCESS_REJECTED;
355
            $result = $userMapper->update($user);
356
            if($result) {
357
 
358
 
359
                $emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);
360
                $emailTemplate = $emailTemplateMapper->fetchOneByCodeAndNetworkId(EmailTemplate::CODE_REQUEST_ACCESS_REJECT, $currentNetwork->id);
361
 
362
                if($emailTemplate) {
363
                    $arrayCont = [
364
                        'firstname'             => $user->first_name,
365
                        'lastname'              => $user->last_name,
366
                        'other_user_firstname'  => '',
367
                        'other_user_lastname'   => '',
368
                        'company_name'          => '',
369
                        'group_name'            => '',
370
                        'content'               => '',
371
                        'code'                  => '',
372
                        'link'                  => $this->url()->fromRoute('home', [], ['force_canonical' => true])
373
                    ];
374
 
375
                    $email = new QueueEmail($this->adapter);
376
                    $email->processEmailTemplate($emailTemplate, $arrayCont, $user->email, trim($user->first_name . ' ' . $user->last_name));
377
                }
378
 
379
 
380
                $this->logger->info('Usted rechazo el acceso al usuario : ' .   trim($user->first_name . ' ' . $user->last_name) . '('  . $user->email . ')  ha sido autorizado ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
381
 
382
                return new JsonModel([
383
                    'success'   => true,
384
                    'data'      =>  'LABEL_USER_REQUEST_ACCESS_HAS_BEEN_REJECTED'
385
                ]);
386
            }  else {
387
 
388
                return new JsonModel([
389
                    'success'   => false,
390
                    'data'      => $userMapper->getError()
391
                ]);
392
            }
393
 
394
 
395
        }
396
 
397
 
398
 
399
        return new JsonModel([
400
            'success' => false,
401
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
402
        ]);
403
    }
404
 
405
 
406
 
407
 
408
}