compteSPIP/formulaires/inscription.php

220 lines
6.9 KiB
PHP

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2020 *
* 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, $retour = '') {
global $visiteur_session;
// il faut avoir renseigné le statut dans la conf du plugin
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
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)) {
if (isset($visiteur_session['statut'])) {
return false;
}
$valeurs = array(
'nom_inscription' => '',
'mail_inscription' => '',
'prenom' => '',
'password' => '',
'password_confirmation' => '',
'id' => $id,
'_mode' => $mode,
'cle'
);
return $valeurs;
}
// Si inscriptions pas autorisees, retourner une chaine d'avertissement
function formulaires_inscription_verifier_dist($mode = '', $id = 0, $retour = '') {
include_spip('inc/filtres');
$erreurs = array();
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
$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');
} else {
include_spip('inc/filtres');
if (!email_valide($mail)) {
$erreurs['mail_inscription'] = _T('info_email_invalide');
}
}
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');
}
$unicite_email = lire_config('comptespip/unicite_email');
if (!count($erreurs) and $unicite_email !== "non") {
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 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');
}
}
}
return $erreurs;
}
function formulaires_inscription_traiter_dist($mode = '', $id = 0, $retour = '') {
include_spip('inc/filtres');
include_spip('inc/autoriser');
include_spip('action/editer_auteur');
//if (!autoriser('inscrireauteur', $mode, $id)) {
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
$desc = 'rien a faire ici';
} else {
$nom = _request('nom_inscription');
$mail_complet = _request('mail_inscription');
$prenom = _request('prenom');
$set_auteurs = [
'nom' => $nom,
'email' => $mail_complet,
'statut' => '1comite',
'login' => 'login_'.time(),
'prenom' => $prenom,
];
// associer un modele d'autorisations
$aut_modele = lire_config('comptespip/aut_modele');
if ($aut_modele) {
$autorisations = sql_getfetsel('aut_modele','spip_aut_modeles','nom='.sql_quote($aut_modele));
$set_auteurs['autorisations'] = $autorisations;
$set_auteurs['aut_nom'] = $aut_modele;
}
$set_auteurs = pipeline('comptespip_pre_inscription',[
'args' => [],
'data' => $set_auteurs
]);
$id_auteur = auteur_inserer(null, $set_auteurs);
$desc['id_auteur'] = $id_auteur;
if ($id_auteur) {
$search = [ ' ', "'", 'é' ];
$replace = [ '_', '_', 'e' ];
$login = strtolower(str_replace($search, $replace, $nom));
$login .= '_'.$id_auteur;
$pass = _request('password');
$data = pipeline('comptespip_pre_login',[
'args' => ['id_auteur' => $id_auteur],
'data' => [ 'login' => $login]
]);
if (isset($data['login'])) {
$login = $data['login'];
}
if (isset($data['pass'])) {
$pass = $data['pass'];
}
$set_instituer = [
'pass' => $pass,
'login' => $login
];
auteur_instituer($id_auteur, $set_instituer);
}
$f = charger_fonction('comptespip_mail_inscription','inc');
$f($id_auteur,compact('pass'));
if (lire_config('comptespip/connexion_auto')) {
// loguer le compte créé (on a vérifié par SMS)
$auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur));
include_spip('inc/auth');
auth_loger($auteur);
$retour = parametre_url(generer_url_public(lire_config('comptespip/page_redirection_connexion'),'',true),'id_auteur',intval($id_auteur));
if (lire_config('comptespip/page_redirection_connexion')) {
$retour = parametre_url(generer_url_public(lire_config('comptespip/page_redirection_connexion'),'',true),'id_auteur',intval($id_auteur));
}
return array('message_ok' => _T('form_forum_identifiant_mail'), 'redirect' => $retour);
}
}
// erreur ?
if (is_string($desc)) {
return array('message_erreur' => $desc);
} // OK
else {
return array('message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']);
}
}