<?php 
////////////////////////////////////////////////////////////////////////////////////////////////////////
//       Class : sigesp_copia_menu.php                                	                			  //    
// Description : Procesa la copia de datos del menu ext								  //
////////////////////////////////////////////////////////////////////////////////////////////////////////
class sigesp_copia_menu {

	var $io_sql_origen;
	var $io_sql_destino;
	var $io_mensajes;
	var $io_funciones;
	var $io_validacion;
	var	$lo_archivo;
	var $ls_database_source;
	var $ls_dabatase_target;
	
	//-----------------------------------------------------------------------------------------------------------------------------------	
	function sigesp_copia_menu()
	{
		$ld_fecha=date("_d-m-Y");
		$ls_nombrearchivo="resultado/".$_SESSION["ls_data_des"]."_menu_result_".$ld_fecha.".txt";
		$this->lo_archivo=@fopen("$ls_nombrearchivo","a+");
	
		$this->ls_database_source=$_SESSION["ls_database"];
		$this->ls_dabatase_target=$_SESSION["ls_data_des"];		
		require_once("../shared/class_folder/sigesp_include_covensol.php");
		require_once("../shared/class_folder/class_mensajes.php");
		require_once("../shared/class_folder/class_sql_covensol.php");
		require_once("class_folder/class_validacion.php");
				
		$this->io_mensajes=new class_mensajes();
		$this->io_validacion      = new class_validacion();
		$io_conect	= new sigesp_include_covensol();
		$io_conexion_origen = $io_conect->uf_conectar();
		$io_conexion_destino  = $io_conect->uf_conectar_otra_bd ($_SESSION["ls_hostname"],$_SESSION["ls_login"],$_SESSION["ls_password"],$this->ls_dabatase_target,$_SESSION["ls_gestor"]); 
		$this->io_sql_origen = new class_sql_covensol($io_conexion_origen);
		$this->io_sql_destino = new class_sql_covensol($io_conexion_destino);
				
		global $ruta;		
		if($ruta==''){$ruta="../";}	
		require_once($ruta."shared/class_folder/sigesp_conexiones.php");
		$this->io_conexiones=new conexiones();
		
		$this->borrar_tabla = 0;
		$this->msjejec = "";
		$this->msjresultado = "";		
	    $this->ls_gestor    = $_SESSION["ls_gestor"];
		
	}// end function sigesp_copia_sep
	//-----------------------------------------------------------------------------------------------------------------------------------	


	function ue_copiar_menu_basico()
	{
		$lb_valido=true;
		if($this->lo_archivo){@fwrite($this->lo_archivo," \r\n".date('H:i:s').'.- Iniciando Apertura de Menus ... '." \r\n"." \r\n");}
		$this->io_sql_destino->begin_transaction();	
		
		
		if($lb_valido){$this->msjejec .= date('H:i:s').'.- <b>Ejecutando:</b> release_menu()<br />'; $lb_valido=$this->release_menu();}	
		if($lb_valido){$this->msjejec .= date('H:i:s').'.- <b>Ejecutando:</b> uf_insert_menus()<br />'; $lb_valido=$this->uf_insert_menus();} 	
		if($lb_valido){$this->msjejec .= date('H:i:s').'.- <b>Ejecutando:</b> uf_insert_menu_items()<br />'; $lb_valido=$this->uf_insert_menu_items();} 
		if($lb_valido){$this->msjejec .= date('H:i:s').'.- <b>Ejecutando:</b> inicializar_secuencias()<br />'; $lb_valido=$this->inicializar_secuencias();}
					
		if(!$lb_valido){$this->io_sql_destino->rollback(); $this->io_mensajes->message("Ocurrió un error al copiar la data de Menus."); return false;}    
		$this->io_mensajes->message("La data de Menus se copió correctamente."); 
		if($this->lo_archivo){@fwrite($this->lo_archivo,date('H:i:s').'.- La data de  Menus se copió correctamente.'." \r\n"." \r\n");} 
		$this->io_sql_destino->commit();
		//$this->io_validacion->uf_insert_sistema_apertura('SEP');	
		return true;
			
	}
	
	
	function uf_select_table($as_tabla)
	{
	  
	   switch ($this->ls_gestor)
	   {
	   		case "MYSQLT":
			   $ls_sql= " SELECT * FROM ".
						" INFORMATION_SCHEMA.TABLES ".
						" WHERE TABLE_SCHEMA='".$this->ls_dabatase_target."' AND (UPPER(TABLE_NAME)=UPPER('".$as_tabla."'))";				
			break;
	   		case "POSTGRES":
			   $ls_sql= " SELECT * FROM ".
						" INFORMATION_SCHEMA.TABLES ".
						" WHERE table_catalog='".$this->ls_dabatase_target."' AND (UPPER(table_name)=UPPER('".$as_tabla."'))";				
			break;
	   	
	   }
	   
	   $rs_data=$this->io_sql_destino->select($ls_sql);
	   if($rs_data===false){   
         $this->io_mensajes->message("ERROR en uf_select_table()".$this->io_sql->message);			
 		  return false; 
	   }
	  
	   if($rs_data->RecordCount()) {return true;}
   	    
	   return false;
	} // end function uf_select_table
	
