Browse Source

Par défaut, un nouveau user gitea est maintenant inscrit aux orgas extensions, squelettes et themes.

master
Eric Lupinacci 1 year ago
parent
commit
9fd4a3764f
  1. 3
      formulaires/contribution_inscrire.php
  2. 14
      lang/paquet-contrib_fr.php
  3. 3
      paquet.xml
  4. 157
      services/gitea.php

3
formulaires/contribution_inscrire.php

@ -112,10 +112,11 @@ function formulaires_contribution_inscrire_traiter_dist($email) {
$set['descriptif'] = _request('descriptif');
$set['charte_approuvee'] = 'oui';
// Pour l'instant, on ouvre le compte pour commit et ticket.
// Pour l'instant, on ouvre le compte pour commit et ticket pour les orgas plugins, squelettes et themes.
$parametres = array(
'forge' => array(
'acces' => 'complet',
'orgas' => ['spip-contrib-extensions', 'spip-contrib-squelettes', 'spip-contrib-themes']
)
);
$set['parametres'] = serialize($parametres);

14
lang/paquet-contrib_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans https://git.spip.net/spip-contrib-extensions/comments.git
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'contrib_nom' => 'Contrib - Mécanismes et espace privé',
'contrib_description' => 'Le plugin permet de mettre en place une structure et des mécanismes d\'échanges avec les contributeurs de façon à organiser et faciliter leurs contributions. Il propose aussi aux administrateurs une interface de contrôle pour assurer la pérennité de la structure mise en place.',
'contrib_slogan' => 'Administrer le site SPIP-Contrib'
);

3
paquet.xml

@ -1,7 +1,6 @@
<paquet
prefix="contrib"
categorie="outil"
version="0.3.1"
version="0.4.0"
etat="stable"
compatibilite="]3.2.999;4.0.*]"
logo="contrib.svg"

157
services/gitea.php

