Rev 16769 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Form\ExtendUserMicrolearningForm;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\UserMapper;use Laminas\Db\Sql\Expression;use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;use LeadersLinked\Mapper\CompanyMicrolearningUserLogMapper;use Google\Service\Classroom\Student;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;use LeadersLinked\Mapper\DeviceMapper;use LeadersLinked\Model\Application;use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;use LeadersLinked\Model\CompanyMicrolearningExtendUser;use LeadersLinked\Form\TopicCapsuleForm;use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;use Laminas\Hydrator\ArraySerializableHydrator;use Laminas\Db\ResultSet\HydratingResultSet;use Laminas\Paginator\Adapter\DbSelect;use Laminas\Paginator\Paginator;use LeadersLinked\Model\CompanyMicrolearningUserProgress;use PhpOffice\PhpSpreadsheet\IOFactory;use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;use PhpOffice\PhpSpreadsheet\Calculation\TextData\Replace;use LeadersLinked\Form\TopicReportForm;use LeadersLinked\Model\User;use LeadersLinked\Mapper\CompanyUserMapper;use Laminas\Db\Sql\Select;use LeadersLinked\Form\StudentReportForm;use LeadersLinked\Model\UserType;use LeadersLinked\Model\CompanyUser;class ReportController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}public function indexAction(){$this->layout()->setTemplate('layout/layout-backend.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/index.phtml');return $viewModel;}public function usersBlockedAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if ($request->isGet()) {$headers = $request->getHeaders();$isJson = false;if ($headers->has('Accept')) {$accept = $headers->get('Accept');$prioritized = $accept->getPrioritized();foreach ($prioritized as $key => $value) {$raw = trim($value->getRaw());if (!$isJson) {$isJson = strpos($raw, 'json');}}}if ($isJson) {$acl = $this->getEvent()->getViewModel()->getVariable('acl');$allowDownload = $acl->isAllowed($currentUser->usertype_id, 'reports/users-blocked/download');//$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'reports/users-blocked/edit');//$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'reports/users-blocked/delete');$queryMapper = QueryMapper::getInstance($this->adapter);if ($currentCompany) {$user_ids = [];$select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);$select->columns(['user_id']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);$records = $queryMapper->fetchAll($select);foreach ($records as $record) {if (!in_array($record['user_id'], $user_ids)) {array_push($user_ids, $record['user_id']);}}$select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);$select->columns(['user_id']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);$records = $queryMapper->fetchAll($select);foreach ($records as $record) {if (!in_array($record['user_id'], $user_ids)) {array_push($user_ids, $record['user_id']);}}$select = $queryMapper->getSql()->select(UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image','blocked', 'login_attempt', 'email_verified']);$select->where->in('id', $user_ids);$select->where->equalTo('status', User::STATUS_ACTIVE);$select->where->equalTo('blocked', User::BLOCKED_YES);$select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);$select->order('first_name ASC, last_name ASC');} else {$select = $queryMapper->getSql()->select(UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image','blocked', 'login_attempt', 'email_verified']);$select->where->equalTo('status', User::STATUS_ACTIVE);$select->where->equalTo('blocked', User::BLOCKED_YES);$select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);$select->order('first_name ASC, last_name ASC');}$items = [];$records = $queryMapper->fetchAll($select);$records_x_page = intval($this->params()->fromQuery('length', 10), 10);$page = (intval($this->params()->fromQuery('start', 1), 10) / $records_x_page) + 1;$adapter = new DbSelect($select, $queryMapper->getSql());$paginator = new Paginator($adapter);$paginator->setItemCountPerPage($records_x_page);$paginator->setCurrentPageNumber($page);foreach ($records as $record) {if ($record['last_activity_on']) {$dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);$last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');} else {$last_activity_on = '';}$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'last_activity_on' => $last_activity_on,'actions' => [// 'link_edit' => $allowEdit ? $this->url()->fromRoute('reports/users-blocked/edit', ['id' => $record['uuid']]) : '',// 'link_delete' => $allowDelete ? $this->url()->fromRoute('reports/users-blocked/delete', ['id' => $record['uuid']]) : '',]];array_push($items, $item);}$data = ['items' => $items,'total' => $paginator->getTotalItemCount(),];if ($allowDownload) {$data['link_download'] = $this->url()->fromRoute('reports/users-blocked/download');} else {$data['link_download'] = '';}return new JsonModel(['success' => true,'data' => $data,]);} else {$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/reports/users-blocked.phtml');return $viewModel;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function usersBlockedExcelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if ($request->isGet()) {$queryMapper = QueryMapper::getInstance($this->adapter);if ($currentCompany) {$user_ids = [];$select = $queryMapper->getSql()->select(CompanyUserMapper::_TABLE);$select->columns(['user_id']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->equalTo('status', CompanyUser::STATUS_ACCEPTED);$records = $queryMapper->fetchAll($select);foreach ($records as $record) {if (!in_array($record['user_id'], $user_ids)) {array_push($user_ids, $record['user_id']);}}$select = $queryMapper->getSql()->select(CompanyMicrolearningCapsuleUserMapper::_TABLE);$select->columns(['user_id']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->in('access', [CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED, CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD]);$records = $queryMapper->fetchAll($select);foreach ($records as $record) {if (!in_array($record['user_id'], $user_ids)) {array_push($user_ids, $record['user_id']);}}$select = $queryMapper->getSql()->select(UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image','blocked', 'login_attempt', 'email_verified']);$select->where->in('id', $user_ids);$select->where->equalTo('status', User::STATUS_ACTIVE);$select->where->equalTo('blocked', User::BLOCKED_YES);$select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);$select->order('first_name ASC, last_name ASC');} else {$select = $queryMapper->getSql()->select(UserMapper::_TABLE);$select->columns(['id', 'uuid', 'first_name', 'last_name', 'email', 'last_activity_on', 'image','blocked', 'login_attempt', 'email_verified']);$select->where->equalTo('status', User::STATUS_ACTIVE);$select->where->equalTo('blocked', User::BLOCKED_YES);$select->where->equalTo('email_verified', User::EMAIL_VERIFIED_YES);$select->where->equalTo('network_id', $currentUser->network_id);$select->where->in('usertype_id', [UserType::ADMIN, UserType::USER]);$select->order('first_name ASC, last_name ASC');}$items = [];$records = $queryMapper->fetchAll($select);foreach ($records as $record) {if ($record['last_activity_on']) {$dt_last_activity_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['last_activity_on']);$last_activity_on = $dt_last_activity_on->format('d/m/Y h:i a');} else {$last_activity_on = '';}$item = ['uuid' => $record['uuid'],'first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'last_activity_on' => $last_activity_on];array_push($items, $item);}$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setTitle("Usuarios Bloqueados");$spreadsheet->setActiveSheetIndex(0);$spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');$spreadsheet->getActiveSheet()->SetCellValue('B1', date('d/m/Y h:i a'));$spreadsheet->getActiveSheet()->SetCellValue('A3', 'Nombre');$spreadsheet->getActiveSheet()->SetCellValue('B3', 'Apellido');$spreadsheet->getActiveSheet()->SetCellValue('C3', 'Correo electrónico');$spreadsheet->getActiveSheet()->SetCellValue('D3', 'Ultima actividad');$i = 4;foreach ($records as $record) {$spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['first_name']))));$spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['last_name']))));$spreadsheet->getActiveSheet()->SetCellValue('C' . $i, strtolower(trim($record['email'])));$spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['last_activity_on']);$i++;}$fileName = 'reporte_usuarios_bloqueados_' . time() . '.xls';$tempFilename = tempnam(sys_get_temp_dir(), 'reporte_usuarios_bloqueados_' . time());$writer = IOFactory::createWriter($spreadsheet, 'Xls');$writer->save($tempFilename);$content = file_get_contents($tempFilename);@unlink($tempFilename);return new JsonModel(['success' => true,'data' => ['content' => base64_encode($content),'basename' => $fileName]]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}}