<?php
/**
  * Classe dos métodos base da ligação e interacção à base de dados
  *
  * João Vieira: No frontiers, no limits for development
  * Copyright 1999-2004 (c) João Vieira
  * http://brevespot.com
  * @version: classe.bd.php [2004-06-11], revisto a 2009-08-20 para PDO via 7lis.com
  *
  */

 //classe principal
class BD_BasikUs {
    /* variáveis públicas */
    var $debug;
    var $servidor;
    var $basededados;
    var $utilizador;
    var $password;
    
    /* variáveis privadas */
    var $conn;
    var $rstemp;
    var $registo;
    
    //função da classe, no fundo o constructor
    function BD_BasikUs ($servidor,$utilizador,$password,$basededados,$debug=0) {
        $this->debug = $debug;
        if ($this->debug){
            print "\n\nDebug Activo <br>\n";
        }	
        $this->servidor = $servidor;
        $this->utilizador = $utilizador;
        $this->password = $password;
        $this->basededados = $basededados;
        $this->conecta();
    }
                
    //para conexão à base de dados
    function conecta (){ 
        if ($this->debug) print "A conectar ao servidor " . $this->servidor . " <br>\n";
        $this->conn = new PDO('mysql:host=' . $this->servidor . ';dbname=' . $this->basededados, $this->utilizador, $this->password)
                or die("Conexão ao servidor " . $this->servidor . " falhou <br>\n");
        return $this->conn;
    }
    
    //para executar os pedidos à base de dados
    function pedido($sql){
        if ($this->debug) {
            print "A executar SQL:  " . $sql . " <br>\n\n";
        }
        if (   stripos($sql, 'NSERT') !== false
            || stripos($sql, 'PDATE') !== false
            || stripos($sql, 'ELETE') !== false
            || stripos($sql, 'OCK TABLE') !== false){
            $this->rstemp = $this->conn->exec($sql);
                #or die("Erro-exec:" . $this->conn->errorCode() . " : " . $this->conn->errorInfo() . "<br>\n");
        }else{
            $this->rstemp = $this->conn->query($sql);
                #or die("Erro-query:" . $this->conn->errorCode() . " : " . $this->conn->errorInfo() . "<br>\n");
        }	
        return $this->rstemp;
    }
    
    //retorna erro corrente
    function erro(){
        print "<br/> \n ->| <b>" . $db->errorInfo() . "</b> |<- ";
    }
    
    //retorna o numero de registos ersultantes do pedido à base de dados
    function registosNumero(){
        $num = count($this->rstemp);
        if ($this->debug) { print $num . " registos devolvidos <br>\n\n";	 }
        return $num;	
    }
    
    //retorna o último identificador da última tabela onde foi inserido um registo
    function registosUltimo() {
        $num = $this->conn->lastInsertId();
        if ($this->debug) print "Último registo teve número " . $num . " <br>\n\n";
        return $num;
    }
    
}


class BD_BasikAndo {

	var $coneXao	= NULL; //conexão à BD
	var $recSet	= NULL; //recordset a usar para BD
	var $oSql	= ""; // declaração de SQL a ser usada
	var $oBug	= false;
	
	//construtor inicial
	function BD_BasikAndo ($coneXao){
		$this->coneXao = $coneXao;   
	}
	
	//define o SQL a executar
	function SetSql ($text0){
	   $this->oSql = $text0;
	}
	
	//puxa conteúdo detalhe
	function GetConteudo ($qUal){
	    $sql = "SELECT conteudos.id AS cid,
			conteudos.titulo AS ctitulo,
			conteudos.texto AS ctexto,
			DATE_FORMAT(conteudos.dataentrada, '%Y/%m/%d') AS cdataentrada,
			DATE_FORMAT(conteudos.datasaida, '%Y/%m/%d') AS cdatasaida,
			conteudos.metaurl AS cmetaurl,
			conteudos.metatitle AS cmetatitle,
			conteudos.metakeywords AS cmetakeywords,
			conteudos.metadescription AS cmetadescription,
			conteudos.estado AS cestado,
			conteudos.destaque AS cdestaque,
			conteudos.protegido AS cprotegido,
			conteudos.tst AS ctst,
			categorias.nome AS ccnome
		    FROM conteudos, categorias
		    WHERE conteudos.id = '" . (int)$qUal . "'
		    AND conteudos.categorias_id = categorias.id
		    AND conteudos.estado LIKE 'SIM'
		    LIMIT 0, 1";
	    $this->oSql = $sql;
	}
	