	function release_menu(){
			
			$existe = $this->uf_select_table('sss_menus');
			
			if (!$existe){
							
				 $ls_sql=" CREATE TABLE sss_menus (
							  id_menu serial NOT NULL,
							  nombre_menu text,
							  descripcion_menu text,
							  codsis character varying(15),
							  id_ventana integer,
							  usuario_reg character varying(30),
							  fecha_reg timestamp with time zone,
							  usuario_mod character varying(30),
							  fecha_mod timestamp with time zone,
							  CONSTRAINT sss_menus_pkey PRIMARY KEY (id_menu)
							)
							WITHOUT OIDS;
							ALTER TABLE sss_menus OWNER TO postgres; ";
				 
				 $li_row = $this->io_sql_destino->execute($ls_sql);
				 if ($li_row===false){						
					$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->release_menu ERROR->".$this->io_sql_destino->message);
					return false;						
				 }	
				 				
			}
			
			$existe = $this->uf_select_table('sss_menu_items');
			if (!$existe){
							
				 $ls_sql="  CREATE TABLE sss_menu_items
							(
							  id_menu_item serial NOT NULL,
							  id_menu integer,
							  barra_menu integer,
							  texto_item text,
							  sub_bandera integer,
							  id_padre integer,
							  posicion_item integer,
							  funcion_js character varying(100),
							  nivel integer,
							  icono character varying(45),
							  codsis character varying(100),
							  separador integer,
							  ventana character varying(255) DEFAULT ''::character varying,
							  CONSTRAINT sss_menu_items_pkey PRIMARY KEY (id_menu_item)
							)
							WITHOUT OIDS;
							ALTER TABLE sss_menu_items OWNER TO postgres; ";
				 
				 $li_row = $this->io_sql_destino->execute($ls_sql);
				 if ($li_row===false){						
					$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->release_menu ERROR->".$this->io_sql_destino->message);
					return false;						
				 }	
				 				
			}
			
