Browse Source

Mise au point des services Gitea.

Simplification en conséquence des contrôle de la forge.
master
Eric Lupinacci 2 years ago
parent
commit
bd1e0561ba
  1. 17
      contrib_fonctions.php
  2. 8
      ezcache/contrib.php
  3. 79
      ezcheck/controles/gitea_controle.php
  4. 4
      ezcheck/controles/gitea_orga_repos.yaml
  5. 3
      ezcheck/controles/gitea_user_recent.html
  6. 2
      ezcheck/controles/gitea_user_recent.yaml
  7. 127
      services/gitea.php

17
contrib_fonctions.php

@ -64,9 +64,9 @@ function gitea_user_informer($email, $information = '') {
/**
* Compile la balise `#GITEA_USER_LISTE` qui renvoie la liste des users de la forge Gitea. Chaque objet est fourni
* avec sa description complète.
* La signature de la balise est : `#GITEA_USER_LISTE`.
* Compile la balise `#GITEA_USER_LISTE` qui renvoie la liste des users de la forge Gitea filtrée selon
* les critères fournis. Chaque objet est fourni avec sa description complète.
* La signature de la balise est : `#GITEA_USER_LISTE{[filtres]}`.
*
* @balise
*
@ -78,8 +78,12 @@ function gitea_user_informer($email, $information = '') {
**/
function balise_GITEA_USER_LISTE_dist($p) {
// Les filtres sont optionnels
$filtres = interprete_argument_balise(1, $p);
$filtres = isset($filtres) ? str_replace('\'', '"', $filtres) : 'array()';
// Aucun argument à la balise.
$p->code = "gitea_user_lister()";
$p->code = "gitea_user_lister(${filtres})";
return $p;
}
@ -89,9 +93,8 @@ function balise_GITEA_USER_LISTE_dist($p) {
*
* @return array|string
*/
function gitea_user_lister() {
function gitea_user_lister($filtres = array()) {
include_spip('services/gitea');
return gitea_user_repertorier();
return gitea_user_repertorier($filtres);
}

8
ezcache/contrib.php vendored

@ -22,14 +22,14 @@ function contrib_cache_configurer($plugin) {
'racine' => '_DIR_TMP',
'sous_dossier' => false,
'nom_prefixe' => 'repo',
'nom_obligatoire' => array('organisation'),
'nom_obligatoire' => array('organisation', 'contenu'),
'nom_facultatif' => array(),
'extension' => '.txt',
'extension' => '.json',
'securisation' => false,
'serialisation' => false,
'decodage' => false,
'decodage' => true,
'separateur' => '_',
'conservation' => 3600 * 24 * 30
'conservation' => 3600 * 6
),
'user' => array(
'racine' => '_DIR_TMP',

79
ezcheck/controles/gitea_controle.php

@ -15,54 +15,25 @@ function gitea_orga_repos($id_controle, $id_auteur, $options) {
// Initialisation de l'erreur à chaine vide soit 'aucune erreur'.
$erreur = '';
// Récupération de la liste des organisations
// -- construction de l'url de la requête de récupération des organisations
$parametres = array(
'admin',
'orgs'
);
// Récupération de la liste des organisations incluant pour chacune la liste de leurs repos
include_spip('services/gitea');
$url = gitea_construire_url($parametres);
$orgas = gitea_orga_repertorier(true);
// -- requête, gestion des erreurs et traitement des organisations
$reponse = gitea_requeter($url);
if (!empty($reponse['erreur'])) {
$erreur = $reponse['erreur'];
} else {
include_spip('inc/flock');
$orgas = $reponse['donnees'];
// Créer les fichiers caches téléchargeables des repos de chaque organisation
if ($orgas) {
include_spip('inc/ezcache_cache');
foreach ($orgas as $_orga) {
// Récupération des repos d'une organisation
$parametres = array(
'orgs',
$_orga['username'],
'repos'
// Initialisation de l'identifiant du cache
$cache = array(
'organisation' => $_orga['username'],
'contenu' => 'name'
);
$url = gitea_construire_url($parametres);
$reponse = gitea_requeter($url);
if (!empty($reponse['erreur'])) {
$erreur = $reponse['erreur'];
break;
} else {
// Extraction des repos et classement dans l'ordre alphabétique
$repos = $reponse['donnees'];
$repos = array_column($repos, null, 'name');
ksort($repos);
$contenu = '';
foreach ($repos as $_repo) {
$contenu .= $_repo['full_name'] . "\n";
}
// Mise en JSON du contenu : l'index repos existe toujours
$contenu = json_encode($_orga['repos']);
// Création du fichier des repos de l'organisation
// -- Initialisation de l'identifiant du cache
$cache = array(
'organisation' => $_orga['username']
);
// -- Ecriture du cache
include_spip('inc/ezcache_cache');
cache_ecrire('contrib', 'repo', $cache, $contenu);
}
// Création du fichier des repos de l'organisation
cache_ecrire('contrib', 'repo', $cache, $contenu);
}
}
@ -83,37 +54,23 @@ function gitea_user_recent($id_controle, $id_auteur, $options) {
// Construction de l'url de la requête de récupération de tous les users de la forge
include_spip('services/gitea');
$parametres = array(
'admin',
'users'
);
$url = gitea_construire_url($parametres);
// Requête, gestion des erreurs et traitement des users
$reponse = gitea_requeter($url);
if (!empty($reponse['erreur'])) {
$erreur = $reponse['erreur'];
$users = gitea_user_repertorier();
if (!$users) {
$erreur = 'gitea_users_nok';
} else {
// On retraite le tableau de façon à pouvoir classer les users du plus récent au plus ancien.
// Pour cela on utilise l'id.
$users = array_column($reponse['donnees'], null, 'id');
$users = array_column($users, null, 'id');
krsort($users);
// On extrait les n premiers users du tableau qui sont donc les plus récents
$users_recents = array_slice($users, 0, intval($options['nb_users']));
// On passe les deux tableaux users en chaine JSON avant la mise en cache
$contenu = json_encode($users);
$contenu_recents = json_encode($users_recents);
// Création des fichiers cache pour chaque contenu
// -- Cache de tous les users
// Création des fichiers cache des users récents
include_spip('inc/ezcache_cache');
$cache = array(
'liste' => 'all'
);
cache_ecrire('contrib', 'user', $cache, $contenu);
// -- Cache des users récents
$cache['liste'] = 'last';
cache_ecrire('contrib', 'user', $cache, $contenu_recents);
}

4
ezcheck/controles/gitea_orga_repos.yaml

@ -38,13 +38,15 @@ execution:
# -- squelette: indique le chemin relatif du fichier dans le path, sans extension car toujours HTML.
# -- contexte: liste des variables supplémentaires de contexte à passer au squelette
# -- parametres: liste des paramètres du squelette définie sous forme d'une liste de saisies.
# On peut passer des paramètres en plus des variables fixes de contexte, toute sera inséré dans
# On peut passer des paramètres en plus des variables fixes de contexte, tout sera inséré dans
# l'environnement du squelette
affichage:
squelette: 'prive/squelettes/liste/caches'
contexte:
plugin: 'contrib'
type_cache: 'repo'
filtres:
contenu: 'name'
titre: '<:contrib:repo_organisation_titre:>'
sinon: '<:contrib:repo_organisation_sinon:>'
avec_telechargement: 'oui'

3
ezcheck/controles/gitea_user_recent.html

@ -3,11 +3,10 @@
users=#CACHE_LISTE{contrib, #ARRAY{type_cache, user, liste, last}},
env} />
[(#REM) Liste des caches : en fait uniquement le fichier users_all.json qui sera téléchargeable ]
[(#REM) Liste des caches de type user, téléchargeables ]
<INCLURE{fond=prive/squelettes/liste/caches,
plugin=contrib,
type_cache=user,
filtres=#ARRAY{liste, all},
titre=<:contrib:user_gitea_titre:>,
sinon=<:contrib:user_gitea_sinon:>,
avec_telechargement=oui,

2
ezcheck/controles/gitea_user_recent.yaml

@ -46,5 +46,3 @@ execution:
# -- parametres: liste des paramètres du squelette définie sous forme d'une liste de saisies.
# On peut passer des paramètres en plus des variables fixes de contexte, toute sera inséré dans
# l'environnement du squelette
affichage:
squelette: '/gitea_user_recent'

127
services/gitea.php

@ -148,7 +148,7 @@ function gitea_user_lire($email) {
*
* @return array|bool|mixed|string
*/
function gitea_user_repertorier() {
function gitea_user_repertorier($filtres = array()) {
// Initialisation de l'erreur à chaine vide soit 'aucune erreur'.
$users = array();
@ -166,26 +166,135 @@ function gitea_user_repertorier() {
'admin', 'users'
);
$url = gitea_construire_url($parametres);
// Requête, gestion des erreurs et traitement des users
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
// On retraite le tableau de façon à pouvoir classer les users du plus récent au plus ancien.
// Pour cela on utilise l'id.
// On stocke le tableau de tous les users.
$users = $reponse['donnees'];
// On passe les deux tableaux users en chaine JSON avant la mise en cache
// Création du fichier cache de tous les users
$contenu = json_encode($users);
// Création des fichiers cache pour chaque contenu
cache_ecrire('contrib', 'user', $cache, $contenu);
}
}
return $users;
// Filtrage éventuel de la liste : on évite de parcourir la liste si pas de filtre
$users_filtres = $filtres ? [] : $users;
if ($filtres) {
foreach ($users as $_cle => $_user) {
$user_conforme = true;
foreach ($filtres as $_critere => $_valeur) {
$operateur_egalite = true;
$valeur = $_valeur;
if (substr($_valeur, 0, 1) == '!') {
$operateur_egalite = false;
$valeur = ltrim($_valeur, '!');
}
if (
!isset($_user[$_critere])
or (
isset($_user[$_critere])
and (($operateur_egalite and ($_user[$_critere] != $valeur))
or (!$operateur_egalite and ($_user[$_critere] == $valeur))))
) {
// On arrête de filtrer un user dès qu'un critère n'est pas respecté.
$user_conforme = false;
break;
}
}
// Si le user respecte les critères on l'ajoute à la liste filtrée
if ($user_conforme) {
$users_filtres[] = $_user;
}
}
}
return $users_filtres;
}
/**
* @api
*
* @return array
*/
function gitea_orga_repertorier($inclure_repos = false) {
// Initialisation de l'erreur à chaine vide soit 'aucune erreur'.
$orgas = array();
// Requête de récupération de toutes les organisations de la forge
$parametres = array(
'admin', 'orgs'
);
$url = gitea_construire_url($parametres);
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
$orgas = $reponse['donnees'];
}
if ($inclure_repos) {
// On rajoute pour chaque orga sa liste de repos (nom sans aucune information complémentaire)
foreach ($orgas as $_cle => $_orga) {
// Liste ordonnée et complète de tous les repos de l'organisation
$repos = gitea_repo_repertorier($_orga['username']);
// On ajoute la liste ordonnée des repos dans le tableau de l'organisation (uniquement le fullname)
$orgas[$_cle]['repos'] = $repos
? array_column($repos, null, 'full_name')
: [];
}
}
return $orgas;
}
/**
* @api
*
* @return array
*/
function gitea_repo_repertorier($organisation) {
// Initialisation de l'erreur à chaine vide soit 'aucune erreur'.
$repos = array();
if ($organisation) {
include_spip('inc/ezcache_cache');
$cache = array(
'organisation' => $organisation,
'contenu' => 'full'
);
if ($fichier_cache = cache_est_valide('contrib', 'repo', $cache)) {
// 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(
'orgs',
$organisation,
'repos'
);
$url = gitea_construire_url($parametres_url);
$reponse = gitea_requeter($url);
if (empty($reponse['erreur'])) {
// Extraction des repos et classement dans l'ordre alphabétique
$repos = $reponse['donnees'];
$repos = array_column($repos, null, 'name');
ksort($repos);
// On ajoute la liste ordonnée des repos dans le tableau de l'organisation
$repos = array_values($repos);
// Création du cache complet des repos de l'organisation
$contenu = json_encode($repos);
cache_ecrire('contrib', 'repo', $cache, $contenu);
}
}
}
return $repos;
}
// ------ API : REQUETES POST ------
/**

Loading…
Cancel
Save