<?php 
include("conexionDB.php");
	class consultasDb extends conexionDb{
		
		private $fetchArray, $dbLink, $consulta,$tabla;
		
		/*
		/@params $con_array -> un array con los datos del server (SERVER, USUARIO, PASS, DB)
		/@params $tabla -> Nombre de la tabla a conectarce
		*/
		public function __construct($tabla = ""){	
				parent::__construct();//EJECUTO EL CONSTRUCTOR DE LA CLASE CONEXIONDB
				$this->setFetchArray("");
				$this->setConsulta("");
				$this->setTabla($tabla);
				$this->setDbLink(parent::Conectar());//Inicio la base de datos				
		}	
		
		//SETTERS				
		public function setFetchArray($fetchArray){
			$this->fetchArray = $fetchArray;
		}
		
		public function setTabla($tabla){
			$this->tabla = $tabla;
		}
		
		public function setConsulta($consulta){
			$this->consulta = $consulta;
		}
		
		public function setDbLink($db){
			$this->dbLink = $db;
		}
		
		
		//GETTERS
				
		public function getFetchArray(){
			return $this->fetchArray;
		}
		
		public function getTabla(){
			return $this->tabla;
		}
		
		public function getConsulta(){
			return $this->consulta;
		}
		
		public function getDbLink(){
			return $this->dbLink;
		}
		
		
		
		/*
		/@params $campos -> son los campos que quiere seleccionar ej: id, nombre, apellido . De la tabla... Default "*"
		/@params $tabla -> Nombre de la tabla a elegir
		*/
		public function select($campos='*'){
			$this->setConsulta("SELECT ".$campos." FROM ".$this->getTabla());			
		}
		
		/*
		/@params $where -> se utiliza para pasarle una condicion a la DB
		*/
		public function where($where){
			$this->setConsulta($this->getConsulta()." WHERE ".$where);	
		}
		
		/*
		/Buscar un elemento en el array
		/@params $campo -> campo de la tabla 
		/@params $buscar -> palabra clave a buscar
		*/
		public function buscar($campo,$buscar){
			$this->setConsulta($this->getConsulta()." WHERE ".$campo." LIKE '%".$buscar."%'");
		}
		
		/*
		/@params $campo -> selecciona el campo a ordenar
		/@params $order -> DESC o ASC. por default esta ASC
		*/
		public function orderBy($campo,$order='ASC'){
			$this->setConsulta($this->getConsulta()." Order By ".$campo." ".$order);	
		}
		
		/*
		/@params $campo -> selecciona el campo a Agrupar		
		*/
		public function groupBy($campo){
			$this->setConsulta($this->getConsulta()." GROUP BY ".$campo);	
		}
		
		/*
		/@params $limit -> Limite de la consulta
		*/
		public function limit($limit){
			$this->setConsulta($this->getConsulta()." LIMIT ".$limit);	
		}
		
			
		/*
		/Ejecuto la sentencia mysql_query
		*/
		public function query(){
			$sql=mysql_query($this->getConsulta(),$this->getDbLink());
			if($sql){	
				return $sql;
			}else{
				return false;
			}			
		}
		
		
		
		/*
		/Retorno la cantidad de Filas de la consulta
		*/
		public function numRow(){
			$sql=$this->query();
			return mysql_num_rows($sql);	
		}
		
		/*
		/Retorna la cantidad de Columnas que posee una tabla
		*/
		public function numColumnas(){
			$query = $this->query();
			return mysql_num_fields($query);
		}
		
		
		/*
		/Retorna el Nombre del Campo de la Tabla
		/@params $i -> es el ID de la columna EJ: $i = 1;
		*/
		public function nombreCampo($i){
			$query = $this->query();
			return mysql_field_name($query, $i);
		}
		
		
		
		/*
		/Retorna el tipo de Campo de la Tabla
		/@params $i -> es el ID de la columna EJ: $i = 1;
		*/
		public function tipoCampo($i){
			$query = $this->query();
			return mysql_field_type($query, $i);
		}		
		
		
		/*
		/Retorna el longitud del Campo
		/@params $i -> es el ID de la columna EJ: $i = 1;
		*/
		public function contenidoCampo($i){
			$query = $this->query();
			return mysql_field_len($query, $i);
		}
		
		
		
		/*
		/Retorna Las banderas del Campo
		/@params $i -> es el ID de la columna EJ: $i = 1;
		*/
		public function banderaCampo($i){
			$query = $this->query();
			return mysql_field_flags($query, $i);
		}
		
		
		/*
		/Retorna una lista con las tablas que posee la base de datos
		/*/
		public function tablasDb(){
			return mysql_list_tables($this->getDb());
		}
		
		
		/*
		/Retorno un array de los elementos de la consulta
		/@param recive una $THIS->QUERY();
		*/
		public function fetchArray($sql){
			$array = mysql_fetch_array($sql);	
			return $array;			
		}
		
		
		/*
		/Retorno el ultimo ID de la insertado
		*/
		public function ultimoId(){
			$id = mysql_insert_id($this->getDbLink());	
			return $id;			
		}
		
		
		///////////////////////////////FUNCION INSERTAR EN LA DB
		/*
		/@params $tabla -> nombre de la tabla que se va a insertar
		/@params $datos -> ARRAY con los campos y las varibles a insertar
		/@params $password_campo ->  nombre del campo de PASSWORD para 
		*/
		public function insert($datos, $password_campo = "") 
		{			
			foreach ($datos as $campo=>$variable) 
			{
				$campos[] = '`' . $campo . '`';	
				$variables[] = "'" . mysql_real_escape_string($variable) . "'";
			}
			
			$campos = join(',', $campos);
			$variables = join(',', $variables);			
			$this->setConsulta("INSERT INTO `" . $this->getTabla() . "` (" . $campos . ") VALUES (" . $variables . ")");
							
		 	return $this->query();
		}
		
		
		
		/*
		/@params $tabla -> nombre de la tabla que se va a modificar
		/@params $datos -> ARRAY con los campos y las varibles a modificar
		/@params $campoId ->  nombre del campo donde ID
		/@params $id -> VALOR DEL IR QUE DEL REGISTRO A MODIFICAR
		*/
		public function update($datos, $campoId, $id){
			foreach ($datos as $c=>$v) {
				$campos[] = sprintf("`".$c."` = '".mysql_real_escape_string($v)."'");
			}
			$campos= join(' , ', $campos);
			$query = sprintf("UPDATE `".$this->getTabla()."` SET ".$campos." WHERE `".$campoId."` = ".$id);
			$this->setConsulta($query);
			return $this->query();
		}
		
		
		/*
		/@params $tabla -> nombre de la tabla que se va a modificar
		/@params $datos -> ARRAY con los campos y las varibles a modificar
		/@params $campo ->  nombre del campo donde ID
		/@params $id -> VALOR DEL IR QUE DEL REGISTRO A MODIFICAR
		*/
		public function delete($campoId,$id){
			$this->setConsulta('DELETE FROM '.$this->getTabla().' WHERE '.$campoId.' = \''.$id.'\'');			
			if($this->query()){
				return true;
			}else{
				return false;
			}
		}
		
	 /**
	 * Recupera el valor de la opcion de la tabla de configuracion.
	 *
	 * @param     string    $option    Nombre de la opcion a recuperar.
	 * @return    string    El valor de la opcion.
	 */
	public function getOption($opcion) {

		if (empty($option)) return false;

		$option = trim($option);

		$params = array( ':option' => $option );
		$sql = "SELECT `option_value` FROM `login_settings` WHERE `option_name` = :option LIMIT 1;";
		
		$this->setConsulta($sql);

		$result = $this->fetchArray($this->query());
		$result = $result ? $result[0] : false;

		return $result;

	}
	
	public function GetPermisosByModulo($modulo,$OperadorMonitorID)
	{
		$this->setConsulta("CALL get_permisos_by_modulos('".$modulo."',".$OperadorMonitorID.")");
		$q = $this->query();
		$row = $this->fetchArray($q);
		$this->Desconectar();
		return $row;
	}
}
?>