[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / medias / action / acceder_document.php
index 8443877..5e10ea0 100644 (file)
@@ -10,7 +10,9 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('inc/headers');
 
@@ -28,97 +30,99 @@ function action_acceder_document_dist() {
        $file = get_spip_doc($f);
        $arg = rawurldecode(_request('arg'));
 
-       $status = $dcc = false;
-       if (strpos($f,'../') !== false
-       OR preg_match(',^\w+://,', $f)) {
+       $status = false;
+       if (strpos($f, '../') !== false
+               or preg_match(',^\w+://,', $f)
+       ) {
                $status = 403;
-       }
-       else if (!file_exists($file) OR !is_readable($file)) {
-               $status = 404;
        } else {
-               $where = "D.fichier=".sql_quote(set_spip_doc($file))
-               . ($arg ? " AND D.id_document=".intval($arg): '');
-
-               $doc = sql_fetsel("D.id_document, D.titre, D.fichier, T.mime_type, T.inclus, D.extension", "spip_documents AS D LEFT JOIN spip_types_documents AS T ON D.extension=T.extension",$where);
-               if (!$doc) {
+               if (!file_exists($file) or !is_readable($file)) {
                        $status = 404;
                } else {
-
-                       // ETag pour gerer le status 304
-                       $ETag = md5($file . ': '. filemtime($file));
-                       if (isset($_SERVER['HTTP_IF_NONE_MATCH'])
-                       AND $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag) {
-                               http_status(304); // Not modified
-                               exit;
+                       $where = 'D.fichier=' . sql_quote(set_spip_doc($file))
+                               . ($arg ? ' AND D.id_document=' . intval($arg) : '');
+
+                       $doc = sql_fetsel(
+                               'D.id_document, D.titre, D.fichier, T.mime_type, T.inclus, D.extension',
+                               'spip_documents AS D LEFT JOIN spip_types_documents AS T ON D.extension=T.extension',
+                               $where
+                       );
+                       if (!$doc) {
+                               $status = 404;
                        } else {
-                               header('ETag: '.$ETag);
-                       }
-
-                       //
-                       // Verifier les droits de lecture du document
-                       // en controlant la cle passee en argument
-                       //
-                       include_spip('inc/securiser_action');
-                       $cle = _request('cle');
-                       if (!verifier_cle_action($doc['id_document'].','.$f, $cle)) {
-                               spip_log("acces interdit $cle erronee");
-                               $status = 403;
+                               // ETag pour gerer le status 304
+                               $ETag = md5($file . ': ' . filemtime($file));
+                               if (isset($_SERVER['HTTP_IF_NONE_MATCH'])
+                                       and $_SERVER['HTTP_IF_NONE_MATCH'] == $ETag
+                               ) {
+                                       http_status(304); // Not modified
+                                       exit;
+                               } else {
+                                       header('ETag: ' . $ETag);
+                               }
+
+                               //
+                               // Verifier les droits de lecture du document
+                               // en controlant la cle passee en argument
+                               //
+                               include_spip('inc/securiser_action');
+                               $cle = _request('cle');
+                               if (!verifier_cle_action($doc['id_document'] . ',' . $f, $cle)) {
+                                       spip_log("acces interdit $cle erronee");
+                                       $status = 403;
+                               }
                        }
                }
        }
 
-       switch($status) {
-
-       case 403:
-               include_spip('inc/minipres');
-               echo minipres();
-               break;
-
-       case 404:
-               http_status(404);
-               include_spip('inc/minipres');
-               echo minipres(_T('erreur').' 404',
-                       _T('medias:info_document_indisponible'));
-               break;
-
-       default:
-               header("Content-Type: ". $doc['mime_type']);
-
-               // pour les images ne pas passer en attachment
-               // sinon, lorsqu'on pointe directement sur leur adresse,
-               // le navigateur les downloade au lieu de les afficher
-
-               if ($doc['inclus']=='non') {
-
-                 // Si le fichier a un titre avec extension,
-                 // ou si c'est un nom bien connu d'Unix, le prendre
-                 // sinon l'ignorer car certains navigateurs pataugent
-
-                       $f = basename($file);
-                       if (isset($doc['titre'])
-                               AND (preg_match('/^\w+[.]\w+$/', $doc['titre']) OR $doc['titre'] == 'Makefile'))
-                               $f = $doc['titre'];
-
-                       // ce content-type est necessaire pour eviter des corruptions de zip dans ie6
-                       header('Content-Type: application/octet-stream');
-
-                       header("Content-Disposition: attachment; filename=\"$f\";");
-                       header("Content-Transfer-Encoding: binary");
-
-                       // fix for IE catching or PHP bug issue
-                       header("Pragma: public");
-                       header("Expires: 0"); // set expiration time
-                       header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
-
-               }
+       switch ($status) {
+               case 403:
+                       include_spip('inc/minipres');
+                       echo minipres();
+                       break;
+
+               case 404:
+                       http_status(404);
+                       include_spip('inc/minipres');
+                       echo minipres(_T('erreur') . ' 404', _T('medias:info_document_indisponible'));
+                       break;
+
+               default:
+                       header('Content-Type: ' . $doc['mime_type']);
+
+                       // pour les images ne pas passer en attachment
+                       // sinon, lorsqu'on pointe directement sur leur adresse,
+                       // le navigateur les downloade au lieu de les afficher
+
+                       if ($doc['inclus'] == 'non') {
+                               // Si le fichier a un titre avec extension,
+                               // ou si c'est un nom bien connu d'Unix, le prendre
+                               // sinon l'ignorer car certains navigateurs pataugent
+
+                               $f = basename($file);
+                               if (isset($doc['titre'])
+                                       and (preg_match('/^\w+[.]\w+$/', $doc['titre']) or $doc['titre'] == 'Makefile')
+                               ) {
+                                       $f = $doc['titre'];
+                               }
+
+                               // ce content-type est necessaire pour eviter des corruptions de zip dans ie6
+                               header('Content-Type: application/octet-stream');
+
+                               header("Content-Disposition: attachment; filename=\"$f\";");
+                               header('Content-Transfer-Encoding: binary');
+
+                               // fix for IE catching or PHP bug issue
+                               header('Pragma: public');
+                               header('Expires: 0'); // set expiration time
+                               header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+                       }
 
-               if ($cl = filesize($file))
-                       header("Content-Length: ". $cl);
+                       if ($cl = filesize($file)) {
+                               header('Content-Length: ' . $cl);
+                       }
 
-               readfile($file);
-               break;
+                       readfile($file);
+                       break;
        }
-
 }
-
-?>