F-d-ration_de_groupes/formulaires/inscription.php
Pierre 9c42e9cc24 On crée un deuxième forum.
On normalise les éléments du forum pour qu'il transmette l'id du forum en paramètre, notamment pour la création et la redirection dans le bon forum.
On ajoute des fonctions d'autorisation pour qu'un créateur de sujet puisse le modifier tant qu'il n'a pas de réponse.
On modifie les autorisations pour le formulaire editer_auteur, afin qu'un simple inscrit (6forum) puisse éditer son profil aussi !
2020-03-11 03:30:23 +01:00

192 lines
6.4 KiB
PHP

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function formulaires_inscription_charger_dist($mode = '', $id = 0) {
global $visiteur_session;
// fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci
// pas de formulaire si le mode est interdit
include_spip('inc/autoriser');
if (!autoriser('inscrireauteur', $mode, $id)) {
return false;
}
// pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode
if (isset($visiteur_session['statut']) && ($visiteur_session['statut'] <= $mode)) {
return false;
}
$valeurs = array('nom_inscription' => '', 'mail_inscription' => '', 'id' => $id, '_mode' => $mode);
$valeurs['password'] = '';
$valeurs['password_confirmation'] = '';
return $valeurs;
}
// Si inscriptions pas autorisees, retourner une chaine d'avertissement
function formulaires_inscription_verifier_dist($mode = '', $id = 0) {
$erreurs = array();
include_spip('inc/config');
set_request("_upgrade_auteur"); // securite
include_spip('inc/filtres');
include_spip('inc/autoriser');
if (!autoriser('inscrireauteur', $mode, $id)
or (strlen(_request('nobot')) > 0)
) {
$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
}
if (!$nom = _request('nom_inscription')) {
$erreurs['nom_inscription'] = _T("info_obligatoire");
} elseif (!nom_acceptable(_request('nom_inscription'))) {
$erreurs['nom_inscription'] = _T("ecrire:info_nom_pas_conforme");
}
if (!$mail = strval(_request('mail_inscription'))) {
$erreurs['mail_inscription'] = _T("info_obligatoire");
}
// compatibilite avec anciennes fonction surchargeables
// plus de definition par defaut
if (!count($erreurs)) {
include_spip('action/inscrire_auteur');
if (function_exists('test_inscription')) {
$f = 'test_inscription';
} else {
$f = 'test_inscription_dist';
}
$declaration = $f($mode, $mail, $nom, $id);
if (is_string($declaration)) {
$k = (strpos($declaration, 'mail') !== false) ?
'mail_inscription' : 'nom_inscription';
$erreurs[$k] = _T($declaration);
} else {
include_spip('base/abstract_sql');
if ($row = sql_fetsel("statut, id_auteur, login, email", "spip_auteurs",
"email=" . sql_quote($declaration['email']))
) {
if (($row['statut'] == '5poubelle') and !$declaration['pass']) // irrecuperable
{
$erreurs['message_erreur'] = _T('form_forum_access_refuse');
} else {
if (($row['statut'] != 'nouveau') and !$declaration['pass']) {
if (intval($row['statut']) > intval($mode)) {
set_request("_upgrade_auteur", $row['id_auteur']);
} else {
// deja inscrit
$erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre');
}
}
}
spip_log($row['id_auteur'] . " veut se reinscrire");
}
}
}
// On ajoute la verification du mot de passe
// Si les deux champs de mot de passe sont différents
if (_request('password') != _request('password_confirmation')){
$erreurs['password_confirmation'] = _T('info_passes_identiques');
}
if ( strlen(_request('password')) < _PASS_LONGUEUR_MINI ){
$erreurs['password'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI));
}
// Mais si l'un des deux champs n'est pas rempli, cette erreur prend le dessus
if (!_request('password')){
$erreurs['password'] = _T('info_obligatoire');
}
if (!_request('password_confirmation')){
$erreurs['password_confirmation'] = _T('info_obligatoire');
}
return $erreurs;
}
function formulaires_inscription_traiter_dist($mode = '', $id = 0) {
include_spip('inc/filtres');
include_spip('inc/autoriser');
if (!autoriser('inscrireauteur', $mode, $id)) {
$desc = "rien a faire ici";
} else {
if ($id_auteur = _request('_upgrade_auteur')) {
include_spip("action/editer_auteur");
autoriser_exception("modifier", "auteur", $id_auteur);
autoriser_exception("instituer", "auteur", $id_auteur);
auteur_modifier($id_auteur, array('statut' => $mode));
autoriser_exception("modifier", "auteur", $id_auteur, false);
autoriser_exception("instituer", "auteur", $id_auteur, false);
return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur);
}
// 1. On cree l'auteur en BDD :
// statut = 6forum
$mode="6forum";
$nom = _request('nom_inscription');
$mail_complet = _request('mail_inscription');
$password = _request('password');
$inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
$desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id' => $id));
include_spip('action/editer_auteur');
if ($id_auteur = intval($desc['id_auteur'])){
// On modifie le mot de passe en utilisant les API de SPIP
// on modifie aussi le statut
$set = array(
'pass' => $password,
'statut' => '6forum'
);
auteur_modifier($id_auteur, $set);
}
// 2. On connecte l'auteur
// appeler auth_identifier_login qui va :
// - renvoyer un string si echec (message d'erreur)
// - un array decrivant l'auteur identifie si possible
// - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
include_spip('inc/auth');
$auteur = auth_identifier_login($desc['login'], $password);
// on arrive ici si on ne s'est pas identifie avec un SSO
if (!is_array($auteur)) {
include_spip('inc/cookie');
spip_setcookie("spip_admin", "", time() - 3600);
}
// on a ete authentifie, construire la session
// en gerant la duree demandee pour son cookie
$auteur['cookie'] = "oui";
auth_loger($auteur);
}
// erreur ?
if (is_string($desc)) {
return array('message_erreur' => $desc);
} // OK
else {
$redirect = (_request('url') ? _request('url') : "spip.php");
return array('redirect' => $redirect, 'message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']);
}
}