Proyectos de Subversion LeadersLinked - Backend

Rev

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