chore(tenants): conteudo de publico/ atualizado
This commit is contained in:
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5787,6 +5787,7 @@ data:
|
||||
<button type="button" class="aba" data-aba="atividade" role="tab">Atividade</button>
|
||||
<button type="button" class="aba" data-aba="termo" role="tab">Termo de dados</button>
|
||||
<button type="button" class="aba" data-aba="termosdeuso" role="tab">Termos de Uso</button>
|
||||
<button type="button" class="aba" data-aba="titulares" role="tab">Pedidos de titulares</button>
|
||||
<button type="button" class="aba" data-aba="catalogo" role="tab">Produtos e preços</button>
|
||||
</nav>
|
||||
|
||||
@@ -5941,6 +5942,25 @@ data:
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- PEDIDOS DE TITULARES (LGPD): quem pediu exclusao/acesso/correcao na pagina /excluir-conta -->
|
||||
<section id="aba-titulares" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
<h2>Pedidos de titulares de dados</h2>
|
||||
<p class="ajuda">
|
||||
Pedidos feitos na página pública <b>/excluir-conta</b> (excluir conta e dados, acessar, corrigir).
|
||||
A escola é a controladora: encaminhe o pedido a ela, marque <b>Encaminhado</b> e, quando a escola
|
||||
responder ao titular, <b>Concluído</b>. Prazo para responder: <b>15 dias</b>. Cada pedido também
|
||||
chega por e-mail em suporte@athleticmap.com.
|
||||
</p>
|
||||
<div class="tabela-rolagem">
|
||||
<table class="tabela"><thead><tr><th>Recebido</th><th>Pedido</th><th>Quem</th><th>Escola</th><th>Mensagem</th><th>Situação</th></tr></thead>
|
||||
<tbody id="titularesLinhas"><tr><td colspan="6" class="ajuda">Abra esta aba para carregar.</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p id="titularesErro" class="erro oculto"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- TERMO DE DADOS: o que autoriza ler o uso de dentro de cada sistema -->
|
||||
<section id="aba-termo" class="painel-aba oculto">
|
||||
<div class="cartao">
|
||||
@@ -6058,6 +6078,7 @@ data:
|
||||
var API_TERMO = "/api/plataforma/painel/termo-de-dados";
|
||||
var API_CATALOGO = "/api/plataforma/painel/catalogo";
|
||||
var API_TERMOS_DE_USO = "/api/plataforma/painel/termos-de-uso";
|
||||
var API_TITULARES = "/api/plataforma/painel/pedidos-do-titular";
|
||||
var INTERVALO_SINO_MS = 60000;
|
||||
|
||||
var OIDC = {
|
||||
@@ -7108,6 +7129,59 @@ data:
|
||||
+ "</td></tr>";
|
||||
}
|
||||
|
||||
/* ── pedidos de titulares de dados (LGPD) ─────────────────────────── */
|
||||
|
||||
var ROTULO_PEDIDO = { EXCLUSAO: "Excluir conta e dados", ACESSO: "Acessar dados", CORRECAO: "Corrigir dados", OUTRO: "Outro" };
|
||||
var SITUACOES_PEDIDO = [["RECEBIDO", "Recebido"], ["ENCAMINHADO", "Encaminhado à escola"], ["CONCLUIDO", "Concluído"]];
|
||||
|
||||
function linhaDoPedido(p) {
|
||||
var opcoes = SITUACOES_PEDIDO.map(function (s) {
|
||||
return '<option value="' + s[0] + '"' + (s[0] === p.situacao ? " selected" : "") + ">" + s[1] + "</option>";
|
||||
}).join("");
|
||||
return '<tr><td>' + esc(ha(p.recebidoEm)) + "</td><td>" + esc(ROTULO_PEDIDO[p.tipo] || p.tipo) + "</td><td>" + esc(p.nome)
|
||||
+ '<br><span class="ajuda">' + esc(p.email) + "</span></td><td>" + esc(p.escola || "—") + "</td><td>"
|
||||
+ esc(p.mensagem || "—") + '</td><td><select data-pedido="' + esc(p.id) + '">' + opcoes + "</select></td></tr>";
|
||||
}
|
||||
|
||||
function carregarTitulares() {
|
||||
if (!cred) return Promise.resolve();
|
||||
var corpo = $("titularesLinhas"), erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES)
|
||||
.then(function (r) { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); })
|
||||
.then(function (lista) {
|
||||
corpo.innerHTML = (lista || []).map(linhaDoPedido).join("")
|
||||
|| '<tr><td colspan="6" class="ajuda">Nenhum pedido até agora.</td></tr>';
|
||||
})
|
||||
.catch(function (e) {
|
||||
corpo.innerHTML = '<tr><td colspan="6" class="ajuda">Não consegui carregar: ' + esc(e.message) + "</td></tr>";
|
||||
});
|
||||
}
|
||||
|
||||
function mudarSituacaoDoPedido(sel) {
|
||||
var erro = $("titularesErro");
|
||||
erro.classList.add("oculto");
|
||||
return pedir(API_TITULARES + "/" + encodeURIComponent(sel.getAttribute("data-pedido")) + "/situacao", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ situacao: sel.value })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("HTTP " + r.status);
|
||||
}).catch(function (e) {
|
||||
erro.textContent = "Não consegui mudar a situação: " + e.message;
|
||||
erro.classList.remove("oculto");
|
||||
return carregarTitulares();
|
||||
});
|
||||
}
|
||||
|
||||
/* Delegado na tabela (e nao no document): o elemento morre com a pagina, o ouvinte do document ficaria. */
|
||||
if ($("titularesLinhas")) {
|
||||
$("titularesLinhas").addEventListener("change", function (ev) {
|
||||
var t = ev.target;
|
||||
if (t && t.tagName === "SELECT" && t.hasAttribute("data-pedido")) mudarSituacaoDoPedido(t);
|
||||
});
|
||||
}
|
||||
|
||||
function carregarTermosDeUso() {
|
||||
if (!cred) return Promise.resolve();
|
||||
return pedir(API_TERMOS_DE_USO)
|
||||
@@ -7253,6 +7327,7 @@ data:
|
||||
});
|
||||
if (b.getAttribute("data-aba") === "termo") carregarTermo();
|
||||
if (b.getAttribute("data-aba") === "termosdeuso") carregarTermosDeUso();
|
||||
if (b.getAttribute("data-aba") === "titulares") carregarTitulares();
|
||||
if (b.getAttribute("data-aba") === "catalogo") carregarCatalogo();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user