Quel est le problème avec ma requête cURL ?

Sauf si je fais quelque chose de mal, la requête à /groups/${group_id}/members.json est un peu peu intuitive. Elle ne semble pas non plus être documentée et ne peut pas être vue dans l’onglet réseau du navigateur lors de la soumission du formulaire “Ajouter un utilisateur” de Discourse sur la page d’un groupe. Encore une fois, je pourrais faire quelque chose de mal.

Dans tous les cas, le chemin de la requête est /groups/${group_id}/members.json, avec l’ID numérique du groupe substitué à group_id. Le corps de la requête nécessite un paramètre group_id, mais ce paramètre doit être défini sur le name du groupe. Les arguments deviennent donc quelque chose comme ceci :

$group_id = 45;
$group_name = 'publishers';
$args     = array(
    'method' => 'DELETE', // ou 'PUT'
	'body'   => array(
		// 'group_id'  => $group_name, edit: ce paramètre n'est pas nécessaire, je ne sais pas ce qui se passait quand je le testais.
		'usernames' => 'sally,Ben',
	)
);

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

Si vous avez le plugin WP Discourse configuré sur votre site WordPress, vous pouvez utiliser sa fonction d’aide statique discourse_request pour éviter d’avoir à utiliser curl. Notez que j’ai lié la fonction statique qui se trouve dans le fichier plugin-utilities, mais l’espace de noms que vous devez utiliser pour les requêtes externes provient 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' pour ajouter des utilisateurs ; 'DELETE' pour supprimer des utilisateurs
	$args     = array(
		'method' => $method,
		'body'   => array(
			// 'group_id'  => $group_name, edit: ce paramètre n'est pas nécessaire
			'usernames' => 'sally,Ben',
		)
	);
	$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
    // retourner, enregistrer ou gérer la réponse
}

Si vous utilisez WordPress comme fournisseur SSO pour Discourse, il existe une fonction d’aide qui vous permet d’ajouter un utilisateur à un ou plusieurs groupes :

function zalg_sso_add_users_to_group() {
    $user_id = 1; // l'ID utilisateur WordPress
    $group_names = 'foo,bar,baz'; // un ou plusieurs noms de groupe séparés par des virgules, sans espaces après les virgules !
    DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}

Pour ajouter plusieurs utilisateurs à un seul groupe, vous devrez toujours utiliser la méthode discourse_request qui se trouve dans le premier exemple de code.

3 « J'aime »