Source for file requisicao.classe.php

Documentation is available at requisicao.classe.php

  1. <?php
  2.     /**
  3.      * requisicao.classe.php
  4.      * 
  5.      * @copyright 2008 Soomp
  6.      * @author Marcio Merlone <mmerlone@gmail.com>
  7.      * @version 1.0
  8.      * @since 18/01/2007
  9.      * @package Soomp
  10.      */
  11.     /* $Id: requisicao.classe.php,v 1.25 2007/05/29 20:39:13 mmerlone Exp $ */
  12.  
  13.     require_once(CFG_LOCAL_FRAMEWORK.'modulo.classe.php');
  14.     /**
  15.      * Processa toda a requisição, gerencia sessão, verifica módulo e ação
  16.      * solicitados, permissões, formato dos módulos, etc.
  17.      * - Lê o config.php e módulos existentes
  18.      * - Limpa a requisição
  19.      * - Define o idioma da requisição
  20.      * - Armazena o usuário logado, caso algum
  21.      * - Précarrega o módulo solicitado, caso algum
  22.      * - Exibe a saída html resultante ou dados solicitados caso ajax, soap, etc.
  23.      * O objeto nunca deve ser instanciado com new requisicao(); mas:
  24.      * <code>
  25.      * $req = requisicao::getInstance(CFG_MODULOS);
  26.      * </code>
  27.      */
  28.     class requisicao extends modulo{
  29.         /**
  30.          * @var string $strLang armazena o idioma utilizado na requisição
  31.          */
  32.         private $strLang;
  33.         /**
  34.          * @var object $objUser armazena o usuário logado no sistema
  35.          */
  36.         private $objUser null;
  37.         /**
  38.          * @var integer $intTsReq armazena o timestamp de criação da requisição.
  39.          */
  40.         private $intTsReq;
  41.         /**
  42.          * @var object $instance instância da classe
  43.          */
  44.         private static $instance null;
  45.  
  46.         /**
  47.          * Processa toda a requisição, gerencia sessão, verifica módulo e ação
  48.          * solicitados, permissões, formato dos módulos, etc.
  49.          * - Lê o config.php e módulos existentes
  50.          * - Limpa a requisição
  51.          * - Define o idioma da requisição
  52.          * - Armazena o usuário logado, caso algum
  53.          * - Précarrega o módulo solicitado, caso algum
  54.          * - Exibe a saída html resultante ou dados solicitados caso ajax, soap, etc.
  55.          * O objeto nunca deve ser instanciado com new requisicao(); mas:
  56.          * <code>
  57.          * $req = requisicao::getInstance(CFG_MODULOS);
  58.          * </code>
  59.          * @param array $CFG_MODULOS array com os modulos ativos no sistema (config.php)
  60.          */
  61.         public function __construct(&$CFG_MODULOS){
  62.             $this->arrModulos = $CFG_MODULOS;
  63.             $this->_cleanRequest();    // Trata $_GET, $_POST, $_REQUEST, etc
  64.  
  65.             $this->_setLang();        // $this->strLang Define o idioma a ser usado
  66.             $this->_setUser();        // $this->objUser Instancia a classe usuário
  67.  
  68.             $this->run();            // processa o módulo
  69.             $this->save();            // Limpa objetos desnecessários, serializa e armazena na sessão
  70.         }
  71.  
  72.         /**
  73.          * Overload de propriedades privadas
  74.          * @param string $var nome da propriedade
  75.          * @param mixed $value valor da propriedade
  76.          */
  77.         private function __set($var$value){
  78.             $this->$var $value;
  79.         }
  80.         
  81.         /**
  82.          * Overload de propriedades privadas
  83.          * @param string $var nome da propriedade
  84.          * @return mixed valor da propriedade
  85.          */
  86.         private function __get($var){
  87.             return $this->$var;
  88.         }
  89.  
  90.         /**
  91.          * Singleton - retorna o objeto já instanciado ou armazenado na sessão.
  92.          */
  93.         public static function getInstance(&$CFG_MODULOS){
  94.             if(isset($_SESSION['req'])){
  95.                 self::$instance unserialize($_SESSION['req']);
  96.                 self::$instance->__construct($CFG_MODULOS);
  97.             }else{
  98.                 if(!self::$instance self::_getInstanceDb()){
  99.                     self::$instance new requisicao($CFG_MODULOS);
  100.                     self::$instance->intTsReq time();
  101.                 }
  102.             }
  103.             return self::$instance;
  104.         }
  105.  
  106.         /**
  107.          * Finaliza a requisição baseado no retorno do módulo
  108.          * @param string $retorno retorno do módulo:
  109.          *  - string com a ação ('lista' por exemplo)
  110.          *  - string com um url completo ('index.php?m=bla&a=foo' por exemplo)
  111.          *  - bool ou nulo indica o sucesso da execução da ação (nulo é considerado true)
  112.          *  Se is_bool($ret) então a execução continua até __outpuFoot
  113.          *  Caso contrário cai em $this->redireciona($url);
  114.          */
  115.         protected function endRequest($retorno){
  116.             if(is_bool($retorno|| is_null($retorno)){
  117.                 // Execução continua com _outputFoot();
  118.                 return is_null($retornotrue $retorno;
  119.             }else{
  120.                 // Se tem o caractere ponto (.) considera-se como uma url. 
  121.                 if(!strpos($retorno'.')){
  122.                     $url !is_null($retorno'index.php?m='.$this->strModule.'&a='.$retorno null;
  123.                 }else{
  124.                     $url $retorno;
  125.                 }
  126.     
  127.                 if(!is_null($url&& $this->_smarty()){
  128.                     return $this->redireciona($url);
  129.     
  130.                 }elseif(defined('AJAX')){
  131.                     return $retorno;
  132.                 }
  133.             }
  134.         }
  135.  
  136.         /**
  137.          * Redireciona para um módulo e ação especificados, útil para os casos
  138.          * após um POST para evitar repetição.
  139.          * @param string $url url relativa ou absoluta a redirecionar
  140.          *  Exibe ao browser:
  141.          *  <code>
  142.          *  <script type="text/javascript">document.location=$url;</script>
  143.          *  </code>
  144.          */
  145.         protected function redireciona($url 'index.php'){
  146.             $this->save();
  147.  
  148.             if(is_numeric($url)){
  149.                 $url 'index.php?s='.$url;
  150.             }
  151.  
  152.             if(defined('CFG_DEBUG_REDIRECT'&& CFG_DEBUG_REDIRECT){
  153.                 $this->outputHead();
  154.                 $this->msg(0'<a href="'.$url.'" title="Desative o CFG_DEBUG no config.php para redirecionar automaticamente.">Continuar em '.$url.'</a>''sucesso');
  155.                 $this->outputFoot();
  156.             }elseif($this->_smarty()){
  157.                 header('Location:'.$url);
  158.             }
  159.             exit;
  160.         }
  161.  
  162.         /**
  163.          * Limpa o objeto requisicao dos objetos auxiliares (smarty, ado, etc)
  164.          * e grava na sessão quando da serialização da requisição.
  165.          */
  166.         protected function save(){
  167.             $this->db        = null;
  168.             $this->dbUser    = null;
  169.             $this->smarty    = null;
  170.             $_SESSION['req'serialize($this);
  171.         }
  172.  
  173.         /**
  174.          * Busca a instância do objeto requisição no banco de dados.
  175.          * @todo implementar o armazenamento e recuperação da requisição no banco.
  176.          */
  177.         private static function _getInstanceDb(){
  178.             /*
  179.              * Implementar
  180.              */
  181.             return false;
  182.         }
  183.  
  184.         /**
  185.          * Faz a limpeza básica de variáveis de requisição
  186.          * @todo usar array_walk
  187.          * @todo melhorar muito isso
  188.          * @todo Implementar CFG_USUARIO_SECURITY
  189.          * @link http://us2.php.net/manual/en/function.array-walk.php
  190.          */
  191.         private function _cleanRequest(){
  192.             
  193.             /**
  194.              * Busca em $_REQUEST SQL injection
  195.              */
  196.             // implementar
  197.             
  198.             /**
  199.              * Verifica se o ip do acesso atual é o mesmo armazenado em $this->objUser->ip
  200.              */
  201.             if(defined('CFG_USUARIO_CHECK_IP'&& CFG_USUARIO_CHECK_IP && isset($this->objUser->ip&& $this->objUser->ip != $_SERVER['REMOTE_ADDR']){
  202.                 $this->objUser null;
  203.                 $this->msg(0'Sessão expirada.''sucesso');
  204.             }
  205.             
  206.             /**
  207.              * Escapa aspas, html, etc.
  208.              */
  209.             foreach(array('_POST''_GET''_COOKIE'as $request){
  210.                 if (!empty($$request)){
  211.                     foreach ($$request as $key => $linha{
  212.                         if (is_string($$request[$key])) $$request[$keyhtmlentities(addslashes($linha)ENT_QUOTESCFG_CHARSET);
  213.                     }
  214.                 }
  215.             }
  216.             
  217.         }
  218.  
  219.         /**
  220.          * Define o idioma a ser utilizado na requisição
  221.          */
  222.         private function _setLang(){
  223.  
  224.             require_once(CFG_LOCAL_FRAMEWORK.'idioma.classe.php');
  225.             $idioma idioma::getInstance();
  226.             $this->strLang $_SESSION['lang'$idioma->strLang;
  227.  
  228.             switch($this->strLang){
  229.                 case 'pt':
  230.                     $LC_ALL 'pt_BR';
  231.                     break;
  232.                 case 'en':
  233.                     $LC_ALL 'en_US';
  234.                     break;
  235.                 default:
  236.                     $LC_ALL 'pt_BR';
  237.                     break;
  238.             }
  239.             setlocale(LC_ALL$LC_ALL);
  240.         }
  241.  
  242.         /**
  243.          * Define $this->objUser
  244.          */
  245.         private function _setUser(){
  246.  
  247.             if(isset($CFG['usuario']&& $CFG['usuario']){
  248.                 $this->objUser is_object($this->objUser$this->objUser new usuario();
  249.  
  250.                 if(defined('CFG_SESSION_EXPIRE'&& CFG_SESSION_EXPIRE &&
  251.                    property_exists($this->objUser'TS_LOGIN'&&
  252.                    !empty($this->objUser->TS_LOGIN&&
  253.                    strtotime($this->objUser->TS_LOGIN)+CFG_SESSION_EXPIRE time()){
  254.                     $this->objUser null;
  255.                     $this->_logout();
  256.                 }
  257.             }
  258.  
  259.             if($this->_smarty()){
  260.                 $this->smarty->assign('CFG_USUARIO_DB_PK',                CFG_USUARIO_DB_PK);
  261.                 $this->smarty->assign('CFG_USUARIO_DB_USERNAME',        CFG_USUARIO_DB_USERNAME);
  262.                 $this->smarty->assign('CFG_USUARIO_DB_SENHA',            CFG_USUARIO_DB_SENHA);
  263.                 $this->smarty->assign('CFG_USUARIO_DB_NOME',            CFG_USUARIO_DB_NOME);
  264.                 $this->smarty->assign('CFG_USUARIO_DB_EMAIL',            CFG_USUARIO_DB_EMAIL);
  265.                 $this->smarty->assign('CFG_USUARIO_GRUPO_DB_FK_GRUPO',    CFG_USUARIO_GRUPO_DB_FK_GRUPO);
  266.                 $this->smarty->assign('CFG_USUARIO_DB_TS',                CFG_USUARIO_DB_TS);
  267.  
  268.                 $this->smarty->assign('CFG_GRUPO_DB_PK',    CFG_GRUPO_DB_PK);
  269.                 $this->smarty->assign('CFG_GRUPO_DB_NOME',    CFG_GRUPO_DB_NOME);
  270.                 $this->smarty->assign('CFG_GRUPO_DB_TS',    CFG_GRUPO_DB_TS);
  271.             }
  272.         }
  273.  
  274.     }
  275. ?>

Documentation generated on Sun, 09 Mar 2008 23:53:00 -0300 by phpDocumentor 1.4.0

SourceForge.net Logo Support This Project