Rev 16768 | Rev 17343 | 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\Library\Functions;class MicrolearningReportsController 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 overviewAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()) {$reportsLastWeek = [];$reportsCapsuleResume = [];$reportsStudentsTotal = [];$companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);$extendCompanies = $companyMicrolearningExtendUserCompanyMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendCompanies as $extendCompany){$reportsLastWeek['companies'][$extendCompany->id] = ['name' => $extendCompany->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['companies'][$extendCompany->id] = ['name' => $extendCompany->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['companies'][$extendCompany->id] = ['name' => $extendCompany->name,'total' => 0,] ;}$companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);$extendFunctions = $companyMicrolearningExtendUserFunctionMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendFunctions as $extendFunction){$reportsLastWeek['functions'][$extendFunction->id] = ['name' => $extendFunction->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['functions'][$extendFunction->id] = ['name' => $extendFunction->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['functions'][$extendFunction->id] = ['name' => $extendFunction->name,'total' => 0,] ;}$companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);$extendGroups = $companyMicrolearningExtendUserGroupMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendGroups as $extendGroup){$reportsLastWeek['groups'][$extendGroup->id] = ['name' => $extendGroup->name,'total' => 0,'value' => 0];$reportsCapsuleResume['groups'][$extendGroup->id] = ['name' => $extendFunction->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['groups'][$extendGroup->id] = ['name' => $extendGroup->name,'total' => 0,];}$companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);$extendInstitutions = $companyMicrolearningExtendUserInstitutionMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendInstitutions as $extendInstitution){$reportsLastWeek['institutions'][$extendInstitution->id] = ['name' => $extendInstitution->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['institutions'][$extendInstitution->id] = ['name' => $extendInstitution->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['institutions'][$extendInstitution->id] = ['name' => $extendInstitution->name,'total' => 0,] ;}$companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);$extendPrograms = $companyMicrolearningExtendUserProgramMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendPrograms as $extendProgram){$reportsLastWeek['programs'][$extendProgram->id] = ['name' => $extendProgram->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['programs'][$extendProgram->id] = ['name' => $extendProgram->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['programs'][$extendProgram->id] = ['name' => $extendProgram->name,'total' => 0,] ;}$companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);$extendPartners = $companyMicrolearningExtendUserPartnerMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendPartners as $extendPartner){$reportsLastWeek['partners'][$extendPartner->id] = ['name' => $extendPartner->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['partners'][$extendPartner->id] = ['name' => $extendPartner->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['partners'][$extendPartner->id] = ['name' => $extendPartner->name,'total' => 0,] ;}$companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);$extendSectors = $companyMicrolearningExtendUserSectorMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendSectors as $extendSector){$reportsLastWeek['sectors'][$extendSector->id] = ['name' => $extendSector->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['sectors'][$extendSector->id] = ['name' => $extendSector->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['sectors'][$extendSector->id] = ['name' => $extendSector->name,'total' => 0,] ;}$companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);$extendStudentTypes = $companyMicrolearningExtendUserStudentTypeMapper->fetchAllByCompanyId($currentCompany->id);foreach($extendStudentTypes as $extendStudentType){$reportsLastWeek['student_types'][$extendStudentType->id] = ['name' => $extendStudentType->name,'total' => 0,'value' => 0] ;$reportsCapsuleResume['student_types'][$extendStudentType->id] = ['name' => $extendStudentType->name,'total' => 0,'value' => 0] ;$reportsStudentsTotal['student_types'][$extendStudentType->id] = ['name' => $extendStudentType->name,'total' => 0,] ;}$companyMicrolearningUserProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);$minLastWeek = date('Y-m-d', strtotime(' -180 days'));$maxLastWeek = date('Y-m-d');$companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);$companyUsersLogWithActivityLastWeek = $companyMicrolearningUserLogMapper->fetchAllUserIdsLastWeekByCompanyId($currentCompany->id, $minLastWeek, $maxLastWeek);//header('Content-type: text/plain');// print_r($companyUsersLogWithActivityLastWeek);$date = date('Y-m-d');$companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);$user_ids = $companyMicrolearningCapsuleUserMapper->fetchAllDistinctUserIdActiveByCompanyIdAndDate($currentCompany->id, $date);$studentsTotal = count($user_ids);$studentsStarted = 0;$userIdsWithAllCapsulesCompleted = [];foreach($user_ids as $user_id){$countSlides = $companyMicrolearningUserProgressMapper->fetchCountAllSlideCompletedByCompanyIdAndUserId($currentCompany->id, $user_id);if($countSlides) {$studentsStarted++;}$incompleted = false;$capsuleUsers = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($user_id);foreach($capsuleUsers as $capsuleUser){$userProgress = $companyMicrolearningUserProgressMapper->fetchOneByUseridAndCapsuleId($capsuleUser->user_id, $capsuleUser->capsule_id);if($userProgress) {if(!$userProgress->completed) {$incompleted = true;break;}} else {$incompleted = true;break;}}if(!$incompleted) {array_push($userIdsWithAllCapsulesCompleted, $user_id);}}$studentsWithoutStarting = $studentsTotal - $studentsStarted;$reportsLastWeek['general'] = ['total' => $studentsTotal, 'value' => count($companyUsersLogWithActivityLastWeek) ];$reportsCapsuleResume['general'] = ['total' => $studentsTotal, 'value' => count($userIdsWithAllCapsulesCompleted) ];$companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);$records = $companyMicrolearningExtendUserMapper->fetchAllByCompanyId($currentCompany->id);foreach($records as $record){if($record->extend_company_id) {$reportsLastWeek['companies'][$record->extend_company_id]['total'] += 1;$reportsStudentsTotal['companies'][$record->extend_company_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['companies'][$record->extend_company_id]['value'] += 1;}$reportsCapsuleResume['companies'][$record->extend_company_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['companies'][$record->extend_company_id]['value'] += 1;}}if($record->extend_function_id) {$reportsLastWeek['functions'][$record->extend_function_id]['total'] += 1;$reportsStudentsTotal['functions'][$record->extend_function_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['functions'][$record->extend_function_id]['value'] += 1;}$reportsCapsuleResume['functions'][$record->extend_function_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['functions'][$record->extend_function_id]['value'] += 1;}}if($record->extend_group_id) {$reportsLastWeek['groups'][$record->extend_group_id]['total'] += 1;$reportsStudentsTotal['groups'][$record->extend_group_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['groups'][$record->extend_group_id]['value'] += 1;}$reportsCapsuleResume['groups'][$record->extend_group_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['groups'][$record->extend_group_id]['value'] += 1;}}if($record->extend_institution_id) {$reportsLastWeek['institutions'][$record->extend_institution_id]['total'] += 1;$reportsStudentsTotal['institutions'][$record->extend_institution_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['institutions'][$record->extend_institution_id]['value'] += 1;}$reportsCapsuleResume['institutions'][$record->extend_institution_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['institutions'][$record->extend_institution_id]['value'] += 1;}}if($record->extend_program_id) {$reportsLastWeek['programs'][$record->extend_program_id]['total'] += 1;$reportsStudentsTotal['programs'][$record->extend_program_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['programs'][$record->extend_program_id]['value'] += 1;}$reportsCapsuleResume['programs'][$record->extend_program_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['programs'][$record->extend_program_id]['value'] += 1;}}if($record->extend_partner_id) {$reportsLastWeek['partners'][$record->extend_partner_id]['total'] += 1;$reportsStudentsTotal['partners'][$record->extend_partner_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['partners'][$record->extend_partner_id]['value'] += 1;}$reportsCapsuleResume['partners'][$record->extend_partner_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['partners'][$record->extend_partner_id]['value'] += 1;}}if($record->extend_sector_id) {$reportsLastWeek['sectors'][$record->extend_sector_id]['total'] += 1;$reportsStudentsTotal['sectors'][$record->extend_sector_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['sectors'][$record->extend_sector_id]['value'] += 1;}$reportsCapsuleResume['sectors'][$record->extend_sector_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['sectors'][$record->extend_sector_id]['value'] += 1;}}if($record->extend_student_type_id) {$reportsLastWeek['student_types'][$record->extend_student_type_id]['total'] += 1;$reportsStudentsTotal['student_types'][$record->extend_student_type_id]['total'] += 1;if(in_array($record->user_id, $companyUsersLogWithActivityLastWeek )) {$reportsLastWeek['student_types'][$record->extend_student_type_id]['value'] += 1;}$reportsCapsuleResume['student_types'][$record->extend_student_type_id]['total'] += 1;if(in_array($record->user_id, $userIdsWithAllCapsulesCompleted )) {$reportsCapsuleResume['student_types'][$record->extend_student_type_id]['value'] += 1;}}}/*header('Content-type: text/plain');print_r($reportsStudentsTotal); exit;*/$this->layout()->setTemplate('layout/layout-backend.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/overview.phtml');$viewModel->setVariables(['reportsLastWeek' => $reportsLastWeek,'reportsCapsuleResume' => $reportsCapsuleResume,'reportsStudentsTotal' => $reportsStudentsTotal,'reportStudents' => ['total' => $studentsTotal,'started' => $studentsStarted,'withoutStarting' => $studentsWithoutStarting,]]);return $viewModel ;}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function progressAction(){$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) {$queryMapper = QueryMapper::getInstance($this->adapter);$selectUsers = $queryMapper->getSql()->select();$selectUsers->columns(['user_id' => new Expression('DISTINCT(user_id)')]);$selectUsers->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);$selectUsers->where->equalTo('company_id', $currentCompany->id);$select = $queryMapper->getSql()->select();$select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);$select->from([ 'u' => UserMapper::_TABLE]);$select->where->in('u.id', $selectUsers);$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->order(['u.first_name', 'u.last_name']);// echo $select->getSqlString($this->adapter->platform); exit;$companyMicrolearningProgressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);$companyMicrolearningUserLogMapper = CompanyMicrolearningUserLogMapper::getInstance($this->adapter);$companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);// $companyMicrolearningSlideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);$students = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$capsules = $companyMicrolearningCapsuleUserMapper->fetchAllActiveByUserId($record['id']);$totalCapsules = count($capsules);$totalCapsulesStarted = 0;$totalCapsulesCompleted = 0;foreach($capsules as $capsule){$userProgress = $companyMicrolearningProgressMapper->fetchOneByUseridAndCapsuleId($capsule->user_id, $capsule->capsule_id);if($userProgress) {$totalCapsulesStarted++;if($userProgress->completed) {$totalCapsulesCompleted++;}}}if($totalCapsulesCompleted > 0 && $totalCapsules > 0) {$total_capsules_percentaje = intval ( ($totalCapsulesCompleted * 100 ) / $totalCapsules);} else {$total_capsules_percentaje = 0;}$student = ['uuid' => $record['uuid'],'first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'total_capsules' => $totalCapsules,'total_capsules_incomplete' => ( $totalCapsules - $totalCapsulesCompleted ),'total_capsules_started' => $totalCapsulesStarted,'total_capsules_completed' => $totalCapsulesCompleted,'total_capsules_percentaje' => $total_capsules_percentaje,'first_date' => '','first_time' => '','last_date' => '','last_time' => '',];$first_added_on = $companyMicrolearningUserLogMapper->fetchFirstDateByCompanyIdAndUserId($currentCompany->id, $record['id']);if($first_added_on) {$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $first_added_on);if($dt) {$student['first_date'] = $dt->format('d/m/Y');$student['first_time'] = $dt->format('h:i a');}}$last_added_on = $companyMicrolearningUserLogMapper->fetchLastDateByCompanyIdAndUserId($currentCompany->id, $record['id']);if($last_added_on) {$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $last_added_on);if($dt) {$student['last_date'] = $dt->format('d/m/Y');$student['last_time'] = $dt->format('h:i a');}}array_push($students, $student);}//print_r($students);return new JsonModel(['success' => true,'data' => $students]);} else {// $form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);$form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id = 0);$this->layout()->setTemplate('layout/layout-backend.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');$viewModel->setVariables(['form' => $form]);return $viewModel ;}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function devicesAndAccessAction(){$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, 'microlearning/reports/progress-for-capsule/excel');$company_id = Functions::sanitizeFilterString($this->params()->fromQuery('company_id', ''));$function_id = Functions::sanitizeFilterString($this->params()->fromQuery('function_id', ''));$group_id = Functions::sanitizeFilterString($this->params()->fromQuery('group_id', ''));$institution_id = Functions::sanitizeFilterString($this->params()->fromQuery('institution_id', ''));$program_id = Functions::sanitizeFilterString($this->params()->fromQuery('program_id', ''));$partner_id = Functions::sanitizeFilterString($this->params()->fromQuery('partner_id', ''));$sector_id = Functions::sanitizeFilterString($this->params()->fromQuery('sector_id', ''));$student_type_id = Functions::sanitizeFilterString($this->params()->fromQuery('student_type_id', ''));if($company_id) {$extendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);$extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);if($extendUserCompany) {$company_id = $extendUserCompany->id;} else {$company_id = 0;}}if($function_id) {$extendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);$extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);if($extendUserFunction) {$function_id = $extendUserFunction->id;} else {$function_id = 0;}}if($group_id) {$extendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);$extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);if($extendUserGroup) {$group_id = $extendUserGroup->id;} else {$group_id = 0;}}if($institution_id) {$extendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);$extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);if($extendUserInstitution) {$institution_id = $extendUserInstitution->id;} else {$institution_id = 0;}}if($program_id) {$extendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);$extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);if($extendUserProgram) {$program_id = $extendUserProgram->id;} else {$program_id = 0;}}if($partner_id) {$extendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);$extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);if($extendUserPartner) {$partner_id = $extendUserPartner;} else {$partner_id = 0;}}if($sector_id) {$extendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);$extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);if($extendUserSector) {$sector_id = $extendUserSector->id;} else {$sector_id = 0;}}if($student_type_id) {$extendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);$extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);if($extendUserStudentType) {$student_type_id = $extendUserStudentType->id;} else {$student_type_id = 0;}}$paramsDownload = ['company_id' => $company_id,'function_id' => $function_id,'group_id' => $group_id,'institution_id' => $institution_id,'program_id' => $program_id,'partner_id' => $partner_id,'sector_id' => $sector_id,'student_type_id' => $student_type_id];/*echo 'company_id 1 = '. $company_id . PHP_EOL;echo 'function_id 1 = '. $function_id . PHP_EOL;echo 'group_id 1 = '. $group_id . PHP_EOL;echo 'institution_id 1 = '. $institution_id . PHP_EOL;echo 'program_id 1 = '. $program_id . PHP_EOL;echo 'partner_id 1 = '. $partner_id . PHP_EOL;echo 'sector_id 1 = '. $sector_id . PHP_EOL;echo 'student_type_id 1 = '. $student_type_id . PHP_EOL;exit;*/$date = date('Y-m-d');$deviceMapper = DeviceMapper::getInstance($this->adapter);$queryMapper = QueryMapper::getInstance($this->adapter);$selectCapsuleUser = $queryMapper->getSql()->select();$selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);$selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);$selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);$selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();//echo $selectCapsuleUser->getSqlString($this->adapter->platform); exit;$select = $queryMapper->getSql()->select();$select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);$select->from([ 'u' => UserMapper::_TABLE]);if( $company_id || $function_id || $group_id || $institution_id || $program_id || $partner_id || $sector_id || $student_type_id ) {$select->join(['e' => CompanyMicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);}$select->where->in('u.id', $selectCapsuleUser);if($company_id) {$select->where->equalTo('e.extend_company_id', $company_id);}if($function_id) {$select->where->equalTo('e.extend_function_id', $function_id);}if($group_id) {$select->where->equalTo('e.extend_group_id', $group_id);}if($institution_id) {$select->where->equalTo('e.extend_institution_id', $institution_id);}if($program_id) {$select->where->equalTo('e.extend_program_id', $program_id);}if($partner_id) {$select->where->equalTo('e.extend_partner_id', $partner_id);}if($sector_id) {$select->where->equalTo('e.extend_sector_id', $sector_id);}if($student_type_id) {$select->where->equalTo('e.extend_student_type_id', $student_type_id);}$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->order(['u.first_name', 'u.last_name']);$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'brand' => '','manufacturer' => '','model' => '','platform' => '','version' => '','token' => 'LABEL_NO','updated_on' => '',];$device = $deviceMapper->fetchOneByUserId($record['id']);if($device) {$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);$updated_on = $dt->format('d/m/Y h:i a');$item['brand'] = $device->brand;$item['manufacturer'] = $device->manufacturer;$item['model'] = $device->model;$item['platform'] = $device->platform;$item['version'] = $device->version;$item['token'] = $device->token ? 'LABEL_YES' : 'LABEL_NO';$item['updated_on'] = $updated_on;}array_push($items, $item);}$link_download = '';if($allowDownload) {$link_download = $this->url()->fromRoute('microlearning/reports/devices-and-access/excel', [], ['query' => $paramsDownload ]);}return new JsonModel(['success' => true,'data' => ['link_download' => $link_download,'items' => $items],]);} else {$form = new ExtendUserMicrolearningForm($this->adapter, $currentCompany->id);$this->layout()->setTemplate('layout/layout-backend.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/devices-and-access.phtml');$viewModel->setVariables(['form' => $form]);return $viewModel ;}}return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function devicesAndAccessExcelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()){$company_id = Functions::sanitizeFilterString($this->params()->fromQuery('company_id', ''));$function_id = Functions::sanitizeFilterString($this->params()->fromQuery('function_id', ''));$group_id = Functions::sanitizeFilterString($this->params()->fromQuery('group_id', ''));$institution_id = Functions::sanitizeFilterString($this->params()->fromQuery('institution_id', ''));$program_id = Functions::sanitizeFilterString($this->params()->fromQuery('program_id', ''));$partner_id = Functions::sanitizeFilterString($this->params()->fromQuery('partner_id', ''));$sector_id = Functions::sanitizeFilterString($this->params()->fromQuery('sector_id', ''));$student_type_id = Functions::sanitizeFilterString($this->params()->fromQuery('student_type_id', ''));if($company_id) {$extendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);$extendUserCompany = $extendUserCompanyMapper->fetchOneByUuid($company_id);if($extendUserCompany) {$company_id = $extendUserCompany->id;} else {$company_id = 0;}}if($function_id) {$extendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);$extendUserFunction = $extendUserFunctionMapper->fetchOneByUuid($function_id);if($extendUserFunction) {$function_id = $extendUserFunction->id;} else {$function_id = 0;}}if($group_id) {$extendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);$extendUserGroup = $extendUserGroupMapper->fetchOneByUuid($group_id);if($extendUserGroup) {$group_id = $extendUserGroup->id;} else {$group_id = 0;}}if($institution_id) {$extendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);$extendUserInstitution = $extendUserInstitutionMapper->fetchOneByUuid($institution_id);if($extendUserInstitution) {$institution_id = $extendUserInstitution->id;} else {$institution_id = 0;}}if($program_id) {$extendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);$extendUserProgram = $extendUserProgramMapper->fetchOneByUuid($program_id);if($extendUserProgram) {$program_id = $extendUserProgram->id;} else {$program_id = 0;}}if($partner_id) {$extendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);$extendUserPartner = $extendUserPartnerMapper->fetchOneByUuid($partner_id);if($extendUserPartner) {$partner_id = $extendUserPartner;} else {$partner_id = 0;}}if($sector_id) {$extendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);$extendUserSector = $extendUserSectorMapper->fetchOneByUuid($sector_id);if($extendUserSector) {$sector_id = $extendUserSector->id;} else {$sector_id = 0;}}if($student_type_id) {$extendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);$extendUserStudentType = $extendUserStudentTypeMapper->fetchOneByUuid($student_type_id);if($extendUserStudentType) {$student_type_id = $extendUserStudentType->id;} else {$student_type_id = 0;}}$paramsDownload = ['company_id' => $company_id,'function_id' => $function_id,'group_id' => $group_id,'institution_id' => $institution_id,'program_id' => $program_id,'partner_id' => $partner_id,'sector_id' => $sector_id,'student_type_id' => $student_type_id];/*echo 'company_id 1 = '. $company_id . PHP_EOL;echo 'function_id 1 = '. $function_id . PHP_EOL;echo 'group_id 1 = '. $group_id . PHP_EOL;echo 'institution_id 1 = '. $institution_id . PHP_EOL;echo 'program_id 1 = '. $program_id . PHP_EOL;echo 'partner_id 1 = '. $partner_id . PHP_EOL;echo 'sector_id 1 = '. $sector_id . PHP_EOL;echo 'student_type_id 1 = '. $student_type_id . PHP_EOL;exit;*/$date = date('Y-m-d');$deviceMapper = DeviceMapper::getInstance($this->adapter);$queryMapper = QueryMapper::getInstance($this->adapter);$selectCapsuleUser = $queryMapper->getSql()->select();$selectCapsuleUser->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);$selectCapsuleUser->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);$selectCapsuleUser->where->equalTo('company_id', $currentCompany->id);$selectCapsuleUser->where->nest->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED)->or->nest()->equalTo('access', CompanyMicrolearningCapsuleUser::ACCESS_PAY_PERIOD)->and->lessThanOrEqualTo(new Expression('DATE(paid_from)'), $date)->and->greaterThanOrEqualTo(new Expression('DATE(paid_to)'), $date )->unnest()->unnest();//echo $selectCapsuleUser->getSqlString($this->adapter->platform); exit;$select = $queryMapper->getSql()->select();$select->columns(['id' , 'uuid', 'first_name', 'last_name', 'email']);$select->from([ 'u' => UserMapper::_TABLE]);if( $company_id || $function_id || $group_id || $institution_id || $program_id || $partner_id || $sector_id || $student_type_id ) {$select->join(['e' => CompanyMicrolearningExtendUserMapper::_TABLE], 'e.user_id = u.id', []);}$select->where->in('u.id', $selectCapsuleUser);if($company_id) {$select->where->equalTo('e.extend_company_id', $company_id);}if($function_id) {$select->where->equalTo('e.extend_function_id', $function_id);}if($group_id) {$select->where->equalTo('e.extend_group_id', $group_id);}if($institution_id) {$select->where->equalTo('e.extend_institution_id', $institution_id);}if($program_id) {$select->where->equalTo('e.extend_program_id', $program_id);}if($partner_id) {$select->where->equalTo('e.extend_partner_id', $partner_id);}if($sector_id) {$select->where->equalTo('e.extend_sector_id', $sector_id);}if($student_type_id) {$select->where->equalTo('e.extend_student_type_id', $student_type_id);}$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->order(['u.first_name', 'u.last_name']);$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'brand' => '','manufacturer' => '','model' => '','platform' => '','version' => '','token' => 'LABEL_NO','updated_on' => '',];$device = $deviceMapper->fetchOneByUserId($record['id']);if($device) {$dt = \DateTime::createFromFormat('Y-m-d H:i:s', $device->updated_on);$updated_on = $dt->format('d/m/Y h:i a');$item['brand'] = $device->brand;$item['manufacturer'] = $device->manufacturer;$item['model'] = $device->model;$item['platform'] = $device->platform;$item['version'] = $device->version;$item['token'] = $device->token ? 'Si' : 'No';$item['updated_on'] = $updated_on;}array_push($items, $item);}$records = $items;$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setTitle("Dispositivos y Accesos");$spreadsheet->setActiveSheetIndex(0);$spreadsheet->getActiveSheet()->SetCellValue('A1', 'Fecha:');$spreadsheet->getActiveSheet()->SetCellValue('A2', date('d/m/Y h:i a'));$spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');$spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');$spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');$spreadsheet->getActiveSheet()->SetCellValue('D4', 'Marca');$spreadsheet->getActiveSheet()->SetCellValue('E4', 'Fabricante');$spreadsheet->getActiveSheet()->SetCellValue('F4', 'Modelo');$spreadsheet->getActiveSheet()->SetCellValue('G4', 'Plataforma');$spreadsheet->getActiveSheet()->SetCellValue('H4', 'Versión');$spreadsheet->getActiveSheet()->SetCellValue('I4', 'Token push');$spreadsheet->getActiveSheet()->SetCellValue('J4', 'Ultima vez');$i = 5;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['brand']);$spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['manufacturer']);$spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['model']);$spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['platform']);$spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['version']);$spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['token']);$spreadsheet->getActiveSheet()->SetCellValue('J' . $i, $record['updated_on']);$i++;}$fileName = 'reporte_dispositivo_y_acceso_' . time() . '.xls';$tempFilename = tempnam(sys_get_temp_dir(), 'reporte_dispositivo_y_acceso_' . 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']);}}public function comentsForCapsulesAction(){$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) {$topic_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));$capsule_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));$data = ['items' => [] ,'total' => 0,];if(!$topic_uuid) {return new JsonModel(['success' => true,'data' => $data]);}$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topic = $topicMapper->fetchOneByUuid($topic_uuid);if(!$topic) {return new JsonModel(['success' => true,'data' => 'ERROR_TOPIC_NOT_FOUND']);}if($topic->company_id != $currentCompany->id) {return new JsonModel(['success' => true,'data' => 'ERROR_UNAUTHORIZED']);}if(!$capsule_uuid) {$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);$records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);$capsules = [];foreach($records as $record){if(!$capsule_uuid) {$capsule_uuid = $record->uuid;}$capsules[ $record->uuid ] = $record->name;}$data['capsules'] = $capsules;}if(!$capsule_uuid) {return new JsonModel(['success' => true,'data' => $data]);}$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);if(!$capsule) {return new JsonModel(['success' => true,'data' => 'ERROR_CAPSULE_NOT_FOUND']);}if($capsule->topic_id != $topic->id) {return new JsonModel(['success' => true,'data' => 'ERROR_UNAUTHORIZED']);}$search = $this->params()->fromQuery('search', []);$search = empty($search['value']) ? '' : Functions::sanitizeFilterString($search['value']);$page = intval($this->params()->fromQuery('start', 1), 10);$records_x_page = intval($this->params()->fromQuery('length', 10), 10);$order = $this->params()->fromQuery('order', []);$order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);$order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));$fields = ['uuid', 'first_name', 'last_name', 'email', 'rating', 'comment', 'added_on'];$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';if(!in_array($order_direction, ['ASC', 'DESC'])) {$order_direction = 'DESC';}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['access', 'paid_from', 'paid_to', 'added_on', 'updated_on']);$select->from(['tb1' => CompanyMicrolearningCapsuleCommentMapper::_TABLE] );$select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $capsule->company_id);$select->where->equalTo('tb1.topic_id', $capsule->topic_id);$select->where->equalTo('tb1.capsule_id', $capsule->id);if($search) {$select->where->nest()->like('first_name', '%' . $search . '%')->or->like('last_name', '%' . $search . '%')->or->like('email', '%' . $search . '%')->unnest();}$select->order($order_field . ' ' . $order_direction);$hydrator = new ArraySerializableHydrator();$resultset = new HydratingResultSet($hydrator);$adapter = new DbSelect($select, $sql, $resultset);$paginator = new Paginator($adapter);$paginator->setItemCountPerPage($records_x_page);$paginator->setCurrentPageNumber($page);$items = [ ];$records = $paginator->getCurrentItems();foreach($records as $record){$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'rating' => $record['rating'],'text' => $record['text'],'added_on' => $added_on,];array_push($items, $item);}$data['items'] = $items;$data['total'] = $paginator->getTotalItemCount();return new JsonModel(['success' => true,'data' => $data]);} else {$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);if($topics) {$topic_id = $topics[0]->id;} else {$topic_id = 0;}$form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/comments-for-capsule.phtml');$viewModel->setVariables(['form' => $form,]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function progressForCapsuleAction(){$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, 'microlearning/reports/progress-for-capsule/excel');$topic_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));$capsule_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topic = $topicMapper->fetchOneByUuid($topic_uuid);if(!$topic) {return new JsonModel(['success' => false,'data' => 'ERROR_TOPIC_NOT_FOUND']);}if($topic->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$data = ['items' => [],'link_download' => '',];if(!$capsule_uuid) {$data['capsules'] = [];$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);$records = $capsuleMapper->fetchAllByCompanyIdAndTopicId($topic->company_id, $topic->id);foreach($records as $record){if(!$capsule_uuid) {$capsule_uuid = $record->uuid;}$data['capsules'][ $record->uuid ] = $record->name;}$data['capsule_selected'] = $capsule_uuid;}$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);if(!$capsule) {return new JsonModel(['success' => true,'data' => 'ERROR_CAPSULE_NOT_FOUND']);}if($capsule->topic_id != $topic->id) {return new JsonModel(['success' => true,'data' => 'ERROR_UNAUTHORIZED']);}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['user_id']);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $capsule->company_id);$select->where->equalTo('tb1.topic_id', $capsule->topic_id);$select->where->equalTo('tb1.capsule_id', $capsule->id);$select->where->equalTo('tb2.status', User::STATUS_ACTIVE);$select->order('first_name ASC, last_name ASC');$user_ids = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];if(in_array($user_id, $user_ids)) {continue;}array_push($user_ids, $user_id);$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'progress' => 0,'total_slides' => 0,'view_slides' => 0,'completed' => 0,'returning_after_completed' => 0,'added_on' => '','updated_on' => ''];$items[ $user_id ] = $item;}$select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);$select->from(['tb1' => CompanyMicrolearningUserProgressMapper::_TABLE] );$select->where->equalTo('tb1.company_id', $capsule->company_id);$select->where->equalTo('tb1.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->equalTo('tb1.topic_id', $capsule->topic_id);$select->where->equalTo('tb1.capsule_id', $capsule->id);$select->where->in('tb1.user_id', $user_ids);$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[$user_id]['completed'] = $record['completed'];$items[$user_id]['progress'] = $record['progress'];$items[$user_id]['total_slides'] = $record['total_slides'];$items[$user_id]['view_slides'] = $record['view_slides'];$items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];$items[$user_id]['added_on'] = $added_on;$items[$user_id]['updated_on'] = $updated_on;}$data['items'] = array_values($items);if($allowDownload) {$data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-capsule/excel', [], ['query' => ['topic_uuid' => $topic->uuid, 'capsule_uuid' => $capsule->uuid] ]);}return new JsonModel(['success' => true,'data' => $data]);} else {$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topics = $topicMapper->fetchAllByCompanyId($currentCompany->id);if($topics) {$topic_id = $topics[0]->id;} else {$topic_id = 0;}$form = new TopicCapsuleForm($this->adapter, $currentCompany->id, $topic_id);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-capsule.phtml');$viewModel->setVariables(['form' => $form,]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function progressForCapsuleExcelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()){$topic_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));$capsule_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('capsule_uuid'));$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topic = $topicMapper->fetchOneByUuid($topic_uuid);if(!$topic) {return new JsonModel(['success' => false,'data' => 'ERROR_TOPIC_NOT_FOUND']);}if($topic->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);if(!$capsule) {return new JsonModel(['success' => false,'data' => 'ERROR_CAPSULE_NOT_FOUND']);}if($capsule->topic_id != $topic->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['user_id']);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $capsule->company_id);$select->where->equalTo('tb1.topic_id', $capsule->topic_id);$select->where->equalTo('tb1.capsule_id', $capsule->id);$select->where->equalTo('tb2.status', User::STATUS_ACTIVE);$select->order('first_name ASC, last_name ASC');$user_ids = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];if(in_array($user_id, $user_ids)) {continue;}array_push($user_ids, $user_id);$item = ['uuid' => $record['uuid'],'first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'progress' => 0,'total_slides' => 0,'view_slides' => 0,'completed' => 0,'returning_after_completed' => 0,'added_on' => '','updated_on' => ''];$items[ $user_id ] = $item;}$select->columns(['user_id', 'progress', 'total_slides', 'view_slides', 'completed', 'returning_after_completed', 'added_on', 'updated_on']);$select->from(['tb1' => CompanyMicrolearningUserProgressMapper::_TABLE] );$select->where->equalTo('tb1.company_id', $capsule->company_id);$select->where->equalTo('tb1.type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->equalTo('tb1.topic_id', $capsule->topic_id);$select->where->equalTo('tb1.capsule_id', $capsule->id);$select->where->in('tb1.user_id', $user_ids);$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[$user_id]['completed'] = $record['completed'];$items[$user_id]['progress'] = $record['progress'];$items[$user_id]['total_slides'] = $record['total_slides'];$items[$user_id]['view_slides'] = $record['view_slides'];$items[$user_id]['returning_after_completed'] = $record['returning_after_completed'];$items[$user_id]['added_on'] = $added_on;$items[$user_id]['updated_on'] = $updated_on;}$records = array_values($items);$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setTitle("Progreso por Cápsula");$spreadsheet->setActiveSheetIndex(0);$spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');$spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));$spreadsheet->getActiveSheet()->SetCellValue('B1', ucwords('Cápsula:'));$spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($capsule->name))));$spreadsheet->getActiveSheet()->SetCellValue('C1', 'Fecha:');$spreadsheet->getActiveSheet()->SetCellValue('C2', date('d/m/Y h:i a'));$spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');$spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');$spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');$spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');$spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Totales');$spreadsheet->getActiveSheet()->SetCellValue('F4', 'Diapositivas Vistas');$spreadsheet->getActiveSheet()->SetCellValue('G4', 'Cápsula Completada');$spreadsheet->getActiveSheet()->SetCellValue('H4', 'Inicio');$spreadsheet->getActiveSheet()->SetCellValue('I4', 'Ultima vez');$i = 5;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['progress']);$spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_slides']);$spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['view_slides']);$spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['completed'] == 1 ? 'Si' : 'No');$spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['added_on']);$spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['updated_on']);$i++;}$fileName = 'reporte_progreso_por_capsula_' . time() . '.xls';$tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_capsula_' . 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']);}}public function progressForTopicAction(){$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, 'microlearning/reports/progress-for-topic/excel');$topic_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topic = $topicMapper->fetchOneByUuid($topic_uuid);if(!$topic) {return new JsonModel(['success' => false,'data' => 'ERROR_TOPIC_NOT_FOUND']);}if($topic->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$data = ['items' => [],'link_download' => '',];$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $topic->company_id);$select->where->equalTo('tb1.topic_id', $topic->id);$select->where->equalTo('tb2.status', User::STATUS_ACTIVE);$select->order('first_name ASC, last_name ASC');$user_ids = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];if(in_array($user_id, $user_ids)) {continue;}array_push($user_ids, $user_id);$item = ['uuid' => $record['uuid'],'first_name' => ucwords(strtolower($record['first_name'])),'last_name' => ucwords(strtolower($record['last_name'])),'email' => strtolower($record['email']),'progress' => 0,'total_capsules' => 0,'completed_capsules' => 0,'started_capsules' => 0,'pending_capsules' => 0,'added_on' => '','updated_on' => ''];$items[ $user_id ] = $item;}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->in('user_id', $user_ids);$select->group('user_id');//echo $select->getSqlString($this->adapter->platform);$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['total_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->greaterThanOrEqualTo('progress', 100);$select->where->equalTo('completed', 1);$select->where->in('user_id', $user_ids);$select->group('user_id');//echo $select->getSqlString($this->adapter->platform);$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['completed_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->lessThan('progress', 100);$select->where->equalTo('completed', 0);$select->where->in('user_id', $user_ids);$select->group('user_id');//echo $select->getSqlString($this->adapter->platform);$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['started_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->in('user_id', $user_ids);$select->group('user_id');$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[$user_id]['added_on'] = $added_on;$items[$user_id]['updated_on'] = $updated_on;if($items[$user_id]['completed_capsules']) {$progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];$items[$user_id]['progress'] = number_format($progress, 2);}}$data['items'] = array_values($items);if($allowDownload) {$data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-topic/excel', [], ['query' => ['topic_uuid' => $topic->uuid] ]);}return new JsonModel(['success' => true,'data' => $data]);} else {$form = new TopicReportForm($this->adapter, $currentCompany->id);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-topic.phtml');$viewModel->setVariables(['form' => $form,]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function progressForTopicExcelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()){$topic_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('topic_uuid'));$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);$topic = $topicMapper->fetchOneByUuid($topic_uuid);if(!$topic) {return new JsonModel(['success' => false,'data' => 'ERROR_TOPIC_NOT_FOUND']);}if($topic->company_id != $currentCompany->id) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['user_id' => new Expression('DISTINCT(user_id)') ]);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['uuid', 'first_name', 'last_name', 'email']);$select->where->equalTo('tb1.company_id', $topic->company_id);$select->where->equalTo('tb1.topic_id', $topic->id);$select->where->equalTo('tb2.status', User::STATUS_ACTIVE);$select->order('first_name ASC, last_name ASC');$user_ids = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];if(in_array($user_id, $user_ids)) {continue;}array_push($user_ids, $user_id);$item = ['uuid' => $record['uuid'],'first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'progress' => 0,'total_capsules' => 0,'completed_capsules' => 0,'started_capsules' => 0,'pending_capsules' => 0,'added_on' => '','updated_on' => ''];$items[ $user_id ] = $item;}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningCapsuleUserMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->group('user_id');$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['total_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->greaterThanOrEqualTo('progress', 100);$select->where->equalTo('completed', 1);$select->group('user_id');//echo $select->getSqlString($this->adapter->platform); exit;$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['completed_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['total' => new Expression('COUNT(*)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->where->lessThan('progress', 100);$select->where->equalTo('completed', 0);$select->group('user_id');$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$items[$user_id]['started_capsules'] = $record['total'];}$select = $sql->select();$select->columns(['added_on' => new Expression('MIN(added_on)'), 'updated_on' => new Expression('MAX(updated_on)'), 'user_id']);$select->from(CompanyMicrolearningUserProgressMapper::_TABLE);$select->where->equalTo('company_id', $topic->company_id);$select->where->equalTo('topic_id', $topic->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$select->group('user_id');$records = $queryMapper->fetchAll($select);foreach($records as $record){$user_id = $record['user_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[$user_id]['added_on'] = $added_on;$items[$user_id]['updated_on'] = $updated_on;if($items[$user_id]['completed_capsules']) {$progress = ($items[$user_id]['completed_capsules'] * 100) / $items[$user_id]['total_capsules'];$items[$user_id]['progress'] = number_format($progress, 2);}$items[$user_id]['pending_capsules'] = $items[$user_id]['total_capsules'] - ($items[$user_id]['completed_capsules' ] + $items[$user_id]['started_capsules']);}$records = array_values($items);$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setTitle("Progreso por Tópico");$spreadsheet->setActiveSheetIndex(0);$spreadsheet->getActiveSheet()->SetCellValue('A1', 'Tópico:');$spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($topic->name))));$spreadsheet->getActiveSheet()->SetCellValue('B1', 'Fecha:');$spreadsheet->getActiveSheet()->SetCellValue('N2', date('d/m/Y h:i a'));$spreadsheet->getActiveSheet()->SetCellValue('A4', 'Nombre');$spreadsheet->getActiveSheet()->SetCellValue('B4', 'Apellido');$spreadsheet->getActiveSheet()->SetCellValue('C4', 'Correo electrónico');$spreadsheet->getActiveSheet()->SetCellValue('D4', 'Progreso');$spreadsheet->getActiveSheet()->SetCellValue('E4', 'Capsulas Totales');$spreadsheet->getActiveSheet()->SetCellValue('F4', 'Capsulas Completadas');$spreadsheet->getActiveSheet()->SetCellValue('G4', 'Capsulas en Progreso');$spreadsheet->getActiveSheet()->SetCellValue('H4', 'Capsulas sin Iniciar');$spreadsheet->getActiveSheet()->SetCellValue('I4', 'Inicio');$spreadsheet->getActiveSheet()->SetCellValue('J4', 'Ultima vez');$i = 5;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['progress']);$spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['total_capsules']);$spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed_capsules']);$spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['started_capsules']);$spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['pending_capsules']);$spreadsheet->getActiveSheet()->SetCellValue('I' . $i, $record['added_on']);$spreadsheet->getActiveSheet()->SetCellValue('J' . $i, $record['updated_on']);$i++;}$fileName = 'reporte_progreso_por_topico_' . time() . '.xls';$tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_topico_' . 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']);}}public function progressForStudentAction(){$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, 'microlearning/reports/progress-for-student/excel');$student_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('student_uuid'));$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}$companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);$count = $companyMicrolearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);if(!$count) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$data = ['items' => [],];$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['capsule_id', 'access', 'paid_from', 'paid_to' ]);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => CompanyMicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);$select->join(['tb3' => CompanyMicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);$select->where->equalTo('tb1.company_id', $currentCompany->id);$select->where->equalTo('tb1.user_id', $user->id);$select->order('tb2.name ASC, tb3.name ASC');$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$capsule_id = $record['capsule_id'];$item = ['topic' => ucwords(strtolower($record['topic'])),'capsule' => ucwords(strtolower($record['capsule'])),'progress' => 0,'total_slides' => 0,'view_slides' => 0,'completed' => 'No','added_on' => '','updated_on' => '',];$items[ $record['capsule_id'] ] = $item;}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select(CompanyMicrolearningUserProgressMapper::_TABLE);$select->columns(['capsule_id', 'progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->equalTo('user_id', $user->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$records = $queryMapper->fetchAll($select);foreach($records as $record){$capsule_id = $record['capsule_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[ $capsule_id ]['progress'] = $record['progress'];$items[ $capsule_id ]['total_slides'] = $record['total_slides'];$items[ $capsule_id ]['view_slides'] = $record['view_slides'];$items[ $capsule_id ]['completed'] = $record['completed'] == 1 ? 'Si' : 'No';$items[ $capsule_id ]['added_on'] = $added_on;$items[ $capsule_id ]['updated_on'] = $updated_on;}$data['items'] = array_values($items);if($allowDownload) {$data['link_download'] = $this->url()->fromRoute('microlearning/reports/progress-for-student/excel', [], ['query' => ['student_uuid' => $user->uuid] ]);}return new JsonModel(['success' => true,'data' => $data]);} else {$form = new StudentReportForm($this->adapter, $currentCompany->id);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/microlearning-reports/progress-for-student.phtml');$viewModel->setVariables(['form' => $form,]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function progressForStudentExcelAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()){$student_uuid = Functions::sanitizeFilterString($this->params()->fromQuery('student_uuid'));$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOneByUuidAndNetworkId($student_uuid, $currentUser->network_id);if(!$user) {return new JsonModel(['success' => false,'data' => 'ERROR_USER_NOT_FOUND']);}$companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);$count = $companyMicrolearningCapsuleUserMapper->fetchCountByCompanyIdAndUserId($currentCompany->id, $user->id);if(!$count) {return new JsonModel(['success' => false,'data' => 'ERROR_UNAUTHORIZED']);}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select();$select->columns(['capsule_id', 'access', 'paid_from', 'paid_to' ]);$select->from(['tb1' => CompanyMicrolearningCapsuleUserMapper::_TABLE] );$select->join(['tb2' => CompanyMicrolearningTopicMapper::_TABLE], 'tb1.company_id = tb2.company_id AND tb1.topic_id = tb2.id', ['topic' => 'name']);$select->join(['tb3' => CompanyMicrolearningCapsuleMapper::_TABLE], 'tb1.company_id = tb3.company_id AND tb1.topic_id = tb3.topic_id AND tb1.capsule_id = tb3.id', ['capsule' => 'name']);$select->where->equalTo('tb1.company_id', $currentCompany->id);$select->where->equalTo('tb1.user_id', $user->id);$select->order('tb2.name ASC, tb3.name ASC');$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$capsule_id = $record['capsule_id'];$item = ['topic' => ucwords(strtolower($record['topic'])),'capsule' => ucwords(strtolower($record['capsule'])),'progress' => 0,'total_slides' => 0,'view_slides' => 0,'completed' => 'No','added_on' => '','updated_on' => '',];$items[ $record['capsule_id'] ] = $item;}$queryMapper = QueryMapper::getInstance($this->adapter);$sql = $queryMapper->getSql();$select = $sql->select(CompanyMicrolearningUserProgressMapper::_TABLE);$select->columns(['capsule_id', 'progress', 'total_slides' , 'view_slides', 'completed', 'added_on','updated_on']);$select->where->equalTo('company_id', $currentCompany->id);$select->where->equalTo('user_id', $user->id);$select->where->equalTo('type', CompanyMicrolearningUserProgress::TYPE_CAPSULE);$records = $queryMapper->fetchAll($select);foreach($records as $record){$capsule_id = $record['capsule_id'];$dt_added_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);$added_on = $dt_added_on->format('d/m/Y h:i a');$dt_updated_on = \DateTime::createFromFormat('Y-m-d H:i:s', $record['updated_on']);$updated_on = $dt_updated_on->format('d/m/Y h:i a');$items[ $capsule_id ]['progress'] = $record['progress'];$items[ $capsule_id ]['total_slides'] = $record['total_slides'];$items[ $capsule_id ]['view_slides'] = $record['view_slides'];$items[ $capsule_id ]['completed'] = $record['completed'];$items[ $capsule_id ]['added_on'] = $added_on;$items[ $capsule_id ]['updated_on'] = $updated_on;}$records = array_values($items);$spreadsheet = new Spreadsheet();$spreadsheet->getProperties()->setTitle("Progreso por Tópico");$spreadsheet->setActiveSheetIndex(0);$spreadsheet->getActiveSheet()->SetCellValue('A1', 'Nombre:');$spreadsheet->getActiveSheet()->SetCellValue('A2', ucwords(trim(strtolower($user->first_name))));$spreadsheet->getActiveSheet()->SetCellValue('B1', 'Apellido:');$spreadsheet->getActiveSheet()->SetCellValue('B2', ucwords(trim(strtolower($user->last_name))));$spreadsheet->getActiveSheet()->SetCellValue('C1', 'Correo electrónco:');$spreadsheet->getActiveSheet()->SetCellValue('C2', trim(strtolower($user->email)));$spreadsheet->getActiveSheet()->SetCellValue('D1', 'Fecha:');$spreadsheet->getActiveSheet()->SetCellValue('D2', date('d/m/Y h:i a'));$spreadsheet->getActiveSheet()->SetCellValue('A4', 'Tópico');$spreadsheet->getActiveSheet()->SetCellValue('B4', 'Cápsula');$spreadsheet->getActiveSheet()->SetCellValue('C4', 'Progreso');$spreadsheet->getActiveSheet()->SetCellValue('D4', 'Diapositivas Totales');$spreadsheet->getActiveSheet()->SetCellValue('E4', 'Diapositivas Vistas');$spreadsheet->getActiveSheet()->SetCellValue('F4', 'Cápsula Completada');$spreadsheet->getActiveSheet()->SetCellValue('G4', 'Inicio');$spreadsheet->getActiveSheet()->SetCellValue('H4', 'Ultima vez');$i = 5;foreach($records as $record){$spreadsheet->getActiveSheet()->SetCellValue('A' . $i, ucwords(strtolower(trim($record['topic']))));$spreadsheet->getActiveSheet()->SetCellValue('B' . $i, ucwords(strtolower(trim($record['capsule']))));$spreadsheet->getActiveSheet()->SetCellValue('C' . $i, $record['progress']);$spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['total_slides']);$spreadsheet->getActiveSheet()->SetCellValue('E' . $i, $record['view_slides']);$spreadsheet->getActiveSheet()->SetCellValue('F' . $i, $record['completed'] == 1 ? 'Si' : 'No');$spreadsheet->getActiveSheet()->SetCellValue('G' . $i, $record['added_on']);$spreadsheet->getActiveSheet()->SetCellValue('H' . $i, $record['updated_on']);$i++;}$fileName = 'reporte_progreso_por_estudiante_' . time() . '.xls';$tempFilename = tempnam(sys_get_temp_dir(), 'reporte_progreso_por_estudiante_' . 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']);}}}