Autoría | Ultima modificación | Ver Log |
<?phpnamespace 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;}}}