[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / action / redirect.php
index 021ec5d..4684f7e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2011                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -17,12 +17,34 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
 function action_redirect_dist()
 {
        $type = _request('type');
-       if (!preg_match('/^\w+$/', $type)) return;
+       $id = intval(_request('id'));
+
        if ($m = _request('var_mode')) {
                $GLOBALS['var_urls'] = true; // forcer la mise a jour de l'url de cet objet !
-               $m = 'var_mode='.urlencode($m);
        }
-       $h = generer_url_entite_absolue(intval(_request('id')), $type, $m, '', true);
+
+       if (preg_match('/^\w+$/', $type)) {
+               $h = generer_url_entite_absolue($id, $type, '', '', true);
+       }
+       else if ($page = _request('page')
+       AND preg_match('/^\w+$/', $page)) {
+               $h = generer_url_public($page, '', true);
+       }
+       else return;
+
+       if ($m > '')
+               $h = parametre_url($h, 'var_mode', $m);
+
+       if ($m == 'preview'
+       AND defined('_PREVIEW_TOKEN')
+       AND _PREVIEW_TOKEN
+       AND autoriser('previsualiser')
+       AND $aut = $GLOBALS['visiteur_session']['id_auteur'] ) {
+               include_spip('inc/securiser_action');
+               $token = _action_auteur('previsualiser', $aut, null, 'alea_ephemere');
+               $h = parametre_url($h, 'var_previewtoken', "$aut*$token");
+       }
+
        $status = '302';
        if (_request('status') AND _request('status')=='301')
                $status = '301';