Browse Source

Mise au point du formulaire et ajout de vérifications avant inscription

master
Eric Lupinacci 8 months ago
parent
commit
dc9904e63b
  1. 17
      contrib_fonctions.php
  2. 12
      formulaires/contribution_inscrire.html
  3. 63
      formulaires/contribution_inscrire.php
  4. 56
      inc/contrib_inscription.php
  5. 25
      lang/contrib_fr.php
  6. 6
      prive/objets/liste/inscriptions.html
  7. 24
      services/gitea.php

17
contrib_fonctions.php

@ -0,0 +1,17 @@
<?php
/**
* Construire le titre d'un contrôle.
*
* @param int $id_objet
* @param array $champs
*
* @return string
*/
function generer_titre_inscription($id_objet, $champs) {
// Le titre d'un contrôle est de la forme type_controle:id
$titre = "{$champs['username']}:${id_objet}";
return $titre;
}

12
formulaires/contribution_inscrire.html

@ -10,7 +10,10 @@
<div class="editer-groupe">
<fieldset>
<legend><:contrib:inscription_forge_fieldset:></legend>
<legend><:contrib:inscription_fieldset_forge_label:></legend>
[(#SAISIE{explication, exuser,
texte=<:contrib:inscription_fieldset_forge_explication:>,
})]
[(#SAISIE{input, username,
label=<:contrib:inscription_username_label:>,
obligatoire=oui,
@ -25,9 +28,12 @@
})]
</fieldset>
<fieldset>
<legend><:contrib:inscription_charte_fieldset:></legend>
<legend><:contrib:inscription_fieldset_charte_label:></legend>
[(#SAISIE{explication, excharte,
texte=<:contrib:inscription_fieldset_charte_explication:>,
})]
[(#SAISIE{case, charte_approuvee,
label_case=<:contrib:inscription_charte_approuvee_label:>,
label_case=<:contrib:inscription_charte_label:>,
})]
</fieldset>
</div>

63
formulaires/contribution_inscrire.php

