(refatoracaoa): para adicionar funcao nova depois... oata tratamento de novo prefixo. também foi retirado a funcao de qrcode para salvar acesso no banco de dados e agora se usa o plausible analytics
This commit is contained in:
parent
68bac753fd
commit
16d3335ef2
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
.env
|
.env
|
||||||
|
pasta_publica/analytics/*
|
||||||
|
pasta_publica/!analytics/README.md
|
||||||
8
pasta_publica/LogicaPrefixos/processarPrefixo_M.php
Normal file
8
pasta_publica/LogicaPrefixos/processarPrefixo_M.php
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function processarPrefixo_M($NAAN, $ark_sem_NAAN, $tem_interrogacao, $resto) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
59
pasta_publica/LogicaPrefixos/processarPrefixo_eM.php
Normal file
59
pasta_publica/LogicaPrefixos/processarPrefixo_eM.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function processarPrefixo_eM($NAAN, $ark_sem_NAAN, $tem_interrogacao, $resto) {
|
||||||
|
|
||||||
|
$pasta_json = "json"; //Substitua pelo nome que vc escolheu para colocar os metadados ARK em JSON
|
||||||
|
$site_base = "https://ark.livro.online/"; //Coloque o endereço do local em que estes arquivos estão hospedados
|
||||||
|
|
||||||
|
$ark_formatado = "ark:".$NAAN.$ark_sem_NAAN;
|
||||||
|
|
||||||
|
//Substituindo para o padrao que é encontrado dentro da $pasta_json
|
||||||
|
$nome_arquivo_ark = str_replace(":", "_dp_", $ark_formatado);
|
||||||
|
$nome_arquivo_ark = str_replace("/", "_b_", $nome_arquivo_ark);
|
||||||
|
$nome_arquivo_ark = str_replace(".", "_p_", $nome_arquivo_ark);
|
||||||
|
|
||||||
|
$nome_arquivo_ark.= ".json";
|
||||||
|
|
||||||
|
$caminho_arquivo_ark = $pasta_json."/".$nome_arquivo_ark;
|
||||||
|
|
||||||
|
|
||||||
|
if(file_exists($caminho_arquivo_ark)){
|
||||||
|
|
||||||
|
$arquivo_ark = file_get_contents($caminho_arquivo_ark);
|
||||||
|
|
||||||
|
$metadados = json_decode($arquivo_ark, true);
|
||||||
|
|
||||||
|
// Verifique se a decodificação foi bem-sucedida
|
||||||
|
if ($metadados !== null) {
|
||||||
|
|
||||||
|
// Acesse o valor da chave 'apontamento'
|
||||||
|
$apontamento = $metadados['apontamento'] ?? '';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return ['ok' => true, 'destino' => '', 'msg' => 'Erro ao decodificar o JSON no arquivo com os metadados do '.$ark_formatado.'. Informe o problema ao responsável.'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($tem_interrogacao){
|
||||||
|
|
||||||
|
return ['ok' => true, 'destino' => $site_base.$caminho_arquivo_ark, 'msg' => $ark_formatado.' encontrado. Direcionando para os metadados...'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($apontamento){
|
||||||
|
|
||||||
|
return ['ok' => true, 'destino' => $apontamento.$resto, 'msg' => $ark_formatado.' encontrado. Direcionando...'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['ok' => true, 'destino' => $site_base.$caminho_arquivo_ark, 'msg' => $ark_formatado.' encontrado. Mas sem um apontamento configurado. Direcionando para os metadados...'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['ok' => false, 'destino' => '', 'msg' => $ark_formatado.' nao encontrado.'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@ -1,32 +1,23 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
ini_set('display_errors', 0); // Desabilita a exibição de erros na tela
|
ini_set('display_errors', 0); // Desabilita a exibição de erros na tela
|
||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
ini_set('log_errors', 1);
|
ini_set('log_errors', 1);
|
||||||
ini_set('error_log', 'erro_log.txt');
|
ini_set('error_log', 'erro_log.txt');
|
||||||
|
|
||||||
require 'funcaoQRCode.php';
|
|
||||||
|
|
||||||
|
|
||||||
// Inclua o arquivo com a função registrarAcessoQrCode
|
|
||||||
//include 'funcaoQRCode.php'; //Se você não usar nenhum tratamento para quando os seus ARK forem acessados por leitura de um qr code, retire essa importação e todas as chamadas da função registrarAcessoQrCode.
|
|
||||||
|
|
||||||
function reduzirArk($tamanho, $pedacos) {
|
function reduzirArk($tamanho, $pedacos) {
|
||||||
|
|
||||||
$ark_sem_NAAN = "";
|
$ark_sem_NAAN = "";
|
||||||
|
|
||||||
$NAAN = $pedacos[0];
|
|
||||||
|
|
||||||
for($i=1; $i < $tamanho; $i++){ //Começa em 1 porque o primeiro pedaço é o NAAN
|
for($i=1; $i < $tamanho; $i++){ //Começa em 1 porque o primeiro pedaço é o NAAN
|
||||||
|
|
||||||
$ark_sem_NAAN.= "/".$pedacos[$i];
|
$ark_sem_NAAN.= "/".$pedacos[$i];
|
||||||
|
|
||||||
}//Fecha for
|
}//Fecha for
|
||||||
|
|
||||||
$arr = [$NAAN, $ark_sem_NAAN];
|
return $ark_sem_NAAN;
|
||||||
|
|
||||||
return $arr;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,12 +34,10 @@ function limpar_ark($str){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function direcionar_ark() {
|
|
||||||
|
|
||||||
$pasta_json = "json"; //Substitua pelo nome que vc escolheu para colocar os metadados ARK em JSON
|
|
||||||
|
|
||||||
$site_base = "https://ark.livro.online/"; //Coloque o endereço do local em que estes arquivos estão hospedados
|
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
|
||||||
if(isset($_GET["ark"])){
|
if(isset($_GET["ark"])){
|
||||||
|
|
||||||
@ -58,9 +47,7 @@ function direcionar_ark() {
|
|||||||
|
|
||||||
$ark = "";
|
$ark = "";
|
||||||
|
|
||||||
echo "<h1 style='text-align: center;'>Mensagem ARK</h1><p>Nenhum ARK foi passado para que fosse feita uma busca.</p>";
|
return ['ok'=>false,'destino'=>'','msg'=>'Nenhum ARK foi passado...','qrark'=> false,'ark'=>''];
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,6 +59,8 @@ function direcionar_ark() {
|
|||||||
//Eliminando espaços em branco no início e no final do $ark
|
//Eliminando espaços em branco no início e no final do $ark
|
||||||
$ark = trim($ark);
|
$ark = trim($ark);
|
||||||
|
|
||||||
|
$qrark = (isset($_GET['qrark']) && $_GET['qrark'] == '1') ? true : false;
|
||||||
|
|
||||||
// Verifique se $ark começa com uma barra. Pois, em vez de terem digitado ark:68745/eM485/B6, por exemplo, podem ter digitado ark:/68745/eM485/B6, o que seria passado para o parâmetro ark com uma barra no início
|
// Verifique se $ark começa com uma barra. Pois, em vez de terem digitado ark:68745/eM485/B6, por exemplo, podem ter digitado ark:/68745/eM485/B6, o que seria passado para o parâmetro ark com uma barra no início
|
||||||
if (strpos($ark, '/') === 0) {
|
if (strpos($ark, '/') === 0) {
|
||||||
|
|
||||||
@ -81,12 +70,55 @@ function direcionar_ark() {
|
|||||||
|
|
||||||
$pedacos = explode("/", $ark);
|
$pedacos = explode("/", $ark);
|
||||||
|
|
||||||
|
$NAAN = $pedacos[0]; //NAAN é o número de registro da Editora Moan na Ark Alliance
|
||||||
|
|
||||||
|
$ark_sem_NAAN = reduzirArk(count($pedacos), $pedacos);
|
||||||
|
|
||||||
|
$ark_completo_sem_NAAN = $ark_sem_NAAN;
|
||||||
|
|
||||||
|
$ark_completo_sem_NAAN = ltrim($ark_completo_sem_NAAN, '/');
|
||||||
|
|
||||||
|
if ($ark === '') {
|
||||||
|
return ['ok'=>false,'destino'=>'','msg'=>'ARK vazio.','qrark'=>$qrark,'ark'=>''];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------- PREFIXOS ARK --------------------------
|
||||||
|
$prefixo_editora = "eM";
|
||||||
|
|
||||||
|
$prefixo_museu_da_matematica = "M";
|
||||||
|
|
||||||
|
$buscar_ark = null;
|
||||||
|
|
||||||
|
if (str_starts_with($ark_completo_sem_NAAN, $prefixo_editora)) {
|
||||||
|
// Prefixo eM
|
||||||
|
require __DIR__ . '/LogicaPrefixo/processarPrefixo_eM.php';
|
||||||
|
$buscar_ark = 'processarPrefixo_eM';
|
||||||
|
|
||||||
|
} elseif (str_starts_with($ark_completo_sem_NAAN, $prefixo_museu_da_matematica)) {
|
||||||
|
// Prefixo M
|
||||||
|
require __DIR__ . '/LogicaPrefixo/processarPrefixo_M.php';
|
||||||
|
$buscar_ark = 'processarPrefixo_M';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Nenhum dos dois
|
||||||
|
|
||||||
|
}
|
||||||
|
//-------------------------- FIM PREFIXOS ARK --------------------------
|
||||||
|
|
||||||
|
if (!is_callable($buscar_ark)) {
|
||||||
|
return ['ok'=>false,'destino'=>'','msg'=>'Prefixo ARK desconhecido.','qrark'=>$qrark,'ark'=>$ark_completo_sem_NAAN];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$index = 0;
|
$index = 0;
|
||||||
|
|
||||||
$tamanho_inicial = count($pedacos); //Na verdade o tamanho de $pedacos é fixo. Mais abaixo o valor do tamanho só muda porque precisamos reduzir até encontrar o ark registrado, mas o tamanho real de $pedacos continua o mesmo
|
$tamanho_inicial = count($pedacos); //Na verdade o tamanho de $pedacos é fixo. Mais abaixo o valor do tamanho só muda porque precisamos reduzir até encontrar o ark registrado, mas o tamanho real de $pedacos continua o mesmo
|
||||||
|
|
||||||
$identificador_ark = false;
|
$identificador_ark = false;
|
||||||
|
|
||||||
|
$resultado = ['ok'=>false,'destino'=>'','msg'=>'ARK não encontrado.Erro não identificado.','qrark'=>$qrark,'ark'=>$ark_completo_sem_NAAN];
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
$resto = "";
|
$resto = "";
|
||||||
@ -107,11 +139,7 @@ function direcionar_ark() {
|
|||||||
}//Fecha if
|
}//Fecha if
|
||||||
|
|
||||||
|
|
||||||
$resp = reduzirArk($tamanho, $pedacos);
|
$ark_sem_NAAN = reduzirArk($tamanho, $pedacos);
|
||||||
|
|
||||||
$NAAN = $resp[0]; //NAAN é o número de registro da Editora Moan na Ark Alliance
|
|
||||||
|
|
||||||
$ark_sem_NAAN = $resp[1];
|
|
||||||
|
|
||||||
if($ark_sem_NAAN == ""){
|
if($ark_sem_NAAN == ""){
|
||||||
break;
|
break;
|
||||||
@ -141,85 +169,97 @@ function direcionar_ark() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
$ark_formatado = "ark:".$NAAN.$ark_sem_NAAN;
|
$resultado = $buscar_ark($NAAN, $ark_sem_NAAN, $tem_interrogacao, $resto);
|
||||||
|
|
||||||
//Substituindo para o padrao que é encontrado dentro da $pasta_json
|
$identificador_ark = $resultado["ok"];
|
||||||
$nome_arquivo_ark = str_replace(":", "_dp_", $ark_formatado);
|
|
||||||
$nome_arquivo_ark = str_replace("/", "_b_", $nome_arquivo_ark);
|
|
||||||
$nome_arquivo_ark = str_replace(".", "_p_", $nome_arquivo_ark);
|
|
||||||
|
|
||||||
$nome_arquivo_ark.= ".json";
|
|
||||||
|
|
||||||
$caminho_arquivo_ark = $pasta_json."/".$nome_arquivo_ark;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(file_exists($caminho_arquivo_ark)){
|
|
||||||
|
|
||||||
$arquivo_ark = file_get_contents($caminho_arquivo_ark);
|
|
||||||
|
|
||||||
$metadados = json_decode($arquivo_ark, true);
|
|
||||||
|
|
||||||
// Verifique se a decodificação foi bem-sucedida
|
|
||||||
if ($metadados !== null) {
|
|
||||||
|
|
||||||
// Acesse o valor da chave 'apontamento'
|
|
||||||
$apontamento = $metadados['apontamento'];
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
echo "Erro ao decodificar o JSON no arquivo com os metadados do ARK. Informe o problema ao responsável.";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if($tem_interrogacao){
|
|
||||||
|
|
||||||
registrarAcessoQrCode( $ark, "Consulta com interrogação, ou seja, buscando metadados.");
|
|
||||||
|
|
||||||
header('Location:'.$site_base.$caminho_arquivo_ark);
|
|
||||||
die();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($apontamento){
|
|
||||||
|
|
||||||
$link_completo = $apontamento.$resto;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
registrarAcessoQrCode($ark, "Não possui um apontamento, logo, foi redirecionado para os metadados.");
|
|
||||||
|
|
||||||
header('Location:'.$site_base.$caminho_arquivo_ark);
|
|
||||||
die();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$tem_interrogacao){
|
|
||||||
|
|
||||||
registrarAcessoQrCode($ark, $link_completo);
|
|
||||||
|
|
||||||
header('Location: '.$link_completo);
|
|
||||||
die();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$identificador_ark = true; //Pois o ARK foi encontrado
|
|
||||||
|
|
||||||
}// Fecha if($identificador_ark)
|
|
||||||
|
|
||||||
$index++;
|
$index++;
|
||||||
|
|
||||||
} while ($tamanho > 1 && !$identificador_ark);
|
} while ($tamanho > 1 && !$identificador_ark);
|
||||||
|
|
||||||
|
$resultado['qrark'] = $qrark;
|
||||||
|
$resultado['ark'] = $ark_completo_sem_NAAN;
|
||||||
|
|
||||||
echo "<h1>ark:$ark</h1> <p>Documento não encontrado.</p>";
|
return $resultado;
|
||||||
|
|
||||||
}//Fecha a funcao direcionar_ark
|
}//Fecha a funcao init
|
||||||
|
|
||||||
direcionar_ark();
|
$conteudo = init();
|
||||||
|
|
||||||
|
$ok = $conteudo["ok"];
|
||||||
|
|
||||||
|
$destino = $conteudo["destino"];
|
||||||
|
|
||||||
|
$msg = $conteudo["msg"];
|
||||||
|
|
||||||
|
$ark = $conteudo["ark"];
|
||||||
|
|
||||||
|
$qrark = $conteudo["qrark"];
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="pt-br">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<title><?= $ok ? "Redirecionando…" : "ARK não encontrado" ?></title>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
html,body{margin:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-family:system-ui,sans-serif;background:#fff}
|
||||||
|
.spinner{width:52px;height:52px;border:5px solid #ddd;border-top-color:#555;border-radius:50%;animation:spin 1s linear infinite}
|
||||||
|
@keyframes spin{to{transform:rotate(360deg)}}
|
||||||
|
.msg{max-width:420px;text-align:center;padding:24px}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Injeta o snippet do plausible (arquivo ignorado no git)
|
||||||
|
@include __DIR__ . '/analytics/plausible.php';
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<?php if ($ok): ?>
|
||||||
|
<meta http-equiv="refresh" content="0;url=<?= htmlspecialchars($destino, ENT_QUOTES, 'UTF-8') ?>">
|
||||||
|
<?php endif; ?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="spinner" id="spinner" aria-label="Carregando"></div>
|
||||||
|
|
||||||
|
<div class="msg" id="msgBox" style="display:none">
|
||||||
|
|
||||||
|
<h1 id="msgTitle">Redirecionando...</h1>
|
||||||
|
<p id="msgText"></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Passando PHP -> JS (seguro)
|
||||||
|
const ok = <?= json_encode($ok) ?>;
|
||||||
|
const destino = <?= json_encode($destino) ?>;
|
||||||
|
const msg = <?= json_encode($msg) ?>;
|
||||||
|
const ark = <?= json_encode($ark) ?>;
|
||||||
|
const qrark = <?= json_encode($qrark) ?>;
|
||||||
|
|
||||||
|
const spinner = document.getElementById('spinner');
|
||||||
|
const msgBox = document.getElementById('msgBox');
|
||||||
|
const msgTitle = document.getElementById('msgTitle');
|
||||||
|
const msgText = document.getElementById('msgText');
|
||||||
|
|
||||||
|
if (ok) {
|
||||||
|
if (typeof plausible === "function") {
|
||||||
|
plausible("ARK Resolve", { props: { ark, qrark } });
|
||||||
|
}
|
||||||
|
setTimeout(() => location.replace(destino), 120);
|
||||||
|
} else {
|
||||||
|
// terminou e deu ruim: troca spinner por mensagem
|
||||||
|
spinner.style.display = 'none';
|
||||||
|
msgBox.style.display = 'block';
|
||||||
|
msgTitle.textContent = 'Erro';
|
||||||
|
msgText.textContent = msg;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user