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:
Este é um ótimo primeiro teste para o gerador porque:
Abra a interface web do gerador em seu ambiente local.
Exemplo:
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:
Passo 3 — Adicione labels e descrições
Use labels parecidas com estas:
Passo 4 — Escolha o modo da métrica
Defina o modo da métrica como:
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:
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:
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:
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:
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:
O que você deve esperar?
Quando a prévia e o teste SQL parecerem corretos:
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:
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:
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:
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.
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
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
Abra a interface web do gerador em seu ambiente local.
Exemplo:
Code: Select all
http://localhost/membermedals_provider_generator/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
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.
Defina o modo da métrica como:
Code: Select all
count_rowsPasso 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)
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: falsePasso 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: []
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}
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
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
Quando a prévia e o teste SQL parecerem corretos:
- gere o provider
- baixe o ZIP
- revise os arquivos gerados
- instale o pacote como uma extensão separada no phpBB
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": []
}
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 <> 49Por 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
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.