Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15388 | Rev 15548 | 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
    {
15547 anderson 111
        // $currentUserPlugin = $this->plugin('currentUserPlugin');
112
        // $currentUser = $currentUserPlugin->getUser();
113
        // $currentCompany = $currentUserPlugin->getCompany();
15387 efrain 114
 
15547 anderson 115
        // $request = $this->getRequest();
15387 efrain 116
 
15547 anderson 117
        // if($request->isGet())
118
        // {
15387 efrain 119
 
15547 anderson 120
        //     $headers  = $request->getHeaders();
15387 efrain 121
 
15547 anderson 122
        //     $isJson = false;
123
        //     if($headers->has('Accept')) {
124
        //         $accept = $headers->get('Accept');
125
 
126
        //         $prioritized = $accept->getPrioritized();
127
 
128
        //         foreach($prioritized as $key => $value) {
129
        //             $raw = trim($value->getRaw());
130
 
131
        //             if(!$isJson) {
132
        //                 $isJson = strpos($raw, 'json');
133
        //             }
134
 
135
        //         }
136
        //     }
137
 
138
 
139
        //     if($isJson) {
140
        //         $acl = $this->getEvent()->getViewModel()->getVariable('acl');
141
        //         $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'reports/users-blocked/excel');
142
 
143
 
144
        //         $queryMapper = QueryMapper::getInstance($this->adapter);
145
 
146
        //         if($currentCompany) {
147
 
148
        //             $user_ids = [];
149
 
150
        //             $select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);
151
        //             $select->columns(['user_id']);
152
        //             $select->where->equalTo('company_id', $currentCompany->id);
153
        //             $select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);
154
 
155
        //             $records = $queryMapper->fetchAll($select);
156
        //             foreach($records as $record)
157
        //             {
158
        //                 if(!in_array($record['user_id'], $user_ids)) {
159
        //                     array_push($user_ids , $record['user_id']);
160
        //                 }
161
        //             }
162
 
163
 
164
        //             $select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);
165
        //             $select->columns(['user_id']);
166
        //             $select->where->equalTo('company_id', $currentCompany->id);
167
        //             $select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);
168
        //             $records = $queryMapper->fetchAll($select);
169
        //             foreach($records as $record)
170
        //             {
171
        //                 if(!in_array($record['user_id'], $user_ids)) {
172
        //                     array_push($user_ids , $record['user_id']);
173
        //                 }
174
        //             }
175
 
176
 
177
        //             $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
178
        //             $select->columns([
179
        //                 'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
180
        //                 'blocked', 'login_attempt', 'email_verified'
181
        //             ]);
182
 
183
        //             $select->where->in('id', $user_ids);
184
        //             $select->where->equalTo('status', User::STATUS_ACTIVE);
185
        //             $select->where->equalTo('blocked', User::BLOCKED_YES);
186
        //             $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES );
187
        //             $select->where->equalTo('network_id', $currentUser->network_id);
188
        //             $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
189
        //             $select->order('first_name ASC, last_name ASC');
190
        //         } else {
191
        //             $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
192
        //             $select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
193
        //                 'blocked', 'login_attempt', 'email_verified']);
194
 
195
        //             $select->where->equalTo('status', User::STATUS_ACTIVE);
196
        //             $select->where->equalTo('blocked', User::BLOCKED_YES);
197
        //             $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES );
198
        //             $select->where->equalTo('network_id', $currentUser->network_id);
199
        //             $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
200
        //             $select->order('first_name ASC, last_name ASC');
201
        //         }
202
 
203
        //         $items = [];
204
        //         $records = $queryMapper->fetchAll($select);
205
 
206
        //         foreach($records as $record)
207
        //         {
208
        //             if($record['last_activity_on']) {
209
 
210
        //                 $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
211
        //                 $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
212
        //             } else {
213
        //                 $last_activity_on = '';
214
        //             }
215
 
216
        //             $item = [
217
        //                 'uuid' => $record['uuid'],
218
        //                 'first_name' => ucwords(strtolower($record['first_name'])),
219
        //                 'last_name' => ucwords(strtolower($record['last_name'])),
220
        //                 'email' => strtolower($record['email']),
221
        //                 'last_activity_on' => $last_activity_on
222
 
223
        //             ];
224
 
225
        //             array_push($items, $item);
226
        //         }
227
 
228
 
229
 
230
 
231
        //         $data = [
232
        //             'items' => $items
233
 
234
        //         ];
235
 
236
        //         if($allowDownload) {
237
        //             $data['link_download'] = $this->url()->fromRoute('reports/users-blocked/excel' );
238
        //         } else {
239
        //             $data['link_download'] = '';
240
        //         }
241
 
242
 
243
 
244
        //         return new JsonModel([
245
        //             'success' => true,
246
        //             'data' => $data
247
        //         ]);
248
        //     } else {
249
 
250
        //         $this->layout()->setTemplate('layout/layout-backend');
251
        //         $viewModel = new ViewModel();
252
        //         $viewModel->setTemplate('leaders-linked/reports/users-blocked.phtml');
253
 
254
 
255
        //         return $viewModel ;
256
        //     }
257
 
258
        // } else {
259
        //     return new JsonModel([
260
        //         'success' => false,
261
        //         'data' => 'ERROR_METHOD_NOT_ALLOWED'
262
        //     ]);
263
        // }
15387 efrain 264
    }
15547 anderson 265
 
15387 efrain 266
    public function usersBlockedExcelAction()
