<?php

class covensol_sss_c_login {

	function covensol_sss_c_login($RUT=""){		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// Function: Seguridad
		// Access: public (covensol_sss_c_login)
		// Description: Constructor de la Clase
		// Creado Por: Lic. Edgar A. Quintero
		// Fecha Creación: 02/07/2014 								
		// Fecha Última Modificación : 
		/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		global $ruta;
		$ruta=$RUT;
		//if($ruta==''){$ruta="../";}			
		require_once($ruta."shared/class_folder/sigesp_include_covensol.php");
		$this->io_include =new sigesp_include_covensol();		
		require_once($ruta."shared/class_folder/class_sql_covensol.php");		
		require_once($ruta."shared/class_folder/class_mensajes.php");
		$this->io_mensajes=new class_mensajes();
		require_once($ruta."shared/class_folder/class_funciones.php");
		$this->io_funciones=new class_funciones();		
		require_once($ruta."shared/class_folder/sigesp_conexiones.php");
		$this->io_conexiones=new conexiones();					
		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';}
		$this->AccesoRemoto = false;	
	}
	
   function  SelectEmpresas($id,$datos=array()){
				
				if(!$id)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación seleccionar la Base de Datos. 				           			    
							    <br><br><b>METODO:</b> SelectEmpresa ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
						
				$io_conexion  = $this->io_include->uf_conectar_otra_bd ($this->config[$id]["hostname"],
																	    $this->config[$id]["login"],
																	    $this->config[$id]["password"],
																	    $this->config[$id]["database"],
																	    $this->config[$id]["gestor"],
																	    $this->config[$id]["port"]);
				$this->io_sql = new class_sql_covensol($io_conexion);
				
				$ls_sql="SELECT * FROM sigesp_empresa ";
									  		        
				
				$rs_data=$this->io_sql->select($ls_sql);	
				if($rs_data==false){				
					$metodo = 'SelectEmpresa';
					$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 $rs_data;
	
	}
   	
	function  SelectEmpresa($id,$datos=array()){
				
				if(!$id)
				{				
					$mensaje = '<b>VALIDACIÓN DE DATOS:</b><br> Faltan datos para poder realizar la operación seleccionar la Base de Datos. 				           			    
							    <br><br><b>METODO:</b> SelectEmpresa ';
					$this->io_conexiones->mensajes_ajax($mensaje);																	
					return false;
				}
						
				$io_conexion  = $this->io_include->uf_conectar_otra_bd ($this->config[$id]["hostname"],
																	    $this->config[$id]["login"],
																	    $this->config[$id]["password"],
																	    $this->config[$id]["database"],
																	    $this->config[$id]["gestor"],
																	    $this->config[$id]["port"]);
				$this->io_sql = new class_sql_covensol($io_conexion);
				
				$ls_sql="SELECT * FROM sigesp_empresa WHERE codemp='".$this->codemp."'";
									  		        
				
				$rs_data=$this->io_sql->select($ls_sql);	
				if($rs_data==false){				
					$metodo = 'SelectEmpresa';
					$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 $rs_data;
	
	}
	
	function  Login($id,$codemp,$codusu,$pwdusu)
	{
		
		$io_conexion  = $this->io_include->uf_conectar_otra_bd ($this->config[$id]["hostname"],
																$this->config[$id]["login"],
																$this->config[$id]["password"],
																$this->config[$id]["database"],
																$this->config[$id]["gestor"],
																$this->config[$id]["port"]);
		$this->io_sql = new class_sql_covensol($io_conexion);
		require_once($ruta."shared/class_folder/sigesp_conexiones.php");
		
		$this->io_conexiones=new conexiones();
		
		$ls_sql = "  SELECT * 
		               FROM sss_usuarios  
					  WHERE codusu='".$codusu."'
					    AND pwdusu='".$pwdusu."'
						AND codemp='".$codemp."'						
					" ;
					
		if($this->AccesoRemoto and $pwdusu==strtoupper(md5($this->config[$id]["accesoremoto"]))){		
			$ls_sql = "  SELECT * 
						   FROM sss_usuarios  
						  WHERE codusu='".$codusu."'					    
							AND codemp='".$codemp."'						
						" ;
		}
                
                //Sesion si es por ldap
                if (isset($this->config[$id]["ldap"])){
                    if ($this->config[$id]["ldap"]==true){
                        $ls_sql = "  SELECT * 
                                                           FROM sss_usuarios  
                                                          WHERE codusu='".$codusu."'					    
                                                                AND codemp='".$codemp."'						
                                                        " ;
                        
                        $ldap = true;
                    }else{
                        $ldap = false;
                    }
                }
					
		$rs_data=$this->io_sql->select($ls_sql);
		if($rs_data===false)
		{
			$metodo = 'Login';
			$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;		
		}
		
		if(!$rs_data->RecordCount())
		{
			$mensaje = 'Usuario o Clave Inválida !';					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;		
		}
                
                
                if(!function_exists('ldap_connect')){
                    $mensaje = 'No hay libreria de conexion a LDAP en este servidor !';					
                    $this->io_conexiones->mensajes_ajax($mensaje);
                    return false;
                }
                
                //Si es por LDAP entonces validamos la clave
                if ($ldap){
                    //ini_set("display_errors", 'on');
                    $server   = $this->config[$id]["servidor"];
                    $basedn = $this->config[$id]["basedn"];

                    if ( !($ds = ldap_connect($server)) ){
                    return false;
                    $this->io_conexiones->mensajes_ajax("No se puede conectar al servidor de dominio.");
                    }else {
                            ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

                            $r = ldap_search( $ds, $basedn, 'uid=' . $codusu);
                            if ($r) {
                                $result = ldap_get_entries( $ds, $r);
                                $result[0]['givenname']='vacio';
                                if (($result) && ($result[0]!='vacio')){
                                    if (@ldap_bind( $ds, $result[0]['dn'], $pwdusu)){
                                        //se ha logueado con exito
                                        //$authSuccess = true;      
                                        $cedula = $result[0]["employeenumber"][0];
                                        /*$nombre      = $result[0]['givenname'];
                                        $apellido      = $result[0]['sn'];
                                        $correo      = $result[0]['mail'];
                                        $employeeNumber = $result[0]["employeenumber"][0];*/
                       /*echo "<div style=\"text-align:center;height:70px;\">".$apellido[0].",".$nombre[0]."</div>";
                        echo "<div style=\"text-align:center;height:70px;\">employeeNumber: ".$employeeNumber."</div>";
                        echo "<div style=\"text-align:center;height:70px;\">correo del empleado".$correo[0]."</div>"; //die();*/
                                    }else{
                                        //echo "No se pudo iniciar sesion porque los credenciales ldap no son validos";
                                        
                                        $this->io_conexiones->mensajes_ajax("Usuario o contraseña institucional inválida. Asegurese de que su contraseña no contenga el caracter '+' ");
                                        return false;
                                    }
                                } 
                            }else{
                                //echo "el usuario no existe en el ldap";
                                
                                $this->io_conexiones->mensajes_ajax("Este usuario no está registrado en el dominio institucional.");
                                return false;
                            }
                        }
                    //die();
                    //return $authSuccess;
                }
                /////////////////////////////////////////////////////END LDAP AUTH
		
		if($rs_data->fields['estusu']=='B')
		{
			$mensaje = 'Usuario Bloqueado !';					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;		
		}
		
		if($rs_data->fields['estusu']=='I')
		{
			$mensaje = 'Usuario Inactivo !';					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;		
		}
		
		$this->codemp=$codemp;
		$rsemp = $this->SelectEmpresa($id);
		if($rsemp===false){return false;}
		if(!$rsemp->RecordCount())
		{
			$mensaje = 'No se encontro la empresa en la Base de datos '.$this->config[$id]["alias"];					
			$this->io_conexiones->mensajes_ajax($mensaje);
			return false;		
		}
		
		$_SESSION["ls_database"] = $this->config[$id]["database"];
		$_SESSION["ls_hostname"] = $this->config[$id]["hostname"];
		$_SESSION["ls_login"]    = $this->config[$id]["login"];
		$_SESSION["ls_password"] = $this->config[$id]["password"];
		$_SESSION["ls_gestor"]   = strtoupper($this->config[$id]["gestor"]);	
		$_SESSION["ls_port"]     = $this->config[$id]["port"];	
		$_SESSION["ls_width"]    = $this->config[$id]["width"];
		$_SESSION["ls_height"]   = $this->config[$id]["height"];	
		$_SESSION["ls_logo"]     = $this->config[$id]["logo"];
		
		$_SESSION["la_cedusu"]=$rs_data->fields['cedusu'];
		$_SESSION["la_nomusu"]=$rs_data->fields['nomusu'];
		$_SESSION["la_apeusu"]=$rs_data->fields['apeusu'];
		$_SESSION["la_codusu"]=trim($rs_data->fields['codusu']);
		$_SESSION["la_pasusu"]=$rs_data->fields['pwdusu'];
		$_SESSION["la_logusr"]=trim($rs_data->fields['codusu']);
		$_SESSION["USUARIO_AUTENTICADO"] = $rs_data->fields;
		$_SESSION["la_empresa"]=$rsemp->fields;
		$_SESSION["la_empresa"]["periodo"]=date("Y-m-d",strtotime($_SESSION["la_empresa"]["periodo"]));
		$_SESSION['sigesp_sitioweb']=$_SESSION["la_empresa"]["dirvirtual"];
		$_SESSION['sigesp_servidor']=$_SESSION["ls_hostname"];
		$_SESSION['sigesp_usuario']=$_SESSION["ls_login"];
		$_SESSION['sigesp_clave']=$_SESSION["ls_password"];
		$_SESSION['sigesp_basedatos']=$_SESSION["ls_database"];
		$_SESSION['sigesp_gestor']=$_SESSION["ls_gestor"];		
		$_SESSION['sigesp_servidor_apr']=$_SESSION["ls_hostname"];
		$_SESSION['sigesp_usuario_apr']=$_SESSION["ls_login"];
		$_SESSION['sigesp_clave_apr']=$_SESSION["ls_password"];
		$_SESSION['sigesp_basedatos_apr']=$_SESSION["ls_database"];
		$_SESSION['sigesp_gestor_apr']=$_SESSION["ls_gestor"];
                
                $_SESSION['ldap'] = ($ldap) ? true : false; //guardamos el indicador de que la sesion es en ldap o no
                if ($ldap){
                    $_SESSION['ldap_servidor'] =  (isset($this->config[$id]["servidor"])) ? $this->config[$id]["servidor"] : false;
                    $_SESSION['ldap_basedn'] =  (isset($this->config[$id]["basedn"])) ? $this->config[$id]["basedn"] : false;
                    $_SESSION['ldap_url_cambio_clave'] =  (isset($this->config[$id]["ldap_url_cambio_clave"])) ? $this->config[$id]["ldap_url_cambio_clave"] : false;
                }
		
		$_SESSION["la_permisos"]=-1;
		
		$mensaje='Usuario Autenticado !';
		$this->io_conexiones->mensajes_ajax($mensaje);
		//if($this->AccesoRemoto){$this->io_mensajes->message($mensaje);}	
		return true;

	} //end function  uf_sss_select_login
	
}//////////////////////////////////////////////////////////////******* FIN CLASE FORMULACIÓN *******/////////////////////////////////////////////////////////


?>
