[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / action / copier_local.php
diff --git a/www/ecrire/action/copier_local.php b/www/ecrire/action/copier_local.php
new file mode 100644 (file)
index 0000000..8ce8334
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2011                                                *
+ *  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;
+
+// Fonction appellee lorsque l'utilisateur clique sur le bouton
+// 'copier en local' (document/portfolio).
+// Il s'agit de la partie logique, c'est a dire que cette fonction
+// realise la copie.
+
+// http://doc.spip.org/@action_copier_local_dist
+function action_copier_local_dist() {
+
+       // Recupere les arguments.
+       $securiser_action = charger_fonction('securiser_action', 'inc');
+       $arg = $securiser_action();
+
+       $id_document = intval($arg);
+
+       if (!$id_document) {
+               spip_log("action_copier_local_dist $arg pas compris");
+       } else  {
+               // arguments recuperes, on peut maintenant appeler la fonction.
+               action_copier_local_post($id_document);
+       }
+}
+
+// http://doc.spip.org/@action_copier_local_post
+function action_copier_local_post($id_document) {
+
+       // Il faut la source du document pour le copier
+       $row = sql_fetsel("fichier, descriptif", "spip_documents", "id_document=$id_document");
+       $source = $row['fichier'];
+
+       include_spip('inc/distant'); // pour 'copie_locale'
+       include_spip('inc/documents'); // pour 'set_spip_doc'
+       $fichier = copie_locale($source);
+       if ($fichier) {
+               $fichier = _DIR_RACINE . $fichier;
+               $taille = filesize($fichier);
+               // On le sort du repertoire IMG/distant/
+               $dest = preg_replace(',^.*/distant/[^/_]+[/_],', '', $fichier);
+               $dest = sous_repertoire(_DIR_IMG, preg_replace(',^.*\.,', '', $fichier)) . $dest;
+               if ($dest != $fichier
+               AND @rename($fichier, $dest))
+                       $fichier = $dest;
+
+               // On indique l'ancien URL dans le descriptif (pis-aller)
+               $row['descriptif'] .= ($row['descriptif'] ? "\n\n":'') . "[->$source]";
+
+               // $fichier contient IMG/distant/...
+               // or, dans la table documents, IMG doit etre exclu.
+               $fichier = set_spip_doc($fichier);
+               spip_log("convertit doc $id_document en local: $source => $fichier");
+               sql_updateq('spip_documents', array('fichier' =>$fichier, 'distant'=>'non', 'taille'=>$taille, 'descriptif'=> $row['descriptif']),"id_document=".$id_document);
+               
+       } else {
+               spip_log("echec copie locale $source");
+       }
+}
+
+?>