267
    {
268
        $currentUserPlugin = $this->plugin('currentUserPlugin');
269
        $currentUser = $currentUserPlugin->getUser();
270
        $currentCompany = $currentUserPlugin->getCompany();
15547 anderson 271
 
15387 efrain 272
        $request = $this->getRequest();
15547 anderson 273
 
274
        if ($request->isGet()) {
275
 
15387 efrain 276
            $queryMapper = QueryMapper::getInstance($this->adapter);
15547 anderson 277
 
278
            if ($currentCompany) {
279
 
15388 efrain 280
                $user_ids = [];
15547 anderson 281
 
15388 efrain 282
                $select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);
283
                $select->columns(['user_id']);
284
                $select->where->equalTo('company_id', $currentCompany->id);
285
                $select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);
15547 anderson 286
 
15388 efrain 287
                $records = $queryMapper->fetchAll($select);
15547 anderson 288
                foreach ($records as $record) {
289
                    if (!in_array($record['user_id'], $user_ids)) {
290
                        array_push($user_ids, $record['user_id']);
15388 efrain 291
                    }
292
                }
15547 anderson 293
 
294
 
15388 efrain 295
                $select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);
296
                $select->columns(['user_id']);
297
                $select->where->equalTo('company_id', $currentCompany->id);
298
                $select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);
299
                $records = $queryMapper->fetchAll($select);
15547 anderson 300
                foreach ($records as $record) {
301
                    if (!in_array($record['user_id'], $user_ids)) {
302
                        array_push($user_ids, $record['user_id']);
15388 efrain 303
                    }
304
                }
15547 anderson 305
 
306
 
15388 efrain 307
                $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
308
                $select->columns([
15387 efrain 309
                    'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
310
                    'blocked', 'login_attempt', 'email_verified'
311
                ]);
15547 anderson 312
 
15388 efrain 313
                $select->where->in('id', $user_ids);
314
                $select->where->equalTo('status', User::STATUS_ACTIVE);
315
                $select->where->equalTo('blocked', User::BLOCKED_YES);
15547 anderson 316
                $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
15388 efrain 317
                $select->where->equalTo('network_id', $currentUser->network_id);
318
                $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
15387 efrain 319
                $select->order('first_name ASC, last_name ASC');
320
            } else {
321
                $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
15547 anderson 322
                $select->columns([
323
                    'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
324
                    'blocked', 'login_attempt', 'email_verified'
325
                ]);
326
 
15387 efrain 327
                $select->where->equalTo('status', User::STATUS_ACTIVE);
328
                $select->where->equalTo('blocked', User::BLOCKED_YES);
15547 anderson 329
                $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);
15387 efrain 330
                $select->where->equalTo('network_id', $currentUser->network_id);
331
                $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
332
                $select->order('first_name ASC, last_name ASC');
333
            }
15547 anderson 334
 
15387 efrain 335
            $items = [];
336
            $records = $queryMapper->fetchAll($select);
15547 anderson 337
 
338
            foreach ($records as $record) {
339
                if ($record['last_activity_on']) {
340
 
15387 efrain 341
                    $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
342
                    $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
343
                } else {
344
                    $last_activity_on = '';
345
                }
15547 anderson 346
 
15387 efrain 347
                $item = [
348
                    'uuid' => $record['uuid'],
349
                    'first_name' => $record['first_name'],
350
                    'last_name' => $record['last_name'],
351
                    'email' => $record['email'],
352
                    'last_activity_on' => $last_activity_on
15547 anderson 353
 
15387 efrain 354
                ];
15547 anderson 355
 
15387 efrain 356
                array_push($items, $item);
357
            }
15547 anderson 358
 
15387 efrain 359
            $spreadsheet = new Spreadsheet();
360
            $spreadsheet->getProperties()->setTitle("Usuarios Bloqueados");
15547 anderson 361
 
362
 
363
 
15387 efrain 364
            $spreadsheet->setActiveSheetIndex(0);
365
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');
366
            $spreadsheet->getActiveSheet()->SetCellValue('B1', date('d/m/Y h:i a'));
367
 
15547 anderson 368
 
369
 
15387 efrain 370
            $spreadsheet->getActiveSheet()->SetCellValue('A3', 'Nombre');
371
            $spreadsheet->getActiveSheet()->SetCellValue('B3', 'Apellido');
372
            $spreadsheet->getActiveSheet()->SetCellValue('C3', 'Correo electrónico');
373
            $spreadsheet->getActiveSheet()->SetCellValue('D3', 'Ultima actividad');
374
 
375
 
15547 anderson 376
 
15387 efrain 377
            $i = 4;
15547 anderson 378
            foreach ($records as $record) {
15387 efrain 379
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
380
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
381
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
382
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['last_activity_on']);
383
 
384
                $i++;
385
            }
386
 
15547 anderson 387
 
15387 efrain 388
            $fileName = 'reporte_usuarios_bloqueados_' . time() . '.xls';
15547 anderson 389
 
15387 efrain 390
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_usuarios_bloqueados_' . time());
15547 anderson 391
 
392
 
393
 
394
 
395
 
15387 efrain 396
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
397
            $writer->save($tempFilename);
15547 anderson 398
 
15387 efrain 399
            $content = file_get_contents($tempFilename);
400
            @unlink($tempFilename);
15547 anderson 401
 
15387 efrain 402
            return new JsonModel([
403
                'success' => true,
404
                'data' => [
405
                    'content' => base64_encode($content),
406
                    'basename' => $fileName
15547 anderson 407
 
15387 efrain 408
                ]
409
            ]);
410
        } else {
411
            return new JsonModel([
412
                'success' => false,
413
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
414
            ]);
415
        }
416
    }
15547 anderson 417
}