@ -13,8 +13,12 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*/
function formulaires_contribution_inscrire_charger_dist() {
// Ajout à la liste des valeurs l'identifiant de la page ou de l'objet concerné
$valeurs = array();
// Initialisation des champs du formulaire
$valeurs = array(
'username' => '',
'email' => '',
'charte_approuvee' => ''
);
return $valeurs;
}
@ -23,14 +27,65 @@ function formulaires_contribution_inscrire_verifier_dist() {
$erreurs = array();
// Acquérie le username et l'email saisis
$username = _request('username');
$email = _request('email');
// Vérifier la syntaxe de l'email
$verifier = charger_fonction('verifier', 'inc/');
// Vérifier l'email
if ($erreur = $verifier(_request('email'), 'email')) {
$erreurs['email'] = $erreur;
} else {
// Vérifier qu'une demande similaire n'est pas en cours
$erreur = false;
include_spip('inc/contrib_inscription');
$filtres = array('statut' => 'prop');
$inscriptions = inscription_repertorier($filtres);
foreach ($inscriptions as $_inscription) {
if ($username === $_inscription['username']) {
$erreur = true;
$erreurs['username'] = _T('contrib:inscription_username_nok_inscex_message', array('username' => $username));
}
if ($email === $_inscription['email']) {
$erreur = true;
$erreurs['email'] = _T('contrib:inscription_email_nok_inscex_message', array('email' => $email));
}
if ($erreur) {
break;
}
}
// Vérifier qu'un compte similaire n'existe pas déjà
if (!$erreur) {
include_spip('services/gitea');
$users = gitea_user_repertorier();
foreach ($users as $_user) {
$jamais_connecte = $_user['last_login'] === '1970-01-01T01:00:00+01:00';
if ($username === $_user['login']) {
$erreur = true;
$erreurs['username'] = _T('contrib:inscription_username_nok_userex_message', array('username' => $username));
if ($jamais_connecte) {
$erreurs['username'] .= ' ' . _T('contrib:inscription_jamais_connecte_message');
$jamais_connecte = false;
}
}
if ($email === $_user['email']) {
$erreur = true;
$erreurs['email'] = _T('contrib:inscription_email_nok_userex_message', array('email' => $email));
if ($jamais_connecte) {
$erreurs['email'] .= ' ' . _T('contrib:inscription_jamais_connecte_message');
}
}
if ($erreur) {
break;
}
}
}
}
if (!_request('charte_approuvee')) {
$erreurs['charte_approuvee'] = _T('contrib:inscription_charte_approuvee_erreur');
$erreurs['charte_approuvee'] = _T('contrib:inscription_charte_nok_message');
}
return $erreurs;

56
inc/contrib_inscription.php

@ -0,0 +1,56 @@
<?php
/**
* Ce fichier contient des compléments de l'API de gestion de l'objet plugin.
*
* @package SPIP\SVP\PLUGIN\API
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Renvoie l'information brute demandée pour l'ensemble des inscriptions
* ou toute les descriptions si aucun champ n'est explicitement demandé.
*
* @param array $filtres Tableau associatif `[champ] = valeur` ou `[champ] = !valeur` de critères de filtres sur les
* champs chaine des types de contrôle. Les opérateurs égalité et inégalité sont possibles.
* @param string $champ Identifiant d'un champ de la description d'un contrôle.
* Si l'argument est vide, la fonction renvoie les descriptions complètes et si l'argument est
* un champ invalide la fonction renvoie un tableau vide.
*
* @return array Tableau de la forme `[id_observation] = champ ou description complète`. Les champs textuels
* et les tableaux sérialisés sont retournés en l'état.
*/
function inscription_repertorier($filtres = array(), $champ = '') {
// On calcule le where à partir des filtres sachant que tous les champs sont des chaines.
$where = array();
if ($filtres) {
foreach ($filtres as $_champ => $_critere) {
$operateur = '=';
$valeur = $_critere;
if (substr($_critere, 0, 1) == '!') {
$operateur = '!=';
$valeur = ltrim($_critere, '!');
}
$where[] = $_champ . $operateur . sql_quote($valeur);
}
}
// On récupère tous les champs des types de contrôle.
if ($observations = sql_allfetsel('*', 'spip_inscriptions', $where)) {
if ($champ and $observations[0][$champ]) {
// On demande un seul champ et ce champ est bien valide
$retour = array_column($observations, $champ, 'id_inscription');
}
else {
// Tous les champs sauf le timestamp 'maj' sont renvoyés.
$retour = array_column($observations, null, 'id_inscription');
}
}
else {
$retour = array();
}
return $retour;
}

25
lang/contrib_fr.php

@ -32,18 +32,25 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// I
'icone_voir_plugin' => 'Voir le plugin',
'icone_voir_rubrique_plugin' => 'Voir la rubrique de documentation',
'inscription_accepter_label' => 'Accepter',
'inscription_refuser_label' => 'Refuser',
'inscription_supprimer_label' => 'Supprimer',
'inscription_btn_accepter_label' => 'Accepter',
'inscription_btn_refuser_label' => 'Refuser',
'inscription_btn_supprimer_label' => 'Supprimer',
'inscription_form_titre' => 'Contribuer à SPIP',
'inscription_forge_fieldset' => 'Forge SPIP',
'inscription_charte_fieldset' => 'Charte SPIP',
'inscription_fieldset_forge_label' => 'Forge SPIP',
'inscription_fieldset_forge_explication' => 'La <a href="https://git.spip.net">Forge SPIP</a> est l\'espace de développement de SPIP et de ses plugins. Vous pouvez vous inscrire afin de soumettre des rapports d\'anomalies, des demandes d\'évolution, de les discuter voire de contribuer au code des plugins et des squelettes.',
'inscription_fieldset_charte_label' => 'Charte SPIP',
'inscription_fieldset_charte_explication' => 'SPIP est un logiciel libre, chaque personne peut l’utiliser et le modifier à sa convenance. Cependant, toute participation doit se faire dans le respect des buts et valeurs promus par le projet initial du minirézo qui sont rappelés dans la <a href="https://www.spip.net/fr_article6431.html" target="blank">Charte d\'accueil de SPIP</a>.',
'inscription_username_label' => 'Nom d\'utilisateur ou d\'utilisatrice',
'inscription_email_label' => 'Adresse e-mail',
'inscription_charte_approuvee_label' => 'J\'approuve la <a href="https://www.spip.net/fr_article6431.html" target="blank">Charte d’accueil de SPIP</a>',
'inscription_charte_approuvee_erreur' => 'Pour contribuer à SPIP, vous devez approuver la charte de fonctionnement.',
'inscription_demande_ok_message' => 'L\'inscription a bien été prise en compte. Un administrateur ou une administratrice va s\'en occuper rapidement et vous recevrez un email pour vous avertir de la mise à disposition de votre compte.',
'inscription_demande_nok_message' => 'Erreur lors de l\'enregistrement de votre demande. Veuillez essayer ultérieurement.',
'inscription_charte_label' => 'J\'approuve la Charte d’accueil de SPIP',
'inscription_charte_nok_message' => 'Pour contribuer à SPIP, vous devez approuver la charte de fonctionnement.',
'inscription_ajout_ok_message' => 'L\'inscription a bien été prise en compte. Un administrateur ou une administratrice va s\'en occuper rapidement et vous recevrez un email pour vous avertir de la mise à disposition de votre compte.',
'inscription_ajout_nok_message' => 'Erreur lors de l\'enregistrement de votre demande. Veuillez essayer ultérieurement.',
'inscription_username_nok_inscex_message' => 'Une demande d\'inscription est déjà en cours avec le nom @username@.',
'inscription_email_nok_inscex_message' => 'Une demande d\'inscription est déjà en cours avec l\'email @email@.',
'inscription_username_nok_userex_message' => 'Un compte Gitea existe déjà avec le login @username@.',
'inscription_email_nok_userex_message' => 'Un compte Gitea existe déjà avec l\'email @email@.',
'inscription_jamais_connecte_message' => 'Jamais personne ne s\'y est connecté.',
// R
'repo_organisation_titre' => 'Fichiers des repos des organisations Gitea',

6
prive/objets/liste/inscriptions.html

@ -37,12 +37,12 @@
(#AUTORISER{modifier,inscription,#ID_INSCRIPTION}|oui)
[(#STATUT|=={prop}|oui)
<div class="groupe-btns">
[(#BOUTON_ACTION{<:contrib:inscription_accepter_label:>, #URL_ACTION_AUTEUR{publer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
[(#BOUTON_ACTION{<:contrib:inscription_refuser_label:>, #URL_ACTION_AUTEUR{publer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
[(#BOUTON_ACTION{<:contrib:inscription_btn_accepter_label:>, #URL_ACTION_AUTEUR{instituer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
[(#BOUTON_ACTION{<:contrib:inscription_btn_refuser_label:>, #URL_ACTION_AUTEUR{instituer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
</div>
]
[(#STATUT|=={publie}|oui)
[(#BOUTON_ACTION{<:contrib:inscription_supprimer_label:>, #URL_ACTION_AUTEUR{publer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
[(#BOUTON_ACTION{<:contrib:inscription_btn_supprimer_label:>, #URL_ACTION_AUTEUR{instituer,#ID_INSCRIPTION, #SELF}, btn_mini btn_secondaire, ''})]
]
]</td>
</tr>

24
services/gitea.php

@ -81,3 +81,27 @@ function gitea_requeter($url, $taille_max = null) {
return $reponse;
}
function gitea_user_repertorier() {
// Initialisation de l'erreur à chaine vide soit 'aucune erreur'.
$users = array();
// 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'])) {
// 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 = $reponse['donnees'];
}
return $users;
}
Loading…
Cancel
Save