Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15550 | Rev 15552 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
15387 efrain 1
<?php
15547 anderson 2
 
15387 efrain 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Form\ExtendUserMicrolearningForm;
14
use LeadersLinked\Mapper\QueryMapper;
15
use LeadersLinked\Mapper\UserMapper;
16
use Laminas\Db\Sql\Expression;
17
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
18
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
19
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
20
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
21
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
22
use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;
23
use Google\Service\Classroom\Student;
24
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
25
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
26
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
27
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
28
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
29
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
30
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
31
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
32
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
33
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
34
use LeadersLinked\Mapper\DeviceMapper;
35
use LeadersLinked\Model\Application;
36
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
37
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
38
use LeadersLinked\Form\TopicCapsuleForm;
39
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
40
use Laminas\Hydrator\ArraySerializableHydrator;
41
use Laminas\Db\ResultSet\HydratingResultSet;
42
use Laminas\Paginator\Adapter\DbSelect;
43
use Laminas\Paginator\Paginator;
44
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
45
use PhpOffice\PhpSpreadsheet\IOFactory;
46
use PhpOffice\PhpSpreadsheet\Spreadsheet;
47
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
48
use PhpOffice\PhpSpreadsheet\Calculation\TextData\Replace;
49
use LeadersLinked\Form\TopicReportForm;
50
use LeadersLinked\Model\User;
51
use LeadersLinked\Mapper\CompanyUserMapper;
52
use Laminas\Db\Sql\Select;
53
use LeadersLinked\Form\StudentReportForm;
54
use LeadersLinked\Model\UserType;
15388 efrain 55
use LeadersLinked\Model\CompanyUser;
15387 efrain 56
 
57
 
58
 
59
class ReportController extends AbstractActionController
60
{
61
    /**
62
     *
63
     * @var AdapterInterface
64
     */
65
    private $adapter;
15547 anderson 66
 
67
 
15387 efrain 68
    /**
69
     *
70
     * @var AbstractAdapter
71
     */
72
    private $cache;
15547 anderson 73
 
15387 efrain 74
    /**
75
     *
76
     * @var  LoggerInterface
77
     */
78
    private $logger;
15547 anderson 79
 
80
 
15387 efrain 81
    /**
82
     *
83
     * @param AdapterInterface $adapter
84
     * @param AbstractAdapter $cache
85
     * @param LoggerInterface $logger
86
     * @param array $config
87
     */
15547 anderson 88
    public function __construct($adapter, $cache, $logger, $config)
15387 efrain 89
    {
90
        $this->adapter      = $adapter;
91
        $this->cache        = $cache;
92
        $this->logger       = $logger;
93
        $this->config       = $config;
94
    }
15547 anderson 95
 
96
 
97
    public function indexAction()
15387 efrain 98
    {
15547 anderson 99
 
15387 efrain 100
        $this->layout()->setTemplate('layout/layout-backend.phtml');
101
        $viewModel = new ViewModel();
102
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
15547 anderson 103
        return $viewModel;
15387 efrain 104
    }
15547 anderson 105
 
106
 
107
 
108
 
15387 efrain 109
    public function usersBlockedAction()
110
    {
15548 anderson 111
        $currentUserPlugin = $this->plugin('currentUserPlugin');
112
        $currentUser = $currentUserPlugin->getUser();
113
        $currentCompany = $currentUserPlugin->getCompany();
15387 efrain 114
 
15551 anderson 115
 
116
 
117
        $search = $this->params()->fromQuery('search', []);
118
        $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
119
        $blockUsers               = intval($this->params()->fromQuery('start', 1), 10);
120
        $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
121
        $order =  $this->params()->fromQuery('order', []);
122
        $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
123
        $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
124
 
125
        $fields =  ['title'];
126
        $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
127
 
128
        if (!in_array($order_direction, ['ASC', 'DESC'])) {
129
            $order_direction = 'ASC';
130
        }
131
 
132
 
133
 
134
 
135
 
136
 
137
 
138
 
139
 
140
 
141
 
142
 
143
 
15548 anderson 144
        $request = $this->getRequest();
15387 efrain 145
 
15548 anderson 146
        if ($request->isGet()) {
15387 efrain 147
 
15548 anderson 148
            $headers  = $request->getHeaders();
15387 efrain 149
 
15548 anderson 150
            $isJson = false;
151
            if ($headers->has('Accept')) {
152
                $accept = $headers->get('Accept');
15547 anderson 153
 
15548 anderson 154
                $prioritized = $accept->getPrioritized();
15547 anderson 155
 
15548 anderson 156
                foreach ($prioritized as $key => $value) {
157
                    $raw = trim($value->getRaw());
15547 anderson 158
 
15548 anderson 159
                    if (!$isJson) {
160
                        $isJson = strpos($raw, 'json');
161
                    }
162
                }
163
            }
15547 anderson 164
 
165
 
15548 anderson 166
            if ($isJson) {
167
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
168
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'reports/users-blocked/excel');
15547 anderson 169
 
170
 
15548 anderson 171
                $queryMapper = QueryMapper::getInstance($this->adapter);
15547 anderson 172
 
15548 anderson 173
                if ($currentCompany) {
15547 anderson 174
 
15548 anderson 175
                    $user_ids = [];
15547 anderson 176
 
15548 anderson 177
                    $select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);
178
                    $select->columns(['user_id']);
179
                    $select->where->equalTo('company_id', $currentCompany->id);
180
                    $select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);
15547 anderson 181
 
15548 anderson 182
                    $records = $queryMapper->fetchAll($select);
183
                    foreach ($records as $record) {
184
                        if (!in_array($record['user_id'], $user_ids)) {
185
                            array_push($user_ids, $record['user_id']);
186
                        }
187
                    }
15547 anderson 188
 
189
 
15548 anderson 190
                    $select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);
191
                    $select->columns(['user_id']);
192
                    $select->where->equalTo('company_id', $currentCompany->id);
193
                    $select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);
