Proyectos de Subversion LeadersLinked - Backend

Rev

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