From 9808e19b3946d40243c5e0c45f46e3ce4c5b4b6f Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Mon, 13 Nov 2006 22:49:56 +0000 Subject: [PATCH] API pour modifier les forums, et autorisation par defaut = non --- ecrire/action/editer_article.php | 11 ++++-- ecrire/inc/autoriser.php | 13 +++++-- ecrire/inc/modifier.php | 58 ++++++++++++++++++++++++++++---- 3 files changed, 71 insertions(+), 11 deletions(-) diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index 078375a202..dcbaf410d7 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -125,7 +125,7 @@ function revisions_articles ($id_article, $c=false) { $indexation = true; } - return modifier_contenu('article', $id_article, + $r = modifier_contenu('article', $id_article, array( 'champs' => array( 'surtitre', 'titre', 'soustitre', 'descriptif', @@ -133,10 +133,15 @@ function revisions_articles ($id_article, $c=false) { ), 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, - 'indexation' => $indexation, - 'supplement_sql' => 'date_modif=NOW()' + 'indexation' => $indexation ), $c); + + if ($r) { + spip_query("UPDATE spip_articles SET date_modif=NOW() WHERE id_article="._q($id_article)); + } + + return $r; } diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index 71109e31e6..6f5d12a352 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -29,7 +29,7 @@ if (!function_exists('autoriser')) { // API pour une fonction generique d'autorisation : // $qui est : vide (on prend alors auteur_session) // un id_auteur (on regarde dans la base) -// un tableau auteur complet +// un tableau auteur complet, y compris [restreint] // $faire est une action ('modifier', 'publier'...) // $type est un type d'objet ou nom de table ('article') // $id est l'id de l'objet sur lequel on veut agir @@ -57,7 +57,7 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { // (y compris leurs sous-rubriques), ou 0 si admin complet if (is_array($qui) AND $qui['statut'] == '0minirezo' - AND !isset($qui['rubriques'])) { + AND !isset($qui['restreint'])) { if (!isset($restreint[$qui['id_auteur']])) { include_spip('inc/auth'); # pour auth_rubrique $restreint[$qui['id_auteur']] = auth_rubrique($qui['id_auteur'], $qui['statut']); @@ -206,6 +206,15 @@ function autoriser_moderer_forum_dist($faire, $type, $id, $qui, $opt) { autoriser('modifier', $type, $id, $qui, $opt); } +// Modifier un forum ? +// = jamais ! +// http://doc.spip.org/@autoriser_moderer_forum_dist +function autoriser_modifier_forum_dist($faire, $type, $id, $qui, $opt) { + return + false; +} + + // Moderer la petition ? // = modifier l'article correspondant // = droits par defaut sinon (admin complet pour moderation de tout) diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php index 5bb31f6a51..233e4bb6ea 100644 --- a/ecrire/inc/modifier.php +++ b/ecrire/inc/modifier.php @@ -17,7 +17,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // $options est un array() avec toutes les options // // Pour l'instant fonctionne pour les types : -// article, document +// article, auteur, document, forum +// renvoie false si rien n'a ete modifie, true sinon // // http://doc.spip.org/@modifier_contenu function modifier_contenu($type, $id, $options, $c=false) { @@ -64,10 +65,8 @@ function modifier_contenu($type, $id, $options, $c=false) { foreach ($champs as $champ => $val) $update[] = $champ . '=' . _q($val); - if (!count($update)) return; - - if ($options['supplement_sql']) - $update[] = $options['supplement_sql']; + if (!count($update)) + return false; spip_query($q = "UPDATE spip_$table_objet SET ".join(', ',$update)." WHERE $id_table_objet=$id"); @@ -101,6 +100,7 @@ function modifier_contenu($type, $id, $options, $c=false) { ) ); + return true; } // http://doc.spip.org/@revision_document @@ -118,7 +118,6 @@ function revision_document($id_document, $c=false) { // http://doc.spip.org/@revision_auteur function revision_auteur($id_auteur, $c=false) { - include_spip('inc/modifier'); return modifier_contenu('auteur', $id_auteur, array( @@ -129,5 +128,52 @@ function revision_auteur($id_auteur, $c=false) { } +// Quand on edite un forum, on tient a conserver l'original +// sous forme d'un forum en reponse, de statut 'original' +function conserver_original($id_forum) { + $s = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent="._q($id_forum)." AND statut='original'"); + + if (spip_num_rows($s)) + return true; + + // recopier le forum + $t = spip_fetch_array( + spip_query("SELECT date_heure,titre,texte,auteur,email_auteur,nom_site,url_site,ip,id_auteur,idx,id_thread FROM spip_forum WHERE id_forum="._q($id_forum)) + ); + + if ($t + AND spip_query("INSERT spip_forum (date_heure,titre,texte,auteur,email_auteur,nom_site,url_site,ip,id_auteur,idx,id_thread) VALUES (".join(',',array_map('_q', $t)).")")) { + $id_copie = spip_insert_id(); + spip_query("UPDATE spip_forum SET id_parent="._q($id_forum).", statut='original' WHERE id_forum=$id_copie"); + return true; + } + + return false; +} + +// http://doc.spip.org/@revision_auteur +function revision_forum($id_forum, $c=false) { + + if (!conserver_original($id_forum)) { + spip_log("erreur de sauvegarde de l'original"); + return; + } + + $r = modifier_contenu('forum', $id_forum, + array( + 'champs' => array('titre', 'texte', 'auteur', 'email_auteur', 'nom_site', 'url_site', 'ip'), + 'nonvide' => array('titre' => _T('info_sans_titre')) + ), + $c); + + // s'il y a vraiment eu une modif, on stocke le numero IP courant + // ainsi que le nouvel id_auteur dans le message modifie + if ($r) { + spip_query("UPDATE spip_forum SET ip="._q($GLOBALS['ip']).", id_auteur="._q($GLOBALS['auteur_session']['id_auteur'])." WHERE id_forum="._q($id_forum)); + } + + return $r; +} + ?> -- GitLab