@ -18,23 +18,37 @@ if (!defined('_GITEA_SPIP_ENDPOINT_BASE_URL')) {
/**
* Construit l'URL de la requête Gitea correspondant à la demande utilisateur.
*
* @param array $parametres_url Liste des paramètres de l'url à accoler dans l'ordre fourni.
*
* @return string L'URL de la requête au service
* @internal
*
* @param array $parametres_path Liste des paramètres de path à accoler dans l'ordre fourni.
* @param array $parametres_query Liste des paramètres de query à ajouter.
*
* @return string L'URL de la requête au service
*/
function gitea_construire_url($parametres_url) {
function gitea_construire_url($parametres_path, $parametres_query = array()) {
// Récupération du token d'autorisation d'accès à l'API
include_spip('inc/config');
$token = lire_config('contrib/token');
// Construire l'URL de l'api sollicitée
// -- la partie path
$url = _GITEA_SPIP_ENDPOINT_BASE_URL
. implode('/', $parametres_url)
. implode('/', $parametres_path)
. "?access_token=${token}";
// -- la partie query éventuelle qui se rajoute au token
if ($parametres_query) {
$query = '';
foreach ($parametres_query as $_champ => $_valeur) {
$query .= '&'
. $_champ
. '='
. rawurlencode($_valeur);
}
$url .= $query;
}
return $url;
}
@ -162,10 +176,11 @@ function gitea_user_repertorier($filtres = array()) {
$users = cache_lire('contrib', 'user', $fichier_cache);
} else {
// Construction de l'url de la requête de récupération de tous les users de la forge
$parametres = array(
'admin', 'users'
$parametres_path = array(
'admin',
'users'
);
$url = gitea_construire_url($parametres);
$url = gitea_construire_url($parametres_path);
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
// On stocke le tableau de tous les users.
@ -224,10 +239,11 @@ function gitea_orga_repertorier($inclure_repos = false) {
$orgas = array();
// Requête de récupération de toutes les organisations de la forge
$parametres = array(
'admin', 'orgs'
$parametres_path = array(
'admin',
'orgs'
);
$url = gitea_construire_url($parametres);
$url = gitea_construire_url($parametres_path);
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
$orgas = $reponse['donnees'];
@ -249,6 +265,50 @@ function gitea_orga_repertorier($inclure_repos = false) {
return $orgas;
}
/**
* @api
*
* @param $email
*
* @return array
*/
function gitea_orga_lire_team($organisation, $team_name) {
// Par défaut on considère que la team n'existe pas
$team = [];
if (
$organisation
and $team_name
) {
// On cherche la team par son nom dans l'organisation concerné
$parametres_path = array(
'orgs',
$organisation,
'teams',
'search'
);
$parametres_query = [
'q' => $team_name,
'include_desc' => 'false',
'limit' => 1
];
$url = gitea_construire_url($parametres_path, $parametres_query);
// Recherche des informations sur la team
$reponse = gitea_requeter($url);
if (
empty($reponse['erreur'])
and !empty($reponse['donnees']['data'])
) {
// On a demandé une seule team, on la récupère.
$team = array_shift($reponse['donnees']['data']);
}
}
return $team;
}
/**
* @api
*
@ -269,12 +329,12 @@ function gitea_repo_repertorier($organisation) {
// Lecture des données du fichier cache valide et peuplement de l'index données
$repos = cache_lire('contrib', 'repo', $fichier_cache);
} else {
$parametres_url = array(
$parametres_path = array(
'orgs',
$organisation,
'repos'
);
$url = gitea_construire_url($parametres_url);
$url = gitea_construire_url($parametres_path);
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
// Extraction des repos et classement dans l'ordre alphabétique
@ -295,14 +355,55 @@ function gitea_repo_repertorier($organisation) {
return $repos;
}
// ------ API : REQUETES POST ------
// ------ API : REQUETES POST / PUT ------
/**
* @api
*
* @param $username
* @param $email
* @param array $parametres
* @param int $id_team
* @param string $username
*
* @return bool
*/
function gitea_team_peupler($id_team, $username) {
// Par défaut on considère que le user n'est pas créé
$retour = false;
if (
$id_team
and $username
) {
// On ajoute le user connu par son nom à la team désignée par son id
$parametres_path = array(
'teams',
$id_team,
'members',
$username
);
$url = gitea_construire_url($parametres_path);
// Recherche des informations sur la team
// -- requête PUT
$options = [
'methode' => 'PUT'
];
$reponse = gitea_requeter($url, $options);
if (empty($reponse['erreur'])) {
// Ajout ok.
$retour = true;
}
}
return $retour;
}
/**
* @api
*
* @param string $username
* @param string $email
* @param array $parametres
*
* @return bool
*/
@ -315,9 +416,12 @@ function gitea_user_creer($username, $email, $parametres = array()) {
$username
and $email
) {
// Construction de l'url de la requête de récupération de tous les users de la forge
$parametres_url = array('admin', 'users');
$url = gitea_construire_url($parametres_url);
// Construction de l'url de la requête pour ajouter un suer à la forge
$parametres_path = array(
'admin',
'users'
);
$url = gitea_construire_url($parametres_path);
// Requête, gestion des erreurs et traitement des users
$options['datas'] = array(
@ -333,6 +437,19 @@ function gitea_user_creer($username, $email, $parametres = array()) {
$reponse = gitea_requeter($url, $options);
if (empty($reponse['erreur'])) {
$retour = true;
// On ajoute le user créé aux orgas demandées
if (!empty($parametres['forge']['orgas'])) {
foreach ($parametres['forge']['orgas'] as $_orga) {
// Pour chaque orga la team s'appelle contrib.
if (
($team = gitea_orga_lire_team($_orga, 'contrib'))
and $id = intval($team['id'])
) {
gitea_team_peupler($id, $username);
}
}
}
}
}

Loading…
Cancel
Save