[ 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 15 include_spip('inc/auth'); 16 include_spip("inc/lang"); 17 18 // http://doc.spip.org/@action_editer_breve_dist 19 function action_editer_breve_dist() { 20 21 $securiser_action = charger_fonction('securiser_action', 'inc'); 22 $arg = $securiser_action(); 23 24 // Envoi depuis les boutons "publier/supprimer cette breve" 25 if (preg_match(',^(\d+)\Wstatut\W(\w+)$,', $arg, $r)) { 26 $id_breve = $r[1]; 27 set_request('statut', $r[2]); 28 revisions_breves($id_breve); 29 } 30 // Envoi depuis le formulaire d'edition pour chgt de langue 31 else if (preg_match(',^(\d+)\W(\w+)$,', $arg, $r)) { 32 revisions_breves_langue($id_breve=$r[1], $r[2], _request('changer_lang')); 33 } 34 // Envoi depuis le formulaire d'edition d'une breve existante 35 else if ($id_breve = intval($arg)) { 36 revisions_breves($id_breve); 37 } 38 // Envoi depuis le formulaire de creation d'une breve 39 else if ($arg == 'oui') { 40 $id_breve = insert_breve(_request('id_parent')); 41 revisions_breves($id_breve); 42 } 43 // Erreur 44 else{ 45 redirige_par_entete('./'); 46 } 47 48 // Rediriger le navigateur 49 $redirect = parametre_url(urldecode(_request('redirect')), 50 'id_breve', $id_breve, '&'); 51 52 redirige_par_entete($redirect); 53 } 54 55 // http://doc.spip.org/@insert_breve 56 function insert_breve($id_rubrique) { 57 58 include_spip('base/abstract_sql'); 59 include_spip('inc/rubriques'); 60 61 // Si id_rubrique vaut 0 ou n'est pas definie, creer la breve 62 // dans la premiere rubrique racine 63 if (!$id_rubrique = intval($id_rubrique)) { 64 $row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 ORDER by 0+titre,titre LIMIT 1")); 65 $id_rubrique = $row['id_rubrique']; 66 } 67 68 // La langue a la creation : c'est la langue de la rubrique 69 $row = spip_fetch_array(spip_query("SELECT lang, id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rubrique")); 70 $choisie = 'non'; 71 $lang = $row['lang']; 72 $id_rubrique = $row['id_secteur']; // garantir la racine 73 74 $id_breve = spip_abstract_insert("spip_breves", 75 "(id_rubrique, statut, date_heure, lang, langue_choisie)", 76 "($id_rubrique, 'prop', NOW(), '$lang', '$choisie')"); 77 return $id_breve; 78 } 79 80 81 // Enregistre une revision de breve 82 // $c est un contenu (par defaut on prend le contenu via _request()) 83 // http://doc.spip.org/@revisions_breves 84 function revisions_breves ($id_breve, $c=false) { 85 include_spip('inc/filtres'); 86 include_spip('inc/rubriques'); 87 include_spip('inc/autoriser'); 88 89 // Ces champs seront pris nom pour nom (_POST[x] => spip_breves.x) 90 $champs_normaux = array('titre', 'texte', 'lien_titre', 'lien_url', 'url_propre'); 91 92 // ne pas accepter de titre vide 93 if (_request('titre', $c) === '') 94 $c = set_request('titre', _T('ecrire:info_sans_titre'), $c); 95 96 $champs = array(); 97 foreach ($champs_normaux as $champ) { 98 $val = _request($champ, $c); 99 if ($val !== NULL) 100 $champs[$champ] = corriger_caracteres($val); 101 } 102 103 // Changer le statut de la breve ? 104 $s = spip_query("SELECT statut, id_rubrique FROM spip_breves WHERE id_breve=$id_breve"); 105 $row = spip_fetch_array($s); 106 $id_rubrique = $row['id_rubrique']; 107 $statut = $row['statut']; 108 109 if (_request('statut', $c) 110 AND _request('statut', $c) != $statut 111 AND autoriser('publierdans', 'rubrique', $id_rubrique)) { 112 $statut = $champs['statut'] = _request('statut', $c); 113 } 114 115 // Changer de rubrique ? 116 // Verifier que la rubrique demandee est a la racine et differente 117 // de la rubrique actuelle 118 if ($id_parent = intval(_request('id_parent', $c)) 119 AND $id_parent != $id_rubrique 120 AND (spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0 AND id_rubrique=$id_parent")))) { 121 $champs['id_rubrique'] = $id_parent; 122 123 // si la breve est publiee 124 // et que le demandeur n'est pas admin de la rubrique 125 // repasser la breve en statut 'prop'. 126 if ($statut == 'publie') { 127 if (!autoriser('publierdans','rubrique',$id_parent)) 128 $champs['statut'] = $statut = 'prop'; 129 } 130 } 131 132 // recuperer les extras 133 if ($GLOBALS['champs_extra']) { 134 include_spip('inc/extra'); 135 if ($extra = extra_update('breves', $id_breve, $c)) 136 $champs['extra'] = $extra; 137 } 138 139 // Envoyer aux plugins 140 include_spip('inc/modifier'); # temporaire pour eviter un bug 141 $champs = pipeline('pre_edition', 142 array( 143 'args' => array( 144 'table' => 'spip_breves', 145 'id_objet' => $id_breve 146 ), 147 'data' => $champs 148 ) 149 ); 150 151 $update = array(); 152 foreach ($champs as $champ => $val) 153 $update[] = $champ . '=' . _q($val); 154 155 if (!count($update)) return; 156 157 spip_query("UPDATE spip_breves SET ".join(', ',$update)." WHERE id_breve=$id_breve"); 158 159 // marquer le fait que la breve est travaillee par toto a telle date 160 // une alerte sera donnee aux autres redacteurs sur exec=breves_voir 161 if ($GLOBALS['meta']['articles_modif'] != 'non') { 162 include_spip('inc/drapeau_edition'); 163 signale_edition ($id_breve, $GLOBALS['auteur_session'], 'breve'); 164 } 165 166 // Si on deplace la breve 167 // - propager les secteurs 168 // - changer sa langue (si heritee) 169 if (isset($champs['id_rubrique'])) { 170 propager_les_secteurs(); 171 172 $row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_breves WHERE id_breve=$id_breve")); 173 $langue_old = $row['lang']; 174 $langue_choisie_old = $row['langue_choisie']; 175 176 if ($langue_choisie_old != "oui") { 177 $row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique")); 178 $langue_new = $row['lang']; 179 if ($langue_new != $langue_old) 180 spip_query("UPDATE spip_breves SET lang = '$langue_new' WHERE id_breve = $id_breve"); 181 } 182 } 183 184 // 185 // Post-modifications 186 // 187 188 // Invalider les caches 189 if ($statut == 'publie') { 190 include_spip('inc/invalideur'); 191 suivre_invalideur("id='id_breve/$id_breve'"); 192 } 193 194 // Demander une reindexation de la breve 195 if ($statut == 'publie') { 196 include_spip('inc/indexation'); 197 marquer_indexer('spip_breves', $id_breve); 198 } 199 200 // Recalculer les rubriques (statuts et dates) si l'on deplace 201 // une breve publiee, ou si l'on publie/depublie une breve 202 if (isset($champs['statut']) 203 OR ($statut == 'publie' AND isset($champ['id_rubrique'])) 204 ) { 205 calculer_rubriques(); 206 } 207 208 // Notification ? 209 pipeline('post_edition', 210 array( 211 'args' => array( 212 'table' => 'spip_breves', 213 'id_objet' => $id_breve 214 ), 215 'data' => $champs 216 ) 217 ); 218 } 219 220 // http://doc.spip.org/@revisions_breves_langue 221 function revisions_breves_langue($id_breve, $id_rubrique, $changer_lang) 222 { 223 if ($changer_lang == "herit") { 224 $row = spip_fetch_array(spip_query("SELECT lang FROM spip_rubriques WHERE id_rubrique=$id_rubrique")); 225 $langue_parent = $row['lang']; 226 spip_query("UPDATE spip_breves SET lang=" . _q($langue_parent) . ", langue_choisie='non' WHERE id_breve=$id_breve"); 227 calculer_langues_utilisees(); 228 } else spip_query("UPDATE spip_breves SET lang=" . _q($changer_lang) . ", langue_choisie='oui' WHERE id_breve=$id_breve"); 229 } 230 231 ?>
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 |
![]() |