Skip to content
Extraits de code Groupes Projets
Valider ecbfabfb rédigé par Fil's avatar Fil
Parcourir les fichiers

suite de [11168] pour unifier la gestion de spip_auteurs avec inc/modifier ;...

suite de [11168] pour unifier la gestion de spip_auteurs avec inc/modifier ; corrige un bug sur les sessions php : les guillemets prenaient un backslash de plus a chaque tour a cause de _q()
parent a4242fae
Branches
Étiquettes
Aucune requête de fusion associée trouvée
......@@ -62,28 +62,29 @@ function action_editer_auteur_dist() {
function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_auteur, $url_site, $new_login, $new_pass, $new_pass2, $perso_activer_imessage, $pgp, $lier_id_article=0, $id_parent=0, $restreintes= NULL, $id_auteur=0) {
global $visiteur_session;
include_spip('inc/filtres');
include_spip('inc/acces');
$echec = array();
//
// si id_auteur est hors table, c'est une creation sinon une modif
//
// Ce qu'on va demander comme modifications
$c = array();
//
// si id_auteur est hors table, c'est une creation sinon une modif
//
if ($id_auteur) {
$auteur = sql_fetsel("nom, login, bio, email, nom_site, url_site, pgp, extra, id_auteur, source, imessage", "spip_auteurs", "id_auteur=$id_auteur");
}
$source = $auteur['source'];
}
if (!$auteur) {
$id_auteur = 0;
$auteur = array();
$auteur['source'] = 'spip';
}
// login et mot de passe
$modif_login = false;
$old_login = $auteur['login'];
$c['source'] = $source = 'spip';
}
if (($new_login<>$old_login)
AND ($auteur['source'] == 'spip' OR !spip_connect_ldap())
// login et mot de passe
if (isset($new_login)
AND $new_login != $auteur['login']
AND ($source == 'spip' OR !spip_connect_ldap())
AND autoriser('modifier','auteur', $id_auteur, NULL, array('restreintes'=>1))) {
if ($new_login) {
if (strlen($new_login) < _LOGIN_TROP_COURT)
......@@ -92,91 +93,85 @@ function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_aute
$n = sql_countsel('spip_auteurs', "login=" . sql_quote($new_login) . " AND id_auteur!=$id_auteur AND statut!='5poubelle'");
if ($n)
$echec[]= 'info_login_existant';
else if ($new_login != $old_login) {
$modif_login = true;
$auteur['login'] = $new_login;
else if ($new_login != $auteur['login']) {
$c['login'] = $new_login;
if (strlen($new_login))
sql_updateq('spip_auteurs', array('login' => ''),
'login='.sql_quote($new_login)." AND statut='5poubelle'");
}
}
} else {
// suppression du login
$auteur['login'] = '';
$modif_login = true;
// suppression du login
$c['login'] = '';
}
}
// changement de pass, a securiser en jaja ?
if ($new_pass AND ($statut != '5poubelle') AND $auteur['login'] AND $auteur['source'] == 'spip'
AND autoriser('modifier','auteur', $id_auteur)) {
if ($new_pass != $new_pass2)
// creation ou changement de pass, a securiser en jaja ?
if (strlen($new_pass)
AND $statut != '5poubelle'
AND $source == 'spip'
AND autoriser('modifier','auteur', $id_auteur)
) {
if (isset($new_pass2) AND $new_pass != $new_pass2)
$echec[]= 'info_passes_identiques';
else if ($new_pass AND strlen($new_pass) < 6)
$echec[]= 'info_passe_trop_court';
else {
$modif_login = true;
if ($id_auteur OR $source == 'spip') {
$htpass = generer_htpass($new_pass);
$alea_actuel = creer_uniqid();
$alea_futur = creer_uniqid();
$pass = md5($alea_actuel.$new_pass);
$c['pass'] = $pass;
$c['htpass'] = $htpass;
$c['alea_actuel'] = $alea_actuel;
$c['alea_futur'] = $alea_futur;
$c['low_sec'] = '';
}
}
}
if ($new_pass AND ($id_auteur OR $auteur['source'] == 'spip')) {
$htpass = generer_htpass($new_pass);
$alea_actuel = creer_uniqid();
$alea_futur = creer_uniqid();
$pass = md5($alea_actuel.$new_pass);
$auteur['pass'] = $pass;
$auteur['htpass'] = $htpass;
$auteur['alea_actuel'] = $alea_actuel;
$auteur['alea_futur'] = $alea_futur;
$auteur['low_sec'] = '';
}
if ($modif_login AND ($auteur['id_auteur']<>$visiteur_session['id_auteur'])) {
// supprimer les sessions de cet auteur
// Si on change login ou mot de passe, deconnecter cet auteur,
// sauf si c'est nous-meme !
if ( (isset($c['login']) OR isset($c['pass']))
AND $id_auteur != $visiteur_session['id_auteur']) {
$session = charger_fonction('session', 'inc');
$session($auteur['id_auteur']);
}
// seuls les admins peuvent modifier le mail
// Seuls les admins peuvent modifier le mail
// les admins restreints ne peuvent modifier celui des autres admins
if (autoriser('modifier', 'auteur', $id_auteur, NULL, array('mail'=>1))) {
$email = trim($email);
if ($email !='' AND !email_valide($email))
$echec[]= 'info_email_invalide';
$auteur['email'] = $email;
$c['email'] = $email;
}
if ($visiteur_session['id_auteur'] == $id_auteur) {
$auteur['imessage'] = $perso_activer_imessage;
}
if ($visiteur_session['id_auteur'] == $id_auteur)
$c['imessage'] = $perso_activer_imessage;
// variables sans probleme
$auteur['bio'] = corriger_caracteres($bio);
$auteur['pgp'] = corriger_caracteres($pgp);
$auteur['nom'] = corriger_caracteres($nom);
$auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;(
$auteur['url_site'] = vider_url($url_site, false);
// recoller les champs du extra
if ($GLOBALS['champs_extra']) {
include_spip('inc/extra');
$auteur['extra'] = extra_update('auteurs', $id_auteur);
} else
$auteur['extra'] = '';
$c['bio'] = $bio;
$c['pgp'] = $pgp;
$c['nom'] = $nom;
$c['nom_site'] = $nom_site_auteur; // attention avec $nom_site_spip ;(
$c['url_site'] = vider_url($url_site, false);
//
// Modifications de statut
//
if ($statut
AND autoriser('modifier', 'auteur', $id_auteur, NULL, array('statut'=>$statut))) {
$auteur["statut"] = $statut;
}
if (isset($statut)
AND autoriser('modifier', 'auteur', $id_auteur, NULL, array('statut'=>$statut)))
$c['statut'] = $statut;
// l'entrer dans la base
if (!$echec) {
if (!$auteur['id_auteur']) { // creation si pas d'id
$auteur['id_auteur'] = $id_auteur = sql_insertq("spip_auteurs", array('nom' => 'temp', 'statut' => $statut));
// Creer l'auteur ?
if (!$id_auteur) {
$id_auteur = sql_insertq("spip_auteurs", array('statut' => $statut));
// recuperer l'eventuel logo charge avant la creation
$id_hack = 0 - $GLOBALS['visiteur_session']['id_auteur'];
......@@ -203,33 +198,30 @@ function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_aute
sql_insertq('spip_auteurs_rubriques', array('id_auteur' => $id_auteur, 'id_rubrique'=>$id_rub));
}
sql_updateq('spip_auteurs', $auteur, "id_auteur=".$auteur['id_auteur']);
}
include_spip('inc/modifier');
// Lier a un article
if (($id_article = intval($lier_id_article))
AND autoriser('modifier', 'article', $id_article)) {
sql_insertq('spip_auteurs_articles', array('id_article' => $id_article, 'id_auteur' =>$id_auteur));
}
// Lier a un article
if (($id_article = intval($lier_id_article))
AND autoriser('modifier', 'article', $id_article)) {
sql_insertq('spip_auteurs_articles', array('id_article' => $id_article, 'id_auteur' =>$id_auteur));
// Modifier en base (declenche les notifications etc.)
instituer_auteur($id_auteur, $c);
}
// Notifications, gestion des revisions, reindexation...
pipeline('post_edition',
array(
'args' => array(
'table' => 'spip_auteurs',
'id_objet' => $id_auteur
),
'data' => $auteur
)
);
return array($id_auteur, $echec);
}
// .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
ecrire_acces();
function instituer_auteur($id_auteur, $c) {
if (!$id_auteur=intval($id_auteur))
return false;
// .. mettre a jour les sessions de cet auteur
include_spip('inc/session');
actualiser_sessions($auteur);
if (isset($c['statut']))
sql_updateq('spip_auteurs', array('statut' => $c['statut']), 'id_auteur='.$id_auteur);
return array($id_auteur, $echec);
revision_auteur($id_auteur, $c);
}
?>
......@@ -221,11 +221,25 @@ function revision_signature($id_signature, $c=false) {
// http://doc.spip.org/@revision_auteur
function revision_auteur($id_auteur, $c=false) {
modifier_contenu('auteur', $id_auteur,
$r = modifier_contenu('auteur', $id_auteur,
array(
'nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))
),
$c);
// .. mettre a jour les fichiers .htpasswd et .htpasswd-admin
if (isset($c['login'])
OR isset($c['pass'])
OR isset($c['statut'])
) {
include_spip('inc/acces');
ecrire_acces();
}
// .. mettre a jour les sessions de cet auteur
include_spip('inc/session');
$c['id_auteur'] = $id_auteur;
actualiser_sessions($c);
}
......
......@@ -131,7 +131,7 @@ function ecrire_fichier_session($fichier, $auteur) {
$texte = "<"."?php\n";
foreach ($auteur as $var => $val)
$texte .= '$GLOBALS[\'visiteur_session\'][\''.$var.'\'] = '
. _q($val).";\n";
. var_export($val,true).";\n";
$texte .= "?".">\n";
return ecrire_fichier($fichier, $texte);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter