[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/action/ -> editer_breve.php (source)

   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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics