Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15388 | Ir a la última revisión | | 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;
54
 
55
 
56
 
57
class ReportController extends AbstractActionController
58
{
59
    /**
60
     *
61
     * @var AdapterInterface
62
     */
63
    private $adapter;
64
 
65
 
66
    /**
67
     *
68
     * @var AbstractAdapter
69
     */
70
    private $cache;
71
 
72
    /**
73
     *
74
     * @var  LoggerInterface
75
     */
76
    private $logger;
77
 
78
 
79
    /**
80
     *
81
     * @param AdapterInterface $adapter
82
     * @param AbstractAdapter $cache
83
     * @param LoggerInterface $logger
84
     * @param array $config
85
     */
86
    public function __construct($adapter, $cache , $logger, $config)
87
    {
88
        $this->adapter      = $adapter;
89
        $this->cache        = $cache;
90
        $this->logger       = $logger;
91
        $this->config       = $config;
92
 
93
 
94
    }
95
 
96
 
97
    public function indexAction()
98
    {
99
 
100
        $this->layout()->setTemplate('layout/layout-backend.phtml');
101
        $viewModel = new ViewModel();
102
        $viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');
103
        return $viewModel ;
104
    }
105
 
106
 
107
 
108
 
109
    public function usersBlockedAction()
110
    {
111
        $currentUserPlugin = $this->plugin('currentUserPlugin');
112
        $currentUser = $currentUserPlugin->getUser();
113
        $currentCompany = $currentUserPlugin->getCompany();
114
 
115
        $request = $this->getRequest();
116
 
117
        if($request->isGet())
118
        {
119
 
120
            $headers  = $request->getHeaders();
121
 
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
                    $select = $queryMapper->getSql()->select();
149
                    $select->columns(['status', 'backend', 'creator']);
150
                    $select->from(['tb1' => CompanyUserMapper::_TABLE]);
151
                    $select->join(['tb2' => UserMapper::_TABLE] , 'tb1.user_id = tb2.id', [
152
                        'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
153
                        'blocked', 'login_attempt', 'email_verified'
154
 
155
                    ]);
156
 
157
                    $select->where->equalTo('tb1.company_id', $currentCompany->id);
158
                    $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
159
                    $select->where->equalTo('tb2.blocked', User::BLOCKED_YES);
160
                    $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES );
161
                    $select->where->equalTo('tb2.network_id', $currentUser->network_id);
162
                    $select->where->in('tb2.usertype_id', [UserType::ADMIN, UserType::USER]);
163
                    $select->order('first_name ASC, last_name ASC');
164
                } else {
165
                    $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
166
                    $select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
167
                        'blocked', 'login_attempt', 'email_verified']);
168
 
169
                    $select->where->equalTo('status', User::STATUS_ACTIVE);
170
                    $select->where->equalTo('blocked', User::BLOCKED_YES);
171
                    $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES );
172
                    $select->where->equalTo('network_id', $currentUser->network_id);
173
                    $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
174
                    $select->order('first_name ASC, last_name ASC');
175
                }
176
 
177
                $items = [];
178
                $records = $queryMapper->fetchAll($select);
179
 
180
                foreach($records as $record)
181
                {
182
                    if($record['last_activity_on']) {
183
 
184
                        $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
185
                        $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
186
                    } else {
187
                        $last_activity_on = '';
188
                    }
189
 
190
                    $item = [
191
                        'uuid' => $record['uuid'],
192
                        'first_name' => ucwords(strtolower($record['first_name'])),
193
                        'last_name' => ucwords(strtolower($record['last_name'])),
194
                        'email' => strtolower($record['email']),
195
                        'last_activity_on' => $last_activity_on
196
 
197
                    ];
198
 
199
                    array_push($items, $item);
200
                }
201
 
202
 
203
 
204
 
205
                $data = [
206
                    'items' => $items
207
 
208
                ];
209
 
210
                if($allowDownload) {
211
                    $data['link_download'] = $this->url()->fromRoute('reports/users-blocked/excel' );
212
                } else {
213
                    $data['link_download'] = '';
214
                }
215
 
216
 
217
 
218
                return new JsonModel([
219
                    'success' => true,
220
                    'data' => $data
221
                ]);
222
            } else {
223
 
224
                $this->layout()->setTemplate('layout/layout-backend');
225
                $viewModel = new ViewModel();
226
                $viewModel->setTemplate('leaders-linked/reports/users-blocked.phtml');
227
 
228
 
229
                return $viewModel ;
230
            }
231
 
232
        } else {
233
            return new JsonModel([
234
                'success' => false,
235
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
236
            ]);
237
        }
