Proyectos de Subversion LeadersLinked - Backend

Rev

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