Filtro.php

<< Click to Display Table of Contents >>

Navigation:  Outros > CRUD com persistencia Orientada Objeto > persistencia >

Filtro.php

Previous pageReturn to chapter overviewNext page

<?php
 
namespace persistencia;
 
class Filtro {
 
    private $filtros;
    private $modo_or;
 
    public function __construct($modo_or = false) {
        $this->filtros = array();
        $this->modo_or = $modo_or;
    }
 
    // formata o valor conforme o conteudo
    private function getValor($valor$aspas = true): string {
 
        // inteiro ou float passa batido
        if (is_int($valor) || is_float($valor)) {
            return $valor;
        }
 
        // arranca qualquer script que possa vir como sujeira
        $v = filter_var($valorFILTER_SANITIZE_STRIPPED);
 
        if ($aspas) {
            return "'{$v}'";
        } else {
            return $v;
        }
    }
 
    public function addContem($propriedade$valor) {
        array_push($this->filtros"lower({$propriedade}) like '%" . mb_strtolower($this->getValor($valorfalse)) . "%'");
    }
 
    public function addIniciaCom($propriedade$valor) {
        array_push($this->filtros"lower({$propriedade}) like '%" . mb_strtolower($this->getValor($valorfalse)) . "'");
    }
 
    public function addTerminaCom($propriedade$valor) {
        array_push($this->filtros"lower({$propriedade}) like '" . mb_strtolower($this->getValor($valorfalse)) . "%'");
    }
 
    public function addEntre($propriedade$valor_inicial$valor_final) {
        array_push($this->filtros"{$propriedade} between " . $this->getValor($valor_inicial) . " and " . $this->getValor($valor_final));
    }
 
    public function addMaiorQue($propriedade$valor) {
        array_push($this->filtros"{$propriedade} > " . $this->getValor($valor));
    }
 
    public function addMenorQue($propriedade$valor) {
        array_push($this->filtros"{$propriedade} < " . $this->getValor($valor));
    }
 
    public function addMaiorIgualQue($propriedade$valor) {
        array_push($this->filtros"{$propriedade} >= " . $this->getValor($valor));
    }
 
    public function addMenorIgualQue($propriedade$valor) {
        array_push($this->filtros"{$propriedade} <= " . $this->getValor($valor));
    }
 
    public function addDiferente($propriedade$valor) {
 
        if (!isset($valor)) {
            array_push($this->filtros" not {$propriedade} is null");
        } else {
            array_push($this->filtros$propriedade . '<>' . $this->getValor($valor));
        }
    }
 
    public function add($propriedade$valor) {
 
        if (!isset($valor)) {
            array_push($this->filtros$propriedade . ' is null');
        } else {
            array_push($this->filtros$propriedade . '=' . $this->getValor($valor));
        }
    }
 
    /**
     * Use quando precisa de string literal como CURRENT_DATE
     * @param string $propriedade
     * @param string $valor
     */
    public function addLiteral($propriedade$valor) {
        array_push($this->filtros$propriedade . '=' . $valor);
    }
 
    public function __toString() {
 
        $ret = '';
        $logico = $this->modo_or ? ' or ' : ' and ';
 
        // percorre todos os filtros criados
        foreach ($this->filtros as $filtro) {
            $ret .= $filtro . $logico;
        }
 
        // remove o ultimo "and"
        if ($ret) {
            $ret = substr($ret0, -4);
        }
 
        return $ret;
    }
 
}