diff --git a/.gitignore b/.gitignore index 2eea525..03dc07f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -.env \ No newline at end of file +.env +pasta_publica/analytics/* +pasta_publica/!analytics/README.md \ No newline at end of file diff --git a/pasta_publica/LogicaPrefixos/processarPrefixo_M.php b/pasta_publica/LogicaPrefixos/processarPrefixo_M.php new file mode 100644 index 0000000..9a3cdc8 --- /dev/null +++ b/pasta_publica/LogicaPrefixos/processarPrefixo_M.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/pasta_publica/LogicaPrefixos/processarPrefixo_eM.php b/pasta_publica/LogicaPrefixos/processarPrefixo_eM.php new file mode 100644 index 0000000..81c7184 --- /dev/null +++ b/pasta_publica/LogicaPrefixos/processarPrefixo_eM.php @@ -0,0 +1,59 @@ + 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.']; + +} + +?> \ No newline at end of file diff --git a/pasta_publica/index.php b/pasta_publica/index.php index 0c76c93..e499c4c 100644 --- a/pasta_publica/index.php +++ b/pasta_publica/index.php @@ -1,32 +1,23 @@ Mensagem ARK

Nenhum ARK foi passado para que fosse feita uma busca.

"; - - return; + return ['ok'=>false,'destino'=>'','msg'=>'Nenhum ARK foi passado...','qrark'=> false,'ark'=>'']; } - + //limpar o ARK $ark = limpar_ark($ark); @@ -72,6 +59,8 @@ function direcionar_ark() { //Eliminando espaços em branco no início e no final do $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 if (strpos($ark, '/') === 0) { @@ -81,12 +70,55 @@ function direcionar_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; $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; + $resultado = ['ok'=>false,'destino'=>'','msg'=>'ARK não encontrado.Erro não identificado.','qrark'=>$qrark,'ark'=>$ark_completo_sem_NAAN]; + do { $resto = ""; @@ -107,11 +139,7 @@ function direcionar_ark() { }//Fecha if - $resp = reduzirArk($tamanho, $pedacos); - - $NAAN = $resp[0]; //NAAN é o número de registro da Editora Moan na Ark Alliance - - $ark_sem_NAAN = $resp[1]; + $ark_sem_NAAN = reduzirArk($tamanho, $pedacos); if($ark_sem_NAAN == ""){ break; @@ -140,86 +168,98 @@ function direcionar_ark() { }//Fecha if + + $resultado = $buscar_ark($NAAN, $ark_sem_NAAN, $tem_interrogacao, $resto); - $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 { - 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) + $identificador_ark = $resultado["ok"]; $index++; } while ($tamanho > 1 && !$identificador_ark); + $resultado['qrark'] = $qrark; + $resultado['ark'] = $ark_completo_sem_NAAN; - echo "

ark:$ark

Documento não encontrado.

"; + 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"]; ?> + + + + + + + + <?= $ok ? "Redirecionando…" : "ARK não encontrado" ?> + + + + + + + + + + + + +
+ + + + + + +