Qual o problema com minha requisição cURL?

A menos que eu esteja fazendo algo errado, a solicitação para \"/groups/${group_id}/members.json\" é um tanto contraintuitiva. Ela também não parece estar documentada e não pode ser visualizada na aba de rede do navegador ao enviar o formulário “Adicionar Usuário” do Discourse na página de um grupo. Novamente, posso estar fazendo algo errado.

De qualquer forma, o caminho para a solicitação é /groups/${group_id}/members.json, com o ID numérico do grupo substituído por group_id. O corpo da solicitação requer um parâmetro group_id, mas esse parâmetro precisa ser definido como o name do grupo. Assim, os argumentos ficam assim:

$group_id = 45;
$group_name = 'publishers';
$args     = array(
    'method' => 'DELETE', // ou 'PUT'
	'body'   => array(
		// 'group_id'  => $group_name, editar: este parâmetro não é necessário, não tenho certeza do que estava acontecendo quando o testei.
		'usernames' => 'sally,Ben',
	)
);

// caminho:
/groups/${group_id}/members.json

Se você tiver o plugin WP Discourse configurado em seu site WordPress, pode usar sua função auxiliar estática discourse_request para evitar ter que usar curl. Note que eu linkei para a função estática que está no arquivo plugin-utilities, mas o namespace que você precisa usar para solicitações externas é de https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php.

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;

function zalg_add_users_to_group() {
	$group_id = 45;
    $group_name = 'publishers';
    $method = 'PUT'; // 'PUT' para adicionar usuários; 'DELETE' para remover usuários
	$args     = array(
		'method' => $method,
		'body'   => array(
			// 'group_id'  => $group_name, editar: este parâmetro não é necessário
			'usernames' => 'sally,Ben',
		)
	);
	$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
    // retornar, registrar ou lidar com a resposta
}

Se você estiver usando o WordPress como provedor de SSO para o Discourse, há uma função auxiliar que permite adicionar um usuário a um ou mais grupos:

function zalg_sso_add_users_to_group() {
    $user_id = 1; // o ID do usuário do WordPress
    $group_names = 'foo,bar,baz'; // um ou mais nomes de grupo separados por vírgula, sem espaços após as vírgulas!
    DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}

Para adicionar vários usuários a um único grupo, você ainda precisará usar o método discourse_request que está no primeiro exemplo de código.

3 curtidas