Hi Eva, I went over your code and there’s no errors that I can spot - and I totally get your frustration. If it hadn’t been for Simon Cossar I don’t know how I’d have resolved it myself.
So, taking it backwards: if the PHP is correct, then something else must be disconnected. (browniepoints for me, yay.)
But…
I don’t know enough about any of that to be able to give suggestions or help.
If you’ve got your forum parked with the boys from Discourse Hosting, you could ask Richard (his name tag won’t pop, but this is his profile: Profile - RGJ - Discourse Meta )
Or perhaps @simon might be able to provide you with the missing steps.
Keeping my fingers crossed for you.
edit:
p.s. these are all the related plug-ins i use (+ that PHP one)
(Memberpress Drip is email marketing, so not related to this)
groups are any and all: closed and opened (i don’t give access to hidden groups, come to think of it)
these are some of the group names as displayed in ‘Groups’ - and as you can see, the “NoSpacesNames” are the ones that coincide with the PHP settings
If by parameters you mean the following, then no:
nor in the actual group settings (where you create it, with name, owner, etc.), it’s all straight forward and not connected to accessing through SSO - so setting or not setting this as a person’s primary group is not relavant.
There is one webhook here on Discourse that I put in as instructed by the WP-Discourse plugin:
email verification technically goes via memberpress: they (my wp-instance) send the log-in details to the user. by clicking the log-in link the users verify their address.
i know for a fact that it’s not through Discourse, because for a while it ALSO went through discourse (glitch somewhere) and Richard sorted that for me.
Com esse método, é possível atribuir membros ao nível de confiança 2 no Discourse quando eles criam uma conta mediante pagamento, e reduzi-lo para o nível de confiança 1 quando não efetuam o pagamento mensal?
Não olhei para isso há algum tempo, mas o que você precisaria é de uma comunicação entre os códigos do seu Discourse e os códigos do seu sistema de pagamento (no meu caso: MemberPress).
Então, se a pessoa parar de pagar, o MemberPress altera o código dela, e esse código corresponde a um nível de grupo diferente.
Se não houver vínculo com o pagamento, o nível do grupo não será ajustado.
Ah. Espere.
Relendo sua pergunta: não tenho certeza de como funciona com os níveis de confiança…
mas… se tudo mais falhar, você pode facilmente criar um GRUPO configurado para o nível de confiança 2 e outro para o nível de confiança 1, e fazer com que seu plugin de associação atribua esses grupos aos seus membros.
Espero que isso ajude. Se não, terei que mergulhar de volta nisso. Está funcionando desde a conversa anterior e não olhei para isso desde então.
Isso surgiu em outro post no Meta hoje, então eu examinei o código para confirmar se o nível de confiança de um usuário pode ser reduzido ao adicioná-lo a um grupo que define um nível de confiança menor do que o do grupo atual do usuário. Ao analisar o código, vi que isso não é possível:
def grant
if @user.trust_level < @trust_level
@user.change_trust_level!(@trust_level)
@user.save!
end
end
Se o nível de confiança de um usuário for menor que o nível de confiança concedido pelo grupo, adicionar o usuário ao grupo atualizará seu nível de confiança. Caso contrário, não haverá alteração no nível de confiança do usuário.
Estou um pouco enferrujado (além disso, já é tarde), mas o nível de confiança realmente não seria relevante. Eu não uso níveis de confiança de forma alguma. O Grupo TL 2 tem acesso a ‘isso’ e o Grupo TL 1 não tem.
O nível de confiança real não está em uso. Qualquer membro pode ser nível de confiança 1 e ainda assim obter acesso (por meio de pagamento) ao Grupo TL 4 — desde que eu não configure permissões para níveis de confiança, mas apenas para grupos.
@Dani1, obrigado por compartilhar suas experiências e desafios aqui; isso é muito útil para outras pessoas que usam o MemberPress, como eu.
Isso faz sentido, mas tenho curiosidade sobre o que acontece se a assinatura do membro expirar e ele nunca fizer logout, continuando assim a acessar o grupo… Você já encontrou esse como um problema?
Se sim, estou me perguntando se há uma maneira de forçar uma atualização ou um logout…
@RGJ O código acima marcado como solução remove os membros dos grupos, mas, como Dani1 mencionou, ela disse que só entra em vigor quando eles fazem logout.
Se um usuário for atualizado por meio do processo normal de login SSO, a atualização não ocorrerá até que ele faça logout e entre novamente. O exemplo de código acima é a maneira mais fácil de abordar o problema, mas provavelmente não é a melhor forma de gerenciar a associação a grupos.
O plugin WP Discourse possui algumas funções auxiliares que são ativadas quando o WordPress funciona como o site provedor de SSO para o Discourse. Essas funções permitem atualizar as associações a grupos sem exigir que o usuário faça logout do Discourse. Essas funções estão no tópico ao qual Richard linkou: Manage group membership in Discourse with WP Discourse SSO.
O post ao qual Richard linkou fornece alguns detalhes sobre as duas abordagens diferentes. Vou adicionar esses detalhes ao tópico howto na próxima semana. Por enquanto, seria bom ler o post.
(óbvio, isso tudo é muito manual. Tenho apenas um punhado de pessoas e sei exatamente o que cada uma está fazendo. Ainda não tentei a solução do Richard, mas é bom saber que ela existe!)
poderia adicionar um link aqui quando isso acontecer? Obrigado!
Claro, o tópico está aqui: Manage group membership in Discourse with WP Discourse SSO. Ele descreve como usar as funções add_user_to_discourse_group e remove_user_from_discourse_group do WP Discourse. Supondo que seu site WordPress esteja configurado como o provedor de SSO para o Discourse, essas são as funções que você deve usar para gerenciar as associações de grupo no Discourse.
O exemplo usado nesse tópico é com o plugin PaidMembershipsPro, mas uma abordagem semelhante deve funcionar com qualquer plugin de associação WordPress bem desenvolvido.
Vou adicionar alguns detalhes ao tópico sobre como gerenciar a associação de grupo com os parâmetros SSO add_groups e remove_groups. Na maioria dos casos, gerenciar a associação de grupo adicionando esses parâmetros ao payload SSO não será a melhor abordagem, pois exige que os usuários saiam e façam login novamente no Discourse para que a associação de grupo seja atualizada.
Minha esperança é que, em um futuro próximo, exista uma solução pronta para uso para vincular o Discourse a plugins específicos de associação do WordPress. Atualmente, isso só pode ser feito adicionando uma pequena quantidade de código personalizado ao seu site WordPress. Se isso não for algo que você costuma fazer, talvez precise contratar um desenvolvedor para ajudar com isso.
Obrigado pelos detalhes. Vou ver se consigo encaixá-los na minha cabeça.
Concordo — prefiro que a adição/subtração de grupos seja feita em tempo real, em vez de apenas no logout e login do usuário.
Se não conseguir resolver, vou contratar um desenvolvedor aqui para fazer isso e compartilhar o código. Acredito que há alguns que já fizeram isso na seção de marketplace.