Skip to content

feat: criar e disponibilizar a página de política de atualização (crossmark)#420

Open
Copilot wants to merge 2 commits intomasterfrom
copilot/create-update-policy-page
Open

feat: criar e disponibilizar a página de política de atualização (crossmark)#420
Copilot wants to merge 2 commits intomasterfrom
copilot/create-update-policy-page

Conversation

Copy link
Contributor

Copilot AI commented Mar 7, 2026

Implementa a página de política de atualização (crossmark) por periódico, com criação condicional via Pages, rota dedicada e link condicional no menu lateral.

O que esse PR faz?

  • Utilitário create_update_policy_page() — cria registro em Pages com slug_name="update-policy" associado ao periódico, mas somente se crossmark_url estiver ausente ou seguir o padrão https://domain/j/{acronym}/update_policy/. Retorna a página existente se já cadastrada; retorna None para URLs externas não-padrão.
  • Controller get_update_policy_page_by_journal_acron_lang() — consulta Pages por journal, language e slug_name="update-policy".
  • Rota GET /j/<url_seg>/update_policy/ — serve a página do periódico; retorna 404 se não houver Pages cadastrado para aquele periódico.
  • Template journal/update_policy.html — estrutura idêntica ao about.html, exibe page.content via |safe.
  • journal_info.html e header.html — link "Política editorial" corrigido de #item-2#editorialpolicy; link "Política de atualização" adicionado condicionalmente abaixo via global Jinja2 get_update_policy_page.
  • __init__.pyget_update_policy_page_by_journal_acron_lang registrado como global Jinja2 para uso direto nos templates sem alterar todos os views.

Onde a revisão poderia começar?

opac/webapp/utils/utils.pycreate_update_policy_page() — lógica central de criação condicional.
Em seguida: opac/webapp/main/views.pyupdate_policy() e opac/webapp/templates/journal/includes/journal_info.html.

Como este poderia ser testado manualmente?

  1. Acesse um periódico no OPAC.
  2. No admin, crie uma Page com name=update_policy, slug_name=update-policy, idioma e acrônimo do periódico.
  3. Confirme que o link Política de atualização aparece no menu lateral abaixo de Política editorial.
  4. Acesse /j/<acronym>/update_policy/ e confirme que o conteúdo é exibido.
  5. Remova a página e confirme que o link desaparece e a rota retorna 404.
  6. Confira que o link Política editorial agora aponta para #editorialpolicy em vez de #item-2.

Algum cenário de contexto que queira dar?

