Skip to content

Commit

Permalink
Refat Adição da página para leitura do QRCode
Browse files Browse the repository at this point in the history
O sistema apresentava a mensagem no log "Erro configurando atributo QRCODE_MdWsSeiRest_0_0_2.1.1 na cache."
Ref.: pengovbr#15
A apresentação do QR Code foi movida para a tela de Leitura do QR Code para resolver o erro no armazenamento em cache e principalmente simplificar a renderização do menu lateral
  • Loading branch information
heversonvasconcelos committed Jun 6, 2023
1 parent c459703 commit 78f0298
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 75 deletions.
134 changes: 59 additions & 75 deletions src/MdWsSeiRest.php
Original file line number Diff line number Diff line change
Expand Up @@ -247,11 +247,14 @@ public function montarBotaoControleAcessoExterno()

public function processarControlador($strAcao)
{
switch($strAcao){
switch ($strAcao) {
case 'md_wssei_editor_externo_montar':
case 'md_wssei_editor_externo_imagem_upload':
require_once dirname(__FILE__) . '/md_wssei_editor_externo.php';
return true;
case 'md_wssei_qrcode':
require_once dirname(__FILE__) . '/md_wssei_qrcode.php';
return true;
}
return false;
}
Expand Down Expand Up @@ -286,87 +289,68 @@ public function montarMensagemProcesso(ProcedimentoAPI $objProcedimentoAPI)
return null;
}

