Repository navigation
Fix: provider de privacidade compatível com a interface; logs via get_string() - #12
Merged
Merged
Conversation
…_string() - privacy/provider: get_reason() sem ": string" era erro fatal ao carregar a classe no Moodle 3.8 e no 4.5. Passa a usar core_privacy legacy_polyfill (_get_reason()), que continua válido no PHP 5.6 do Moodle 3.0. - restore: as mensagens "failed to rewrite" e "truncated at" saem de get_string() (errorrewritefailed, logtruncated), com tradução em pt_br. O texto em inglês no log não muda. - Testes: provider carregável; mensagens vindas do pacote de idioma, com a fronteira do limite de 8192 bytes. - Versão 2026092901.
- provider: phpcs:disable PSR2.Methods.MethodDeclaration.Underscore em volta de _get_reason(), nome imposto pelo legacy_polyfill do core. - fixtures dos testes de log: uma classe por arquivo. - privacy_provider_test: sem MOODLE_INTERNAL (arquivo sem efeito colateral). - log_messages_test: compara com o texto literal que o log tinha, não com o próprio get_string(); o tearDown restaura o string manager anterior; teste novo confere que en e pt_br têm as mesmas chaves e placeholders; docblock deixa de afirmar que todo texto do log vem do pacote de idioma (o cabeçalho dos pedaços de conteúdo continua literal).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Duas correções independentes.
1. Provider de privacidade: erro fatal ao carregar
null_providerdeclaraget_reason(): stringno Moodle 3.8 e no 4.5. O provider declaravaget_reason()sem tipo de retorno, e carregar a classe dava erro fatal:Reproduzido no 3.8 (PHP 7.4) e no 4.5 (PHP 8.3). Qualquer caminho que carregue o provider (registro de privacidade, pedidos de dados) morre.
A
maintambém atende o Moodle 3.0 (PHP 5.6), que não aceita: string. A correção usa o trait do próprio core,\core_privacy\local\legacy_polyfill: o plugin escreve_get_reason()e o trait fornece oget_reason(): string. O trait existe no 3.8 e no 4.5 e não está marcado como obsoleto. No 3.0, sem Privacy API, a classe nunca é carregada.2. Mensagens de log literais passam a vir de
get_string()As duas mensagens que ainda eram texto fixo no restore agora vêm do pacote de idioma, com tradução em
pt_br:errorrewritefailedlocal_resourcelinkfix: failed to rewrite {file} (cmid {cmid}): {error}logtruncatedlocal_resourcelinkfix [{label}] ... truncated at {limit} of {size} bytesO texto em inglês no log não muda, e o nível também não (WARNING e ERROR).
Testes
privacy_provider_test: carrega o provider e confere a razão (pulado sem Privacy API, ou seja, no 3.0).log_messages_test: as duas mensagens vêm do pacote de idioma. Como o texto em inglês é igual ao literal antigo, comparar texto não distingueget_string()de literal. O teste troca o gerenciador de strings ($CFG->customstringmanager) por um que marca cada string devolvida. Numa cópia com literal idêntico, os três casos que esperam a mensagem ficaram vermelhos. O limite de 8192 bytes é testado em 0, 1, 8191, 8192, 8193 e 20000.Medido localmente no Moodle 3.8 (PHP 7.4, mysqli): vermelho antes da correção; depois,
OK (94 tests, 329 assertions).php -lsem erros no PHP 5.6 nos sete arquivos. O 3.0 e o phpcs ficam por conta deste CI.version.php:2026092901.Depois do merge
Os testes novos usam
setUp()/tearDown()sem: voide o data provider sem: array, como exige amain(PHPUnit 4.8). Na cascata paraMOODLE_401_STABLEeMOODLE_405_STABLEeles ganham os ajustes do PHPUnit 9, como nos PRs #8 e #9.Depois da revisão
phpcs:disable PSR2.Methods.MethodDeclaration.Underscoresó em volta de_get_reason(), nome que olegacy_polyfilldo core impõe. O polyfill fica igual em todas as branches, inclusive nas 4.x, para o arquivo não divergir.MOODLE_INTERNALremovido do teste de privacidade.log_messages_testcompara com o texto literal que o log tinha, dentro dos marcadores: prova a origem (get_string()) e o texto. Antes, a comparação usava o próprioget_string()e aceitaria qualquer mudança de texto.enept_brtêm as mesmas chaves e os mesmos placeholders.tearDownrestaura o string manager anterior, em vez de apagá-lo.[BEFORE 1/3]) continua literal: ele marca os dados despejados, não é frase. O docblock do teste passa a dizer isso.pcre_limits_test). O teste usa um dublê que lança a mesma exceção.OK (95 tests, 370 assertions).🤖 Generated with Claude Code