compteSPIP/formulaires/editer_compte_spip.php

374 lines
11 KiB
PHP

<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
function formulaires_editer_compte_spip_saisies_dist($id_auteur = 'new', $redirect = '') {
$saisies = $GLOBALS['comptespip_editer'];
return $saisies;
}
function formulaires_editer_compte_spip_charger_dist($id_auteur = 'new', $redirect = ''){
$id_auteur = comptespip_recupIdauteur($id_auteur);
$valeurs = ['id_auteur' => $id_auteur];
if (intval($id_auteur)) {
$valeurs = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
if (lire_config('comptespip/modif_logo_auteur')) {
$valeurs['_bigup_rechercher_fichiers'] = 'true';
$valeurs['logo'] = '';
}
if (test_plugin_actif('verifmob') and isset($valeurs['telephone'])) {
$valeurs['mobile'] = substr($valeurs['telephone'],1);
}
} else {
if (test_plugin_actif('verifmob')) {
$valeurs['mobile'] = '';
}
}
if (test_plugin_actif('verifmob')) {
$valeurs['indicatif'] = '33';
$valeurs['confirmation_sms'] = '';
}
$valeurs['alea'] = '';
$valeurs['new_password'] = '';
$valeurs['new_password_confirmation'] = '';
$valeurs['password'] = '';
$valeurs['password_confirmation'] = '';
$valeurs['pass_longeur_mini'] = _PASS_LONGUEUR_MINI;
return $valeurs;
}
function formulaires_editer_compte_spip_verifier_dist($id_auteur = 'new', $redirect = ''){
$id_auteur = comptespip_recupIdauteur($id_auteur);
$erreurs = array();
$mode = lire_config('comptespip/statut');
if (!in_array($mode, ['6forum', '1comite', '0minirezo'])) {
$erreurs['message_erreur'] = _T('pass_rien_a_faire_ici');
}
// mot de passe
if (_request('new_password') != _request('new_password_confirmation')){
$erreurs['new_password_confirmation'] = _T('info_passes_identiques');
}
//if ( strlen(_request('password')) > 0 and 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 ($id_auteur === 'new') {
if (!_request('new_password')){
$erreurs['new_password'] = _T('info_obligatoire');
}
if (!_request('new_password_confirmation')){
$erreurs['new_password_confirmation'] = _T('info_obligatoire');
}
}
// email
if (!$mail = strval(_request('email'))) {
$erreurs['email'] = _T('info_obligatoire');
} else {
include_spip('inc/filtres');
if (!email_valide($mail)) {
$erreurs['email'] = _T('info_email_invalide');
} else {
$unicite_email = lire_config('comptespip/unicite_email');
if ( $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, _request('nom'), $id_auteur);
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, row',
'spip_auteurs',
[
'email=' . sql_quote($declaration['email']),
'id_auteur!='.intval($id_auteur)
]
)) {
if (($row['statut'] == '5poubelle') and empty($row['pass'])) {
// irrecuperable
$erreurs['message_erreur'] = _T('form_forum_access_refuse');
} else {
if (($row['statut'] != 'nouveau') and empty($row['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');
}
}
}
}
}
}
}
}
// si verif mobile, unicite du login (telephone)
if (test_plugin_actif('verifmob')) {
$tel = '0' . _request('mobile');
$test = sql_countsel('spip_auteurs', [
'login='.sql_quote($tel),
'id_auteur!='.intval($id_auteur)
]);
if ($test) {
$erreurs['mobile'] = _T('comptespip:telephone_deja_enregistre');
}
}
return $erreurs;
}
function formulaires_editer_compte_spip_traiter_dist($id_auteur = 'new', $redirect = ''){
$saisies = $GLOBALS['comptespip_editer'];
$id_auteur = comptespip_recupIdauteur($id_auteur);
$mode = lire_config('comptespip/statut');
$retour = [];
if (test_plugin_actif('verifmob')) {
$tel = '0' . _request('mobile');
set_request('telephone', $tel);
}
include_spip('action/editer_auteur');
include_spip('inc/acces');
$password = _request('new_password');
$update = true;
$set = [];
if (!intval($id_auteur)) {
if (function_exists('comptespip_associer_auteur')) {
$id_auteur = comptespip_associer_auteur();
} else {
$id_auteur = auteur_inserer();
}
$update = false;
if (lire_config('comptespip/login_telephone') === 'oui') {
$login = _request('telephone');
} else {
// $search = [ ' ', "'", 'é' ];
// $replace = [ '_', '_', 'e' ];
// $login = strtolower(str_replace($search, $replace, _request('nom')));
// $login .= '_'.$id_auteur;
$login = 'login_'.$id_auteur;
}
$set['login'] = $login;
$set['statut'] = $mode;
if (strlen($password) < 50) {
include_spip('inc/acces');
include_spip('auth/sha256.inc');
$alea_actuel = creer_uniqid();
$pass = spip_sha256($alea_actuel . $password);
$set['pass'] = $pass;
$set['alea_actuel'] = $alea_actuel;
$set['alea_futur'] = $alea_actuel;
} else {
$set['pass'] = $password;
$set['alea_actuel'] = "";
$set['alea_futur'] = creer_uniqid();
}
/*
* Branchement sur le plugin Autorisations etendues
*/
$aut_modele = lire_config('comptespip/aut_modele');
if ($aut_modele and test_plugin_actif('auted')) {
$autorisations = sql_getfetsel('aut_modele', 'spip_aut_modeles', 'nom='.sql_quote($aut_modele));
$set['aut_nom'] = $aut_modele;
$set['autorisations'] = $autorisations;
}
$set = pipeline(
'post_edition',
array(
'args' => array(
'table' => 'spip_auteurs',
'id_objet' => $id_auteur,
'action' => 'comptespip_creer_auteur',
),
'data' => $set
)
);
} else {
if ($password) {
// si le password fait moins de 50 caracteres, on peut penser que le javascript n'a pas fonctionné, on crypte alors le mdp
if (strlen($password) < 50) {
include_spip('inc/acces');
include_spip('auth/sha256.inc');
$alea_actuel = creer_uniqid();
$pass = spip_sha256($alea_actuel . $password);
$set['pass'] = $pass;
$set['alea_actuel'] = $alea_actuel;
$set['alea_futur'] = $alea_actuel;
} else {
$set['pass'] = $password;
$set['alea_actuel'] = "";
$set['alea_futur'] = creer_uniqid();
}
}
if (lire_config('comptespip/login_telephone') === 'oui') {
$set['login'] = _request('telephone');
}
}
if (!empty($saisies)) {
foreach ($saisies as $saisie) {
$champ = $saisie['options']['nom'];
if (
isset($saisies['options']['fonction'])
and $f = $saisies['options']['fonction']
) {
$f($id_auteur, $champ, _request($champ));
} elseif (
isset($saisies['options']['modifier'])
and $m = $saisies['options']['modifier']
) {
$set[$champ] = $m($champ, _request($champ));
} else {
$set[$champ] = _request($champ);
}
}
if (count($set) > 0) {
$set = pipeline(
'post_edition',
array(
'args' => array(
'table' => 'spip_auteurs',
'id_objet' => $id_auteur,
'action' => 'comptespip_modifier_auteur',
'update' => $update
),
'data' => $set
)
);
$r = sql_updateq('spip_auteurs', $set, 'id_auteur='.intval($id_auteur));
}
}
// envoyer le mail d'inscription si nouveau compte
if (!$update) {
$envoyer_mail = charger_fonction('comptespip_mail_inscription','inc');
$envoyer_mail($id_auteur);
}
if ($update and lire_config('comptespip/modif_logo_auteur')) {
comptespip_save_logo_auteur($id_auteur);
}
include_spip('inc/invalideur');
suivre_invalideur("id='id_auteur/$id_auteur'");
if (!$update and 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['redirect'] = "spip.php";
if (lire_config('comptespip/page_redirection_connexion')) {
$retour['redirect'] = parametre_url(generer_url_public(lire_config('comptespip/page_redirection_connexion'),'',true),'id_auteur',intval($id_auteur));
}
if ($redirect) {
$retour['redirect'] = $redirect;
}
$retour['message_ok'] = _T('form_forum_identifiant_mail');
$retour = pipeline(
'comptespip_post_traiter',
array(
'args' => $set,
'data' => $retour
)
);
return $retour;
}
if ($update) {
$auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur));
include_spip('inc/session');
actualiser_sessions($auteur);
}
if ($r) {
$retour['message_ok'] = _T('comptespip:modification_compte_ok');
} else {
$retour['message_erreur'] = _T('comptespip:erreur_edition_compte');
}
if ($redirect) {
$retour['redirect'] = $redirect;
}
$retour = pipeline(
'comptespip_post_traiter',
array(
'args' => $set,
'data' => $retour
)
);
return $retour;
}
function comptespip_save_logo_auteur($id_auteur){
include_spip('inc/joindre_document');
set_request('joindre_upload','ok');
$files = joindre_trouver_fichier_envoye();
if (is_array($files)) {
include_spip('action/editer_logo');
logo_supprimer('auteur', $id_auteur, 'on');
include_spip('inc/autoriser');
autoriser_exception('modifier', 'auteur', $id_auteur);
$ajouter_document = charger_fonction('ajouter_documents', 'action');
$ajouter_document('new', $files, "auteur", $id_auteur, 'logoon');
autoriser_exception('modifier', 'article', $id_auteur, false);
}
}
/**
* Récuperation du bon id_auteur, 2 possibilités
* 1. Si le premier arg de la fonction chargé, id_auteur de l'ENV,
* On vérifie donc si on a le droit via l'autorisation : adminstrer ccomptespip
* 2. si le premier arg de la fonction est vide, alors on utilise id_auteur de la session, si pas connecté, renvoie 'new'
*
* @param $id_auteur, si pas renseigné : 'new'
*
* @return id_auteur
*/
function comptespip_recupIdauteur($id_auteur){
static $id;
if ($id === null) {
include_spip('inc/autoriser');
if (autoriser("administrer","comptespip") and intval($id_auteur)) {
$id = intval($id_auteur);
} else if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) {
$id = $GLOBALS['visiteur_session']['id_auteur'];
} else {
$id = 'new';
}
}
return $id;
}