			return true;	
	}

	function inicializar_secuencias(){
	
			$ls_sql=" SELECT setval('sss_menu_items_id_menu_item_seq', max(id_menu_item)) FROM sss_menu_items;
					  SELECT setval('sss_menus_id_menu_seq', max(id_menu)) FROM sss_menus; "; 
			 
			 $li_row = $this->io_sql_destino->execute($ls_sql);
			 if ($li_row===false){						
				$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->release_menu ERROR->".$this->io_sql_destino->message);
				return false;						
			 }	
			 
			 return true;
	
	}


	function uf_insert_menus(){

		if($this->lo_archivo){@fwrite($this->lo_archivo,date('H:i:s').'.- Copiando sss_menus ... '." \r\n");}
		$lb_valido=true;
		$li_total_select=0;
		$li_total_insert=0;
		
		if($this->borrar_tabla){
		    $valido=$this->uf_limpiar_tabla('sss_menu_items');
			if($valido===false){return false;}
			$valido=$this->uf_limpiar_tabla('sss_menus');
			if($valido===false){return false;}
		}
		
		$ls_sql = " SELECT id_menu, nombre_menu, descripcion_menu, codsis, id_ventana, 
		                   usuario_reg, fecha_reg, usuario_mod, fecha_mod  
				    FROM sss_menus ";
		$io_recordset=$this->io_sql_origen->select($ls_sql);
		if ($io_recordset===false){			   	
		   $this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->uf_insert_menus ERROR-> ".$this->io_sql_origen->message);
		   return false;
	    }
		
		
		 $li_total_select = $this->io_sql_origen->num_rows($io_recordset);
		 while($row=$this->io_sql_origen->fetch_row($io_recordset)){	
		 		
				$row['fecha_reg'] = $row['fecha_reg']?$row['fecha_reg']:'1900-01-01';
				$row['fecha_mod'] = $row['fecha_mod']?$row['fecha_mod']:'1900-01-01';				
				$row['id_ventana'] = $row['id_ventana']?$row['id_ventana']:0;	
								   
				$ls_sql=" INSERT INTO sss_menus (id_menu, nombre_menu, descripcion_menu, codsis, 
				                                 id_ventana, usuario_reg, fecha_reg, usuario_mod, fecha_mod) 
				          VALUES (".$row['id_menu'].",'".
						             $row['nombre_menu']."','".
							         $row['descripcion_menu']."','".
									 $row['codsis']."',".
									 $row['id_ventana'].",'".
									 $row['usuario_reg']."','".
									 $row['fecha_reg']."','".
									 $row['usuario_mod']."','".
									 $row['fecha_mod']."')";
				 $li_row = $this->io_sql_destino->execute($ls_sql);
				 if ($li_row===false){						
					$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->uf_insert_menus ERROR->".$this->io_sql_destino->message);
					return false;						
				 }					
				 $li_total_insert++;
				
		  }
			  
		 $this->msjresultado = $this->msjresultado."*****************************************************************<br />";
		 $this->msjresultado = $this->msjresultado."   <b>Tabla Origen:</b>  sss_menus Registros ".$li_total_select."<br />";
		 $this->msjresultado = $this->msjresultado."   <b>Tabla Destino:</b> sss_menus Registros ".$li_total_insert."<br />";
		 $this->msjresultado = $this->msjresultado."*****************************************************************<br /><br />";
				  
		 return true;
	}// end function uf_insert_menus	

	function uf_insert_menu_items(){

		if($this->lo_archivo){@fwrite($this->lo_archivo,date('H:i:s').'.- Copiando sss_menu_items ... '." \r\n");}
		$lb_valido=true;
		$li_total_select=0;
		$li_total_insert=0;
		
		if($this->borrar_tabla){
			$valido=$this->uf_limpiar_tabla('sss_menu_items');
			if($valido===false){return false;}
		}
		
		$ls_sql = " SELECT id_menu_item, id_menu, barra_menu, texto_item, sub_bandera, id_padre, 
      					   posicion_item, funcion_js, nivel, icono, codsis, separador, ventana  
				    FROM sss_menu_items ";
		$io_recordset=$this->io_sql_origen->select($ls_sql);
		if ($io_recordset===false){			   	
		   $this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->uf_insert_menu_items ERROR-> ".$this->io_sql_origen->message);
		   return false;
	    }
		
		
		 $li_total_select = $this->io_sql_origen->num_rows($io_recordset);
		 while($row=$this->io_sql_origen->fetch_row($io_recordset)){	
		 		
								   
				$ls_sql=" INSERT INTO sss_menu_items (id_menu_item, id_menu, barra_menu, texto_item, sub_bandera, id_padre, 
      					   							  posicion_item, funcion_js, nivel, icono, codsis, separador, ventana) 
				          VALUES (".$row['id_menu_item'].",".
						             $row['id_menu'].",".
							         $row['barra_menu'].",'".
									 $row['texto_item']."',".
									 $row['sub_bandera'].",".
									 $row['id_padre'].",".
									 $row['posicion_item'].",'".
									 //addslashes($row['funcion_js'])."',".
                                                                         str_replace($row['funcion_js'],"'","''")."',". //camb se cambia por '' para escapar los caracteres ' en sql
									 $row['nivel'].",'".
									 $row['icono']."','".
									 $row['codsis']."',".
									 $row['separador'].",'".
									 $row['ventana']."')";
				 $li_row = $this->io_sql_destino->execute($ls_sql);
				 if ($li_row===false){						
					$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->uf_insert_menu_items ERROR->".$this->io_sql_destino->message);
					return false;						
				 }					
				 $li_total_insert++;
				
		  }
			  
		 $this->msjresultado = $this->msjresultado."*****************************************************************<br />";
		 $this->msjresultado = $this->msjresultado."   <b>Tabla Origen:</b>  sss_menu_items Registros ".$li_total_select."<br />";
		 $this->msjresultado = $this->msjresultado."   <b>Tabla Destino:</b> sss_menu_items Registros ".$li_total_insert."<br />";
		 $this->msjresultado = $this->msjresultado."*****************************************************************<br /><br />";
				  
		 return true;
	}// end function uf_insert_menu_items	
	
	function ue_limpiar_menu_basico()
	{
		
		$lb_valido=$this->release_menu();		
		if($lb_valido===false){return false;}
		
		$this->io_sql_destino->begin_transaction();
			
		//$resp = $this->liberar_fk();
		//if($resp===false){$this->io_sql_destino->rollback(); return false;}	
		if($lb_valido){$lb_valido=$this->uf_limpiar_tabla("sss_menu_items","");}	
		if($lb_valido){$lb_valido=$this->uf_limpiar_tabla("sss_menus","");}		
		
		if(!$lb_valido){
		    $this->io_sql_destino->rollback();	
		 	$this->io_mensajes->message("Ocurrió un error al borrar la data de Menus. "); 
			return false;
		}
		//$resp = $this->encadenar_fk();
		//if($resp===false){$this->io_sql_destino->rollback(); return false;}	
		$this->io_sql_destino->commit();
		$this->io_mensajes->message("La data de menus se borró correctamente.");
		return true;		
		
	}// end function ue_limpiar_scg_basico
	

	function uf_limpiar_tabla($as_tabla,$as_condicion="")
	{			
		if($this->lo_archivo){@fwrite($this->lo_archivo,date('H:i:s').'.- Eliminando datos de '.$as_tabla.' ... '." \r\n");}
		$this->io_sql_destino->begin_transaction();
		
		$li_total_select=0;
		$li_total_insert=0;
		$ls_sql="DELETE FROM ".$as_tabla." ".$as_condicion;
	
		$io_recordset=$this->io_sql_destino->execute($ls_sql);
	
		if($io_recordset===false)
		{ 
			$this->io_sql_destino->rollback();			
			$lb_valido=false;
			$this->msjresultado="Error al Borrar la tabla: ".$as_tabla.".\r\n".$this->io_sql_destino->message."\r\n";
			$error2="Error al Borrar la tabla: ".$as_tabla.".<br/>".$this->io_sql_destino->message."<br/>";			
			$this->io_mensajes->message("CLASE->".get_class($this)." MÉTODO->uf_limpiar_tabla ERROR->".$error2);
			return false;			
		}
		
		$this->io_sql_destino->commit();
		$this->msjresultado = $this->msjresultado."*****************************************************************<br />";
		$this->msjresultado=$this->msjresultado."   Tabla  ".$as_tabla."  Blanqueada <br />";
		$this->msjresultado=$this->msjresultado."*****************************************************************<br />";			
			
		return true;
	}// end function uf_limpiar_tabla
	

}
?>