public function adicionarElementoMenu()
private static function getNomeArquivoQRCode()
{
try{
$nomeArquivo = 'QRCODE_'
. self::NOME_MODULO
. "_"
. SessaoSEI::getInstance()->getNumIdOrgaoUsuario()
. "_"
. 0 //SessaoSEI::getInstance()->getNumIdContextoUsuario()
. "_"
. $this->getVersao();
$html = CacheSEI::getInstance()->getAtributo($nomeArquivo);

if ($html) {
return $html;
$nomeArquivoQRCode = 'QRCODE_'
. self::NOME_MODULO
. "_"
. SessaoSEI::getInstance()->getNumIdOrgaoUsuario()
. "_"
. 0 //SessaoSEI::getInstance()->getNumIdContextoUsuario()
. "_"
. self::VERSAO_MODULO;

return $nomeArquivoQRCode;
}

public static function getQRCodeBase64Img()
{
try {

$nomeArquivo = self::getNomeArquivoQRCode();
$binQrCode = CacheSEI::getInstance()->getAtributo($nomeArquivo);

if ($binQrCode) {
return base64_encode($binQrCode);
}

$html = $this->montaCorpoHTMLQRCode($nomeArquivo);
CacheSEI::getInstance()->setAtributo($nomeArquivo, $html, CacheSEI::getInstance()->getNumTempo());
}
catch(Exception $e){
LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
throw $e;
}
$caminhoAtual = explode("/sei/web", __DIR__);
$urlSEI = ConfiguracaoSEI::getInstance()->getValor('SEI', 'URL')
. $caminhoAtual[1]
. '/controlador_ws.php/api/v2';
$conteudoQrCode = 'url: ' . $urlSEI
. ';'
. 'siglaorgao: ' . SessaoSEI::getInstance()->getStrSiglaOrgaoUsuario()
. ';'
. 'orgao: ' . SessaoSEI::getInstance()->getNumIdOrgaoUsuario()
. ';'
. 'contexto: ' . 0; //SessaoSEI::getInstance()->getNumIdContextoUsuario();

return $html;
}

/**
* Função que monta o html do QRCode para o menu lateral do SEI
* @param $nomeArquivo
* @return string
*/
private function montaCorpoHTMLQRCode($nomeArquivo)
{
$htmlQrCode = '';
$caminhoAtual = explode("/sei/web", __DIR__);
$urlSEI = ConfiguracaoSEI::getInstance()->getValor('SEI', 'URL')
. $caminhoAtual[1]
. '/controlador_ws.php/api/v2';
$conteudoQrCode = 'url: ' . $urlSEI
. ';'
. 'siglaorgao: ' . SessaoSEI::getInstance()->getStrSiglaOrgaoUsuario()
. ';'
. 'orgao: ' . SessaoSEI::getInstance()->getNumIdOrgaoUsuario()
. ';'
. 'contexto: ' . 0;//SessaoSEI::getInstance()->getNumIdContextoUsuario();
$caminhoFisicoQrCode = DIR_SEI_TEMP . '/' . $nomeArquivo;

InfraQRCode::gerar($conteudoQrCode, $caminhoFisicoQrCode, 'L', 2, 1);

$infraException = new InfraException();
if (!file_exists($caminhoFisicoQrCode)) {
$infraException->lancarValidacao('Arquivo do QRCode não encontrado.');
}
if (filesize($caminhoFisicoQrCode) == 0) {
$infraException->lancarValidacao('Arquivo do QRCode vazio.');
}
if (($binQrCode = file_get_contents($caminhoFisicoQrCode)) === false) {
$infraException->lancarValidacao('Não foi possível ler o arquivo do QRCode.');
$caminhoFisicoQrCode = DIR_SEI_TEMP . '/' . $nomeArquivo;

InfraQRCode::gerar($conteudoQrCode, $caminhoFisicoQrCode, 'L', 4, 2);

$infraException = new InfraException();
if (!file_exists($caminhoFisicoQrCode)) {
$infraException->lancarValidacao('Arquivo do QRCode não encontrado.');
}
if (filesize($caminhoFisicoQrCode) == 0) {
$infraException->lancarValidacao('Arquivo do QRCode vazio.');
}
if (($binQrCode = file_get_contents($caminhoFisicoQrCode)) === false) {
$infraException->lancarValidacao('Não foi possível ler o arquivo do QRCode.');
}

CacheSEI::getInstance()->setAtributo($nomeArquivo, $binQrCode, CacheSEI::getInstance()->getNumTempo());

} catch (Exception $e) {
LogSEI::getInstance()->gravar(InfraException::inspecionar($e));
throw $e;
}
$htmlQrCode .= '<script>document.querySelector("div.infraSidebarMenu").style.overflowY = "visible";</script>';
$htmlQrCode .= '<div style="font-size: 12px; text-align: center; background-color: #f5f6f7">';
$htmlQrCode .= '<div style="height: 12px; margin-bottom: 22px; background-color: var(--color-primary-default);"></div>';
// $htmlQrCode .= '<p style="text-align: left; margin: 5px;">';
// $htmlQrCode .= '<strong style="font-weight: bolder">';
// $htmlQrCode .= 'Acesse as lojas App Store ou Google Play e instale o aplicativo do SEI! no seu celular.';
// $htmlQrCode .= '</strong>';
// $htmlQrCode .= '</p>';
$htmlQrCode .= '<p style="text-align: left; margin: 15px 5px 5px 5px;">';
$htmlQrCode .= '<strong style="font-weight: bolder">';
$htmlQrCode .= 'Abra o aplicativo do SEI! e faça a leitura do código abaixo para sincronizá-lo com sua conta.';
$htmlQrCode .= '</strong>';
$htmlQrCode .= '</p>';
$htmlQrCode .= '<img style="margin: 20px auto 6px;" align="center" src="data:image/png;base64, '
. base64_encode($binQrCode) . '" />';
$htmlQrCode .= '</div>';

return $htmlQrCode;
}

return base64_encode($binQrCode);
}

/**
* Gera Identificador único do usuário logado
Expand Down
68 changes: 68 additions & 0 deletions src/md_wssei_qrcode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<?php

try {
require_once dirname(__FILE__) . '/../../SEI.php';

session_start();


//////////////////////////////////////////////////////////////////////////////
// InfraDebug::getInstance()->setBolLigado(false);
// InfraDebug::getInstance()->setBolDebugInfra(true);
// InfraDebug::getInstance()->limpar();
//////////////////////////////////////////////////////////////////////////////

SessaoSEI::getInstance()->validarLink();

SessaoSEI::getInstance()->validarPermissao($_GET['acao']);

switch ($_GET['acao']) {
case 'md_wssei_qrcode':
$strTitulo = 'Leitura do QR Code';
$arrComandos[] = '<button type="button" accesskey="V" name="btnVoltar" id="btnVoltar" value="Voltar" onclick="location.href=\'' . SessaoSEI::getInstance()->assinarLink('controlador.php?acao=' . PaginaSEI::getInstance()->getAcaoRetorno() . '&acao_origem=' . $_GET['acao']) . PaginaSEI::getInstance()->montarAncora($strAncora) . '\';" class="infraButton"><span class="infraTeclaAtalho">V</span>oltar</button>';
break;

default:
throw new InfraException("Ação '" . $_GET['acao'] . "' não reconhecida.");
}



} catch (Exception $e) {
PaginaSEI::getInstance()->processarExcecao($e);
}

PaginaSEI::getInstance()->montarDocType();
PaginaSEI::getInstance()->abrirHtml();
PaginaSEI::getInstance()->abrirHead();
PaginaSEI::getInstance()->montarMeta();
PaginaSEI::getInstance()->montarTitle(PaginaSEI::getInstance()->getStrNomeSistema() . ' - ' . $strTitulo);
PaginaSEI::getInstance()->montarStyle();
PaginaSEI::getInstance()->abrirStyle();
PaginaSEI::getInstance()->fecharStyle();
PaginaSEI::getInstance()->montarJavaScript();
PaginaSEI::getInstance()->abrirJavaScript();
PaginaSEI::getInstance()->fecharJavaScript();
PaginaSEI::getInstance()->fecharHead();
PaginaSEI::getInstance()->abrirBody($strTitulo);
PaginaSEI::getInstance()->montarBarraComandosSuperior($arrComandos);
?>
<div style="font-size: 12px; text-align: center;">
<div style="height: 12px; margin-bottom: 22px; background-color: var(--color-primary-default);"></div>
<!-- <p style="text-align: left; margin: 5px;">
<strong style="font-weight: bolder">
Acesse as lojas App Store ou Google Play e instale o aplicativo do SEI! no seu celular.
</strong>
</p> -->
<p style="text-align: left; margin: 15px 5px 5px 5px;">
<strong style="font-weight: bolder">
Abra o aplicativo do SEI! e faça a leitura do código abaixo para sincronizá-lo com sua conta.
</strong>
</p>
<img style="margin: 40px auto 9px;" text-align="center" src="data:image/png;base64, <?= MdWsSeiRest::getQRCodeBase64Img() ?>" />
</div>
<?
PaginaSEI::getInstance()->fecharBody();
PaginaSEI::getInstance()->fecharHtml();

?>

0 comments on commit 78f0298

Please sign in to comment.