[SPIP] +spip v3.0.17
[lhc/web/clavette_www.git] / www / ecrire / inc / documents.php
diff --git a/www/ecrire/inc/documents.php b/www/ecrire/inc/documents.php
new file mode 100644 (file)
index 0000000..634a55a
--- /dev/null
@@ -0,0 +1,255 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2014                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+/**
+ * donne le chemin du fichier relatif a _DIR_IMG
+ * pour stockage 'tel quel' dans la base de donnees
+ *
+ * http://doc.spip.org/@set_spip_doc
+ *
+ * @param string $fichier
+ * @return string
+ */
+function set_spip_doc($fichier) {
+       if (strpos($fichier, _DIR_IMG) === 0)
+               return substr($fichier, strlen(_DIR_IMG));
+       else
+               return $fichier; // ex: fichier distant
+}
+
+/**
+ * donne le chemin complet du fichier
+ *
+ * http://doc.spip.org/@get_spip_doc
+ *
+ * @param string $fichier
+ * @return bool|string
+ */
+function get_spip_doc($fichier) {
+       // fichier distant
+       if (preg_match(',^\w+://,', $fichier))
+               return $fichier;
+
+       // gestion d'erreurs, fichier=''
+       if (!strlen($fichier))
+               return false;
+
+       $fichier = (
+                   strncmp($fichier,_DIR_IMG, strlen(_DIR_IMG))!=0
+               )
+               ? _DIR_IMG . $fichier
+               : $fichier ;
+
+       // fichier normal
+       return $fichier;
+}
+
+/**
+ * Creer IMG/pdf/
+ *
+ * http://doc.spip.org/@creer_repertoire_documents
+ *
+ * @param  $ext
+ * @return string
+ */
+function creer_repertoire_documents($ext) {
+       $rep = sous_repertoire(_DIR_IMG, $ext);
+
+       if (!$ext OR !$rep) {
+               spip_log("creer_repertoire_documents '$rep' interdit");
+               exit;
+       }
+
+       // Cette variable de configuration peut etre posee par un plugin
+       // par exemple acces_restreint
+       if (isset($GLOBALS['meta']["creer_htaccess"]) AND $GLOBALS['meta']["creer_htaccess"] == 'oui') {
+               include_spip('inc/acces');
+               verifier_htaccess($rep);
+       }
+
+       return $rep;
+}
+
+/**
+ * Efface le repertoire de maniere recursive !
+ *
+ * http://doc.spip.org/@effacer_repertoire_temporaire
+ *
+ * @param string $nom
+ */
+function effacer_repertoire_temporaire($nom) {
+       $d = opendir($nom);
+       while (($f = readdir($d)) !== false) {
+               if (is_file("$nom/$f"))
+                       spip_unlink("$nom/$f");
+               else if ($f <> '.' AND $f <> '..'
+               AND is_dir("$nom/$f"))
+                       effacer_repertoire_temporaire("$nom/$f");
+       }
+       closedir($d);
+       @rmdir($nom);
+}
+
+//
+/**
+ * Copier un document $source un dossier IMG/$ext/$orig.$ext
+ * en numerotant eventuellement si un du meme nom existe deja
+ *
+ * http://doc.spip.org/@copier_document
+ *
+ * @param string $ext
+ * @param string $orig
+ * @param string $source
+ * @return bool|mixed|string
+ */
+function copier_document($ext, $orig, $source) {
+
+       $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
+       $dir = creer_repertoire_documents($ext);
+       $dest = preg_replace("/[^.=\w-]+/", "_",
+                       translitteration(preg_replace("/\.([^.]+)$/", "",
+                                                     preg_replace("/<[^>]*>/", '', basename($orig)))));
+
+       // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
+       // pour les images transformees par rotation (action/documenter)
+       $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
+
+       // Si le document "source" est deja au bon endroit, ne rien faire
+       if ($source == ($dir . $dest . '.' . $ext))
+               return $source;
+
+       // sinon tourner jusqu'a trouver un numero correct
+       $n = 0;
+       while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
+
+       return deplacer_fichier_upload($source, $newFile);
+}
+
+/**
+ * Trouver le dossier utilise pour upload un fichier
+ *
+ * http://doc.spip.org/@determine_upload
+ *
+ * @param string $type
+ * @return bool|string
+ */
+function determine_upload($type='') {
+       if(!function_exists('autoriser'))
+               include_spip('inc/autoriser');
+       
+       if (!autoriser('chargerftp')
+       OR $type == 'logos') # on ne le permet pas pour les logos
+               return false;
+
+       $repertoire = _DIR_TRANSFERT;
+       if (!@is_dir($repertoire)) {
+               $repertoire = str_replace(_DIR_TMP, '', $repertoire);
+               $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
+       }
+
+       if (!$GLOBALS['visiteur_session']['restreint'])
+               return $repertoire;
+       else
+               return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
+}
+
+/**
+ * Deplacer ou copier un fichier
+ *
+ * http://doc.spip.org/@deplacer_fichier_upload
+ *
+ * @param string $source
+ * @param string $dest
+ * @param bool $move
+ * @return bool|mixed|string
+ */
+function deplacer_fichier_upload($source, $dest, $move=false) {
+       // Securite
+       if (substr($dest,0,strlen(_DIR_RACINE))==_DIR_RACINE)
+               $dest = _DIR_RACINE.preg_replace(',\.\.+,', '.', substr($dest,strlen(_DIR_RACINE)));
+       else
+               $dest = preg_replace(',\.\.+,', '.', $dest);
+
+       if ($move)      $ok = @rename($source, $dest);
+       else                            $ok = @copy($source, $dest);
+       if (!$ok) $ok = @move_uploaded_file($source, $dest);
+       if ($ok)
+               @chmod($dest, _SPIP_CHMOD & ~0111);
+       else {
+               $f = @fopen($dest,'w');
+               if ($f) {
+                       fclose ($f);
+               } else {
+                       include_spip('inc/flock');
+                       raler_fichier($dest);
+               }
+               spip_unlink($dest);
+       }
+       return $ok ? $dest : false;
+}
+
+
+// Erreurs d'upload
+// renvoie false si pas d'erreur
+// et true si erreur = pas de fichier
+// pour les autres erreurs affiche le message d'erreur et meurt
+// http://doc.spip.org/@check_upload_error
+function check_upload_error($error, $msg='', $return=false) {
+       global $spip_lang_right;
+
+       if (!$error) return false;
+
+       spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
+
+       switch ($error) {
+
+               case 4: /* UPLOAD_ERR_NO_FILE */
+                       return true;
+
+               # on peut affiner les differents messages d'erreur
+               case 1: /* UPLOAD_ERR_INI_SIZE */
+                       $msg = _T('upload_limit',
+                       array('max' => ini_get('upload_max_filesize')));
+                       break;
+               case 2: /* UPLOAD_ERR_FORM_SIZE */
+                       $msg = _T('upload_limit',
+                       array('max' => ini_get('upload_max_filesize')));
+                       break;
+               case 3: /* UPLOAD_ERR_PARTIAL  */
+                       $msg = _T('upload_limit',
+                       array('max' => ini_get('upload_max_filesize')));
+                       break;
+
+               default: /* autre */
+                       if (!$msg)
+                       $msg = _T('pass_erreur').' '. $error
+                       . '<br />' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]");
+                       break;
+       }
+
+       spip_log ("erreur upload $error");
+       if ($return)
+               return $msg;
+
+  if(_request("iframe")=="iframe") {
+         echo "<div class='upload_answer upload_error'>$msg</div>";
+         exit;
+       }
+
+       include_spip('inc/minipres');
+       echo minipres($msg,
+                     "<div style='text-align: $spip_lang_right'><a href='"  . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . "</button></a></div>");
+       exit;
+}
+?>