194
                    $records = $queryMapper->fetchAll($select);
195
                    foreach ($records as $record) {
196
                        if (!in_array($record['user_id'], $user_ids)) {
197
                            array_push($user_ids, $record['user_id']);
198
                        }
199
                    }
15547 anderson 200
 
201
 
15548 anderson 202
                    $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
203
                    $select->columns([
204
                        'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
205
                        'blocked', 'login_attempt', 'email_verified'
206
                    ]);
15547 anderson 207
 
15548 anderson 208
                    $select->where->in('id', $user_ids);
209
                    $select->where->equalTo('status', User::STATUS_ACTIVE);
210
                    $select->where->equalTo('blocked', User::BLOCKED_YES);
211
                    $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
212
                    $select->where->equalTo('network_id', $currentUser->network_id);
213
                    $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
214
                    $select->order('first_name ASC, last_name ASC');
215
                } else {
216
                    $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
217
                    $select->columns([
218
                        'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
219
                        'blocked', 'login_attempt', 'email_verified'
220
                    ]);
15547 anderson 221
 
15548 anderson 222
                    $select->where->equalTo('status', User::STATUS_ACTIVE);
223
                    $select->where->equalTo('blocked', User::BLOCKED_YES);
224
                    $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
225
                    $select->where->equalTo('network_id', $currentUser->network_id);
226
                    $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
227
                    $select->order('first_name ASC, last_name ASC');
228
                }
15547 anderson 229
 
15548 anderson 230
                $items = [];
231
                $records = $queryMapper->fetchAll($select);
15547 anderson 232
 
15548 anderson 233
                foreach ($records as $record) {
234
                    if ($record['last_activity_on']) {
15547 anderson 235
 
15548 anderson 236
                        $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
237
                        $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
238
                    } else {
239
                        $last_activity_on = '';
240
                    }
15547 anderson 241
 
15548 anderson 242
                    $item = [
243
                        'uuid' => $record['uuid'],
244
                        'first_name' => ucwords(strtolower($record['first_name'])),
245
                        'last_name' => ucwords(strtolower($record['last_name'])),
246
                        'email' => strtolower($record['email']),
247
                        'last_activity_on' => $last_activity_on
15547 anderson 248
 
15548 anderson 249
                    ];
15547 anderson 250
 
15548 anderson 251
                    array_push($items, $item);
252
                }
15547 anderson 253
 
254
 
255
 
256
 
15548 anderson 257
                $data = [
258
                    'items' => $items
15547 anderson 259
 
15548 anderson 260
                ];
15547 anderson 261
 
15548 anderson 262
                if ($allowDownload) {
263
                    $data['link_download'] = $this->url()->fromRoute('reports/users-blocked/excel');
264
                } else {
265
                    $data['link_download'] = '';
266
                }
15547 anderson 267
 
268
 
269
 
15548 anderson 270
                return new JsonModel([
271
                    'success' => true,
272
                    'data' => $data
273
                ]);
274
            } else {
15547 anderson 275
 
15548 anderson 276
                $this->layout()->setTemplate('layout/layout-backend');
277
                $viewModel = new ViewModel();
278
                $viewModel->setTemplate('leaders-linked/reports/users-blocked.phtml');
15547 anderson 279
 
280
 
15548 anderson 281
                return $viewModel;
282
            }
283
        } else {
284
            return new JsonModel([
285
                'success' => false,
286
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
287
            ]);
288
        }
15387 efrain 289
    }
15547 anderson 290
 
15387 efrain 291
    public function usersBlockedExcelAction()
292
    {
293
        $currentUserPlugin = $this->plugin('currentUserPlugin');
294
        $currentUser = $currentUserPlugin->getUser();
295
        $currentCompany = $currentUserPlugin->getCompany();
15547 anderson 296
 
15387 efrain 297
        $request = $this->getRequest();
15547 anderson 298
 
299
        if ($request->isGet()) {
300
 
15387 efrain 301
            $queryMapper = QueryMapper::getInstance($this->adapter);
15547 anderson 302
 
303
            if ($currentCompany) {
304
 
15388 efrain 305
                $user_ids = [];
15547 anderson 306
 
15388 efrain 307
                $select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);
308
                $select->columns(['user_id']);
309
                $select->where->equalTo('company_id', $currentCompany->id);
310
                $select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);
15547 anderson 311
 
15388 efrain 312
                $records = $queryMapper->fetchAll($select);
15547 anderson 313
                foreach ($records as $record) {
314
                    if (!in_array($record['user_id'], $user_ids)) {
315
                        array_push($user_ids, $record['user_id']);
15388 efrain 316
                    }
317
                }
15547 anderson 318
 
319
 
15388 efrain 320
                $select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);