A lógica condicional de criação existe para preservar periódicos que já possuam URL de crossmark externa personalizada (ex.: https://doi.org/...). Nesses casos, create_update_policy_page() retorna None e nenhuma página interna é criada. A consulta ao Pages ocorre via global Jinja2 para evitar replicar a lógica em todos os views que incluem journal_info.html (journal_detail, about_journal, issue_toc, etc.).

Screenshots

N/A — alterações de backend e template condicional.

Quais são tickets relevantes?

Criar e disponibilizar a página de política de atualização (crossmark).

Referências

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar e disponibilizar a página de política de atualização (crossmark)</issue_title>
<issue_description>### Descrição da tarefa
Criar condicionalmente a página do crossmark.

Subtarefas

  • Crie uma função que crie uma página, ou seja, crie registro em Pages (opac_schema), com os dados de CrossmarkPage, mas somente se a url está ausente ou segue o padrão https://domain/j/journal_acron/update_policy/
  • Crie o template correspondente para apresentar a página que está condicionada à existência de Pages correspondente.
  • Crie condicionalmente o link para a página de política de atualização abaixo do link de Política editorial do menu
<div class="col-3 pt-5">
        <div class="list-group d-print-none mb-5">
          
            <a class="list-group-item" href="http://mc04.manuscriptcentral.com/mioc-scielo" target="_blank"><span class="material-icons-outlined">launch</span> Submissão de manuscritos</a>
          
            <a class="list-group-item" href="/journal/mioc/about/#about"><span class="material-icons-outlined">info</span> Sobre o periódico</a>
            <a class="list-group-item" href="/journal/mioc/about/#item-2"><span class="material-icons-outlined">article</span> Política editorial</a>
            <a class="list-group-item" href="/journal/mioc/about/#editors"><span class="material-icons-outlined">people</span> Corpo Editorial</a>
            <a class="list-group-item" href="/journal/mioc/about/#instructions"><span class="material-icons-outlined">help_outline</span> Instruções aos autores</a>
            <a class="list-group-item" href="/journal/mioc/about/#contact"><span class="material-icons-outlined">markunread</span> Contato</a>

      </div>
    </div>
  • Aproveite para trocar /journal/mioc/about/#item-2 por /journal/mioc/about/editorialpolicy
    </issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

- Add get_update_policy_page_by_journal_acron_lang() to controllers.py
- Add create_update_policy_page() to utils/utils.py with URL pattern check
- Add /j/<url_seg>/update_policy/ route to views.py
- Create journal/update_policy.html template
- Update journal_info.html: fix #item-2 → #editorialpolicy, add conditional update policy link
- Update header.html: fix #item2 → #editorialpolicy in mobile dropdowns, add conditional update policy link
- Register get_update_policy_page as Jinja2 global in __init__.py
- Add tests for update_policy view and create_update_policy_page utility

Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Create and enable update policy page for crossmark feat: criar e disponibilizar a página de política de atualização (crossmark) Mar 7, 2026
@robertatakenaka robertatakenaka marked this pull request as ready for review March 7, 2026 22:06
Copilot AI review requested due to automatic review settings March 7, 2026 22:06
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implementa a página de Política de atualização (Crossmark) por periódico, adicionando criação/consulta via Pages, rota dedicada e exibição condicional de link no menu.

Changes:

  • Adiciona utilitário create_update_policy_page() para criar/recuperar Pages do tipo “update-policy” conforme padrão de URL.
  • Cria controller + rota GET /j/<url_seg>/update_policy/ para servir a página e retornar 404 quando inexistente.
  • Inclui template journal/update_policy.html e adiciona link condicional (“Política de atualização”) nos menus do periódico.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
opac/webapp/utils/utils.py Novo helper para criação condicional de Pages para update policy (crossmark).
opac/webapp/controllers.py Novo método de consulta de Pages por periódico/idioma/slug.
opac/webapp/main/views.py Nova rota/view update_policy servindo o template e aplicando regras de visibilidade do periódico.
opac/webapp/init.py Registro de função global Jinja2 para consultar a página de update policy via templates.
opac/webapp/templates/journal/update_policy.html Novo template para renderizar o conteúdo da página.
opac/webapp/templates/journal/includes/journal_info.html Ajuste de âncora de política editorial e inclusão de link condicional para update policy.
opac/webapp/templates/journal/includes/header.html Ajuste de âncora de política editorial e inclusão de item condicional no dropdown.
opac/tests/test_utils.py Testes unitários para create_update_policy_page().
opac/tests/test_main_views.py Testes de integração para a rota/view update_policy.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

return None

existing = Pages.objects(
journal=journal_acron, slug_name="update-policy", language=language
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A busca por página existente não filtra por is_draft. Se existir uma página de rascunho com slug_name="update-policy", este código pode retornar o rascunho e impedir a criação/uso de uma página publicada, além de ficar inconsistente com o padrão de controllers (que sempre filtra is_draft). Sugestão: incluir is_draft=False (ou aceitar um parâmetro is_draft) no .objects(...) desta verificação.

Suggested change
journal=journal_acron, slug_name="update-policy", language=language
journal=journal_acron,
slug_name="update-policy",
language=language,
is_draft=False,

Copilot uses AI. Check for mistakes.
Comment on lines +50 to +53
{% set update_policy_page = get_update_policy_page(journal.acronym, session.get('lang', 'pt_BR')) %}
{% if update_policy_page %}
<li>
<a href="{{ url_for('.update_policy', url_seg=journal.url_segment) }}" class="dropdown-item"><span class="material-icons-outlined">update</span> {% trans %}Política de atualização{% endtrans %}</a>
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui há uma chamada a get_update_policy_page(...) dentro do template, que (via controllers) faz query em Pages. Como este header tem dois menus (breakpoints diferentes), isso vira pelo menos 2 queries por request só neste arquivo (mais outra no journal_info.html). Sugestão: calcular update_policy_page uma única vez por request (ex.: via context processor / g / variável de contexto do view) e reutilizar nos includes.

Copilot uses AI. Check for mistakes.
Comment on lines +99 to +102
{% set update_policy_page = get_update_policy_page(journal.acronym, session.get('lang', 'pt_BR')) %}
{% if update_policy_page %}
<li>
<a href="{{ url_for('.update_policy', url_seg=journal.url_segment) }}" class="dropdown-item"><span class="material-icons-outlined">update</span> {% trans %}Política de atualização{% endtrans %}</a>
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesma questão de performance do outro menu: esta chamada a get_update_policy_page(...) dispara nova query no Mongo para cada renderização deste bloco. Sugestão: reutilizar o mesmo valor calculado uma vez (evitar duplicar queries entre os dois menus responsivos).

Copilot uses AI. Check for mistakes.
Comment on lines +102 to +104
{% set update_policy_page = get_update_policy_page(journal.acronym, session.get('lang', 'pt_BR')) %}
{% if update_policy_page %}
<a class="list-group-item" href="{{ url_for('.update_policy', url_seg=journal.url_segment) }}"><span class="material-icons-outlined">update</span> {% trans %}Política de atualização{% endtrans %}</a>
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este include também consulta get_update_policy_page(...) (query em Pages) e, junto com as duas chamadas no journal/includes/header.html, pode adicionar 3 queries extras por request em páginas que incluem ambos. Sugestão: centralizar esse cálculo (context processor/variável de contexto) para reaproveitar o resultado em todos os templates incluídos.

Copilot uses AI. Check for mistakes.
{% endif %}
<a class="list-group-item" href="{{ url_for('.about_journal', url_seg=journal.url_segment) }}#about" class="scroll"><span class="material-icons-outlined">info</span> {% trans %}Sobre o periódico{% endtrans %}</a>
<a class="list-group-item" href="{{ url_for('.about_journal', url_seg=journal.url_segment) }}#item-2" class="scroll"><span class="material-icons-outlined">article</span> {% trans %}Política editorial{% endtrans %}</a>
<a class="list-group-item" href="{{ url_for('.about_journal', url_seg=journal.url_segment) }}#editorialpolicy" class="scroll"><span class="material-icons-outlined">article</span> {% trans %}Política editorial{% endtrans %}</a>
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A âncora do link de Política editorial foi alterada para #editorialpolicy, mas ainda há referências no código para #item2 e #item-2 (ex.: templates/article/includes/header.html e templates/collection/includes/journal_list_row.html). Isso pode causar navegação inconsistente entre páginas/menus. Sugestão: padronizar todas as ocorrências para a mesma âncora (ou garantir compatibilidade no HTML da página about).

Copilot uses AI. Check for mistakes.
</div>
<div class="row">
<div class="col">
{% include "includes/page_updated_at_info.html" %}
Copy link

Copilot AI Mar 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O include includes/page_updated_at_info.html depende de uma variável page_updated_at, mas este template não a define (nem o view adiciona ao contexto). Do jeito que está, a informação de “atualizado em” não será exibida. Sugestão: passar page.updated_at via um {% with page_updated_at=page.updated_at %} (como em collection/about.html) ou remover o include se não for necessário.

Suggested change
{% include "includes/page_updated_at_info.html" %}
{% with page_updated_at=page.updated_at %}
{% include "includes/page_updated_at_info.html" %}
{% endwith %}

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Criar e disponibilizar a página de política de atualização (crossmark)

3 participants