<?php

class covensol_sss_c_seguridad {

	function covensol_sss_c_seguridad($propiedades=array()){		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// Function: Seguridad
		// Access: public (covensol_sss_c_seguridad)
		// Description: Constructor de la Clase
		// Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 02/07/2014 								
		// Fecha Última Modificación : 
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		global $ruta;
		if($ruta==''){$ruta="../";}		
		//require_once($ruta."shared/class_folder/sigesp_include.php");
		require_once($ruta."shared/class_folder/sigesp_include_covensol.php");
		$io_include=new sigesp_include_covensol();
		$io_conexion=$io_include->uf_conectar();
		//require_once($ruta."shared/class_folder/class_sql.php");
		require_once($ruta."shared/class_folder/class_sql_covensol.php");
		$this->io_sql=new class_sql_covensol($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->codemp=$_SESSION["la_empresa"]["codemp"];
		
		if($propiedades['habilitar_json_lib']){
			require_once($ruta.'shared/class_folder/JSON.php');
			$this->json = new JSON();
		}	
		$this->postgres_ilike = '';
		if($_SESSION["ls_gestor"] == 'POSTGRES'){$this->postgres_ilike = 'I';}
		
	}
	
	function ValidarSesion($opciones = array()){
	//==========================================================================================================================
	//	Function:      ValidarSesion
	//  Elaborado por: Lic. Edgar A. Quintero U.
	//	Returns:	   
	//	Description:   Ejecuta la acción en caso de no haber obtenido las credenciales necesarias.
	//==========================================================================================================================
		if(!array_key_exists("la_logusr",$_SESSION)){
			echo '<script type="text/javascript">';			
			echo "if(window.opener!=null){opener.location.href='../sigesp_inicio_sesion.php'; window.close();}";
			echo "else{location.href='../sigesp_inicio_sesion.php';}";		
			echo '</script>';		
			return false;
		}
		return true;	
	}
	
   function cargar_seguridad($as_sistema,$as_ventanas)
   {
		$ls_empresa=$_SESSION["la_empresa"]["codemp"];
		$ls_logusr=$_SESSION["la_logusr"];
		$this->seguridad["empresa"]=$ls_empresa;
		$this->seguridad["logusr"]=$ls_logusr;
		$this->seguridad["sistema"]=$as_sistema;
		$this->seguridad["ventanas"]=$as_ventanas;
		$this->permisos="";
		$this->la_permisos = array();
		$this->la_permisos["leer"]="";
		$this->la_permisos["incluir"]="";
		$this->la_permisos["cambiar"]="";
		$this->la_permisos["eliminar"]="";
		$this->la_permisos["imprimir"]="";
		$this->la_permisos["anular"]="";
		$this->la_permisos["ejecutar"]="";
		if (array_key_exists("permisos",$_POST)||($ls_logusr=="PSEGIS"))
		{	
			if($ls_logusr=="PSEGIS")
			{
				$this->permisos="1";
				$this->la_permisos=$this->io_seguridad->uf_sss_load_permisossigesp();
			}
			else
			{
				$this->permisos=$_POST["permisos"];
				$this->la_permisos["leer"]=$_POST["leer"];
				$this->la_permisos["incluir"]=$_POST["incluir"];
				$this->la_permisos["cambiar"]=$_POST["cambiar"];
				$this->la_permisos["eliminar"]=$_POST["eliminar"];
				$this->la_permisos["imprimir"]=$_POST["imprimir"];
				$this->la_permisos["anular"]=$_POST["anular"];
				$this->la_permisos["ejecutar"]=$_POST["ejecutar"];
			}
		}
		else
		{
			$this->permisos=$this->io_seguridad->uf_sss_load_permisos($ls_empresa,$ls_logusr,$as_sistema,$as_ventanas,$this->la_permisos);
		}
		
   }// end function cargar_seguridad
   
   function guardar_seguridad($param=array()){
	   $resp = $this->io_seguridad->uf_sss_insert_eventos_ventana( $this->seguridad["empresa"],
																   $this->seguridad["sistema"],
																   $this->seguridad['evento'],
																   $this->seguridad["logusr"],
																   $this->seguridad["ventanas"],
	   															   $this->seguridad['descripcion']);
	   return true;
	   
   }
   
   function imprimir_permisos($as_permisos,$aa_permisos,$as_logusr,$as_accion)
   {
		if (($as_permisos)||($as_logusr=="PSEGIS"))
		{
			print("<input type=hidden name=permisos id=permisos value='$as_permisos'>");
			print("<input type=hidden name=leer id=leer value='$aa_permisos[leer]'>");
			print("<input type=hidden name=incluir id=incluir value='$aa_permisos[incluir]'>");
			print("<input type=hidden name=cambiar id=cambiar value='$aa_permisos[cambiar]'>");
			print("<input type=hidden name=eliminar id=eliminar value='$aa_permisos[eliminar]'>");
			print("<input type=hidden name=imprimir id=imprimir value='$aa_permisos[imprimir]'>");
			print("<input type=hidden name=anular id=anular value='$aa_permisos[anular]'>");
			print("<input type=hidden name=ejecutar id=ejecutar value='$aa_permisos[ejecutar]'>");
		}
		else
		{
			print("<script language=JavaScript>");
			print("".$as_accion."");
			print("</script>");
		}
   }// end function uf_print_permisos
   
   function obtCfg($param,$prop=array())
	{
		
		
		$prop['criterio'] = (!$prop['criterio'])?'param':$prop['criterio'];
		$this->cfg_type = $this->cfg_type?$this->cfg_type:'C';

  
		switch($prop['criterio']){					
				
				case 'param':					
					$ls_sql="SELECT value
							  FROM sigesp_config 
							 WHERE codemp='".$this->ls_codemp."' 
							   AND codsis='".$this->cfg_codsis."' 
							   AND seccion='".$this->cfg_seccion."' 
							   AND type='".$this->cfg_type."'
							   AND entry='".$param."' ";
					break;
		
		}
		
		
				
		$this->RsFopConf=$this->io_sql->select($ls_sql);
				
		if($this->RsFopConf===false)
		{
			$metodo = 'obtCfg';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
			
		return $this->RsFopConf->fields["value"];
	}
	
	function obtSegEstructuras($prop=array())
	{
					
		if(!$this->codintper){				
			$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder validar la seguridad de estructura. 				           			    
						<br><br><b>METODO:</b> obtSegEstructuras ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}	
		
		$ls_sql="SELECT codintper, enabled
				  FROM sss_permisos_internos 
				 WHERE codemp='".$this->ls_codemp."' 
				   AND codusu='".$_SESSION["la_logusr"]."' 
				   AND codsis='".$this->cfg_codsis."'
				   AND codintper='".$this->codintper."' ";
						
		$this->RsFopSeg=$this->io_sql->select($ls_sql);
				
		if($this->RsFopSeg===false)
		{
			$metodo = 'obtSegEstructuras';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		$this->FopSegEnable = $this->RsFopSeg->RecordCount()?1:0;
		
		return $this->FopSegEnable;
	}
	
	
   function obtSegFases($prop=array())
	{
					
				
		$ls_sql="SELECT codintper
				  FROM sss_permisos_internos 
				 WHERE codemp='".$this->ls_codemp."' 
				   AND codusu='".$_SESSION["la_logusr"]."' 
				   AND codsis='".$this->cfg_codsis."'
				   AND codintper ILIKE'FASE_%' ";
						
		$this->RsFopSegFase=$this->io_sql->select($ls_sql);
				
		if($this->RsFopSegFase===false)
		{
			$metodo = 'obtSegFases';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		if(!$this->RsFopSegFase->RecordCount())
		{
			return '';					
		}
		
		
		$fases = '';
		foreach($this->RsFopSegFase as $datos){
				
				if(!$fases){$fases=str_replace('FASE_','',$datos['codintper']); continue;}
				if($fases){$fases .= '_'.str_replace('FASE_','',$datos['codintper']);}
		
		
		}
				
		return $fases;
	}
	
   function formato_numerico_us($numero){
	
			$busca = array(".", ",");
			$sustituye   = array("", ".");
			number_format(str_replace($busca,$sustituye,$numero),2,'.','');
			return number_format(str_replace($busca,$sustituye,$numero),2,'.','');
	
	}

	
	
   function FormatLonCodEstPro($datos=array()){
	            
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro1'];
				$datos['codestpro1']=substr($datos['codestpro1'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro1']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro2'];
				$datos['codestpro2']=substr($datos['codestpro2'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro2']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro3'];
				$datos['codestpro3']=substr($datos['codestpro3'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro3']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro4'];
				$datos['codestpro4']=substr($datos['codestpro4'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro4']);
				
				$ls_incio=25-$_SESSION["la_empresa"]['loncodestpro5'];
				$datos['codestpro5']=substr($datos['codestpro5'],$ls_incio,$_SESSION["la_empresa"]['loncodestpro5']);
				
				return $datos;
   }
   
   	function ConsultaSistemas($prop=array())
	{
					
		$metodo = 'ConsultaSistemas';
				
		$ls_sql="SELECT *, '('||codsis||') - '||nomsis as descrip
		         FROM sss_sistemas 
				 WHERE codsis IN (SELECT DISTINCT codsis FROM sss_tipo_permisos)
				 ORDER BY codsis";
						
		$Rs=$this->io_sql->select($ls_sql);
				
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
	function ConsultaUsuarios($prop=array())
	{
					
		$metodo = 'ConsultaUsuarios';
				
		$ls_sql="SELECT codemp, trim(codusu) as codusu, cedusu, nomusu, apeusu, pwdusu, telusu, nota, 
					    actusu, blkusu, admusu, ultingusu, fotousu, codorg, estusu, 
		                '('||trim(codusu)||') - '||nomusu||' '||apeusu as descrip
		         FROM sss_usuarios ORDER BY codusu";
						
		$Rs=$this->io_sql->select($ls_sql);
				
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
	
	function ConsultaTipoPermisos($prop=array())
	{
					
		$metodo = 'ConsultaTipoPermisos';
		$criterio = "";
		if($prop['codsis']){$criterio .= "  AND codsis='".$prop['codsis']."' ";}
				
		$ls_sql="SELECT *, '('||codsis||') - '||denperesp as descrip
		         FROM sss_tipo_permisos 
				 WHERE codemp='".$this->ls_codemp."'
				 ".$criterio."
				 ORDER BY denperesp";
						
		$Rs=$this->io_sql->select($ls_sql);
		
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
	
	function ConsultaParametrosPermisoEsp($prop=array())
	{
					
		$metodo = 'ConsultaParametrosPermisoEsp';
		$criterio = "";
		if(!$prop['tipperesp'] or !$prop['codsis']){return false;}
				
		switch($prop['tipperesp']){
				
				case 'PERMISOS_ORGANIGRAMA':
				    $ls_sql="SELECT codorg as codigo, '('||codorg||') - '||desorg as denominacion
							 FROM srh_organigrama 
							 WHERE codemp='".$this->ls_codemp."'
							   AND codorg!='----------'
							 ".$criterio."
							 ORDER BY desorg";
					break;
					
				case 'PERMISOS_UBICACION_FISICA':
				     $ls_sql="SELECT codubifis as codigo, '('||codubifis||') - '||desubifis as denominacion
							 FROM sno_ubicacionfisica 
							 WHERE codemp='".$this->ls_codemp."'
							 ".$criterio."
							 ORDER BY desubifis";
					break;
				
								
				case 'PERMISOS_UNIDAD_ADMINISTRATIVA':
				    $ls_sql="SELECT minorguniadm||ofiuniadm||uniuniadm||depuniadm||prouniadm as codigo, 
					                '('||minorguniadm||ofiuniadm||uniuniadm||depuniadm||prouniadm||') - '||desuniadm as denominacion
							 FROM sno_unidadadmin 
							 WHERE codemp='".$this->ls_codemp."'
							 ".$criterio."
							 ORDER BY desuniadm";
					break;
				
				
				case 'PERMISOS_NOMINA':
				     $ls_sql="SELECT codnom as codigo, '('||codnom||') - '||desnom as denominacion
							 FROM sno_nomina 
							 WHERE codemp='".$this->ls_codemp."'
							 ".$criterio."
							 ORDER BY codnom";
					break;
					
				default:
				    return false;
					break;	
		}		
						
		$Rs=$this->io_sql->select($ls_sql);
		
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
	function ProcesarPermisosEspecificos($datos=array())
	{
		
		if(!$datos['codusu']){			
			$mensaje = 'Falta el código de usuario para procesar los permisos. ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$datos['codsis']){			
			$mensaje = 'Falta el código de sistema para procesar los permisos. ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		if(!$datos['tipperesp']){			
			$mensaje = 'Falta el el tipo de permiso para asignar los permisos. ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$datos['peresp'] = stripslashes($datos['peresp']);
		$this->ObjPermisosEsp = $this->json->decode($datos['peresp']);
		
		$resp = $this->EliminarPermisosEspecificos($datos);
		if($resp===false){return false;}
		
		foreach($this->ObjPermisosEsp->datos as $detalle){			
			$datos['codperesp'] = $detalle->codigo;
			//echo $detalle->codigo.'<br>';			
			$resp = $this->InsertarPermisosEspecificos($datos);
			if($resp===false){return false;}
		}
		
		$this->io_conexiones->mensajes_ajax("Los permisos fueron procesados !");			
		return true;
	}
	
	
	function InsertarPermisosEspecificos($datos=array())
	{		
						
		if(!$datos['codperesp']){			
			$mensaje = 'Falta el código del permiso para poder insertar. ';
			$this->io_conexiones->mensajes_ajax($mensaje);																	
			return false;
		}
		
		$ls_sql=" INSERT INTO sss_permisos_especificos(codemp, codusu, codsis, tipperesp, codperesp, enabled) 
		          VALUES('".$this->codemp."', 
				         '".trim($datos['codusu'])."', 
						 '".$datos['codsis']."', 
						 '".$datos['tipperesp']."', 
						 '".$datos['codperesp']."', 
						 '1');";
				
		$this->rs_data=$this->io_sql->select($ls_sql);
				
		if($this->rs_data===false)
		{
			$metodo = 'InsertarPermisosEspecificos';
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;		
			$this->io_conexiones->mensajes_ajax($mensaje);			
			return false;					
		}
			
		return true;
	}// end function select_config($param)
	
	function  EliminarPermisosEspecificos($datos){				
											
				$ls_sql = "DELETE FROM sss_permisos_especificos 
				            WHERE codemp='".$this->ls_codemp."'  
							  AND codusu='".trim($datos['codusu'])."' 
							  AND codsis='".$datos['codsis']."' 
							  AND tipperesp='".$datos['tipperesp']."'
						   ";
				
				$rs_data=$this->io_sql->select($ls_sql);			
				
				if($rs_data==false){
					$metodo = 'EliminarPermisosEspecificos';
					$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR-></b><br>'.$this->io_sql->message;					
					$this->io_conexiones->mensajes_ajax($mensaje);
					return false;					
				}
					
				return true;	
	}
	
	
	function CargarPermisosAsignados($datos=array())
	{
					
		$metodo = 'CargarPermisosAsignados';
		$criterio = "";
		
		
		switch($datos['tipperesp']){
				
				case 'PERMISOS_ORGANIGRAMA':
				    $campo="( 
							   SELECT '('||t.codorg||') - '||t.desorg as denominacion
								 FROM srh_organigrama t 
								 WHERE t.codemp='".$this->ls_codemp."'
								   AND t.codorg=pe.codperesp 
							 )  as denominacion, ";
					break;
					
				case 'PERMISOS_UBICACION_FISICA':
				     $campo="(
								  SELECT '('||t.codubifis||') - '||t.desubifis as denominacion
									FROM sno_ubicacionfisica t 
								   WHERE t.codemp='".$this->ls_codemp."'
									 AND t.codubifis=pe.codperesp
							   )  as denominacion,
							 ";
					break;
				
								
				case 'PERMISOS_UNIDAD_ADMINISTRATIVA':
				    $campo="( 
								 SELECT '('||t.minorguniadm||t.ofiuniadm||t.uniuniadm||t.depuniadm||t.prouniadm||') - '||t.desuniadm as denominacion
								   FROM sno_unidadadmin t 
								  WHERE t.codemp='".$this->ls_codemp."'
								    AND t.minorguniadm||t.ofiuniadm||t.uniuniadm||t.depuniadm||t.prouniadm=pe.codperesp
							 )  as denominacion,
							 
							";
					break;
				
				
				case 'PERMISOS_NOMINA':
				     $campo=" (
								 SELECT '('||codnom||') - '||desnom as denominacion
								 FROM sno_nomina t
								 WHERE codemp='".$this->ls_codemp."'
								   AND t.codnom=pe.codperesp
							    )  as denominacion,
							 ";
					break;
					
				default:
				    return false;
					break;	
		}		
				
		$ls_sql="SELECT ".$campo." pe.codperesp as codigo, pe.*  
		         FROM sss_permisos_especificos pe 
				 WHERE pe.codemp='".$this->ls_codemp."'  
				   AND pe.codusu='".trim($datos['codusu'])."' 
				   AND pe.codsis='".$datos['codsis']."' 
				   AND pe.tipperesp='".$datos['tipperesp']."'
				 ORDER BY pe.codperesp ";
						
		$Rs=$this->io_sql->select($ls_sql);
		//echo $ls_sql;
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
	
	function CargarPermisosNoAsignados($datos=array())
	{
					
		$metodo = 'CargarPermisosNoAsignados';
		$criterio = "";
		if(!$datos['tipperesp'] or !$datos['codsis']){return false;}
		
		
		$criterio=" (SELECT pe.codperesp
					 FROM sss_permisos_especificos pe 
					 WHERE pe.codemp='".$this->ls_codemp."'  
					   AND pe.codusu='".trim($datos['codusu'])."' 
					   AND pe.codsis='".$datos['codsis']."' 
					   AND pe.tipperesp='".$datos['tipperesp']."'
					 ORDER BY pe.codperesp) ";
				
		switch($datos['tipperesp']){
				
				case 'PERMISOS_ORGANIGRAMA':
				    $ls_sql="SELECT codorg as codigo, '('||codorg||') - '||desorg as denominacion
							 FROM srh_organigrama 
							 WHERE codemp='".$this->ls_codemp."'
							   AND codorg!='----------'
							   AND codorg NOT IN ".$criterio."
							 ORDER BY desorg";
					break;
					
				case 'PERMISOS_UBICACION_FISICA':
				     $ls_sql="SELECT codubifis as codigo, '('||codubifis||') - '||desubifis as denominacion
							 FROM sno_ubicacionfisica 
							 WHERE codemp='".$this->ls_codemp."'
							   AND codubifis NOT IN ".$criterio."
							 ORDER BY desubifis";
					break;
				
								
				case 'PERMISOS_UNIDAD_ADMINISTRATIVA':
				    $ls_sql="SELECT minorguniadm||ofiuniadm||uniuniadm||depuniadm||prouniadm as codigo, 
					                '('||minorguniadm||ofiuniadm||uniuniadm||depuniadm||prouniadm||') - '||desuniadm as denominacion
							 FROM sno_unidadadmin 
							 WHERE codemp='".$this->ls_codemp."'
							   AND minorguniadm||ofiuniadm||uniuniadm||depuniadm||prouniadm NOT IN ".$criterio."
							 ORDER BY desuniadm";
					break;
				
				
				case 'PERMISOS_NOMINA':
				     $ls_sql="SELECT codnom as codigo, '('||codnom||') - '||desnom as denominacion
							 FROM sno_nomina 
							 WHERE codemp='".$this->ls_codemp."'
							   AND codnom NOT IN ".$criterio."
							 ORDER BY codnom";
					break;
					
				default:
				    return false;
					break;	
		}		
						
		$Rs=$this->io_sql->select($ls_sql);
		
		if($Rs===false){
			
			$mensaje = '<b>CLASE:</b> '.get_class($this).' <br><b>METODO:</b> '.$metodo.' <br><b>ERROR->:</b><br>'.$this->io_sql->message;					
			$this->io_mensajes->message($mensaje);
			return;					
		}
		
		return $Rs;
	}
	
}//////////////////////////////////////////////////////////////******* FIN CLASE FORMULACIÓN *******/////////////////////////////////////////////////////////


?>
