PageRenderTime 32ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/inc/getdocument.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 198 lines | 123 code | 34 blank | 41 comment | 25 complexity | 0c011e2ef03aae2db655a66bb1fc5479 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. include_spip('inc/minipres');
  13. // Creer IMG/pdf/
  14. // http://doc.spip.org/@creer_repertoire_documents
  15. function creer_repertoire_documents($ext) {
  16. $rep = sous_repertoire(_DIR_IMG, $ext);
  17. if (!$ext OR !$rep) {
  18. spip_log("creer_repertoire_documents '$rep' interdit");
  19. exit;
  20. }
  21. // Cette variable de configuration peut etre posee par un plugin
  22. // par exemple acces_restreint
  23. if ($GLOBALS['meta']["creer_htaccess"] == 'oui') {
  24. include_spip('inc/acces');
  25. verifier_htaccess($rep);
  26. }
  27. return $rep;
  28. }
  29. // Efface le repertoire de maniere recursive !
  30. // http://doc.spip.org/@effacer_repertoire_temporaire
  31. function effacer_repertoire_temporaire($nom) {
  32. $d = opendir($nom);
  33. while (($f = readdir($d)) !== false) {
  34. if (is_file("$nom/$f"))
  35. spip_unlink("$nom/$f");
  36. else if ($f <> '.' AND $f <> '..'
  37. AND is_dir("$nom/$f"))
  38. effacer_repertoire_temporaire("$nom/$f");
  39. }
  40. closedir($d);
  41. @rmdir($nom);
  42. }
  43. // http://doc.spip.org/@copier_document
  44. function copier_document($ext, $orig, $source) {
  45. $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
  46. $dir = creer_repertoire_documents($ext);
  47. $dest = preg_replace("/[^._=-\w\d]+/", "_",
  48. translitteration(preg_replace("/\.([^.]+)$/", "",
  49. preg_replace("/<[^>]*>/", '', basename($orig)))));
  50. // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
  51. // pour les images transformees par rotation (action/documenter)
  52. $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
  53. // Si le document "source" est deja au bon endroit, ne rien faire
  54. if ($source == ($dir . $dest . '.' . $ext))
  55. return $source;
  56. // sinon tourner jusqu'a trouver un numero correct
  57. $n = 0;
  58. while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
  59. return deplacer_fichier_upload($source, $newFile);
  60. }
  61. //
  62. // Deplacer un fichier
  63. //
  64. // http://doc.spip.org/@deplacer_fichier_upload
  65. function deplacer_fichier_upload($source, $dest, $move=false) {
  66. // Securite
  67. if (substr($dest,0,strlen(_DIR_RACINE))==_DIR_RACINE)
  68. $dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest,strlen(_DIR_RACINE)));
  69. else
  70. $dest = preg_replace(',\.\.+,', '.', $dest);
  71. if ($move) $ok = @rename($source, $dest);
  72. else $ok = @copy($source, $dest);
  73. if (!$ok) $ok = @move_uploaded_file($source, $dest);
  74. if ($ok)
  75. @chmod($dest, _SPIP_CHMOD & ~0111);
  76. else {
  77. $f = @fopen($dest,'w');
  78. if ($f) {
  79. fclose ($f);
  80. } else {
  81. include_spip('inc/flock');
  82. raler_fichier($dest);
  83. }
  84. spip_unlink($dest);
  85. }
  86. return $ok ? $dest : false;
  87. }
  88. // Erreurs d'upload
  89. // renvoie false si pas d'erreur
  90. // et true si erreur = pas de fichier
  91. // pour les autres erreurs affiche le message d'erreur et meurt
  92. // http://doc.spip.org/@check_upload_error
  93. function check_upload_error($error, $msg='') {
  94. global $spip_lang_right;
  95. if (!$error) return false;
  96. spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
  97. switch ($error) {
  98. case 4: /* UPLOAD_ERR_NO_FILE */
  99. return true;
  100. # on peut affiner les differents messages d'erreur
  101. case 1: /* UPLOAD_ERR_INI_SIZE */
  102. $msg = _T('upload_limit',
  103. array('max' => ini_get('upload_max_filesize')));
  104. break;
  105. case 2: /* UPLOAD_ERR_FORM_SIZE */
  106. $msg = _T('upload_limit',
  107. array('max' => ini_get('upload_max_filesize')));
  108. break;
  109. case 3: /* UPLOAD_ERR_PARTIAL */
  110. $msg = _T('upload_limit',
  111. array('max' => ini_get('upload_max_filesize')));
  112. break;
  113. default: /* autre */
  114. if (!$msg)
  115. $msg = _T('pass_erreur').' '. $error
  116. . '<br />' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]");
  117. break;
  118. }
  119. spip_log ("erreur upload $error");
  120. if(_request("iframe")=="iframe") {
  121. echo "<div class='upload_answer upload_error'>$msg</div>";
  122. exit;
  123. }
  124. echo minipres($msg,
  125. "<div style='text-align: $spip_lang_right'><a href='" . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . "</button></a></div>");
  126. exit;
  127. }
  128. // Erreur appelee depuis public.php (la precedente ne fonctionne plus
  129. // depuis qu'on est sortis de spip_image.php, apparemment).
  130. // http://doc.spip.org/@erreur_upload_trop_gros
  131. function erreur_upload_trop_gros() {
  132. include_spip('inc/filtres');
  133. $msg = "<p>"
  134. .taille_en_octets($_SERVER["CONTENT_LENGTH"])
  135. .'<br />'
  136. ._T('upload_limit',
  137. array('max' => ini_get('upload_max_filesize')))
  138. ."</p>";
  139. echo minipres(_T('pass_erreur'),"<div class='upload_answer upload_error'>".$msg."</div>");
  140. exit;
  141. }
  142. //
  143. // Gestion des fichiers ZIP
  144. //
  145. // http://doc.spip.org/@accepte_fichier_upload
  146. function accepte_fichier_upload ($f) {
  147. if (!preg_match(",.*__MACOSX/,", $f)
  148. AND !preg_match(",^\.,", basename($f))) {
  149. $ext = corriger_extension((strtolower(substr(strrchr($f, "."), 1))));
  150. return sql_countsel('spip_types_documents', "extension=" . sql_quote($ext) . " AND upload='oui'");
  151. }
  152. }
  153. # callback pour le deballage d'un zip telecharge
  154. # http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction
  155. // http://doc.spip.org/@callback_deballe_fichier
  156. function callback_deballe_fichier($p_event, &$p_header) {
  157. if (accepte_fichier_upload($p_header['filename'])) {
  158. $p_header['filename'] = _tmp_dir . basename($p_header['filename']);
  159. return 1;
  160. } else {
  161. return 0;
  162. }
  163. }
  164. ?>