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 !
192 lines
6.4 KiB
PHP
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']);
|
|
|
|
}
|
|
}
|
|
|