259 lines
8.3 KiB
PHP
259 lines
8.3 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;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* #FORMULAIRE_INSCRIPTION
|
|
* #FORMULAIRE_INSCRIPTION{6forum}
|
|
* #FORMULAIRE_INSCRIPTION{1comite,#ARRAY{id,#ENV{id_rubrique}}}
|
|
*
|
|
* Pour rediriger l'utilisateur apres soumission du formulaire vers une page qui lui dit de verifier ses mails par exemple :
|
|
* #FORMULAIRE_INSCRIPTION{6forum,'',#URL_PAGE{verifiez-vos-mails}}
|
|
*
|
|
* Pour rediriger l'utilisateur apres Clic dans le lien du mail de confirmation, pour lui confirmer son inscription par exemple
|
|
* #FORMULAIRE_INSCRIPTION{6forum,#ARRAY{redirect,#URL_PAGE{confirmation-inscription}}}
|
|
*
|
|
* Tout ensemble
|
|
* #FORMULAIRE_INSCRIPTION{6forum,#ARRAY{redirect,#URL_PAGE{confirmation-inscription}}, #URL_PAGE{verifiez-vos-mails}}
|
|
*
|
|
* Syntaxe legacy :
|
|
* #FORMULAIRE_INSCRIPTION{1comite,#ENV{id_rubrique}}
|
|
*
|
|
*
|
|
* @param string $mode
|
|
* @param array $options
|
|
* @param string $retour
|
|
* @return array|false
|
|
*/
|
|
function formulaires_inscription_charger_dist($mode = '', $options = [], $retour = '') {
|
|
|
|
$id = ($options['id'] ?? 0);
|
|
|
|
// 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($GLOBALS['visiteur_session']['statut']) and ($GLOBALS['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
|
|
*
|
|
* @param string $mode
|
|
* @param array $options
|
|
* @param string $retour
|
|
* @return array
|
|
*/
|
|
function formulaires_inscription_verifier_dist($mode = '', $options = [], $retour = '') {
|
|
set_request('_upgrade_auteur'); // securite
|
|
include_spip('inc/filtres');
|
|
$erreurs = array();
|
|
|
|
$id = ($options['id'] ?? 0);
|
|
|
|
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, $options);
|
|
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 empty($declaration['pass'])) {
|
|
// irrecuperable
|
|
$erreurs['message_erreur'] = _T('form_forum_access_refuse');
|
|
} else {
|
|
if (($row['statut'] != 'nouveau') and empty($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 resinscrire');
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
|
|
/**
|
|
* Si inscriptions pas autorisees, retourner une chaine d'avertissement
|
|
*
|
|
* @param string $mode
|
|
* @param array $options
|
|
* @param string $retour
|
|
* @return array
|
|
*/
|
|
function formulaires_inscription_traiter_dist($mode = '', array $options = [], $retour = '') {
|
|
if ($retour) {
|
|
refuser_traiter_formulaire_ajax();
|
|
}
|
|
|
|
include_spip('inc/filtres');
|
|
include_spip('inc/autoriser');
|
|
|
|
$id = ($options['id'] ?? 0);
|
|
|
|
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');
|
|
$mail_destination = sql_getfetsel('email','spip_auteurs',"id_auteur=" . lire_config('balint/id_contact'));
|
|
|
|
$inscrire_auteur = charger_fonction('inscrire_auteur', 'action');
|
|
$desc = $inscrire_auteur($mode, $mail_complet, $nom, $options);
|
|
|
|
// AJOUT GAMUZA - BALINT
|
|
$msg = "Une personne vient de s'inscrire sur le site de l'AIPB :
|
|
Nom : $nom
|
|
Email : $mail_complet
|
|
Vous pouvez lui accorder le statut de membre le cas échéant.";
|
|
$sujet = "Nouvelle inscription sur le site de l'AIPB";
|
|
$notifications = charger_fonction('notifications', 'inc');
|
|
notifications_envoyer_mails($mail_destination, $msg, $sujet);
|
|
|
|
|
|
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 {
|
|
$retours = array(
|
|
'message_ok' => _T('form_forum_identifiant_mail'),
|
|
'id_auteur' => $desc['id_auteur'],
|
|
);
|
|
|
|
// Si on demande à rediriger juste après validation du formulaire
|
|
if ($retour) {
|
|
$retours['redirect'] = $retour;
|
|
}
|
|
|
|
return $retours;
|
|
}
|
|
}
|