function instituer_un_forum($statut,$row){ $id_forum = $row['id_forum']; $old = $row['statut']; // rien a faire si pas de changement de statut if ($old==$statut) return; // changer le statut de toute l'arborescence dependant de ce message $id_messages = array($id_forum); while ($id_messages) { sql_updateq("spip_forum", array("statut" => $statut), sql_in("id_forum", $id_messages) ." AND statut = '$old'"); $id_messages = array_map('reset',sql_allfetsel("id_forum", "spip_forum", sql_in("id_parent", $id_messages))); } // Notifier de la publication du message, s'il etait 'prop' if ($old=='prop' AND $statut=='publie') { if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('forumvalide', $id_forum); } } // mettre a jour la date du thread // si publie, ou que tout le thread est prive, // mettre la date du thread a 'maintenant' (date de publi du message) // sinon prendre la date_heure du dernier message public // c'est imparfait dans le cas ou les crayons ont ete utilises pour modifier ce message entre temps // car la date_thread aurait cette derniere date alors que pas le message // mais c'est au mieux de ce que l'on peut faire quand on depublie un SPAM ou supprime un message if ($statut=='publie' OR $old=='publie') { if ($statut=='publie' OR !($date_thread = sql_getfetsel("date_heure", "spip_forum", "statut='publie' AND id_thread=".$row['id_thread'], "", "date_heure DESC","0,1"))){ $date_thread = date('Y-m-d H:i:s'); } sql_updateq("spip_forum", array("date_thread" => $date_thread), "id_thread=".$row['id_thread']); } // invalider les pages comportant ce forum include_spip('inc/invalideur'); include_spip('inc/forum'); $index_forum = calcul_index_forum($row['id_article'], $row['id_breve'], $row['id_rubrique'], $row['id_syndic']); suivre_invalideur("id='id_forum/$index_forum'"); // Reindexation du thread (par exemple) pipeline('post_edition', array( 'args' => array( 'table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer', ), 'data' => null ) ); }
function revision_forum($id_forum, $c=false) { $t = sql_fetsel("*", "spip_forum", "id_forum=".sql_quote($id_forum)); if (!$t) { spip_log("erreur forum $id_forum inexistant"); return; } // Calculer l'invalideur des caches lies a ce forum if ($t['statut'] == 'publie') { include_spip('inc/invalideur'); $invalideur = "id='id_forum/" . calcul_index_forum( $t['id_article'], $t['id_breve'], $t['id_rubrique'], $t['id_syndic'] ) . "'"; } else $invalideur = ''; // Supprimer 'http://' tout seul if (isset($c['url_site'])) { include_spip('inc/filtres'); $c['url_site'] = vider_url($c['url_site'], false); } $r = modifier_contenu('forum', $id_forum, array( 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur ), $c); $id_thread = $t["id_thread"]; $cles = array(); foreach (array('id_article', 'id_rubrique', 'id_syndic', 'id_breve') as $k) { if (isset($c[$k])) $cles[$k] = $c[$k]; } // Modification des id_article etc // (non autorise en standard mais utile pour des crayons) // on deplace tout le thread {sauf les originaux}. if ($cles) { sql_updateq("spip_forum", $cles, "id_thread=$id_thread AND statut!='original'"); // on n'affecte pas $r, car un deplacement ne change pas l'auteur } // s'il y a vraiment eu une modif, on // enregistre le nouveau date_thread, // si le message est bien publie ou si c'est un thread non public if ($r AND ($t['statut'] == 'publie' OR !sql_countsel("spip_forum", "statut='publie' AND id_thread=".intval($id_thread)))) { // on ne stocke ni le numero IP courant ni le nouvel id_auteur // dans le message modifie (trop penible a l'usage) ; mais du // coup attention a la responsabilite editoriale /* sql_updateq('spip_forum', array('ip'=>($GLOBALS['ip']), 'id_auteur'=>($GLOBALS['visiteur_session']['id_auteur'])),"id_forum=".sql_quote($id_forum)); */ // & meme ca ca pourrait etre optionnel sql_updateq("spip_forum", array("date_thread" => date('Y-m-d H:i:s')), "id_thread=".intval($id_thread)); } }