<?php 


class menu {
						
					
					
		function menu(){
			
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				// Function: correspondencia
				// Access: public (cor_c_correspondencia)
				// Description: Constructor de la Clase
				// Creado Por: Lic. Edgar A. Quintero
				// Fecha Creación: 27/01/2009 								
				// Fecha Última Modificación : 
				/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				global $ruta;
				
				require_once($ruta."shared/class_folder/sigesp_include.php");
				$io_include=new sigesp_include();
				$io_conexion=$io_include->uf_conectar();
				require_once($ruta."shared/class_folder/class_sql.php");
				$this->io_sql=new class_sql($io_conexion);	
				require_once($ruta."shared/class_folder/class_mensajes.php");
				$this->io_mensajes=new class_mensajes();
				require_once($ruta."shared/class_folder/sigesp_conexiones.php");
				$this->io_conexiones=new conexiones();	
				require_once($ruta."shared/class_folder/class_funciones.php");
				$this->io_funciones=new class_funciones();		
				require_once($ruta."shared/class_folder/sigesp_c_seguridad.php");
				$this->io_seguridad= new sigesp_c_seguridad();				
				$this->ls_codemp=$_SESSION["la_empresa"]["codemp"];
				$this->postgres_ilike = '';
				if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->postgres_ilike = 'I';}
				if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->indice_item = 'public.sss_menu_items_id_menu_item_seq';}
				
			
		}
		
		
		function consulta_menu($dato){
	
			global $obj_sql;
			
			if($dato){
				$criterio_cargo = " AND  nombre_menu ".$this->postgres_ilike."LIKE('%".$dato."%') ";
			}
			
			$sql_criterio = "  WHERE  nombre_menu ".$this->postgres_ilike."LIKE('%".$dato."%')
							".$criterio_cargo."
							 ORDER BY nombre_menu";
			
			$query = "SELECT * FROM sss_menus ".$sql_criterio;				
			return $this->io_conexiones->conexion($query,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> consulta menu','select','','');	
	
	
		}	
		
		function consulta_menu_items($dato){
	
			global $obj_sql;
			
			$sql_criterio = "  WHERE  id_menu ='".$dato."' ORDER BY id_menu_item";
			$query = "SELECT * FROM sss_menu_items ".$sql_criterio;				
			return $this->io_conexiones->conexion($query,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> consulta menu items','select','','');	
	
	
		}	
		
		function busca_menu($idx,$criterio,$opciones){
			
					global $obj_sql;
					
					if($idx==''){$idx=0;}
													
					switch($criterio){
								 
										  case "por_sub":
												$sql_criterio = " WHERE id_padre='".$idx."' ORDER BY posicion_item";
												break;							  
										  
										   case "por_barra":
												$sql_criterio = " WHERE sss_menus.codsis='".$idx."' AND barra_menu='1' ORDER BY  posicion_item";
												break;															
										
											case "por_barra_menu":
												$sql_criterio = " WHERE sss_menus.codsis='".$idx."' AND barra_menu='1' AND sub_bandera = '1' ORDER BY  posicion_item";
												break;
											
											case "nivel":
												$sql_criterio = " WHERE sss_menus.codsis='".$idx."' ORDER BY posicion_item";															
											break;	
												  														
										   
									
									}
						
					
					
					$query_rsmenu = "SELECT * FROM sss_menu_items 
									 LEFT JOIN sss_menus ON sss_menus.id_menu = sss_menu_items.id_menu".$sql_criterio;
					//echo '<br>'.$query_rsmenu;
					return $this->io_conexiones->conexion($query_rsmenu,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> busca_menu','select','','');	
	
			
			}
			
			function busca_menu_alt($idx,$criterio,$opciones){
			
					global $obj_sql;
																		
					switch($criterio){
					
							case "codigo":
								$sql_criterio = " WHERE codsis='".$idx."' ";															
							break;			  														
				
					}
					
					$query_rsmenu = "SELECT * FROM sss_menus".$sql_criterio; 
					//echo '<br>'.$query_rsmenu;
					return $this->io_conexiones->conexion($query_rsmenu,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> busca_menu_alt','select','','');	
	
			
			}
	
			function coloca_barra($codigo_sistema,$criterio,$opciones){
							//echo '<br>'.$codigo_sistema;
						global $obj_sql;
						
						$barra_menu_apertura = '<script type="text/javascript">';
						$barra_menu_apertura .= "\n".'Ext.onReady(function(){';
						
						$barra_menu_cuerpo2 .= "\n".'var tb = new Ext.Toolbar();';
						$barra_menu_cuerpo2 .= "\n"."tb.render('barra_herramientas');";
						$barra_menu_cuerpo2 .= "\n".'tb.add(';										
						$barra_menu_cierre = "\n".')'."\n".'});'."\n".'</script>';																		
						$consulta_barra = $this->busca_menu($codigo_sistema,'por_barra','');
						
						$i = 1;
						
						do{
																	
							$item_b .= "\n\t".'{';
							$item_b .= "\n\t\t"."text:'".$consulta_barra['fila']['texto_item']."',";											
							if($consulta_barra['fila']['funcion_js'] != ''){$item_b .= "\n\t\t"."handler: function() {per_ventana=1; if(per_ventana){".$consulta_barra['fila']['funcion_js'].";}},";}
							if($consulta_barra['fila']['sub_bandera'] == 1){$item_b .= "\n\t\t".'menu: menu'.$consulta_barra['fila']['id_menu_item'].',';}											
							$item_b .= "\n\t\t"."iconCls: '".$consulta_barra['fila']['icono']."'";
							$item_b .= "\n\t".'}';
							if($i == $consulta_barra['cantidad']){$item_b .= '';}else{$item_b .= ',';}										
							$i ++;
							
						} while ($consulta_barra['fila'] = $obj_sql->fetch_row($consulta_barra['rs'])); 
						
						
						$menus = $this->crea_menus($codigo_sistema,'');
						
						
						
						return $barra_menu_apertura.$menus.$barra_menu_cuerpo2.$item_b.$barra_menu_cierre;
						
									
			
			}
			
			
			
			function crea_menus($idx,$opciones){
			
							global $obj_sql;
							
							$menus = $this->busca_menu($idx,'por_barra_menu','');								
							
							
							
							do{
																	
									$apertura_sub = "\n".'var menu'.$menus['fila']['id_menu_item'].' = new Ext.menu.Menu({';
									$apertura_sub .= "\n\t"." id: 'menu_principal".$menus['fila']['id_menu_item']."',";
									$apertura_sub .= "\n\t\t".'items: [';
									
									$cierre_sub = "\n\t\t".']';
									$cierre_sub .= "\n".'});';
									
									$items_datos = $this->crea_item($menus['fila']['id_menu_item'],"\t",'');
							
									$menu .= $apertura_sub.$items_datos.$cierre_sub;
							
							} while ($menus['fila'] = $obj_sql->fetch_row($menus['rs'])); 
							
							
							
																		
							return $menu;
							
			
			}
			
			
			function crea_item($idp,$nivel,$opciones){											
							
							global $obj_sql;
							$consulta_sub = $this->busca_menu($idp,'por_sub','');
							$i = 1;
							$nivel .= "\t";											
							$opcionesx = array();
							
							do{				
									
										if($consulta_sub['fila']['sub_bandera'] == 0){
												
												$aperturax = "\n\t".$nivel.'{';																
												if($i == $consulta_sub['cantidad']){$cierrex = "\n\t".$nivel.'}';}else{$cierrex = "\n\t".$nivel.'},';}	
												$item_sub .= "\n\t".$nivel."text: '".$consulta_sub['fila']['texto_item']."',";
												if($consulta_sub['fila']['ventana']){
													$opcionesx = array();
													$opcionesx['nomven'] = $consulta_sub['fila']['ventana'];
													$opcionesx['codsis'] = $consulta_sub['fila']['codsis'];												
													$permiso = $this->consulta_permisos_menu($opcionesx);
												}
												else{$permiso=1;}
												if($_SESSION['autent_administrador']==1){$permiso=1;}																																												
												if($consulta_sub['fila']['funcion_js'] != ''){$item_sub .= "\n\t".$nivel."handler: function() {per_ventana=".$permiso."; if(per_ventana){".$consulta_sub['fila']['funcion_js'].";}},";}
												$item_sub .= "\n\t".$nivel."iconCls: '".$consulta_sub['fila']['icono']."'";
												
												if($consulta_sub['fila']['separador'] == 1){$cierrex = $cierrex."'-',";}
												
												$item .= $aperturax.$item_sub.$cierrex;
											
											}
										else{
												 
												$aperturax = "\n\t".$nivel.'{';																
												if($i == $consulta_sub['cantidad']){$cierrex = "\n\t".$nivel.'}';}else{$cierrex = "\n\t".$nivel.'},';}
												$item_sub .= "\n\t".$nivel."text: '".$consulta_sub['fila']['texto_item']."',";
												if($consulta_sub['fila']['icono']){$item_sub .= "\n\t".$nivel."iconCls: '".$consulta_sub['fila']['icono']."',";}
												if($consulta_sub['fila']['ventana']){
													$opcionesx = array();
													$opcionesx['nomven'] = $consulta_sub['fila']['ventana'];
													$opcionesx['codsis'] = $consulta_sub['fila']['codsis'];												
													$permiso = $this->consulta_permisos_menu($opcionesx);
												}
												else{$permiso=1;}
												if($consulta_sub['fila']['funcion_js']){$item_sub .= "\n\t".$nivel."handler: function() {per_ventana=".$permiso."; if(per_ventana){".$consulta_sub['fila']['funcion_js'].";}},";}												
												$item_sub .= "\n\t".$nivel." menu: { items: [ ";
												
												$nuevo_item = $this->crea_item($consulta_sub['fila']['id_menu_item'],"\t".$nivel,'');
												
												$item_sub .= $nuevo_item."\n\t".$nivel." ]} ";
												if($consulta_sub['fila']['separador'] == 1){$cierrex = $cierrex."'-',";}
												$item .= $aperturax.$item_sub.$cierrex;
												
										}
										
										$i ++;
										$item_sub = '';
										
								} while ($consulta_sub['fila'] = $obj_sql->fetch_row($consulta_sub['rs']));	
								
								
								return $item;
			}
			
							
							//*************************************************************
		
	function consulta_permisos_menu($opciones){	
		
		if($_SESSION['autent_administrador']){
				return 1;
		}
		
		$sql_criterio = " WHERE codemp='".$_SESSION["la_empresa"]["codemp"]."' AND codusu='".$_SESSION["la_logusr"]."' AND nomven='".$opciones['nomven']."' ORDER BY nomven LIMIT 2"; 					  
		$query_rs = "SELECT * FROM sss_derechos_usuarios".$sql_criterio;		
		$resultado = $this->io_conexiones->conexion($query_rs,'arreglo','<b>CLASE:</b> menu <br><b>METODO:</b> consulta_permisos_menu','select','');
		if($resultado['cantidad']){return 1;}
		return 0;
		
	}//fin consulta_permisos_menu
			
									
		function update($opciones){
				//global $database_menu, $menu;
				 global $obj_sql;
				
				switch($opciones['criterio']){
					case "sub_bandera":
						// mysql_select_db($database_menu, $menu);
								$updateSQL = sprintf("UPDATE sss_menu_items SET sub_bandera='%s' WHERE id_menu_item='%s'",
													$opciones['sub_band'],										
													$opciones['Idx']
											   );        											   
							 //  $modifica = mysql_query($updateSQL, $menu) or die(mysql_error());
					break;
					case"separador":
						// mysql_select_db($database_menu, $menu);
							$updateSQL = sprintf("UPDATE sss_menu_items SET separador='%s' WHERE id_menu_item='%s'",
												$opciones['sepdor'],										
												$opciones['Idx']
												
										   );        											   
						  // $modifica = mysql_query($updateSQL, $menu) or die(mysql_error());
					break;
				
				}
				
				return $this->io_conexiones->conexion($updateSQL,'','<b>CLASE:</b> Clase menu ext <br><b>METODO:</b> update','update','','');	

			}
			
			
			function borrar_item($dato){
						
						global $obj_sql;
						$deleteSQL = sprintf("DELETE  FROM sss_menu_items WHERE id_menu='%s'",
											$dato
											);        											   
						$resul =  $this->io_conexiones->conexion($deleteSQL,'','<b>CLASE:</b> Clase menu ext <br><b>METODO:</b> borrar_item','delete','','');	
						if($resul===false){return false;}
						$resul = $this->actualiza_indice();
						if($resul===false){return false;}
						return true;
				
				}
				
			
			function actualiza_indice($dato=array()){
	
				global $obj_sql;
				
				$query = "SELECT id_menu_item FROM sss_menu_items ORDER BY id_menu_item DESC LIMIT 1";				
				$resul =  $this->io_conexiones->conexion($query,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> consulta menu','select','','');	
				if($resul===false){return false;}
				$maxid = $resul['fila']['id_menu_item'];
				$query = "SELECT setval('".$this->indice_item."', ".($maxid+1).", true);";				
				$resul =  $this->io_conexiones->conexion($query,'arreglo','<b>CLASE:</b> Class menu ext <br><b>METODO:</b> consulta menu','select','','');	
				if($resul===false){return false;}
				return true;
		
			}	
			
			
			function insert(){
						global	$j, $menu,$id_menu,$barra_menu,$texto_item,$sub_bandera,$id_padre,
						         $posicion_item, $separador,$funcion_js,$nivel,	$icono,$obj_sql,$ventana;
						
						$insertSQL = sprintf("INSERT INTO sss_menu_items(id_menu, barra_menu, texto_item, sub_bandera, id_padre, posicion_item, 
												separador, funcion_js, nivel, icono, ventana) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
												$menu,
												$barra_menu,
												$texto_item,												
												$sub_bandera,												
												$id_padre,
												$posicion_item,
												$separador,
												$funcion_js,												
												$nivel,
												$this->icono,
												$ventana
											  );															
						
						$id_insertado = $this->io_conexiones->conexion($insertSQL,'','<b>CLASE:</b> Clase menu ext <br><b>METODO:</b> insertar','insert','','');	
						//echo '--->id_menu: '.$id_menu['fila']['id_menu'].' --->id_item: '.$id_insertado.' --->Texto: '.$texto_item.' --->Posición: '.$posicion_item.'----------> '.$funcion_js.'<br>';
						return $id_insertado;
						
				}
				
			function busca_menu_aux($codigo){
				
					global $obj_sql;
					
					$codigo = trim($codigo);
					$trozos = explode(",", $codigo);
					
					if(count($trozos)>1){							
						$codigo = $trozos[0];
						$nombre_menu = $trozos[1];
						$descripcion_menu = $trozos[2] ;
					
					}
					else{
												
						$nombre_menu = '';
						$descripcion_menu = '';
					
					}
					
					$resp=$this->busca_menu_alt($codigo,'codigo','');
					
					if($resp['cantidad']>0){ 
						$respx = $this->borrar_item($resp['fila']['id_menu']); 
						if($respx===false){return false;}
						return $resp['fila']['id_menu'];
					}else{
					
						$insertSQL = sprintf("INSERT INTO sss_menus(codsis,nombre_menu,descripcion_menu) 
											  VALUES ('%s','%s','%s')",													
													$codigo,
													$nombre_menu,
													$descripcion_menu
												);
	
						$id_insertado = $this->io_conexiones->conexion($insertSQL,'','<b>CLASE:</b> Clase menu ext <br><b>METODO:</b> busca menu aux','insert','','');	
															
						return $id_insertado;
					
					}
		
		}
				
				
				
	
	function extraccion($linea){
				
				global $texto_item,$funcion_js,$sub_bandera,$ventana;
				
				$bandera_funcion = '';
				$trozos = explode(",", $linea,2);//EXTRAE LA FUNCION SEPARANDO LA CADENA EN BASE A LA PRIMERA COMA, EL 2 SIGNIFICA
				                                 // QUE LA OTRA PORCIÓN DE LA CADENA SE LA TRAE CON LAS COMAS Y NO LA SEPARA
				$FLAG = $trozos[1][0];

				//BANDERA DE ABRIR VENTANA, LO QUE SIGUE AL CARATER ES EL PARAMETRO O CRITERIO
				if($FLAG == '*'){$bandera_funcion = 'ABRIR_VENTANA';}
				
				//BANDERA DE EJECUCIÓN DE AJAX, LO QUE SIGUE AL CARATER ES EL PARAMETRO O CRITERIO
				if($FLAG == '@'){$bandera_funcion = 'AJAX';}
				if($FLAG == '#'){$bandera_funcion = 'FUNCION';}
				
				$trozos[0]=str_replace("\r\n", "", $trozos[0]);
				$TextoIcon = explode("|",trim($trozos[0]));
				
				$texto_item=trim($TextoIcon[0]);
				$this->icono=trim($TextoIcon[1]);
				$this->icono=$this->icono?$this->icono:"";
								
				if(count($trozos)>1){
				
						$trozos[1]=str_replace("\r\n", "", $trozos[1]);
						$trozos[1] = trim($trozos[1]);
						$parametros = explode(",", $trozos[1],2);
						
						if(count($parametros)>1){
								 //EXTRAE EL NOMBRE DEL ARCHIVO DE LA VENTANA AUNQUE VENGA CON LA RUTA COMPLETA
								 $ruta_completa = explode('/',$parametros[0]);
								 $pos_ventana = (sizeof($ruta_completa)-1);
								 $ventana = $ruta_completa[$pos_ventana];
								 $this->ventana = $ruta_completa[$pos_ventana];								 
								 
								 if($ventana=='' or $ventana=='cerrar'){$ventana='sin ventana';} 
								 $parametros = "''".$parametros[0]."'',".$parametros[1];
						}
						else{ 
								//EXTRAE EL NOMBRE DEL ARCHIVO DE LA VENTANA AUNQUE VENGA CON LA RUTA COMPLETA
								
								$ruta_completa = explode('/',$parametros[0]);
								$pos_ventana = (sizeof($ruta_completa)-1);
								$ventana = $ruta_completa[$pos_ventana];
								$this->ventana = $ruta_completa[$pos_ventana];
								
								
								if($bandera_funcion == 'FUNCION'){$this->ventana='';$ventana='';}
								if($bandera_funcion == 'AJAX'){$this->ventana='';$ventana='';} 
								if($ventana=='' or $ventana=='cerrar'){$ventana='sin ventana'; $this->ventana='sin ventana';} 
								$parametros = "''".$parametros[0]."''"; 
						}
						
						//GENERA LAS FUNCIONES DE JAVASCRIPT DEPENDIENDO DEL FLAG QUE SE ENCUENTRE
						
						if($bandera_funcion == 'ABRIR_VENTANA'){$funcion_js="abrir_ventana(''".substr($trozos[1],1)."'')";}
						elseif($bandera_funcion == 'AJAX'){$funcion_js="procesar_ajax(''".substr($trozos[1],1)."'')";}
						elseif($bandera_funcion == 'FUNCION'){$funcion_js=addslashes(substr($trozos[1],1));}
						else{ $funcion_js="abrir(".$parametros.")";}		
				}else{
					$funcion_js="";
					$sub_bandera=1;
					$ventana='sin ventana';
					$this->ventana='sin ventana';

				}
				
		}
	
	function limpia_cadena($li){
	
					$marcadores = array("\r","\n","\t");					
					$vacio = str_replace($marcadores, "", $li);
					return $vacio;
	
	}

	function crea_item_aux($i){
						
					global $linea,$cont,$idx_temp,$id_padre,$sub_bandera,$barra_menu,$separador,$posicion_item;
					
											
				 if($this->limpia_cadena($linea)!=""){
						
						if( ($linea[$i]=="\t") && ($linea[$i+1]!="\t") ){							
							
								$sub_bandera=0;
								$this->extraccion($linea);
								$posicion_item=$cont[$i+1]++;
								$cont[$i+2]=1;
								$barra_menu=0;					
								$id_padre=$idx_temp[$i];
								$nivel=1;
								
								if($linea[$i+1]=="-"){
									$cont[$i+1]--;
									$separador=1;
									
									$respx = $this->update(array('Idx'=>$idx_temp[$i+1],'sepdor'=>$separador,'criterio'=>'separador'));
									if($respx===false){return false;}
								}else{
									$respx = $idx_temp[$i+1]=$this->insert();
									if($respx===false){return false;}
									//$this->update(array('Idx'=>$idx_temp[$i+1]-1,'sub_band'=>1,'criterio'=>'sub_bandera'));

								}

						 }
						 
						 else if($linea[$i]!="\t"){
						 	return $i;
						 }
						 else if($linea[$i+1]=="\t"){
							$respx = $this->crea_item_aux($i+1); //busquedas recursivas
							if($respx===false){return false;}
						 
						 }
				}		 

	}

							
							
							
		function ConsultaSistemas($datos=array()){
									
			$query_rs = "   
							SELECT * FROM sss_sistemas ORDER BY 1;	   
						";				
			
			$Rs=$this->io_sql->select($query_rs);				
			if($Rs==false){						
				$metodo = 'ConsultaSistemas';
				$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR:</b><br>'.$this->io_sql->message;					
				if($this->ajax){$this->io_conexiones->mensajes_ajax($mensaje);}
			    else{$this->io_mensajes->message($mensaje);}
				return false;
				
			}
			
			return $Rs;
	}						
							
							

}


?>