	//devolve jogos
	function GetConteudos($cAt, $qTos = '', $xTra = 'ORDER BY conteudos.id DESC'){
	    if ( $qTos != '' ) $qTos = 'LIMIT 0, ' . (int)$qTos;
	    $sql = "SELECT conteudos.id AS cid,
			conteudos.titulo AS ctitulo,
			conteudos.texto AS ctexto,
			DATE_FORMAT(conteudos.dataentrada, '%Y/%m/%d') AS cdataentrada,
			DATE_FORMAT(conteudos.datasaida, '%Y/%m/%d') AS cdatasaida,
			conteudos.metaurl AS cmetaurl,
			conteudos.metatitle AS cmetatitle,
			conteudos.metakeywords AS cmetakeywords,
			conteudos.metadescription AS cmetadescription,
			conteudos.estado AS cestado,
			conteudos.destaque AS cdestaque,
			conteudos.protegido AS cprotegido,
			conteudos.tst AS ctst,
			categorias.nome AS ccnome
		    FROM conteudos, categorias
		    WHERE conteudos.categorias_id IN (
							SELECT categorias.id
							FROM categorias
							WHERE categorias.id ='" . (int)$cAt . "'
							OR categorias.pai ='" . (int)$cAt . "'
						     )
		    AND conteudos.categorias_id = categorias.id 
		    AND conteudos.estado LIKE 'SIM'
	    " . $xTra . " " . $qTos;

	    $this->oSql = $sql;
	}	
	
	//devolve dados da categoria do conteudo escolhido
	function GetCategoriaConteudo ($cOnt){
	    $sql = "SELECT categorias.id AS cid,
			categorias.pai AS cpai,
			categorias.nome AS cnome,
			categorias.tst AS ctst
		FROM conteudos, categorias
		WHERE conteudos.id = '" . $cOnt . "'
		AND conteudos.estado LIKE 'SIM'
		AND categorias_id = categorias.id
		LIMIT 0, 1
	    ";
	    $this->oSql = $sql;
	}

	//devolve lista de categorias filho
	function GetCategoriasCategoria ($cAt, $qTos = '', $xTra = 'ORDER BY conteudos.id DESC'){
	    if ( $qTos != '' ) $qTos = 'LIMIT 0, ' . (int)$qTos;
	    $sql = "SELECT categorias.id AS cid,
			categorias.pai AS cpai,
			categorias.nome AS cnome,
			categorias.tst AS ctst
		FROM categorias
		WHERE categorias.pai = '" . $cAt . "'
	     " . $xTra . " " . $qTos;
	    $this->oSql = $sql;
	}
	//para devolver resposta de pedido sql
	function puXa() {
	    $booSerlista	= false;
	    if ( $this->oBug ) dbg($this->oSql);
	    if ( strlen($this->oSql) > 10 ) {
		$this->recSet = $this->coneXao->pedido($this->oSql);
		if ( $this->recSet->rowCount() < 1 ) return NULL;
	    }else {
		die("nop.ask.sQl.BD.[" . strlen($this->oSql) . "]");
	    }
	    $posLimit	= (int)strripos( $this->oSql, "LIMIT") + 6;
	    $posFim	= strlen($this->oSql);
	    if ( ($posFim - $posLimit) > 9 ) $booSerlista = true;
	    else {
		$strLimit	= substr($this->oSql, $posLimit, $posFim );
		$arrLimit = explode(",", $strLimit);
		if ( isset($arrLimit[1]) ) {
		    if ( (int)trim($arrLimit[0]) > 0 || (int)trim($arrLimit[1]) > 1 ) $booSerlista = true;
		}
	    }
	    if ( $booSerlista ) return $this->recSet;
	    else return $this->recSet->fetch(PDO::FETCH_ASSOC);
	}
	
}

?>