[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 if (!defined("_ECRIRE_INC_VERSION")) return; 14 include_spip('inc/actions'); 15 16 // http://doc.spip.org/@affiche_navigation_forum 17 function affiche_navigation_forum($script, $args, $debut, $i, $pack, $ancre, $query) 18 { 19 $nav = ($i <=0) ? '' : ("<a href='" . generer_url_ecrire($script, $args) ."'>0</a> ... |\n"); 20 21 $e = (_SPIP_AJAX === 1 ); 22 23 $n = spip_num_rows($query); 24 25 for (;$n;$n--){ 26 27 if ($i == $pack*floor($i/$pack)) { 28 if ($i == $debut) 29 $nav .= "<span class='spip_medium'><b>$i</b></span> |\n"; 30 else { 31 $h = generer_url_ecrire($script, $args . "&debut=$i"); 32 if ($e) $e = "\nonclick=" . ajax_action_declencheur($h,$ancre); 33 $nav .= "<a href='$h'$e>$i</a> |\n"; 34 } 35 } 36 $i ++; 37 } 38 39 $h = generer_url_ecrire($script, $args . "&debut=$i"); 40 41 if ($e) $e = "\nonclick=" . ajax_action_declencheur($h,$ancre); 42 43 return "$nav<a href='$h'$e>...</a> |"; 44 } 45 46 47 // tous les boutons de controle d'un forum 48 // nb : les forums prives (privrac ou prive), une fois effaces 49 // (privoff), ne sont pas revalidables ; le forum d'admin (privadm) 50 // n'est pas effacable 51 52 // http://doc.spip.org/@boutons_controle_forum 53 function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref, $forum_ip) { 54 $controle = ''; 55 56 57 // selection du logo et des boutons correspondant a l'etat du forum 58 switch ($forum_stat) { 59 # forum sous un article dans l'espace prive 60 case "prive": 61 $logo = "forum-interne-24.gif"; 62 $valider = false; 63 $valider_repondre = false; 64 $suppression = 'privoff'; 65 break; 66 # forum des administrateurs 67 case "privadmin": 68 $logo = "forum-admin-24.gif"; 69 $valider = false; 70 $valider_repondre = false; 71 $suppression = false; 72 break; 73 # forum de l'espace prive, supprime (non revalidable, 74 # d'ailleurs on ne sait plus a quel type de forum il appartenait) 75 case "privoff": 76 $logo = "forum-interne-24.gif"; 77 $valider = false; 78 $valider_repondre = false; 79 $suppression = false; 80 break; 81 # forum general de l'espace prive 82 case "privrac": 83 $logo = "forum-interne-24.gif"; 84 $valider = false; 85 $valider_repondre = false; 86 $suppression = 'privoff'; 87 break; 88 89 # forum publie sur le site public 90 case "publie": 91 $logo = "forum-public-24.gif"; 92 $valider = false; 93 $valider_repondre = false; 94 $suppression = 'off'; 95 break; 96 # forum supprime sur le site public 97 case "off": 98 $logo = "forum-public-24.gif"; 99 $valider = 'publie'; 100 $valider_repondre = false; 101 $suppression = false; 102 $controle = "<br /><span style='color: red; font-weight: bold;'>"._T('info_message_supprime')." $forum_ip</span>"; 103 if($forum_id_auteur) 104 $controle .= " - <a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$forum_id_auteur") . 105 "'>" ._T('lien_voir_auteur'). "</a>"; 106 break; 107 # forum propose (a moderer) sur le site public 108 case "prop": 109 $logo = "forum-public-24.gif"; 110 $valider = 'publie'; 111 $valider_repondre = true; 112 $suppression = 'off'; 113 break; 114 # forum original (reponse a un forum modifie) sur le site public 115 case "original": 116 $logo = "forum-public-24.gif"; 117 $original = true; 118 break; 119 default: 120 return; 121 } 122 123 $lien = str_replace('&', '&', self()) . "#id$id_forum"; 124 if ($suppression) 125 $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer_forum',"$id_forum-$suppression", _DIR_RESTREINT_ABS . $lien), 126 $logo, 127 "supprimer.gif", 'right', 'non'); 128 129 if ($valider) 130 $controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer_forum',"$id_forum-$valider", _DIR_RESTREINT_ABS . $lien), 131 $logo, 132 "creer.gif", 'right', 'non'); 133 134 if ($valider_repondre) { 135 $dblret = rawurlencode(_DIR_RESTREINT_ABS . $lien); 136 $controle .= icone(_T('icone_valider_message') . " & " . _T('lien_repondre_message'), generer_action_auteur('instituer_forum',"$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=$dblret", true)), 137 $logo, 138 "creer.gif", 'right', 'non'); 139 } 140 141 // TODO: un bouton retablir l'original ? 142 if ($original) { 143 $controle .= "<div style='float:".$GLOBALS['spip_lang_right'].";color:green'>" 144 ."(" 145 ._T('forum_info_original') 146 .")</div>"; 147 } 148 149 return $controle; 150 } 151 152 // recuperer le critere SQL qui selectionne nos forums 153 // http://doc.spip.org/@critere_statut_controle_forum 154 function critere_statut_controle_forum($page, $id_rubrique=0) { 155 156 if (is_array($id_rubrique)) $id_rubrique = join(',',$id_rubrique); 157 if (!$id_rubrique) { 158 $from = 'spip_forum AS F'; 159 $where = ""; 160 $and = ""; 161 } else { 162 if (strpos($id_rubrique,',')) 163 $eq = " IN ($id_rubrique)"; 164 else $eq = "=$id_rubrique"; 165 166 $from = 'spip_forum AS F, spip_articles AS A'; 167 $where = "A.id_secteur$eq AND F.id_article=A.id_article"; 168 $and = ' AND '; 169 } 170 171 switch ($page) { 172 case 'public': 173 $and .= "F.statut IN ('publie', 'off', 'prop') AND F.texte!=''"; 174 break; 175 case 'prop': 176 $and .= "F.statut='prop'"; 177 break; 178 case 'interne': 179 $and .= "F.statut IN ('prive', 'privrac', 'privoff', 'privadm') AND F.texte!=''"; 180 break; 181 case 'vide': 182 $and .= "F.statut IN ('publie', 'off', 'prive', 'privrac', 'privoff', 'privadm') AND F.texte=''"; 183 break; 184 default: 185 $where = '0=1'; 186 $and =''; 187 break; 188 } 189 return array($from, "$where$and"); 190 } 191 192 // Index d'invalidation des forums 193 // http://doc.spip.org/@calcul_index_forum 194 function calcul_index_forum($id_article, $id_breve, $id_rubrique, $id_syndic) { 195 if ($id_article) return 'a'.$id_article; 196 if ($id_breve) return 'b'.$id_breve; 197 if ($id_rubrique) return 'r'.$id_rubrique; 198 if ($id_syndic) return 's'.$id_syndic; 199 } 200 201 // 202 // Recalculer tous les threads 203 // 204 // http://doc.spip.org/@calculer_threads 205 function calculer_threads() { 206 // fixer les id_thread des debuts de discussion 207 spip_query("UPDATE spip_forum SET id_thread=id_forum WHERE id_parent=0"); 208 209 // reparer les messages qui n'ont pas l'id_secteur de leur parent 210 do { 211 $discussion = "0"; 212 $precedent = 0; 213 $r = spip_query("SELECT fille.id_forum AS id, maman.id_thread AS thread FROM spip_forum AS fille, spip_forum AS maman WHERE fille.id_parent = maman.id_forum AND fille.id_thread <> maman.id_thread ORDER BY thread"); 214 while ($row = spip_fetch_array($r)) { 215 if ($row['thread'] == $precedent) 216 $discussion .= "," . $row['id']; 217 else { 218 if ($precedent) 219 spip_query("UPDATE spip_forum SET id_thread=$precedent WHERE id_forum IN ($discussion)"); 220 $precedent = $row['thread']; 221 $discussion = $row['id']; 222 } 223 } 224 spip_query("UPDATE spip_forum SET id_thread=$precedent WHERE id_forum IN ($discussion)"); 225 } while ($discussion != "0"); 226 } 227 228 // Calculs des URLs des forums (pour l'espace public) 229 // http://doc.spip.org/@racine_forum 230 function racine_forum($id_forum){ 231 if (!$id_forum = intval($id_forum)) return; 232 $result = spip_query("SELECT id_parent, id_rubrique, id_article, id_breve, id_syndic FROM spip_forum WHERE id_forum=".$id_forum); 233 234 if($row = spip_fetch_array($result)){ 235 if($row['id_parent']) { 236 return racine_forum($row['id_parent']); 237 } 238 else { 239 if($row['id_rubrique']) return array('rubrique',$row['id_rubrique'], $id_forum); 240 if($row['id_article']) return array('article',$row['id_article'], $id_forum); 241 if($row['id_breve']) return array('breve',$row['id_breve'], $id_forum); 242 if($row['id_syndic']) return array('site',$row['id_syndic'], $id_forum); 243 } 244 } 245 } 246 247 // http://doc.spip.org/@generer_url_forum_dist 248 function generer_url_forum_dist($id_forum, $show_thread=false) { 249 if (!$id_forum) return ''; 250 list($type, $id, $id_thread) = racine_forum($id_forum); 251 if ($id_thread>0 AND $show_thread) 252 $id_forum = $id_thread; 253 switch($type) { 254 case 'article': 255 return generer_url_article($id)."#forum$id_forum"; 256 break; 257 case 'breve': 258 return generer_url_breve($id)."#forum$id_forum"; 259 break; 260 case 'rubrique': 261 return generer_url_rubrique($id)."#forum$id_forum"; 262 break; 263 case 'site': 264 return generer_url_site($id)."#forum$id_forum"; 265 break; 266 default: 267 return ''; 268 } 269 } 270 271 // Quand on edite un forum, on tient a conserver l'original 272 // sous forme d'un forum en reponse, de statut 'original' 273 // http://doc.spip.org/@conserver_original 274 function conserver_original($id_forum) { 275 $s = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent="._q($id_forum)." AND statut='original'"); 276 277 if (spip_num_rows($s)) 278 return ''; // pas d'erreur 279 280 // recopier le forum 281 $t = spip_fetch_array( 282 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)) 283 ); 284 285 if ($t 286 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)).")")) { 287 $id_copie = spip_insert_id(); 288 spip_query("UPDATE spip_forum SET id_parent="._q($id_forum).", statut='original' WHERE id_forum=$id_copie"); 289 return ''; // pas d'erreur 290 } 291 292 return '&erreur'; 293 } 294 295 // appelle conserver_original(), puis modifie le contenu via l'API inc/modifier 296 // http://doc.spip.org/@enregistre_et_modifie_forum 297 function enregistre_et_modifie_forum($id_forum, $c=false) { 298 if ($err = conserver_original($id_forum)) { 299 spip_log("erreur de sauvegarde de l'original, $err"); 300 return; 301 } 302 303 include_spip('inc/modifier'); 304 return revision_forum($id_forum, $c); 305 } 306 307 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |