load->model("FirmaModel"); } /** * Index Page for this controller. * * Maps to the following URL * http://example.com/index.php/welcome * - or - * http://example.com/index.php/welcome/index * - or - * Since this controller is set as the default controller in * config/routes.php, it's displayed at http://example.com/ * * So any other public methods not prefixed with an underscore will * map to /index.php/welcome/ * @see https://codeigniter.com/user_guide/general/urls.html */ /** Comentario sobre data_file(): * ESTA FUNCION REGRESA LA DIRECCION DEL ARCHIVO EXCEL QUE SE ESTÁ LEYENDO PARA GENERAR LAS FIRMAS */ private function data_file(){ return 'C:\xampp\htdocs\firmasCI\system_files\datos_firmas.xlsx'; } public function index() { $File = $this->data_file(); $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $spreadsheet= $reader->load($File); $sheet = $spreadsheet->getActiveSheet(); $fila_maxima = $sheet->getHighestDataRow(); #obteniendo headers $headers=[]; foreach($sheet->getRowIterator(1,1) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); foreach($cellIterator as $cell){ $headers[] = $cell->getCalculatedValue(); } } #obteniendo datos de las personas $personal =[]; foreach($sheet->getRowIterator(2,$fila_maxima) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $i=0; $data=[]; foreach($cellIterator as $cell){ $data[$headers[$i]] = $cell->getCalculatedValue(); $i++; } $personal[]=$data; } $data = ['headers'=>$headers,'personal'=>$personal]; $this->load->view('lista',$data); } public function generarVistaPrevia($id){ $persona = $this->consultarPersonal($id); if(isset($persona)){ list($site,$type,$identifier) = explode("/",$persona['LinkedIn']); list($email_id,$email_domain) = explode("@",$persona['Correo']); $data=['persona'=>$persona,'site'=>$site,'type'=>$type,'identifier'=>$identifier,'email_id'=>$email_id,'email_domain'=>$email_domain]; //llamada a la vista $this->load->view($persona['Plantilla'],$data); /* * *Todas las plantillas de firma en html se han llamado igual que como están en el excel *si desea cambiar el nombre de las plantillas debe descomentar el siguiente algoritmo y *extenderlo si es necesario. * if($persona['Plantilla']=='MER'){ $this->load->view('MER',$data); }elseif($persona['Plantilla']=='INVER'){ $this->load->view('INVER',$data); }elseif($persona['Plantilla']=='INVERSOL'){ $this->load->view('INVERSOL',$data); }elseif($persona['Plantilla']=='METCO'){ $this->load->view('METCO',$data); }else{ print("NO ESTA ASIGNADO A NINGUNA PLANTILLA, REVISE LOS DATOS"); } */ }else{ print("NO EXISTE EL ID ".$id." REGISTRADO EN LA HOJA DE EXCEL,POR FAVOR REVISE LOS DATOS"); } } public function consultarPersonal($id){ $File = 'C:\xampp\htdocs\firmasCI\system_files\datos_firmas.xlsx'; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $spreadsheet= $reader->load($File); $sheet = $spreadsheet->getActiveSheet(); $fila_maxima = $sheet->getHighestDataRow(); #obteniendo headers $headers=[]; foreach($sheet->getRowIterator(1,1) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); foreach($cellIterator as $cell){ $headers[] = $cell->getCalculatedValue(); } } #obteniendo datos foreach($sheet->getRowIterator(2,$fila_maxima) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $i=0; $data=[]; foreach($cellIterator as $cell){ $data[$headers[$i]] = $cell->getCalculatedValue(); $i++; if($data['N']!=$id){ break; }else{ $persona=$data; } } if(isset($persona)){ return $persona; } } return null; } /* Comentario sobre generarZIP($id): *ESTA FUNCION GENERA UN ZIP CON LOS ELEMENTOS DE CADA FIRMA *DESCARGA LAS IMAGENES, EL TIPO DE FUENTE Y LA VISTA EN HTML DE LA FIRMA. *EL CSS ESTÁ SIENDO INCRUSTADO EN LA VISTA, DENTRO DE LA FUNCIÓN generarHTML *LA FUNCION generarHTML GENERA LA VISTA DE LA FIRMA DE MODO QUE CONSUMA FUENTE E IMAGENES *DESDE UN SERVIDOR, POR LO TANTO DEBERÁ MODIFICARSE LA VISTA PARA QUE TRABAJE DE FORMA LOCAL *UNA VEZ LOS ARCHIVOS ESTÉN DESCARGADOS. */ public function generarZIP($id){ $persona = $this->consultarPersonal($id); if(isset($persona)){ $persona_name = $persona['Primer Nombre']."_".$persona['Primer Apellido']; $file_name = $this->generarHTML($persona); $zip = new ZipArchive(); $zip_name = $persona_name."_".$persona['Plantilla'].".zip"; $zip->open($zip_name,ZipArchive::CREATE); $public_folder_dir = "C:/XAMPP/htdocs/firmasCI/public"; $imagenes_folder = $public_folder_dir."/Imagenes"; $css_folder = $public_folder_dir."/css"; $tipograf_folder =$public_folder_dir."/Tipografias"; $carpetas=[]; $carpetas['Imagenes']=$imagenes_folder; //$carpetas['css']=$css_folder; $carpetas['Tipografias']=$tipograf_folder; $dir = 'public'; $zip->addEmptyDir($dir); $zip->addFile($file_name,$persona_name.".html"); foreach($carpetas as $key => $dir_folder){ $curr_dest_folder=$dir."/".$key; $zip->addEmptyDir($curr_dest_folder); foreach(array_diff(scandir($dir_folder), array('..', '.','fichas_style.css')) as $file){ $source_dir=$dir_folder."/".$file; $dest_folder=$curr_dest_folder."/".$file; $zip->addFile($source_dir,$dest_folder); } } $zip->close(); // Creamos las cabezeras que forzaran la descarga del archivo como archivo zip. header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=".$zip_name); // leemos el archivo creado readfile($zip_name); // Por último eliminamos el archivo temporal creado unlink($zip_name);//Destruye el archivo temporal }else{ print("NO EXISTE EL ID ".$id." REGISTRADO EN LA HOJA DE EXCEL,POR FAVOR REVISE LOS DATOS"); } } /** * comentario sobre la funcion descargarHTML($id) */ public function descargarHTML($id){ $persona = $this->consultarPersonal($id); if(isset($persona)){ $file_name = $this->generarHTML($persona); // Creamos las cabezeras que forzaran la descarga del archivo como archivo zip. header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=".$persona['Plantilla']."_".$persona['Nombre Completo'].".html"); // leemos el archivo creado readfile($file_name); }else{ print("ERROR AL CONSULTAR EL EXCEL, REVISE LOS DATOS"); } } /** * comentario sobre generarHTML($persona): * ESTA FUNCION GENERA LAS VISTAS HTML PARA DESCARGAR, DE CADA FIRMA ELECTRONICA * NECESITA COMO PARAMETRO UNA PERSONA EN ESPECIFICO PARA LA QUE SE GENERARÁ LA VISTA * RETORNA LA UBICACION Y EL NOMBRE DEL ARCHIVO CREADO. * SE DA POR ALUDIDO QUE LAS IMAGENES Y FUENTE QUE CONSUME LA VISTA, SE ENCUENTRAN EN * UN SERVIDOR EN LINEA,LISTO PARA SERVIRLOS. */ public function generarHTML($persona){ $persona_name = $persona['Primer Nombre']."_".$persona['Primer Apellido']; $path='system_files/firmas_generadas/'; $main_directory = $path.$persona['N']."_".$persona_name; $sub_directory = $main_directory."/".$persona['N']."_".$persona_name."_".date("d-m-Y_H_i_s"); $file_name = $sub_directory."/".$persona_name.".html"; if(!file_exists($main_directory)){ mkdir($main_directory); } if(!file_exists($sub_directory)){ mkdir($sub_directory); } list($site,$type,$identifier) = explode("/",$persona['LinkedIn']); list($email_id,$email_domain) = explode("@",$persona['Correo']); $firma = fopen($file_name,"a") or die("Error al crear el archivo"); if($persona['Plantilla']=='MER'){ $style =" @font-face{ font-family:GOTHICBI; src:url(../Tipografias/GOTHICB.ttf); } font{ font-family: GOTHICBI; } td{ font-family: GOTHICBI; } .merelec_name_yellow{ font-family: GOTHICBI; color: #FCB122; font-size: 15pt; } .merelec_name_gray{ font-family: GOTHICBI; color: #80888F; font-size: 15pt; } .merelec_puesto{ font-family: GOTHICBI; color: #80888F; font-size: 15pt; } .merelec_yellow_text{ color: #FCB122; font-size: 12pt; } .merelec_gray_text{ color: #80888F; font-size: 12pt; } "; $body = "
".$persona['Primer Nombre']." ".$persona['Primer Apellido']."

".$persona['Puesto']."

T.".$persona['Telefono']."   C.".$persona['Celular']."
".$email_id."@".$email_domain."
".$site."/".$type."/"."".$identifier."
www.mercadoselectricos.com.sv
"; }elseif($persona['Plantilla']=='INVER'){ $style = "@font-face{ font-family:HelveticaNeueLTStd-Lt; src:url(../Tipografias/HelveticaNeueLTStd-Lt.otf); } .inverlec_name_blue{ font-family: HelveticaNeueLTStd-Lt; color: #436DAA; font-size: 16px; } .inverlec_name_black{ font-family: HelveticaNeueLTStd-Lt; color: black; font-size: 16px; } td{ font-family: HelveticaNeueLTStd-Lt; } .inverlec_blue_text{ color: #436DAA; font-family: HelveticaNeueLTStd-Lt; font-size: 14px; } .inverlec_black_text{ color: black; font-family: HelveticaNeueLTStd-Lt; font-size: 14px; } "; $body="
".$persona['Primer Nombre']." ".$persona['Primer Apellido']."

".$persona['Puesto']."

T.".$persona['Telefono']."   C.".$persona['Celular']."
".$email_id."@".$email_domain."
".$site."/".$type."/"."".$identifier."
www.inverlec.com.sv
"; }elseif($persona['Plantilla']=='INVERSOL'){ $style = " @font-face{ font-family:HelveticaNeueLTStd-Lt; src:url(../Tipografias/HelveticaNeueLTStd-Lt.otf); } .inversol_name_yellow{ font-family: HelveticaNeueLTStd-Lt; color: #F78D27; font-size: 16px; } .inversol_name_black{ font-family: HelveticaNeueLTStd-Lt; color: black; font-size: 16px; } td{ font-family: HelveticaNeueLTStd-Lt; } .inversol_yellow_text{ color: #F78D27; font-family: HelveticaNeueLTStd-Lt; font-size: 14px; } .inversol_black_text{ color: black; font-family: HelveticaNeueLTStd-Lt; font-size: 14px; } "; $body = "
".$persona['Primer Nombre']." ".$persona['Primer Apellido']."

".$persona['Puesto']."

T.".$persona['Telefono']."   C.".$persona['Celular']."
".$email_id."@".$email_domain."
".$site."/".$type."/"."".$identifier."
www.inverlec.solar
"; }elseif($persona['Plantilla']=='METCO'){ $style = "@font-face{ font-family:HelveticaNeueLTStd-Lt; src:url(../Tipografias/HelveticaNeueLTStd-Lt.ttf); } @font-face{ font-family:VAGRoundedStd-Light; src:url(../Tipografias/VAGRoundedStd-Light.otf); } .metco_name_yellow{ font-family: VAGRoundedStd-Light; color: #DE8C33; font-size: 16pt; } .metco_name_black{ font-family: VAGRoundedStd-Light; color: black; font-size: 16pt; } .metco_puesto{ font-family: VAGRoundedStd-Light; color: black; font-size: 14pt; } td{ font-family: HelveticaNeueLTStd-Lt; } .metco_yellow_text{ color: #DE8C33; font-size: 11pt; font-family: HelveticaNeueLTStd-Lt; } .metco_gray_text{ color: black; font-size: 11pt; font-family: HelveticaNeueLTStd-Lt; } "; $body ="
".$persona['Primer Nombre']." ".$persona['Primer Apellido']."

".$persona['Puesto']."

T.".$persona['Telefono']."   C.".$persona['Celular']."
".$email_id."@".$email_domain."
".$site."/".$type."/"."".$identifier."
www.mexicantradingco.com.mx
"; }else{ $body = ""; print("NO ESTA ASIGNADO A NINGUNA PLANTILLA, REVISE LOS DATOS"); } $general_style =" a { text-decoration: none; display:table-cell; vertical-align:middle; } .social_media{ padding-right:4px; } "; $html_header =" "; fwrite($firma,$html_header.$body); return $file_name; } /** * comentario sobre generarTodas(): * ESTA FUNCION GENERA TODAS LAS FIRMAS EN HTML Y LAS AGREGA A UN ARCHIVO ZIP * SE DA POR ALUDIDO QUE LAS IMAGENES Y FUENTE QUE CONSUME CADA VISTA, SE ENCUENTRAN EN * UN SERVIDOR EN LINEA,LISTO PARA SERVIRLOS. */ public function generarTodas(){ $File = $this->data_file(); $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $spreadsheet= $reader->load($File); $sheet = $spreadsheet->getActiveSheet(); $fila_maxima = $sheet->getHighestDataRow(); #obteniendo headers $headers=[]; foreach($sheet->getRowIterator(1,1) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); foreach($cellIterator as $cell){ $headers[] = $cell->getCalculatedValue(); } } #obteniendo datos de las personas $file_names=[]; $file_dirs=[]; foreach($sheet->getRowIterator(2,$fila_maxima) as $row){ $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $i=0; $persona=[]; foreach($cellIterator as $cell){ $persona[$headers[$i]] = $cell->getCalculatedValue(); $i++; } $file_names[]=$persona['Plantilla']."_".$persona['Nombre Completo'].".html"; $file_dirs[]=$this->generarHTML($persona); } $i=0; $zip = new ZipArchive(); $zip_name = "paquete_firmas.zip"; $zip->open($zip_name,ZipArchive::CREATE); foreach($file_dirs as $file){ $zip->addFile($file,$file_names[$i]); $i++; } $zip->close(); // Creamos las cabezeras que forzaran la descarga del archivo como archivo zip. header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=".$zip_name); // leemos el archivo creado readfile($zip_name); // Por último eliminamos el archivo temporal creado unlink($zip_name);//Destruye el archivo temporal } /* *método para guardar en una base de datos public function guardar() { if ($_POST){ $this->FirmaModel->guardar($_POST); $ruta = base_url(); echo ""; } }*/ }