321
                $select->columns(['user_id']);
322
                $select->where->equalTo('company_id', $currentCompany->id);
323
                $select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);
324
                $records = $queryMapper->fetchAll($select);
15547 anderson 325
                foreach ($records as $record) {
326
                    if (!in_array($record['user_id'], $user_ids)) {
327
                        array_push($user_ids, $record['user_id']);
15388 efrain 328
                    }
329
                }
15547 anderson 330
 
331
 
15388 efrain 332
                $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
333
                $select->columns([
15387 efrain 334
                    'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
335
                    'blocked', 'login_attempt', 'email_verified'
336
                ]);
15547 anderson 337
 
15388 efrain 338
                $select->where->in('id', $user_ids);
339
                $select->where->equalTo('status', User::STATUS_ACTIVE);
340
                $select->where->equalTo('blocked', User::BLOCKED_YES);
15547 anderson 341
                $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
15388 efrain 342
                $select->where->equalTo('network_id', $currentUser->network_id);
343
                $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
15387 efrain 344
                $select->order('first_name ASC, last_name ASC');
345
            } else {
346
                $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
15547 anderson 347
                $select->columns([
348
                    'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
349
                    'blocked', 'login_attempt', 'email_verified'
350
                ]);
351
 
15387 efrain 352
                $select->where->equalTo('status', User::STATUS_ACTIVE);
353
                $select->where->equalTo('blocked', User::BLOCKED_YES);
15547 anderson 354
                $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
15387 efrain 355
                $select->where->equalTo('network_id', $currentUser->network_id);
356
                $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
357
                $select->order('first_name ASC, last_name ASC');
358
            }
15547 anderson 359
 
15387 efrain 360
            $items = [];
361
            $records = $queryMapper->fetchAll($select);
15547 anderson 362
 
363
            foreach ($records as $record) {
364
                if ($record['last_activity_on']) {
365
 
15387 efrain 366
                    $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
367
                    $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
368
                } else {
369
                    $last_activity_on = '';
370
                }
15547 anderson 371
 
15387 efrain 372
                $item = [
373
                    'uuid' => $record['uuid'],
374
                    'first_name' => $record['first_name'],
375
                    'last_name' => $record['last_name'],
376
                    'email' => $record['email'],
377
                    'last_activity_on' => $last_activity_on
15547 anderson 378
 
15387 efrain 379
                ];
15547 anderson 380
 
15387 efrain 381
                array_push($items, $item);
382
            }
15547 anderson 383
 
15387 efrain 384
            $spreadsheet = new Spreadsheet();
385
            $spreadsheet->getProperties()->setTitle("Usuarios Bloqueados");
15547 anderson 386
 
387
 
388
 
15387 efrain 389
            $spreadsheet->setActiveSheetIndex(0);
390
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');
391
            $spreadsheet->getActiveSheet()->SetCellValue('B1', date('d/m/Y h:i a'));
392
 
15547 anderson 393
 
394
 
15387 efrain 395
            $spreadsheet->getActiveSheet()->SetCellValue('A3', 'Nombre');
396
            $spreadsheet->getActiveSheet()->SetCellValue('B3', 'Apellido');
397
            $spreadsheet->getActiveSheet()->SetCellValue('C3', 'Correo electrónico');
398
            $spreadsheet->getActiveSheet()->SetCellValue('D3', 'Ultima actividad');
399
 
400
 
15547 anderson 401
 
15387 efrain 402
            $i = 4;
15547 anderson 403
            foreach ($records as $record) {
15387 efrain 404
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
405
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
406
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
407
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['last_activity_on']);
408
 
409
                $i++;
410
            }
411
 
15547 anderson 412
 
15387 efrain 413
            $fileName = 'reporte_usuarios_bloqueados_' . time() . '.xls';
15547 anderson 414
 
15387 efrain 415
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_usuarios_bloqueados_' . time());
15547 anderson 416
 
417
 
418
 
419
 
420
 
15387 efrain 421
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
422
            $writer->save($tempFilename);
15547 anderson 423
 
15387 efrain 424
            $content = file_get_contents($tempFilename);
425
            @unlink($tempFilename);
15547 anderson 426
 
15387 efrain 427
            return new JsonModel([
428
                'success' => true,
429
                'data' => [
430
                    'content' => base64_encode($content),
431
                    'basename' => $fileName
15547 anderson 432
 
15387 efrain 433
                ]
434
            ]);
435
        } else {
436
            return new JsonModel([
437
                'success' => false,
438
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
439
            ]);
440
        }
441
    }
15547 anderson 442
}