From 39884f2e02b6bc3e6fcd7056f6bd154f066c6522 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 4 Sep 2008 14:37:37 +0000 Subject: [PATCH] distinguer editer et instituer auteur et ne pas ecraser l'email lorsqu'il n'est pas editable (#1503) --- .gitattributes | 1 + ecrire/action/editer_auteur.php | 90 ++++++++++++++++++++++++++---- ecrire/action/instituer_auteur.php | 34 +++++++++++ ecrire/inc/auteur_infos.php | 2 +- 4 files changed, 115 insertions(+), 12 deletions(-) create mode 100644 ecrire/action/instituer_auteur.php diff --git a/.gitattributes b/.gitattributes index 2d68bba543..0840c9a502 100644 --- a/.gitattributes +++ b/.gitattributes @@ -75,6 +75,7 @@ ecrire/action/export_all.php -text ecrire/action/iconifier.php -text ecrire/action/index.php -text ecrire/action/instituer_article.php -text +ecrire/action/instituer_auteur.php -text ecrire/action/instituer_breve.php -text ecrire/action/instituer_collaboration.php -text ecrire/action/instituer_forum.php -text diff --git a/ecrire/action/editer_auteur.php b/ecrire/action/editer_auteur.php index 1733ee8109..6591d3704e 100644 --- a/ecrire/action/editer_auteur.php +++ b/ecrire/action/editer_auteur.php @@ -40,7 +40,7 @@ function action_editer_auteur_dist() { _request('restreintes'), $r[0]); - if ($echec) { + if ($echec AND $redirect) { // revenir au formulaire de saisie $ret = !$redirect ? '' @@ -48,11 +48,6 @@ function action_editer_auteur_dist() { spip_log("echec editeur auteur: " . join(' ',$echec)); $echec = '&echec=' . join('@@@', $echec); $redirect = generer_url_ecrire('auteur_infos',"id_auteur=$id_auteur$echec$ret",'&'); - } else { - // modif: renvoyer le resultat ou a nouveau le formulaire si erreur - if (!$redirect) - $redirect = generer_url_ecrire("auteur_infos", "id_auteur=$id_auteur", '&', true); - else $redirect = rawurldecode($redirect); } } if ($redirect) { @@ -147,7 +142,7 @@ function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_aute // 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))) { + if ($email!==null AND autoriser('modifier', 'auteur', $id_auteur, NULL, array('mail'=>1))) { $email = trim($email); if ($email !='' AND !email_valide($email)) { $echec[]= 'info_email_invalide'; @@ -213,9 +208,40 @@ function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_aute 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); + // Envoyer aux plugins + $champs = pipeline('pre_edition', + array( + 'args' => array( + 'table' => 'spip_auteurs', + 'id_objet' => $id_auteur + ), + 'data' => $c + ) + ); + include_spip('inc/modifier'); + revision_auteur($id_auteur, $champs); + + // Invalider les caches + include_spip('inc/invalideur'); + suivre_invalideur("id='id_auteur/$id_auteur'"); + + // Pipeline + pipeline('post_edition', + array( + 'args' => array( + 'table' => 'spip_auteurs', + 'id_objet' => $id_auteur + ), + 'data' => $champs + ) + ); + + // Notifications + if ($notifications = charger_fonction('notifications', 'inc')) { + $notifications('editerauteur', $id_auteur, $champs); + } + return array($id_auteur, $echec); } @@ -224,11 +250,53 @@ function action_legender_auteur_post($statut, $nom, $email, $bio, $nom_site_aute function instituer_auteur($id_auteur, $c) { if (!$id_auteur=intval($id_auteur)) return false; - + $champs = array(); + + $statut = $statut_ancien = sql_getfetsel('statut','spip_auteurs','id_auteur='.intval($id_auteur)); + if (isset($c['statut'])) - sql_updateq('spip_auteurs', array('statut' => $c['statut']), 'id_auteur='.$id_auteur); + $statut = $champs['statut'] = $c['statut']; + + // Envoyer aux plugins + $champs = pipeline('pre_edition', + array( + 'args' => array( + 'table' => 'spip_auteurs', + 'id_objet' => $id_auteur + ), + 'data' => $champs + ) + ); + if (!count($champs)) return; + sql_updateq('spip_auteurs', $champs , 'id_auteur='.$id_auteur); + include_spip('inc/modifier'); revision_auteur($id_auteur, $c); + + // Invalider les caches + include_spip('inc/invalideur'); + suivre_invalideur("id='id_auteur/$id_auteur'"); + + // Pipeline + pipeline('post_edition', + array( + 'args' => array( + 'table' => 'spip_auteurs', + 'id_objet' => $id_auteur + ), + 'data' => $champs + ) + ); + + // Notifications + if ($notifications = charger_fonction('notifications', 'inc')) { + $notifications('instituerauteur', $id_auteur, + array('statut' => $statut, 'statut_ancien' => $statut_ancien) + ); + } + + return ''; // pas d'erreur + } ?> diff --git a/ecrire/action/instituer_auteur.php b/ecrire/action/instituer_auteur.php new file mode 100644 index 0000000000..aa0c36d44b --- /dev/null +++ b/ecrire/action/instituer_auteur.php @@ -0,0 +1,34 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2008 * + * 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 action_instituer_auteur_dist() { + + $securiser_action = charger_fonction('securiser_action', 'inc'); + $arg = $securiser_action(); + + list($id_auteur, $statut) = preg_split('/\W/', $arg); + if (!$statut) $statut = _request('statut'); // cas POST + if (!$statut) return; // impossible mais sait-on jamais + + $id_auteur = intval($id_auteur); + + include_spip('action/editer_auteur'); + + $c = array('statut' => $statut); + + instituer_auteur($id_auteur, $c); + +} + +?> diff --git a/ecrire/inc/auteur_infos.php b/ecrire/inc/auteur_infos.php index 39321adf26..6fb976785e 100644 --- a/ecrire/inc/auteur_infos.php +++ b/ecrire/inc/auteur_infos.php @@ -34,7 +34,7 @@ function inc_auteur_infos_dist($auteur, $new, $echec, $edit, $id_article, $redir $bloc_statut = $instituer_auteur($auteur); if ($bloc_statut) { $bloc_statut .= "<div style='text-align: right'><input type='submit' value='"._T('bouton_enregistrer')."' class='fondo' /></div>"; - $bloc_statut = generer_action_auteur('editer_auteur', $id_auteur, $redirect, $bloc_statut, ' method="post"'); + $bloc_statut = generer_action_auteur('instituer_auteur', $id_auteur, self(), $bloc_statut, ' method="post"'); } } else { $bloc_statut = ""; -- GitLab