Page 1 of 1

Tutorial Prático

Posted: 15 Apr 2026, 01:28
by Chico Gois
Tutorial de exemplo: criando um provider de “Agradecimentos recebidos” para o Member Medals

Neste exemplo, vamos usar o Member Medals Provider Generator para criar um provider externo simples com base na extensão Thanks for posts.

O objetivo é contar quantos agradecimentos cada usuário recebeu em seus posts, gerar o pacote, revisar a SQL e preparar o provider para teste no phpBB.

O que vamos construir

Queremos um provider que conte:
  • uma linha na tabela de agradecimentos = um evento de agradecimento
  • o destinatário desse agradecimento = o autor do post agradecido
  • portanto, contar linhas por poster_id nos dá agradecimentos recebidos
Ponto de partida recomendado

Este é um ótimo primeiro teste para o gerador porque:
  • usa uma métrica simples de count_rows
  • não exige JOIN na versão inicial
  • funciona com uma tabela real de extensão, e não com uma tabela nativa do phpBB
  • é fácil de validar com a prévia SQL e o teste SQL
Passo 1 — Abra o gerador

Abra a interface web do gerador em seu ambiente local.

Exemplo:

Code: Select all

http://localhost/membermedals_provider_generator/
Para este tutorial, você pode trabalhar tanto no modo Simple quanto no modo Advanced, mas a configuração será a mesma.

Passo 2 — Crie um novo provider

Preencha os campos de identidade do provider com valores como estes:

Code: Select all

display_name: Thanks received
description: Counts how many thanks a user has received on their posts.

vendor: mundophpbb
ext_name: medalsthanksreceived
provider_class_name: thanks_received_provider
provider_key: thanks_received
family: engagement

version: 1.0.0
author_name: Mundo phpBB
author_homepage: https://mundophpbb.com.br
minimum_membermedals_version: 1.0.0
Passo 3 — Adicione labels e descrições

Use labels parecidas com estas:

Code: Select all

label_pt_br: Agradecimentos recebidos
desc_pt_br: Conta quantos agradecimentos o usuário recebeu em seus posts.

label_en: Thanks received
desc_en: Counts how many thanks the user has received on their posts.
Passo 4 — Escolha o modo da métrica

Defina o modo da métrica como:

Code: Select all

count_rows
Isso informa ao gerador que ele deve contar quantas linhas correspondem à regra para cada usuário.

Passo 5 — Configure a tabela de origem

Para este exemplo, use a tabela da extensão por meio de uma expressão PHP, para que o provider respeite o prefixo das tabelas do fórum.

Defina:

Code: Select all

table_mode: php_expression
table_value: $this->table_prefix . 'thanks'
user_id_column: poster_id
value_column: (deixe vazio)
Por que usar php_expression aqui?

Porque o nome da tabela depende do prefixo do phpBB. Usar uma expressão PHP torna o provider portátil entre instalações diferentes.

Passo 6 — Mantenha JOIN desativado

Para esta primeira versão, não ative JOIN.

Use:

Code: Select all

join_enabled: false
Não há necessidade de complicar o primeiro teste. A tabela de agradecimentos já contém a relação de usuário que precisamos.

Passo 7 — Deixe os filtros vazios no primeiro teste

Para a primeira versão funcional, mantenha a regra o mais simples possível.

Use:

Code: Select all

extra_where: 
filters: []
Isso cria a base mais limpa possível.

Passo 8 — Revise a prévia SQL

Neste ponto, a prévia SQL deve ficar parecida com isto:

Code: Select all

SELECT COUNT(*) AS value
FROM phpbb_thanks
WHERE poster_id = {USER_ID}
Dependendo de como o gerador renderiza os placeholders ou prefixos, o texto exato pode variar um pouco, mas a lógica deve ser esta.

Passo 9 — Execute o teste SQL

Se o ambiente estiver pronto, teste a consulta com um ID de usuário real.

Preencha os campos de teste do banco:
  • host do banco
  • porta do banco
  • nome do banco
  • usuário do banco
  • senha do banco
  • prefixo do banco
  • USER_ID de teste
Depois execute o teste SQL.

O que você deve esperar?
  • um usuário com posts agradecidos deve retornar um número maior que zero
  • um usuário sem agradecimentos recebidos deve retornar zero ou nenhuma linha correspondente
  • se o resultado parecer errado, revise poster_id, o prefixo da tabela e os dados da própria extensão
Passo 10 — Gere o pacote do provider

Quando a prévia e o teste SQL parecerem corretos:
  1. gere o provider
  2. baixe o ZIP
  3. revise os arquivos gerados
  4. instale o pacote como uma extensão separada no phpBB
Resultado esperado

Após a instalação, o Member Medals deverá conseguir usar este provider para calcular quantos agradecimentos o usuário recebeu.

Exemplo completo da configuração

Aqui está o exemplo completo em um único bloco:

Code: Select all

{
  "display_name": "Thanks received",
  "description": "Counts how many thanks a user has received on their posts.",
  "vendor": "mundophpbb",
  "ext_name": "medalsthanksreceived",
  "provider_class_name": "thanks_received_provider",
  "provider_key": "thanks_received",
  "family": "engagement",
  "version": "1.0.0",
  "author_name": "Mundo phpBB",
  "author_homepage": "https://mundophpbb.com.br",
  "minimum_membermedals_version": "1.0.0",
  "label_pt_br": "Agradecimentos recebidos",
  "desc_pt_br": "Conta quantos agradecimentos o usuário recebeu em seus posts.",
  "label_en": "Thanks received",
  "desc_en": "Counts how many thanks the user has received on their posts.",
  "mode": "count_rows",
  "table_mode": "php_expression",
  "table_value": "$this->table_prefix . 'thanks'",
  "user_id_column": "poster_id",
  "value_column": "",
  "join_enabled": false,
  "join_table_mode": "",
  "join_type": "",
  "join_table_value": "",
  "join_main_alias": "",
  "join_alias": "",
  "join_left_column": "",
  "join_right_column": "",
  "join_user_source": "",
  "value_source": "",
  "extra_where": "",
  "filters": []
}
Próximo passo opcional

Depois que a versão básica funcionar, você pode criar uma segunda variação que exclua um fórum específico.

Exemplo:

Code: Select all

forum_id <> 49
Isso pode ser útil se você quiser ignorar um fórum de testes, lixeira ou uma área restrita à equipe.

Por que este exemplo é útil

Este é um dos melhores primeiros tutoriais para o gerador porque demonstra:
  • uma extensão real como fonte de dados
  • uma métrica simples e clara
  • um provider sem necessidade de JOIN
  • um fluxo realista de validação com prévia SQL e teste SQL
Nota final

Para o seu primeiro teste, mantenha a configuração simples e revise a SQL com cuidado. Depois que o provider básico funcionar, ficará muito mais fácil expandir o tutorial com filtros, métricas alternativas e casos mais avançados.