Autoría | Ultima modificación | Ver Log |
<?php
namespace local_cesa_reportes\task;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
defined('MOODLE_INTERNAL') || die();
require_once dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'locallib.php';
require_once dirname(dirname(dirname(dirname(__DIR__)))) . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'phpspreadsheet' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
class processreport extends \core\task\scheduled_task {
const _STATUS_PENDING = 0;
const _STATUS_PROCESSING = 1;
const _STATUS_READY = 2;
const _STATUS_ERROR = 3;
public function get_name() {
return get_string('process_report_task', 'local_cesa_reportes');
}
public function execute() {
global $DB;
$record_files = $DB->get_records('local_cesa_reportes', ['status' => self::_STATUS_PENDING]);
foreach($record_files as $record_file)
{
$parameters = json_decode($record_file->parameters);
if($parameters->type == 'todos_los_usuarios_de_un_curso') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->todos_los_usuarios_de_un_curso($record_file);
}
else if($parameters->type == 'todos_los_cursos_de_un_usuario') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->todos_los_cursos_de_un_usuario($record_file);
}
else if($parameters->type == 'todos_los_cursos') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->todos_los_cursos($record_file);
}
else if($parameters->type == 'todos_los_cursos_con_actividades') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->todos_los_cursos_con_actividades($record_file);
}
else if($parameters->type == 'los_ultimos_siete_dias') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->los_ultimos_siete_dias($record_file);
}
else if($parameters->type == 'custom') {
$record_file->status = self::_STATUS_PROCESSING;
$DB->update_record('local_cesa_reportes', $record_file);
$this->custom($record_file);
}
}
return true;
}
private function los_ultimos_siete_dias($record_file)
{
global $DB;
$filter_userids = [];
$filter_courseids = [];
$filter_by_company_active = false;
$data = local_cesa_reportes_get_week_days();
$last_ten_user_activities = (array) local_cesa_reportes_get_last_ten_user_activities($filter_by_company_active, $filter_userids, $data->min, $data->max);
$top_ten_user_activities = (array) local_cesa_reportes_get_top_ten_user_activities($filter_by_company_active, $filter_userids, $data->min, $data->max);
$last_ten_user_modules_completion = (array) local_cesa_reportes_get_last_ten_user_modules_completion($filter_by_company_active, $filter_userids, $data->min, $data->max);
$top_ten_user_modules_completion = (array) local_cesa_reportes_get_top_ten_user_modules_completion($filter_by_company_active, $filter_userids, $data->min, $data->max);
$chart = [];
foreach($data->days as $day)
{
$data1 = local_cesa_reportes_get_count_activities($filter_by_company_active, $filter_userids, $day->min, $day->max);
$data2 = local_cesa_reportes_get_count_modules_completion($filter_by_company_active, $filter_userids, $day->min, $day->max);
array_push($chart, [
'label' => $day->day,
'data1' => $data1,
'data2' => $data2,
]);
}
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setMergeCells(['A1', 'E1']);
$sheet->setCellValue('A1', 'Los últimos 10 usuarios con actividades');
$sheet->setCellValue('A2', 'Curso');
$sheet->setCellValue('B2', 'Nombre');
$sheet->setCellValue('C2', 'Apellido');
$sheet->setCellValue('D2', 'Email');
$sheet->setCellValue('E2', 'Fecha');
$row = 3;
foreach($last_ten_user_activities as $record)
{
$sheet->setCellValue('A' . $row, $record['course']);
$sheet->setCellValue('B' . $row, $record['firstname']);
$sheet->setCellValue('C' . $row, $record['lastname']);
$sheet->setCellValue('D' . $row, $record['email']);
$sheet->setCellValue('E' . $row, $record['timecreated']);
$row++;
}
$sheet = $spreadsheet->createSheet();
$sheet->setMergeCells(['A1', 'D1']);
$sheet->setCellValue('A1', 'Los 10 usuarios con más actividades vistas');
$sheet->setCellValue('A2', 'Nombre');
$sheet->setCellValue('B2', 'Apellido');
$sheet->setCellValue('C2', 'Email');
$sheet->setCellValue('D2', 'Total');
foreach($top_ten_user_activities as $record)
{
$sheet->setCellValue('A' . $row, $record['firstname']);
$sheet->setCellValue('B' . $row, $record['lastname']);
$sheet->setCellValue('C' . $row, $record['email']);
$sheet->setCellValue('D' . $row, $record['activities']);
$row++;
}
$sheet = $spreadsheet->createSheet();
$sheet->setMergeCells(['A1', 'E1']);
$sheet->setCellValue('A1', 'Los últimos 10 usuarios con actividades completadas');
$sheet->setCellValue('A2', 'Curso');
$sheet->setCellValue('B2', 'Nombre');
$sheet->setCellValue('C2', 'Apellido');
$sheet->setCellValue('D2', 'Email');
$sheet->setCellValue('E2', 'Fecha');
$row = 3;
foreach($last_ten_user_modules_completion as $record)
{
$sheet->setCellValue('A' . $row, $record['course']);
$sheet->setCellValue('B' . $row, $record['firstname']);
$sheet->setCellValue('C' . $row, $record['lastname']);
$sheet->setCellValue('D' . $row, $record['email']);
$sheet->setCellValue('E' . $row, $record['timemodified']);
$row++;
}
$sheet = $spreadsheet->createSheet();
$sheet->setMergeCells(['A1', 'D1']);
$sheet->setCellValue('A1', 'Los 10 usuarios con más actividades completadas');
$sheet->setCellValue('A2', 'Nombre');
$sheet->setCellValue('B2', 'Apellido');
$sheet->setCellValue('C2', 'Email');
$sheet->setCellValue('D2', 'Total');
$row = 3;
foreach($top_ten_user_modules_completion as $record)
{
$sheet->setCellValue('A' . $row, $record['firstname']);
$sheet->setCellValue('B' . $row, $record['lastname']);
$sheet->setCellValue('C' . $row, $record['email']);
$sheet->setCellValue('D' . $row, $record['completion']);
$row++;
}
$sheet = $spreadsheet->createSheet();
$sheet->setMergeCells(['A1','B1','C1']);
$sheet->setCellValue('A1', 'Actividades Vistas / Actividades Completadas');
$sheet->setCellValue('A2', 'Fecha');
$sheet->setCellValue('B2', 'Actividades Vistas');
$sheet->setCellValue('C2', 'Actividades Completadas');
$row = 3;
foreach($chart as $record)
{
$sheet->setCellValue('A' . $row, $record['label']);
$sheet->setCellValue('B' . $row, $record['data1']);
$sheet->setCellValue('C' . $row, $record['data2']);
$row++;
}
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'los-ultimos-siete-dias-'.date('Y-m-d-H-i').'.xlsx';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
try {
$writer = new Xlsx($spreadsheet);
$writer->save($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
private function todos_los_cursos_con_actividades($record_file)
{
global $DB;
$filter_userids = [];
$filter_courseids = [];
$filter_by_company_active = false;
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'todos-los-cursos-con-actividades-'.date('Y-m-d-H-i').'.csv';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
$filename_zip = 'todos-los-cursos-con-actividades-'.date('Y-m-d-H-i').'.zip';
$fullname_zip = $pathname . DIRECTORY_SEPARATOR . $filename_zip;
try {
$fp = fopen($fullname, 'w+');
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas',
'Actividades completadas',
'Progreso %',
'Primera actividad',
'Ultima actividad',
'Actividad',
'Completado'
];
foreach($extra_fields as $extra_field)
{
array_push($fields, $extra_field->name );
}
fputcsv($fp, $fields);
$include_modules = true;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
foreach($course->activities as $activity)
{
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
$activity->module,
empty($activity->timecompleted) ? '' : date('d/m/Y h:i a', $activity->timecompleted)
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value);
}
fputcsv($fp, $item);
}
}
}
fflush($fp);
fclose($fp);
$zip = new \ZipArchive();
if ($zip->open($fullname_zip, \ZIPARCHIVE::CREATE) != TRUE) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
$zip->addFile($fullname, $filename);
$zip->close();
@unlink($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename_zip;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
private function todos_los_cursos($record_file)
{
global $DB;
$filter_userids = [];
$filter_courseids = [];
$filter_by_company_active = false;
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
try {
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'todos-los-cursos-'.date('Y-m-d-H-i').'.csv';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
$filename_zip = 'todos-los-cursos-'.date('Y-m-d-H-i').'.zip';
$fullname_zip = $pathname . DIRECTORY_SEPARATOR . $filename_zip;
$fp = fopen($fullname, 'w+');
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas',
'Actividades completadas',
'Progreso %',
'Primera actividad',
'Ultima actividad',
];
foreach($extra_fields as $extra_field)
{
array_push($fields, $extra_field->name );
}
fputcsv($fp, $fields);
$include_modules = false;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value);
}
fputcsv($fp, $item);
}
}
fflush($fp);
fclose($fp);
$zip = new \ZipArchive();
if ($zip->open($fullname_zip, \ZIPARCHIVE::CREATE) != TRUE) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
$zip->addFile($fullname, $filename);
$zip->close();
@unlink($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename_zip;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
private function todos_los_cursos_de_un_usuario($record_file)
{
global $DB;
$parameters = json_decode($record_file->parameters);
$filter_userids = [$parameters->userid];
$filter_courseids = [];
$filter_by_company_active = true;
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas',
'Actividades completadas',
'Progreso %',
'Primera actividad',
'Ultima actividad',
];
foreach($extra_fields as $extra_field)
{
array_push($fields, $extra_field->name );
}
$items = [];
$include_modules = false;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value);
}
array_push($items, $item);
}
}
$letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'O', 'P', 'Q', 'R', 'S'];
// (B) CREATE A NEW SPREADSHEET
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
for($i = 0; $maxi = count($fields), $i < $maxi; $i++)
{
$letter = $letters[$i];
$row = 1;
$cell = $letter . $row;
$sheet->setCellValue($cell, $fields[$i]);
}
for($i = 0; $maxi = count($items), $i < $maxi; $i++)
{
$item = $items[$i];
$row = $i + 2;
for($j = 0; $maxj = count($item), $j < $maxj; $j++)
{
$letter = $letters[$j];
$cell = $letter . $row;
$sheet->setCellValue($cell, $item[$j]);
}
}
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'todos-los-cursos-de-un-usuario-'.date('Y-m-d-H-i').'.xlsx';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
try {
$writer = new Xlsx($spreadsheet);
$writer->save($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
private function todos_los_usuarios_de_un_curso($record_file)
{
global $DB;
$parameters = json_decode($record_file->parameters);
$filter_userids = [];
$filter_courseids = [$parameters->courseid];
$filter_by_company_active = true;
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas',
'Actividades completadas',
'Progreso %',
'Primera actividad',
'Ultima actividad',
];
foreach($extra_fields as $extra_field)
{
array_push($fields, $extra_field->name );
}
$items = [];
$include_modules = false;
$page = 0;
$data = local_cesa_reportes_get_data_for_report_or_excel($filter_by_company_active, $filter_userids, $filter_courseids, $include_modules, $page);
$records = $data['items'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value);
}
array_push($items, $item);
}
}
$letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'O', 'P', 'Q', 'R', 'S'];
// (B) CREATE A NEW SPREADSHEET
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
for($i = 0; $maxi = count($fields), $i < $maxi; $i++)
{
$letter = $letters[$i];
$row = 1;
$cell = $letter . $row;
$sheet->setCellValue($cell, $fields[$i]);
}
for($i = 0; $maxi = count($items), $i < $maxi; $i++)
{
$item = $items[$i];
$row = $i + 2;
for($j = 0; $maxj = count($item), $j < $maxj; $j++)
{
$letter = $letters[$j];
$cell = $letter . $row;
$sheet->setCellValue($cell, $item[$j]);
}
}
//
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'todos-los-usuarios-de-un-curso-'.date('Y-m-d-H-i').'.xlsx';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
try {
$writer = new Xlsx($spreadsheet);
$writer->save($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
private function custom($record_file)
{
global $DB;
$parameters = json_decode($record_file->parameters);
$filter_from = $parameters->filter_from;
$filter_to = $parameters->filter_to;
$filter_userkeyword = $parameters->filter_userkeyword;
$filter_userids = [];
$filter_by_company_active = false;
$dt = \DateTime::createFromFormat('Y-m-d', $filter_from);
$dt->setTime(0, 0, 0);
$filter_from = $dt ? $dt->getTimestamp() : strtotime('-1 Month');
$dt = \DateTime::createFromFormat('Y-m-d', $filter_to);
$dt->setTime(23, 59, 59);
$filter_to = $dt ? $dt->getTimestamp() : time();
$filter_courseids = local_cesa_reportes_get_course_with_activites_range($filter_from, $filter_to);
$filter_by_company_active = true;
$include_modules = false;
$page = 0;
$include_modules = false;
try {
$pathname = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'files';
if(!file_exists($pathname)) {
mkdir($pathname,0755, true);
}
$t = time();
$filename = 'custom-'.date('Y-m-d-H-i').'.csv';
$fullname = $pathname . DIRECTORY_SEPARATOR . $filename;
$filename_zip = 'custom-'.date('Y-m-d-H-i').'.zip';
$fullname_zip = $pathname . DIRECTORY_SEPARATOR . $filename_zip;
$fp = fopen($fullname, 'w+');
$extra_fields = local_cesa_reportes_get_user_extra_field_names();
if($include_modules) {
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas ',
'Actividades completadas ',
'Progreso %',
'Primera actividad',
'Ultima actividad',
'Actividad',
'Completado',
'Actividades asignadas (Curso) ',
'Actividades completadas (Curso) ',
'Progreso % (Curso) ',
'Primera actividad (Curso) ',
'Ultima actividad (Curso) ',
];
} else {
$fields = [
'Apellido',
'Nombre',
'Email',
'Curso',
'Categoria',
'Matriculación',
'Fecha finalización',
'Actividades asignadas ',
'Actividades completadas ',
'Progreso %',
'Primera actividad',
'Ultima actividad',
'Actividades asignadas (Curso) ',
'Actividades completadas (Curso) ',
'Progreso % (Curso) ',
'Primera actividad (Curso) ',
'Ultima actividad (Curso) ',
];
}
foreach($extra_fields as $extra_field)
{
array_push($fields, $extra_field->name);
}
fputcsv($fp, $fields);
$data = local_cesa_reportes_get_data_for_report_or_excel_custom($filter_by_company_active, $filter_userids, $filter_courseids, $filter_userkeyword, $filter_from, $filter_to, $include_modules, $page);
$records = $data['items'];
foreach($records as $record)
{
if(!$record->courses) {
continue;
}
foreach($record->courses as $course)
{
if(isset($course->activities)) {
foreach($course->activities as $activity)
{
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
$activity->module,
empty($activity->timecompleted) ? '' : date('d/m/Y h:i a', $activity->timecompleted),
$course->activities_assigned_course,
$course->activities_completed_course,
number_format($course->percentage_course, 2),
empty($course->time_activities_first_course) ? '' : date('d/m/Y h:i a', $course->time_activities_first_course),
empty($course->time_activities_last_course) ? '' : date('d/m/Y h:i a', $course->time_activities_last_course),
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value);
}
}
} else {
$item = [
$record->lastname,
$record->firstname,
$record->email,
$course->name,
$course->category,
empty($course->timeenrolled) ? '' : date('d/m/Y h:i a', $course->timeenrolled),
empty($course->timecompleted) ? '' : date('d/m/Y h:i a', $course->timecompleted),
$course->activities_assigned,
$course->activities_completed,
number_format($course->percentage, 2),
empty($course->time_activities_first) ? '' : date('d/m/Y h:i a', $course->time_activities_first),
empty($course->time_activities_last) ? '' : date('d/m/Y h:i a', $course->time_activities_last),
$course->activities_assigned_course,
$course->activities_completed_course,
number_format($course->percentage_course, 2),
empty($course->time_activities_first_course) ? '' : date('d/m/Y h:i a', $course->time_activities_first_course),
empty($course->time_activities_last_course) ? '' : date('d/m/Y h:i a', $course->time_activities_last_course),
];
foreach($extra_fields as $extra_field)
{
$value = '';
foreach($record->extras as $extra)
{
if($extra->id == $extra_field->id) {
$value = $extra->value;
}
}
array_push($item, $value );
}
}
}
fputcsv($fp, $item);
}
fflush($fp);
fclose($fp);
$zip = new \ZipArchive();
if ($zip->open($fullname_zip, \ZIPARCHIVE::CREATE) != TRUE) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
$zip->addFile($fullname, $filename);
$zip->close();
@unlink($fullname);
$record_file->generate_time = $t;
$record_file->status = self::_STATUS_READY;
$record_file->filename = $filename_zip;
$DB->update_record('local_cesa_reportes', $record_file);
return true;
} catch (\Exception $e) {
$record_file->status = self::_STATUS_ERROR;
$DB->update_record('local_cesa_reportes', $record_file);
return false;
}
}
}