Caros,
Reporto para troca de experiência na comunidade falha de segurança no login do gpweb, conforme segue:
Estamos usando para login de usuários comuns o AD de rede, e para gestores de Unidades (Diretores, gerentes e supervisores) login institucional criado no gpweb (ex. "diges, presi, etc"). Ocorre que no caso dos usuários normais (AD) o acesso se dá via login e senha de rede sem nenhum problema, porém nos usuários criados no gpweb, o acesso se dá com qualquer senha.
Exemplo: usuário criado: diges
senha criada: 123456
Acesso se dá: "diges" com senha: 123456; 154143, as4fga41, etc. Ou seja, qualquer senha ele aceita.
Aguardo comentários.
Autor: Helio Carvalho
99 comentários
if (!$conectou && $metodo_autenticacao=='sql') {
//tentar LDAP
$auth = &getauth('ldap');
$conectou=$auth->autenticar($usuarioNome, $senha);
}
if (!$conectou && $metodo_autenticacao=='ldap') {
//tentar SQL
$auth = &getauth('sql');
$conectou=$auth->autenticar($usuarioNome, $senha);
}
if (!$conectou) return false;
/*
Copyright (c) 2007-2011 The web2Project Development Team <w2p-developers@web2project.net>
Copyright (c) 2003-2007 The dotProject Development Team <core-developers@dotproject.net>
Copyright [2008] - Sérgio Fernandes Reinert de Lima
Este arquivo é parte do programa gpweb
O gpweb é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.
Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/GPL em português para maiores detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "licença GPL 2.odt", junto com este programa, se não, acesse o Portal do Software Público Brasileiro no endereço www.softwarepublico.gov.br ou escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ /********************************************************************************************
gpweb\classes\autenticacao.class.php Define as classes de autenticação no login
********************************************************************************************/
if (!defined('BASE_DIR')) die('Você não deveria acessar este arquivo diretamente.'); function &getAuth($modo_autenticacao) {
switch ($modo_autenticacao) {
case 'ldap':
$auth = new LDAPAutenticador();
return $auth;
break;
case 'pn':
$auth = new PostNukeAutenticador();
return $auth;
break;
default:
$auth = new SQLAutenticador();
return $auth;
break;
}
} class PostNukeAutenticador extends SQLAutenticador { function PostNukeAutenticador() {
global $config;
$this->fallback = isset($config['postnuke_permite_login']) ? $config['postnuke_permite_login'] : false;
} function autenticar($usuarioNome, $senha) {
global $bd, $Aplic,$config;
if (!isset($_REQUEST['usuarioData'])) {
if ($this->fallback) return parent::autenticar($usuarioNome, $senha);
else die('Você não configurou o site PostNuke corretamente.');
}
if (!$dado_comprimido = base64_decode(urldecode($_REQUEST['usuarioData']))) die('As credenciais fornecidas não eram válida (1)');
if (!$usuarioData = gzuncompress($dado_comprimido)) die('As credenciais fornecidas não eram válida (2)');
if (!$_REQUEST['check'] = md5($usuarioData)) die('As credenciais fornecidas não eram válida (3)');
$usuario_data = unserialize($usuarioData);
$usuarioNome = trim($usuario_data['login']);
$this->usuarioNome = $usuarioNome;
$nomes = explode(' ', trim($usuario_data['nome']));
$ultimo_nome = array_pop($nomes);
$primeiro_nome = implode(' ', $nomes);
$senha = trim($usuario_data['senha']);
$email = trim($usuario_data['mail']);
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adCampo('usuario_id, usuario_senha, usuario_contato');
$q->adOnde('usuario_login = \''.$usuarioNome.'\'');
if (!$rs = $q->exec()) die('Falhou em conseguir detalhes d'.$config['genero_usuario'].' '.$config['usuario'].' - erro foi '.$bd->ErrorMsg());
if ($rs->RecordCount() < 1) {
$q->limpar();
$this->criarUsuarioSql($usuarioNome, $senha, $email, $primeiro_nome, $ultimo_nome);
}
else {
if (!$linha = $rs->FetchRow()) die('Falhou em recuperar detalhe d'.$config['genero_usuario'].' '.$config['usuario'].'.');
$this->usuario_id = $linha['usuario_id'];
$q->limpar();
$q->adTabela('usuarios');
$q->adAtualizar('usuario_senha', $senha);
$q->adOnde('usuario_id = '.$this->usuario_id);
if (!$q->exec()) die('Não foi possível alterar as credenciais.');
$q->limpar();
$q->adTabela('contatos');
$q->adAtualizar('contato_posto', $primeiro_nome);
$q->adAtualizar('contato_nomeguerra', $ultimo_nome);
$q->adAtualizar('contato_email', $email);
$q->adOnde('contato_id = '.$linha['usuario_contato']);
if (!$q->exec()) die('Não foi possível alterar detalhes d'.$config['genero_usuario'].' '.$config['usuario'].'.');
$q->limpar();
}
return true;
} function criarUsuarioSql($usuarioNome, $senha, $email, $primeiro, $ultimo) {
global $bd, $Aplic,$config;
require_once ($Aplic->getClasseModulo('contatos'));
$c = new CContato();
$c->contato_posto = $primeiro;
$c->contato_nomeguerra = $ultimo;
$c->contato_email = $email;
$c->contato_ordem = $primeiro.' '.$ultimo;
$q = new BDConsulta;
$q->inserirObjeto('contatos', $c, 'contato_id');
$q->limpar();
$contato_id = ($c->contato_id == null) ? 'NULL' : $c->contato_id;
if (!$c->contato_id) die('Não foi possível criar detalhes d'.$config['genero_usuario'].' '.$config['usuario'].'.');
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adInserir('usuario_login', $usuarioNome);
$q->adInserir('usuario_senha', $senha);
$q->adInserir('usuario_contato', $c->contato_id);
if (!$q->exec()) die('Não foi possível criar credenciais d'.$config['genero_usuario'].' '.$config['usuario'].'.');
$usuario_id = $bd->Insert_ID('usuarios','usuario_id');
$this->usuario_id = $usuario_id;
$q->limpar(); $q->adTabela('preferencia');
$q->adCampo('preferencia.*');
$q->adOnde('usuario IS NULL OR usuario=0');
$linha = $q->linha();
$q->limpar(); $q->adTabela('preferencia');
$q->adInserir('usuario', $usuario_id);
foreach($linha as $chave => $valor){
if ($chave!='preferencia_id' && $chave!='usuario' && $valor) $q->adInserir($chave, $valor);
}
if (!$q->exec()) die('Não foi possível criar as preferências d'.$config['genero_usuario'].' '.$config['usuario'].'.');
$q->limpar(); if ($config['ldap_perfil']){
$q->adTabela('perfil_usuario');
$q->adInserir('perfil_usuario_usuario', $this->usuario_id);
$q->adInserir('perfil_usuario_perfil', $config['ldap_perfil']);
$q->exec();
$q->limpar();
}
return true;
}
} class SQLAutenticador {
var $usuario_id;
var $usuarioNome; function autenticar($usuarioNome, $senha) {
global $bd, $Aplic;
$this->usuarioNome = $usuarioNome;
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adCampo('usuario_id, usuario_senha, usuario_ativo');
$q->adOnde('usuario_login = \''.$usuarioNome.'\'');
$linha = $q->linha();
$q->limpar();
if (!$linha) return false;
if (!isset($linha['usuario_senha']) || !isset($linha['usuario_ativo'])) return false;
$this->usuario_id = $linha['usuario_id'];
if (MD5($senha) == $linha['usuario_senha'] && $linha['usuario_ativo']) return true;
return false;
} function usuarioId($usuarioNome='') {
return $this->usuario_id;
}
} class LDAPAutenticador extends SQLAutenticador {
var $ldap_local;
var $ldap_porta;
var $ldap_versao;
var $base_dn;
var $ldap_procura_usuario;
var $ldap_procura_senha;
var $filtro;
var $usuario_id;
var $usuarioNome; function LDAPAutenticador() {
global $config;
$this->fallback = isset($config['ldap_permite_login']) ? $config['ldap_permite_login'] : false;
$this->ldap_local = $config['ldap_local'];
$this->ldap_porta = $config['ldap_porta'];
$this->ldap_versao = $config['ldap_versao'];
$this->base_dn = $config['ldap_base_dn'];
$this->ldap_procura_usuario = $config['ldap_procura_usuario'];
$this->ldap_procura_senha = $config['ldap_procura_senha'];
$this->filtro = $config['ldap_usuario_filtro'];
} function autenticar($usuarioNome, $senha) {
global $bd, $config;
$this->usuarioNome = $usuarioNome;
// verificando se foi inserido senha
if (strlen($senha) == 0) return false;
// se eh permitido login local entao tenta auntenticar na base
if ($this->fallback == true) {
if (parent::autenticar($usuarioNome, $senha)) return true;
}
// verificando conexao com o servidor LDAP e configurando a conexao
if (!function_exists('ldap_connect')) return false;
if (!$rs = @ldap_connect($this->ldap_local, $this->ldap_porta)) return false;
@ldap_set_option($rs, LDAP_OPT_PROTOCOL_VERSION, $this->ldap_versao);
@ldap_set_option($rs, LDAP_OPT_REFERRALS, 0);
$ldap_unir_dn = empty($this->ldap_procura_usuario) ? null : $this->ldap_procura_usuario;
$ldap_unir_pw = empty($this->ldap_procura_senha) ? null : $this->ldap_procura_senha;
//colaboração de Marcos Vinicius Linhares
// caso a busca por usuarios na base LDAP nao possa ser anonima, precisa fazer o bind para um usuario
// com autorizacao para busca. Neste caso verifica se o usuario entrou com dados do usuario autorizado
// e tenta o bind, caso contrario tenta fazer busca uma anonima na base LDAP.
if (isset($ldap_unir_dn) && isset($ldap_unir_pw) && !$unirok = @ldap_bind($rs, $ldap_unir_dn, $ldap_unir_pw)) return false; // criando o filtro de busca de acordo com o parametro especificado na configuracao do sistema
$filtro_r = html_entity_decode(str_replace('%USERNAME%', $usuarioNome, $this->filtro), ENT_COMPAT, 'UTF-8'); // procura por registro do usuario no LDAP
if ( !($resultado = @ldap_search($rs, $this->base_dn, $filtro_r)) ) return false; // carregando os atributos do usuario
if ( !($registro_usuario = ldap_get_entries($rs, $resultado)) ) return false; // realiza o bind do usuario no LDAP - autenticacao do usuario - se autenticado, entao
// verifica se o registro do usuario jah existe na base local, caso nao exista entao cria usuario com atributos do LDAP
if (!@ldap_bind($rs, $registro_usuario[0]['dn'], $senha)) return false;
else if (!$this->usuarioExiste($usuarioNome) && isset($registro_usuario[0])) $this->criarUsuarioSql($usuarioNome, $registro_usuario[0]);
elseif(isset($registro_usuario[0])) $this->atualizaUsuarioSql($usuarioNome, $registro_usuario[0]);
return true;
}
function usuarioExiste($usuarioNome) {
global $bd;
$q = new BDConsulta;
$resultadoado = false;
$q->adTabela('usuarios');
$q->adOnde('usuario_login = \''.$usuarioNome.'\'');
$rs = $q->exec();
if ($rs->RecordCount() > 0) $resultadoado = true;
$q->limpar();
return $resultadoado;
} function usuarioId($usuarioNome='') {
global $bd;
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adOnde('usuario_login = \''.$usuarioNome.'\'');
$rs = $q->exec();
$linha = $rs->FetchRow();
$q->limpar();
return $linha['usuario_id'];
} function atualizaUsuarioSql($usuarioNome, $ldap_atributo = array()) {
global $config, $Aplic;
require_once ($Aplic->getClasseModulo('contatos')); $q = new BDConsulta;
$q->adTabela('usuarios');
$q->adCampo('usuario_contato');
$q->adOnde('usuario_login=\''.$usuarioNome.'\'');
$contato_id = $q->resultado();
$q->limpar(); $contato_nomecompleto = (isset($ldap_atributo[$config['ldap_nomecompleto']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_nomecompleto']][0]) : $ldap_atributo[$config['ldap_nomecompleto']][0]) : null);
$contato_nomeguerra = (isset($ldap_atributo[$config['ldap_nomeguerra']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_nomeguerra']][0]) : $ldap_atributo[$config['ldap_nomeguerra']][0]) : null);
$contato_email = (isset($ldap_atributo[$config['ldap_email']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_email']][0]) : $ldap_atributo[$config['ldap_email']][0]) : null);
$contato_tel = (isset($ldap_atributo[$config['ldap_telefone']][0]) ? $ldap_atributo[$config['ldap_telefone']][0] : null);
$contato_cel = (isset($ldap_atributo[$config['ldap_celular']][0]) ? $ldap_atributo[$config['ldap_celular']][0] : null);
$contato_funcao = (isset($ldap_atributo[$config['ldap_funcao']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_funcao']][0]) : $ldap_atributo[$config['ldap_funcao']][0]) : null);
$contato_cpf = (isset($ldap_atributo['cpf']) ? $ldap_atributo['cpf'][0] : NULL);
$contato_matricula = (isset($ldap_atributo['employeenumber']) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo['employeenumber'][0]) : $ldap_atributo['employeenumber'][0]) : NULL);
if ($contato_nomecompleto || $contato_nomeguerra || $contato_email || $contato_tel || $contato_cel || $contato_funcao || $contato_cpf || $contato_matricula){
$q->adTabela('contatos');
if ($contato_nomecompleto) $q->adAtualizar('contato_nomecompleto', $contato_nomecompleto);
if ($contato_nomeguerra) $q->adAtualizar('contato_nomeguerra', $contato_nomeguerra);
if ($contato_email) $q->adAtualizar('contato_email', $contato_email);
if ($contato_tel) $q->adAtualizar('contato_tel', $contato_tel);
if ($contato_cel) $q->adAtualizar('contato_cel', $contato_cel);
if ($contato_funcao) $q->adAtualizar('contato_funcao', $contato_funcao);
if ($contato_cpf) $q->adAtualizar('contato_cpf', $contato_cpf);
if ($contato_matricula) $q->adAtualizar('contato_matricula', $contato_matricula);
$q->adOnde('contato_id='.(int)$contato_id);
$q->exec();
$q->limpar();
}
} //colaboração de Marcos Vinicius Linhares
function criarUsuarioSql($usuarioNome, $ldap_atributo = array()) {
global $bd, $config, $Aplic;
require_once ($Aplic->getClasseModulo('contatos')); // criando array com informacoes de contato do usuario
$c = new CContato();
// carregando o array contato com as informacoes dos atributos do LDAP, se existente,
// de acordo com o relacionamento DE/PARA feito na interface de administracao
$c->contato_cia = ($config['om_padrao'] ? $config['om_padrao'] : null);
$c->contato_nomecompleto = (isset($ldap_atributo[$config['ldap_nomecompleto']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_nomecompleto']][0]) : $ldap_atributo[$config['ldap_nomecompleto']][0]) : null);
$c->contato_nomeguerra = (isset($ldap_atributo[$config['ldap_nomeguerra']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_nomeguerra']][0]) : $ldap_atributo[$config['ldap_nomeguerra']][0]) : null);
$c->contato_email = (isset($ldap_atributo[$config['ldap_email']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_email']][0]) : $ldap_atributo[$config['ldap_email']][0]) : null);
$c->contato_tel = (isset($ldap_atributo[$config['ldap_telefone']][0]) ? $ldap_atributo[$config['ldap_telefone']][0] : null);
$c->contato_cel = (isset($ldap_atributo[$config['ldap_celular']][0]) ? $ldap_atributo[$config['ldap_celular']][0] : null);
$c->contato_funcao = (isset($ldap_atributo[$config['ldap_funcao']][0]) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo[$config['ldap_funcao']][0]) : $ldap_atributo[$config['ldap_funcao']][0]) : null);
$c->contato_cpf = (isset($ldap_atributo['cpf']) ? $ldap_atributo['cpf'][0] : NULL);
$c->contato_matricula = (isset($ldap_atributo['employeenumber']) ? ($config['ldap_charset']=='utf8' ? utf8_decode($ldap_atributo['employeenumber'][0]) : $ldap_atributo['employeenumber'][0]) : NULL);
// inserindo array com informacoes de contato na tabela contatos
$q = new BDConsulta;
$q->inserirObjeto('contatos', $c, 'contato_id');
$q->limpar();
$contato_id = ($c->contato_id == null ? 'NULL' : $c->contato_id); // inserindo novo usuario na tabela usuarios
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adInserir('usuario_login', $usuarioNome);
$q->adInserir('usuario_senha', NULL);
$q->adInserir('usuario_contato', $c->contato_id);
$q->exec();
$usuario_id = $bd->Insert_ID('usuarios','usuario_id');
$this->usuario_id = $usuario_id;
$q->limpar(); // inserindo permissoes de acesso de acordo com o perfil selecionado
if ($config['ldap_perfil']){
$q->adTabela('perfil_usuario');
$q->adInserir('perfil_usuario_usuario', $this->usuario_id);
$q->adInserir('perfil_usuario_perfil', $config['ldap_perfil']);
$q->exec();
$q->limpar();
}
}
}
?> ****************************ARQUIVO UI.CLASS********************/ <?php
/*
Copyright (c) 2007-2011 The web2Project Development Team <w2p-developers@web2project.net>
Copyright (c) 2003-2007 The dotProject Development Team <core-developers@dotproject.net>
Copyright [2008] - Sérgio Fernandes Reinert de Lima
Este arquivo é parte do programa gpweb
O gpweb é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.
Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/GPL em português para maiores detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "licença GPL 2.odt", junto com este programa, se não, acesse o Portal do Software Público Brasileiro no endereço www.softwarepublico.gov.br ou escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ /********************************************************************************************
gpweb\classes\ui.class.php Define a classe CAplic que retém as informações do usuário logado através das páginas
********************************************************************************************/
if (!defined('BASE_DIR')) die('Você não deveria acessar este arquivo diretamente.'); if(!defined('UI_MSG_OK')) define('UI_MSG_OK', 1);
if(!defined('UI_MSG_ALERTA')) define('UI_MSG_ALERTA', 2);
if(!defined('UI_MSG_AVISO')) define('UI_MSG_AVISO', 3);
if(!defined('UI_MSG_ERRO')) define('UI_MSG_ERRO', 4);
$GLOBALS['traduzir'] = array();
if(!defined('UI_CAIXA_MASCARA')) define('UI_CAIXA_MASCARA', 0x0F);
if(!defined('UI_CAIXA_ALTA')) define('UI_CAIXA_ALTA', 1);
if(!defined('UI_CAIXA_BAIXA')) define('UI_CAIXA_BAIXA', 2);
if(!defined('UI_CAIXA_PRIMEIRA_ALTA')) define('UI_CAIXA_PRIMEIRA_ALTA', 3);
if(!defined('UI_MASCARA_SAIDA')) define('UI_MASCARA_SAIDA', 0xF0);
if(!defined('UI_SAIDA_HTML')) define('UI_SAIDA_HTML', 0);
if(!defined('UI_SAIDA_JS')) define('UI_SAIDA_JS', 0x10);
if(!defined('UI_SAIDA_CRUA')) define('UI_SAIDA_CRUA', 0x20);
require_once BASE_DIR.'/classes/permissoes.class.php'; class CAplic {
var $estado = null;
var $usuario_id = null;
var $usuario_posto = null;
var $usuario_nomeguerra = null;
var $usuario_funcao = null;
var $usuario_nome = null;
var $usuario_nome_completo = null;
var $usuario_cia = null;
var $usuario_dept = null;
var $usuario_grupo_dept = null;
var $usuario_lista_dept = null;
var $usuario_tem_lista_dept = null;
var $usuario_email = null;
var $usuario_email2 = null;
var $usuario_admin = null;
var $profissional = null;
var $usuario_super_admin = null;
var $usuario_acesso_email = null;
var $usuario_pode_oculta = null;
var $usuario_cm = null;
var $conta_conjunta = null;
var $chave_privada = null;
var $chave_criada = null;
var $chave_publica_id = null;
var $senha_msg = null;
var $usuario_ativo = null;
var $usuario_pode_assinar = null;
var $usuario_pode_protocolar = null;
var $usuario_pode_outra_cia = null;
var $usuario_pode_lateral = null;
var $usuario_pode_superior = null;
var $usuario_pode_todas_cias = null;
var $usuario_envia_cia = null;
var $usuario_recebe_cia = null;
var $usuario_inserir_demanda = null;
var $usuario_analisa_demanda = null;
var $usuario_analisa_viabilidade = null;
var $usuario_cria_termo_abertura = null;
var $usuario_aprovar_termo_abertura = null;
var $usuario_cria_social = null;
var $usuario_cria_acao = null;
var $usuario_cria_familia = null;
var $usuario_cria_comunidade = null;
var $usuario_cria_comite = null;
var $usuario_exporta_familia = null;
var $usuario_importa_familia = null;
var $usuario_gera_notebook = null;
var $usuario_importa_notebook = null;
var $usuario_pode_criar = null;
var $usuario_pode_aprovar = null;
var $usuario_pode_editar = null;
var $usuario_pauta = null;
var $usuario_prefs = null;
var $dia_selecionado = null;
var $usuario_localidade = null;
var $usuario_linguagem = null;
var $base_localidade = 'pt';
var $msg = '';
var $msgNo = '';
var $redirecionarPadrao = '';
var $cfg = null;
var $versao_maior = null;
var $versao_menor = null;
var $versao_revisao = null;
var $versao_string = null;
var $beta = null;
var $ultimo_id_inserido = null;
var $usuario_estilo = null;
var $cor_msg_nao_lida = null;
var $cor_msg_realce = null;
var $celular = null;
function CAplic() {
$this->estado = array();
$this->usuario_id = -1;
$this->usuario_posto = '';
$this->usuario_nomeguerra = '';
$this->usuario_funcao = '';
$this->usuario_nome = '';
$this->usuario_nome_completo = '';
$this->usuario_cia = null;
$this->usuario_dept = null;
$this->usuario_grupo_dept = null;
$this->usuario_admin = 0;
$this->profissional = 0;
$this->usuario_super_admin = 0;
$this->usuario_acesso_email = 0;
$this->usuario_pode_oculta = 0;
$this->usuario_cm = 0;
$this->chave_privada= '';
$this->chave_criada= '';
$this->chave_publica_id= null;
$this->senha_msg= '';
$this->conta_conjunta = 0;
$this->usuario_ativo = 0;
$this->usuario_pode_assinar = 0;
$this->usuario_pode_protocolar = 0;
$this->usuario_pode_criar = 0;
$this->usuario_pode_aprovar = 0;
$this->usuario_pode_editar = 0;
$this->usuario_pauta = 0;
$this->usuario_pode_outra_cia = 0;
$this->usuario_pode_lateral = 0;
$this->usuario_pode_superior = 0;
$this->usuario_pode_todas_cias = 0;
$this->usuario_envia_cia = 0;
$this->usuario_recebe_cia = 0;
$this->usuario_inserir_demanda = 0;
$this->usuario_analisa_demanda = 0;
$this->usuario_analisa_viabilidade = 0;
$this->usuario_cria_termo_abertura = 0;
$this->usuario_aprovar_termo_abertura = 0;
$this->usuario_cria_social = 0;
$this->projeto_id = null;
$this->redirecionarPadrao = '';
$this->setUsuarioLocalidade($this->base_localidade);
$this->usuario_prefs = array();
}
function &acl() {
if (!isset($GLOBALS['acl'])) $GLOBALS['acl'] = new meu_acl;
return $GLOBALS['acl'];
}
function getClasseSistema($nome = null) {
if ($nome) return BASE_DIR.'/classes/'.$nome.'.class.php';
} function getClasseBiblioteca($nome = null) {
if ($nome) return BASE_DIR.'/lib/'.$nome.'.php';
} function getClasseModulo($nome = null) {
if ($nome) return BASE_DIR.'/modulos/'.$nome.'/'.$nome.'.class.php';
} function getModuloAjax( $nome=null ) {
if ($nome) return BASE_DIR.'/modulos/'.$nome.'/'.$nome.'.ajax.php';
} function getVersao() {
global $config;
if (!isset($this->versao_maior)) {
include_once BASE_DIR.'/incluir/versao.php';
$this->versao_maior = $_versao_maior;
$this->versao_menor = $_versao_menor;
$this->_versao_revisao = $_versao_revisao;
$this->beta = $beta;
$this->versao_string = $this->versao_maior.'.'.$this->versao_menor.'.'.$this->_versao_revisao.($this->beta ? ' Beta '.$this->beta :'').'<br>'.$data_versao;
}
return $this->versao_string;
} function checarEstilo() {
$estilo_ui = 'rondon';
$this->setPref('ui_estilo', 'rondon');
} function lerDirs($caminho) {
$dirs = array();
if (is_dir(BASE_DIR.'/'.$caminho)){
$d = dir(BASE_DIR.'/'.$caminho);
if ($d){
while (false !== ($nome = $d->read())) {
if (is_dir(BASE_DIR.'/'.$caminho.'/'.$nome) && $nome != '.' && $nome != '..' && $nome != 'CVS' && $nome != '.svn') $dirs[$nome] = $nome;
}
$d->close();
}
}
return $dirs;
} function lerArquivos($caminho, $filtro = '.') {
$arquivos = array();
if (is_dir($caminho) && ($handle = opendir($caminho))) {
while (false !== ($arquivo = readdir($handle))) {
if ($arquivo != '.' && $arquivo != '..' && preg_match('/'.$filtro.'/', $arquivo)) $arquivos[$arquivo] = $arquivo;
}
closedir($handle);
}
return $arquivos;
} function checarNomeArquivo($arquivo) {
global $Aplic;
$carc_ruins = ";/\\";
$substituicao_ruim = '....';
if (strpos(strtr($arquivo, $carc_ruins, $substituicao_ruim), '.') !== false) $Aplic->redirecionar('m=publico&a=acesso_negado');
else return $arquivo;
} function fazerNomeArquivoSeguro($arquivo) {
$arquivo = str_replace('../', '', $arquivo);
$arquivo = str_replace('..\\', '', $arquivo);
return $arquivo;
} function setUsuarioLocalidade($loc = '', $set = true) {
global $localidade_tipo_caract;
$IDIOMA = $this->carregarIdioma();
if (!$loc) $loc = (isset($this->usuario_prefs['localidade']) && $this->usuario_prefs['localidade'] ? $this->usuario_prefs['localidade'] : config('idioma'));
if (isset($IDIOMA[$loc])) $lingua = $IDIOMA[$loc];
else {
if (strlen($loc)> 2) {
list($l, $c) = explode('_', $loc);
$loc = $this->acharIdioma($l, $c);
}
else {
$loc = $this->acharIdioma($loc);
}
$lingua = $IDIOMA[$loc];
}
list($base_localidade, $texto_inglesa, $texto_nativa, $idioma_padrao, $lcs) = $lingua;
if (!isset($lcs)) $lcs = (isset($localidade_tipo_caract)) ? $localidade_tipo_caract : 'utf-8';
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') $usuario_linguagem = $idioma_padrao;
else $usuario_linguagem = $loc.'.'.$lcs;
if ($set) {
$this->usuario_localidade = $base_localidade;
$this->usuario_linguagem = $usuario_linguagem;
$localidade_tipo_caract = $lcs;
}
else return $usuario_linguagem;
} function acharIdioma($idioma, $pais = false) {
$IDIOMA = $this->carregarIdioma();
$idioma = strtolower($idioma);
if ($pais) {
$pais = strtoupper($pais);
$code = $idioma.'_'.$pais;
if (isset($IDIOMA[$code])) return $code;
}
$primeira_entrada = null;
foreach ($IDIOMA as $lingua => $info) {
list($l, $c) = explode('_', $lingua);
if ($l == $idioma) {
if (!$primeira_entrada) $primeira_entrada = $lingua;
if ($pais && $c == $pais) return $lingua;
}
}
return $primeira_entrada;
} function carregarIdioma() {
$IDIOMA = array();
$langs = $this->lerDirs('localidades');
foreach ($langs as $lingua) if (file_exists(BASE_DIR.'/localidades/'.$lingua.'/idioma.php')) include BASE_DIR.'/localidades/'.$lingua.'/idioma.php';
$_SESSION['IDIOMAS'] = &$IDIOMA;
return $IDIOMA;
} function _($str, $estados = 0) {
if (is_array($str)) {
$traduzido = array();
foreach ($str as $s) $traduzido[] = $this->__($s, $estados);
return implode(' ', $traduzido);
}
else return $this->__($str, $estados);
} function __($str, $estados = 0) {
$str = trim($str);
if (empty($str)) return '';
$x = $GLOBALS['traduzir'][$str];
$x = $str;
if ($x) $str = $x;
switch ($estados & UI_CAIXA_MASCARA) {
case UI_CAIXA_ALTA:
$str = strtoupper($str);
break;
case UI_CAIXA_BAIXA:
$str = strtolower($str);
break;
case UI_CAIXA_PRIMEIRA_ALTA:
$str = ucwords($str);
break;
}
global $localidade_tipo_caract;
if (!$localidade_tipo_caract) $localidade_tipo_caract = 'iso-8859-1';
switch ($estados & UI_MASCARA_SAIDA) {
case UI_SAIDA_HTML:
$str = htmlentities(stripslashes($str), ENT_COMPAT, $localidade_tipo_caract);
break;
case UI_SAIDA_JS:
$str = addslashes(stripslashes($str));
break;
case UI_SAIDA_CRUA:
$str = stripslashes($str);
break;
}
return $str;
} function salvarPosicao(){
$qnt=0;
$saida='';
foreach($_REQUEST as $chave => $valor) {
if (is_array($valor)){
foreach($valor as $chave1 => $valor1) $saida.=($qnt++ ? '&' : '').$chave.'[]='.$valor1;
}
else $saida.=($qnt++ ? '&' : '').$chave.'='.$valor;
}
$this->estado['POSICAOSALVA']=$saida;
} function resetarPosicao() {
$this->estado['POSICAOSALVA'] = '';
} function getPosicao() {
if (isset($this->estado['POSICAOSALVA'])) return $this->estado['POSICAOSALVA'];
else return '';
} function setChavePrivada($chave) {
return $this->chave_privada=$chave;
} function setChaveCriada($chave) {
return $this->chave_criada=$chave;
} function setChavePublicaId($chave) {
return $this->chave_publica_id=$chave;
} function setSenhaMsg($senha) {
return $this->senha_msg=$senha;
} function redirecionar($toms = '', $hist = '', $caminho='') {
if (!$toms) $toms = !empty($this->estado['POSICAOSALVA'.$hist]) ? $this->estado['POSICAOSALVA'.$hist] : $this->redirecionarPadrao;
echo '<script>url_passar(0, \''.$toms.'\');</script>';
exit();
}
function setMsg($msg, $msgNo = 0, $anexar = false) {
$this->msg = $anexar ? $this->msg.' '.$msg : $msg;
$this->msgNo = $msgNo;
}
function getMsg($reset = true) {
$img = '';
$classe = '';
$msg = $this->msg;
switch ($this->msgNo) {
case UI_MSG_OK:
$img = imagem('icones/ok.png');
$classe = 'mensagem';
break;
case UI_MSG_ALERTA:
$img = imagem('icones/alerta.png');
$classe = 'mensagem';
break;
case UI_MSG_AVISO:
$img = imagem('icones/informacao.gif');
$classe = 'aviso';
break;
case UI_MSG_ERRO:
$img = imagem('icones/cancelar.png');
$classe = 'erro';
break;
default:
$classe = 'mensagem';
break;
}
if ($reset) {
$this->msg = '';
$this->msgNo = 0;
}
return $msg ? '<table cellspacing=0 cellpadding=0><tr><td>'.$img.'</td><td class="'.$classe.'">'.$msg.'</td></tr></table>' : '';
}
function setEstado($legenda, $valor = null) {
//if (isset($valor)) $this->estado[$legenda] = $valor;
$this->estado[$legenda] = $valor;
}
function getEstado($legenda, $valor_padrao = null) {
if (array_key_exists($legenda, $this->estado)) return $this->estado[$legenda];
elseif (isset($valor_padrao)) {
$this->setEstado($legenda, $valor_padrao);
return $valor_padrao;
}
else return null;
}
function login($usuarioNome, $senha) {
global $config;
require_once BASE_DIR.'/classes/autenticacao.class.php';
$metodo_autenticacao = config('metodo_autenticacao', 'sql'); if ($_POST['login'] != 'entrar' && $_POST['login'] != $this->_('entrar', UI_SAIDA_CRUA) && $_REQUEST['login'] != $metodo_autenticacao) die('Você escolheu logar utilizando um método não suportado ou desabilitado.');
$auth = &getauth($metodo_autenticacao);
$usuarioNome = trim(db_escape($usuarioNome));
$senha = trim($senha); //para o programa gaucho usar o webservice em 1o lugar
if ($config['militar']==11 && file_exists(BASE_DIR.'/modulos/sagri/autenticacao.class.php')) {
require_once BASE_DIR.'/modulos/sagri/autenticacao.class.php';
$auth = new PGQPAutenticador();
$conectou=$auth->autenticar($usuarioNome, $senha);
}
$conectou=$auth->autenticar($usuarioNome, $senha); if (!$conectou && $metodo_autenticacao=='sql') {
//tentar LDAP
$auth = &getauth('ldap');
$conectou=$auth->autenticar($usuarioNome, $senha);
}
if (!$conectou && $metodo_autenticacao=='ldap') {
//tentar SQL
$auth = &getauth('sql');
$conectou=$auth->autenticar($usuarioNome, $senha);
} if (!$conectou) return false;
$usuario_id = $auth->usuarioId($usuarioNome);
$usuarioNome = $auth->usuarioNome;
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->esqUnir('contatos', 'contatos', 'contato_id = usuario_contato');
$q->adCampo('usuario_id, contato_posto AS usuario_posto, contato_nomeguerra AS usuario_nomeguerra, concatenar_tres(contato_posto, \' \', contato_nomeguerra) AS usuario_nome, contato_nomecompleto AS usuario_nome_completo, contato_funcao AS usuario_funcao, contato_cia AS usuario_cia, contato_dept AS usuario_dept, usuario_grupo_dept, contato_email AS usuario_email, contato_email2 AS usuario_email2, usuario_admin, usuario_acesso_email, usuario_pode_oculta, usuario_cm, usuario_ativo, usuario_pode_assinar, usuario_pode_protocolar, usuario_pode_outra_cia, usuario_pode_lateral, usuario_pode_superior, usuario_pode_todas_cias, usuario_envia_cia, usuario_recebe_cia, usuario_inserir_demanda, usuario_analisa_demanda, usuario_analisa_viabilidade, usuario_cria_termo_abertura, usuario_aprovar_termo_abertura, usuario_cria_social, usuario_cria_acao , usuario_cria_familia, usuario_cria_comunidade, usuario_cria_comite, usuario_exporta_familia, usuario_importa_familia, usuario_gera_notebook, usuario_importa_notebook, usuario_pode_criar, usuario_pode_aprovar, usuario_pode_editar, usuario_pauta');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$sql = $q->prepare();
$q->carregarObjeto($this);
$q->limpar();
$q->adTabela('usuario_dept');
$q->adCampo('usuario_departamento');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$q->adOnde('usuario_departamento !='.(int)$usuario_id);
$lista=$q->listaVetorChave('usuario_departamento', 'usuario_departamento');
$q->limpar();
if (count($lista)){
$permitido=array();
$this->usuario_tem_lista_dept=true;
$q->adTabela('usuarios');
$q->adCampo('usuario_contas');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$contas=$q->resultado();
$q->limpar();
$contas=explode(',',$contas);
foreach($contas as $linha) if (isset($lista[$linha]) || $linha==$usuario_id) $permitido[]=$linha;
$permitido=implode(',',$permitido);
$this->usuario_lista_dept=$permitido;
}
else {
$this->usuario_tem_lista_dept=false;
$this->usuario_lista_dept='';
} $q->adTabela('usuarios');
$q->adCampo('usuario_login2, usuario_senha2');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$outra_conta=$q->Linha();
$q->limpar();
if ($outra_conta['usuario_login2'] && $outra_conta['usuario_senha2']) $this->conta_conjunta=1;
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$cores=$q->Linha();
$q->limpar();
if (!$cores['cor_msg_nao_lida']){
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id IS NULL');
$cores=$q->Linha();
$q->limpar();
}
$this->cor_msg_nao_lida=($cores['cor_msg_nao_lida']? $cores['cor_msg_nao_lida'] :'fbfbda');
$this->cor_msg_realce=($cores['cor_msg_realce']? $cores['cor_msg_realce'] :'ffffff');
if ($_REQUEST['celular']) $this->celular=1;
$this->carregarPrefs($this->usuario_id);
$this->setUsuarioLocalidade();
$this->checarEstilo();
$this->usuario_super_admin=checarModulo('sistema', 'editar');
if ($this->usuario_super_admin) $this->usuario_admin=1;
$this->profissional=file_exists(BASE_DIR.'/modulos/projetos/tarefa_cache.class_pro.php');
return true;
}
function mudar_conta($usuario_id) {
global $config;
$this->registrarLogout($this->usuario_id);
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->esqUnir('contatos', 'contatos', 'contato_id = usuario_contato');
$q->adCampo('usuario_id, contato_posto AS usuario_posto, contato_nomeguerra AS usuario_nomeguerra, concatenar_tres(contato_posto, \' \', contato_nomeguerra) AS usuario_nome, contato_nomecompleto AS usuario_nome_completo, contato_funcao AS usuario_funcao, contato_cia AS usuario_cia, contato_dept AS usuario_dept, usuario_grupo_dept, contato_email AS usuario_email, contato_email2 AS usuario_email2, usuario_admin, usuario_acesso_email, usuario_pode_oculta, usuario_cm, usuario_ativo, usuario_pode_assinar, usuario_pode_protocolar, usuario_pode_outra_cia, usuario_pode_lateral, usuario_pode_superior, usuario_pode_todas_cias, usuario_envia_cia, usuario_recebe_cia, usuario_inserir_demanda, usuario_analisa_demanda, usuario_analisa_viabilidade, usuario_cria_termo_abertura, usuario_aprovar_termo_abertura, usuario_cria_social, usuario_cria_acao , usuario_cria_familia, usuario_cria_comunidade, usuario_cria_comite, usuario_exporta_familia, usuario_importa_familia, usuario_gera_notebook, usuario_importa_notebook, usuario_pode_criar, usuario_pode_aprovar, usuario_pode_editar, usuario_pauta');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$sql = $q->prepare();
$q->carregarObjeto($this);
$q->limpar();
$q->adTabela('usuario_dept');
$q->adCampo('usuario_departamento');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$q->adOnde('usuario_departamento !='.(int)$usuario_id);
$lista=$q->listaVetorChave('usuario_departamento', 'usuario_departamento');
$q->limpar();
if (count($lista)){
$permitido=array();
$this->usuario_tem_lista_dept=true;
$q->adTabela('usuarios');
$q->adCampo('usuario_contas');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$contas=$q->resultado();
$q->limpar();
$contas=explode(',',$contas);
foreach($contas as $linha) if (isset($lista[$linha]) || $linha==$usuario_id) $permitido[]=$linha;
$permitido=implode(',',$permitido);
$this->usuario_lista_dept=$permitido;
}
else {
$this->usuario_tem_lista_dept=false;
$this->usuario_lista_dept='';
}
$q->adTabela('usuarios');
$q->adCampo('usuario_login2, usuario_senha2');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$outra_conta=$q->Linha();
$q->limpar();
if ($outra_conta['usuario_login2'] && $outra_conta['usuario_senha2']) $this->conta_conjunta=1;
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$cores=$q->Linha();
$q->limpar();
if (!$cores['cor_msg_nao_lida']){
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id =0');
$cores=$q->Linha();
$q->limpar();
}
$this->cor_msg_nao_lida=($cores['cor_msg_nao_lida']? $cores['cor_msg_nao_lida'] :'fbfbda');
$this->cor_msg_realce=($cores['cor_msg_realce']? $cores['cor_msg_realce'] :'ffffff');
$this->carregarPrefs($this->usuario_id);
$this->setUsuarioLocalidade();
$this->checarEstilo();
$this->usuario_super_admin=checarModulo('sistema', 'editar');
if ($this->usuario_super_admin) $this->usuario_admin=1;
return true;
}
function carregar_usuario($usuario_id) {
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->esqUnir('contatos', 'contatos', 'contato_id = usuario_contato');
$q->adCampo('usuario_id, contato_posto AS usuario_posto, contato_nomeguerra AS usuario_nomeguerra, concatenar_tres(contato_posto, \' \', contato_nomeguerra) AS usuario_nome, contato_nomecompleto AS usuario_nome_completo, contato_funcao AS usuario_funcao, contato_cia AS usuario_cia, contato_dept AS usuario_dept, usuario_grupo_dept, contato_email AS usuario_email, contato_email2 AS usuario_email2, usuario_admin, usuario_acesso_email, usuario_pode_oculta, usuario_cm, usuario_ativo, usuario_pode_assinar, usuario_pode_protocolar, usuario_pode_outra_cia, usuario_pode_lateral, usuario_pode_superior, usuario_pode_todas_cias, usuario_envia_cia, usuario_recebe_cia, usuario_inserir_demanda, usuario_analisa_demanda, usuario_analisa_viabilidade, usuario_cria_termo_abertura, usuario_aprovar_termo_abertura, usuario_cria_social, usuario_cria_acao , usuario_cria_familia, usuario_cria_comunidade, usuario_cria_comite, usuario_exporta_familia, usuario_importa_familia, usuario_gera_notebook, usuario_importa_notebook, usuario_pode_criar, usuario_pode_aprovar, usuario_pode_editar, usuario_pauta');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$sql = $q->prepare();
$q->carregarObjeto($this);
$q->limpar();
$q->adTabela('usuario_dept');
$q->adCampo('usuario_departamento');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$q->adOnde('usuario_departamento !='.(int)$usuario_id);
$lista=$q->listaVetorChave('usuario_departamento', 'usuario_departamento');
$q->limpar();
if (count($lista)){
$permitido=array();
$this->usuario_tem_lista_dept=true;
$q->adTabela('usuarios');
$q->adCampo('usuario_contas');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$contas=$q->resultado();
$q->limpar();
$contas=explode(',',$contas);
foreach($contas as $linha) if (isset($lista[$linha]) || $linha==$usuario_id) $permitido[]=$linha;
$permitido=implode(',',$permitido);
$this->usuario_lista_dept=$permitido;
}
else {
$this->usuario_tem_lista_dept=false;
$this->usuario_lista_dept='';
}
$q->adTabela('usuarios');
$q->adCampo('usuario_login2, usuario_senha2');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$outra_conta=$q->Linha();
$q->limpar();
if ($outra_conta['usuario_login2'] && $outra_conta['usuario_senha2']) $this->conta_conjunta=1;
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id ='.(int)$usuario_id);
$cores=$q->Linha();
$q->limpar();
if (!$cores['cor_msg_nao_lida']){
$q->adTabela('preferencia_cor');
$q->adCampo('cor_msg_nao_lida, cor_msg_realce');
$q->adOnde('usuario_id =0');
$cores=$q->Linha();
$q->limpar();
}
$this->cor_msg_nao_lida=($cores['cor_msg_nao_lida']? $cores['cor_msg_nao_lida'] :'fbfbda');
$this->cor_msg_realce=($cores['cor_msg_realce']? $cores['cor_msg_realce'] :'ffffff');
$this->carregarPrefs($this->usuario_id);
$this->checarEstilo();
$this->usuario_super_admin=checarModulo('sistema', 'editar');
if ($this->usuario_super_admin) $this->usuario_admin=1;
return true;
}
function registrarLogin() {
$q = new BDConsulta;
$q->adTabela('usuario_reg_acesso');
$q->adInserir('usuario_id', $this->usuario_id);
$q->adInserir('entrou', 'now()', false, true);
$q->adInserir('usuario_ip', $_SERVER['REMOTE_ADDR']);
$q->exec();
$this->ultimo_id_inserido = db_insert_id('usuario_reg_acesso','usuario_reg_acesso_id');
$q->limpar();
} function registrarLogout($usuario_id) {
$q = new BDConsulta;
$q->adTabela('usuario_reg_acesso');
$q->adAtualizar('saiu', date('Y-m-d H:i:s'));
$q->adOnde('usuario_id = '.(int)$usuario_id.' AND saiu IS NULL');
if ($usuario_id > 0) {
$q->exec();
$q->limpar();
}
}
function atualizarUltimaAcao($ultimo_id_inserido) {
if ($ultimo_id_inserido > 0) {
$q = new BDConsulta;
$q->adTabela('usuario_reg_acesso');
$q->adAtualizar('ultima_atividade', date('Y-m-d H:i:s'));
$q->adOnde('usuario_reg_acesso_id = '.$ultimo_id_inserido);
$q->exec();
$q->limpar();
}
}
function logout() {
}
function fazerLogin() {
return ($this->usuario_id < 0) ? true : false;
}
function getPref($nome) {
return (isset($this->usuario_prefs[$nome]) ? $this->usuario_prefs[$nome] : null);
}
function setPref($nome, $val) {
$this->usuario_prefs[$nome] = $val;
}
function carregarPrefs($uid = 0) {
$q = new BDConsulta;
$q->adTabela('preferencia');
$q->adCampo('preferencia.*');
if ($uid) $q->adOnde('usuario = '.(int)$uid);
else $q->adOnde('usuario IS NULL OR usuario=0');
$prefs = $q->Linha();
$q->limpar();
if (!count($prefs)){
$q->adTabela('preferencia');
$q->adCampo('preferencia.*');
$q->adOnde('usuario IS NULL OR usuario=0');
$prefs = $q->Linha();
$q->limpar();
}
$this->usuario_prefs = array_merge($this->usuario_prefs, (array)$prefs);
}
function getModulosInstalados() {
$q = new BDConsulta;
$q->adTabela('modulos');
$q->adCampo('mod_diretorio, mod_ui_nome');
$q->adOrdem('mod_diretorio');
return ($q->ListaChave());
}
function getModulosAtivos() {
$q = new BDConsulta;
$q->adTabela('modulos');
$q->adCampo('mod_diretorio, mod_ui_nome');
$q->adOnde('mod_ativo = 1');
$q->adOrdem('mod_diretorio');
return ($q->ListaChave());
}
function getMenuModulos() {
$q = new BDConsulta;
$q->adTabela('modulos');
$q->adCampo('mod_diretorio, mod_ui_nome, mod_ui_icone, mod_texto_botao');
$q->adOnde('mod_ativo > 0 AND mod_ui_ativo > 0 AND mod_diretorio !=\'publico\'');
$q->adOnde('mod_tipo != \'utilitario\'');
$q->adOrdem('mod_ui_ordem');
return ($q->Lista());
} function ModuloAtivo($modulo) {
$q = new BDConsulta;
$q->adTabela('modulos');
$q->adCampo('mod_ativo');
$q->adOnde('mod_diretorio = \''.$modulo.'\'');
$resultado = $q->Resultado();
$q->limpar();
return $resultado;
}
function carregarCabecalhoJS() {
global $m, $a, $jquery;
include BASE_DIR.'/js/base.php';
$raiz = BASE_DIR;
if (substr($raiz, -1) != '/') $raiz .= '/';
$base = BASE_URL;
if (substr($base, -1) != '/') $base .= '/';
if ($jquery) echo '<script type="text/javascript" src="'.BASE_URL.'/lib/jquery/jquery-1.8.2.min.js"></script>';
echo '<script type="text/javascript" src="'.$base.'lib/mootools/mootools.js"></script>';
if (!isset($m)) return;
$this->getModuloJS($m, $a, true);
} function getModuloJS($modulo, $arquivo = null, $carregar_todos = false) {
$raiz = BASE_DIR;
if (substr($raiz, -1) != '/') $raiz .= '/';
$base = BASE_URL;
if (substr($base, -1) != '/') $base .= '/';
if ($carregar_todos || !$arquivo) {
if (file_exists($raiz.'modulos/'.$modulo.'/'.$modulo.'.modulo.js')) echo '<script type="text/javascript" src="'.$base.'modulos/'.$modulo.'/'.$modulo.'.modulo.js"></script>';
}
if (isset($arquivo) && file_exists($raiz.'modulos/'.$modulo.'/'.$arquivo.'.js')) echo '<script type="text/javascript" src="'.$base.'modulos/'.$modulo.'/'.$arquivo.'.js"></script>';
} function carregarRodapeJS() {
echo '<script type="text/javascript">window.addEvent(\'domready\', function(){var as = []; $$(\'span\').each(function(span){if (span.getAttribute(\'title\')) as.push(span);});new Tips(as), { }});</script>';
} function carregarCalendario() {
global $Aplic;
echo '<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
echo '<script type="text/javascript" src="'.BASE_URL.'/js/calendario.js"></script>';
echo '<script type="text/javascript" src="'.BASE_URL.'/lib/calendario/src/js/jscal2.js"></script>';
echo '<script type="text/javascript" src="'.BASE_URL.'/lib/calendario/src/js/pt.js"></script>';
include BASE_DIR.'/js/calendario.php';
} function carregarCalendarJS() {
global $Aplic;
echo '<style type="text/css">@import url('.BASE_URL.'/lib/jscalendar/skins/aqua/theme.css);</style>';
echo '<script type="text/javascript" src="'.BASE_URL.'/js/calendar.js"></script>';
echo '<script type="text/javascript" src="'.BASE_URL.'/lib/jscalendar/calendar.js"></script>';
if (file_exists (BASE_DIR.'/lib/jscalendar/lang/calendar-pt.js')) echo '<script type="text/javascript" src="'.BASE_URL.'/lib/jscalendar/lang/calendar-pt.js"></script>';
else echo '<script type="text/javascript" src="'.BASE_URL.'/lib/jscalendar/lang/calendar-en.js"></script>';
echo '<script type="text/javascript" src="'.BASE_URL.'/lib/jscalendar/calendar-setup.js"></script>';
include BASE_DIR.'/js/calendar.php';
}
}
/******************************************************************************************** Classe CCaixaTab_nucleo define o esqueleto do sistema de visualização em abas
********************************************************************************************/
class CCaixaTab_nucleo {
var $tabs = null;
var $ativo = null;
var $baseHRef = null;
var $baseInc;
var $javascript = null;
function CCaixaTab_nucleo($baseHRef = '', $baseInc = '', $ativo = 0, $javascript = null) {
$this->tabs = array();
$this->ativo= $ativo;
$this->baseHRef = ($baseHRef ? $baseHRef.'&' : '?');
$this->javascript = $javascript;
$this->baseInc = $baseInc;
} function getNomeTab($idx) {
if (isset($this->tabs[$idx][1])) return $this->tabs[$idx][1];
else return '';
} function adicionar($arquivo, $titulo, $traduzido = false, $chave = null, $titulo2=null, $texto=null) {
$t = array($arquivo, $titulo, $traduzido, $titulo2, $texto);
if (isset($chave)) $this->tabs[$chave] = $t;
else $this->tabs[] = $t;
} function mostrar($extra = '', $js_tabs = false) {
global $Aplic, $tabAtualId, $tabNomeAtual;
$this->carregarExtras($m, $a);
reset($this->tabs);
$s = '';
$s .= '<table cellpadding=0 cellspacing=0 width="100%"><tr>';
if (!$somente_tab) $s .= '<td nowrap="nowrap">'.dica("Aba", "Visualizar as opções na forma de abas. </P>Método preferêncial caso não deseja rolar a tela do navegador Web.").'<a class="botao" href="'.$this->baseHRef.'tab=0"><span>abas</span></a>'.dicaF().'<a class="botao" href="'.$this->baseHRef.'tab=-1"><span>lista</span></a></td>';
$s .= $extra.'</tr></table>';
echo $s;
$s = '<table width="100%" cellpadding=0 cellspacing=0><tr>';
if (count($this->tabs) - 1 < $this->ativo) $this->ativo= 0;
foreach ($this->tabs as $k => $v) {
$classe = ($k == $this->ativo) ? 'tabativo' : 'tabinativo';
$s .= '<td width="1%" nowrap="nowrap" class="tabsp"><img src="./estilo/rondon/imagens/shim.gif" height="1" width="1" alt="" /></td>';
$s .= '<td id="tab_s_'.$k.'" width="1%" nowrap="nowrap"';
if ($js_tabs) $s .= ' class="'.$classe.'"';
$s .= '><a href="';
if ($this->javascript) $s .= 'javascript:'.$this->javascript.'('.$this->ativo. ', '.$k.')';
elseif ($js_tabs) $s .= 'javascript:mostrar_tab('.$k.')';
else $s .= $this->baseHRef."tab=$k";
$s .= '">'.$v[1].'</a></td>';
}
$s .= '<td nowrap="nowrap" class="tabsp"> </td></tr>';
$s .= '<tr><td width="100%" colspan="'.(count($this->tabs) * 2 + 1).'" class="tabox">';
echo $s;
if ($this->baseInc.$this->tabs[$this->ativo][0] != '') {
$tabAtualId = $this->ativo;
$tabNomeAtual = $this->tabs[$this->ativo][1];
if (!$js_tabs) require $this->baseInc .$this->tabs[$this->ativo][0].'.php';
}
if ($js_tabs) {
foreach ($this->tabs as $k => $v) {
echo '<div class="tab" id="tab_'.$k.'">';
require $this->baseInc.$v[0].'.php';
echo '</div>';
}
}
echo '</td></tr></table>'; } function carregarExtras($modulo, $arquivo = null) {
global $Aplic;
if (!isset($_SESSION['todas_tabs']) || !isset($_SESSION['todas_tabs'][$modulo])) return false;
if ($arquivo) {
if (isset($_SESSION['todas_tabs'][$modulo][$arquivo]) && is_array($_SESSION['todas_tabs'][$modulo][$arquivo])) $vetor_tab = &$_SESSION['todas_tabs'][$modulo][$arquivo];
else return false;
}
else $vetor_tab = &$_SESSION['todas_tabs'][$modulo];
$tab_contagem = 0;
foreach ($vetor_tab as $elem_tab) {
if (isset($elem_tab['modulo']) && $Aplic->ModuloAtivo($elem_tab['modulo'])) {
$tab_contagem++;
$this->adicionar($elem_tab['arquivo'], $elem_tab['nome']);
}
}
return $tab_contagem;
} function acharTabModulo($tab) {
global $Aplic, $m, $a;
if (!isset($_SESSION['todas_tabs']) || !isset($_SESSION['todas_tabs'][$m])) return false;
if (isset($a)) {
if (isset($_SESSION['todas_tabs'][$m][$a]) && is_array($_SESSION['todas_tabs'][$m][$a])) $vetor_tab = &$_SESSION['todas_tabs'][$m][$a];
else $vetor_tab = &$_SESSION['todas_tabs'][$m];
}
else $vetor_tab = &$_SESSION['todas_tabs'][$m];
list($arquivo, $nome) = $this->tabs[$tab];
foreach ($vetor_tab as $elem_tab) {
if (isset($elem_tab['nome']) && $elem_tab['nome'] == $nome && $elem_tab['arquivo'] == $arquivo) return $elem_tab['modulo'];
}
return false;
}
}
/******************************************************************************************** Classe CBlocoTitulo_core define o esqueleto do sistema de botões do título de cada página
********************************************************************************************/
class CBlocoTitulo_core {
var $titulo = '';
var $icone = '';
var $modulo = '';
var $celulas = null;
var $ajudaref = ''; function CBlocoTitulo_core($titulo, $icone = '', $modulo = '', $ajudaref = '') {
$this->titulo = $titulo;
$this->icon = $icone;
$this->modulo = $modulo;
$this->ajudaref = $ajudaref;
$this->celulas1 = array();
$this->celulas2 = array();
$this->blocos = array();
$this->mostrarajuda = checarModulo('ajuda', 'acesso');
} function adicionaBotaoCelula($href='', $clicando='', $legenda, $icone = '', $titulo = '', $texto='', $prefixo = '', $sufixo = '') {
$data='<table cellspacing=0 cellpadding=0><tr><td>'. dica($titulo, $texto). '<a class="botao" href="'.($href ? $href : 'javascript: void(0);').'" '.($clicando ? ' onclick="javascript:'.$clicando.'" ':'').'><span>'.($icone ? imagem($icone):'').str_ireplace(' ',' ', $legenda).'</span></a>'.dicaF().'</td></tr></table>';
$this->celulas1[] = array('', $data, $prefixo, $sufixo);
}
function adicionaCelula($data = '', $atributos = '', $prefixo = '', $sufixo = '') {
$this->celulas1[] = array($atributos, $data, $prefixo, $sufixo);
} function adicionaBotao($link, $legenda, $icone = '', $titulo = '', $texto = '', $javascript='') {
$this->blocos[] = array($legenda, $icone, $titulo, $texto, $javascript, $link);
} function adicionaBotaoDireita($data = '', $atributos = '', $prefixo = '', $sufixo = '') {
$this->celulas2[] = array($atributos, $data, $prefixo, $sufixo);
} function adicionaBotaoExcluir($nome, $podeExcluir = '', $msg = '', $titulo='', $texto='') {
global $Aplic;
$this->adicionaBotaoDireita('<table cellspacing=0 cellpadding=0><tr><td nowrap="nowrap">'.dica($titulo, $texto).'<a class="excluir" href="javascript:excluir()" ><span>'.$nome.'</span></a>'.dicaF().'</td></tr></table>');
}
function mostrar() {
global $Aplic, $a, $m, $tab, $infotab;
$estilo_ui = 'rondon';
$s = '<table width="100%" cellpadding=0 cellspacing=0><tr>';
if ($this->icon && !$Aplic->celular) $s .= '<td width="42">'.imagem($this->icon).'</td>';
$s .= '<td align="left" width="100%" nowrap="nowrap"><h1>'.$this->titulo.'</h1></td>';
foreach ($this->celulas1 as $c) {
$s .= ($c[2] ? $c[2] : '');
$s .= '<td align="right" nowrap="nowrap"'.($c[0] ? (' '.$c[0]) : '').'>';
$s .= ($c[1] ? $c[1] : ' ');
$s .= '</td>';
$s .= ($c[3] ? $c[3] : '');
}
$s .= '</tr></table>';
if (count($this->blocos) || count($this->celulas2)) {
$blocos = array();
$s .= '<table cellpadding=0 cellspacing=0 width="100%"><tr><td height="20" nowrap="nowrap"><table><tr>';
foreach ($this->blocos as $v) {
$t = $v[1] ? '<img src="'.acharImagem($v[1], $this->modulo).'" border="" alt="" /> ' : '';
$t .= $v[0];
if ($v[5]) $s .= '<td>'.dica($v[2], $v[3]).'<a class="botao" href="javascript:void(0);" onclick="url_passar(0, \''.$v[5].'\');"><span>'.$t.'</span></a>'.dicaF().'</td>';
else $s .= '<td>'.dica($v[2], $v[3]).'<a class="botao" href="javascript:void(0);" onclick="'.$v[4].'"><span>'.$t.'</span></a>'.dicaF().'</td>';
}
$s .= '</tr></table></td>';
foreach ($this->celulas2 as $c) {
$s .= $c[2] ? $c[2] : '';
$s .= '<td align="right" nowrap="nowrap" '.($c[0] ? ' '.$c[0] : '').'>';
$s .= $c[1] ? $c[1] : ' ';
$s .= '</td>';
$s .= $c[3] ? $c[3] : '';
}
$s .= '</tr></table>';
}
echo $s;
} }
?> ************************************************************* AGUARDO COMENTÁRIOS
global $bd, $Aplic;
$this->usuarioNome = $usuarioNome;
$q = new BDConsulta;
$q->adTabela('usuarios');
$q->adCampo('usuario_id, usuario_senha, usuario_ativo');
$q->adOnde('usuario_login = \''.$usuarioNome.'\'');
$linha = $q->linha();
$q->limpar();
if (!$linha) return false;
if (!isset($linha['usuario_senha']) || !isset($linha['usuario_ativo'])) return false;
$this->usuario_id = $linha['usuario_id'];
if (MD5($senha) == $linha['usuario_senha'] && $linha['usuario_ativo']) return true;
return false;
} Não conseguimos achar uma possibilidade de retorno verdadeiro (true) com a senha incorreta. Recomendo solicitar a um programador em PHP dos senhores nos repassar uma sugestão do motivo deste comportamento.