238
    }
239
 
240
    public function usersBlockedExcelAction()
241
    {
242
        $currentUserPlugin = $this->plugin('currentUserPlugin');
243
        $currentUser = $currentUserPlugin->getUser();
244
        $currentCompany = $currentUserPlugin->getCompany();
245
 
246
        $request = $this->getRequest();
247
 
248
        if($request->isGet())
249
        {
250
 
251
            $queryMapper = QueryMapper::getInstance($this->adapter);
252
 
253
            if($currentCompany) {
254
 
255
                $select = $queryMapper->getSql()->select();
256
                $select->columns(['status', 'backend', 'creator']);
257
                $select->from(['tb1' => CompanyUserMapper::_TABLE]);
258
                $select->join(['tb2' => UserMapper::_TABLE] , 'tb1.user_id = tb2.id', [
259
                    'id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
260
                    'blocked', 'login_attempt', 'email_verified'
261
 
262
                ]);
263
 
264
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
265
                $select->where->equalTo('tb2.status', User::STATUS_ACTIVE);
266
                $select->where->equalTo('tb2.blocked', User::BLOCKED_YES);
267
                $select->where->equalTo('tb2.email_verified', User::EMAIL_VERIFIED_YES );
268
                $select->where->equalTo('tb2.network_id', $currentUser->network_id);
269
                $select->where->in('tb2.usertype_id', [UserType::ADMIN, UserType::USER]);
270
                $select->order('first_name ASC, last_name ASC');
271
            } else {
272
                $select = $queryMapper->getSql()->select(UserMapper::_TABLE);
273
                $select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image',
274
                    'blocked', 'login_attempt', 'email_verified']);
275
 
276
                $select->where->equalTo('status', User::STATUS_ACTIVE);
277
                $select->where->equalTo('blocked', User::BLOCKED_YES);
278
                $select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES );
279
                $select->where->equalTo('network_id', $currentUser->network_id);
280
                $select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);
281
                $select->order('first_name ASC, last_name ASC');
282
            }
283
 
284
            $items = [];
285
            $records = $queryMapper->fetchAll($select);
286
 
287
            foreach($records as $record)
288
            {
289
                if($record['last_activity_on']) {
290
 
291
                    $dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);
292
                    $last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');
293
                } else {
294
                    $last_activity_on = '';
295
                }
296
 
297
                $item = [
298
                    'uuid' => $record['uuid'],
299
                    'first_name' => $record['first_name'],
300
                    'last_name' => $record['last_name'],
301
                    'email' => $record['email'],
302
                    'last_activity_on' => $last_activity_on
303
 
304
                ];
305
 
306
                array_push($items, $item);
307
            }
308
 
309
            $spreadsheet = new Spreadsheet();
310
            $spreadsheet->getProperties()->setTitle("Usuarios Bloqueados");
311
 
312
 
313
 
314
            $spreadsheet->setActiveSheetIndex(0);
315
            $spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');
316
            $spreadsheet->getActiveSheet()->SetCellValue('B1', date('d/m/Y h:i a'));
317
 
318
 
319
 
320
            $spreadsheet->getActiveSheet()->SetCellValue('A3', 'Nombre');
321
            $spreadsheet->getActiveSheet()->SetCellValue('B3', 'Apellido');
322
            $spreadsheet->getActiveSheet()->SetCellValue('C3', 'Correo electrónico');
323
            $spreadsheet->getActiveSheet()->SetCellValue('D3', 'Ultima actividad');
324
 
325
 
326
 
327
            $i = 4;
328
            foreach($records as $record)
329
            {
330
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));
331
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));
332
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));
333
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['last_activity_on']);
334
 
335
                $i++;
336
            }
337
 
338
 
339
            $fileName = 'reporte_usuarios_bloqueados_' . time() . '.xls';
340
 
341
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_usuarios_bloqueados_' . time());
342
 
343
 
344
 
345
 
346
 
347
            $writer = IOFactory::createWriter($spreadsheet, 'Xls');
348
            $writer->save($tempFilename);
349
 
350
            $content = file_get_contents($tempFilename);
351
            @unlink($tempFilename);
352
 
353
            return new JsonModel([
354
                'success' => true,
355
                'data' => [
356
                    'content' => base64_encode($content),
357
                    'basename' => $fileName
358
 
359
                ]
360
            ]);
361
 
362
 
363
 
364
 
365
        } else {
366
            return new JsonModel([
367
                'success' => false,
368
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
369
            ]);
370
        }
371
    }
372
 
373
 
374
 
375
 
376
 
377
}