X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=www%2Fplugins-dist%2Fmedias%2Fformulaires%2Fjoindre_document.php;h=50243afa7d696f13cafab11b3714dec65370ad1e;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=8869e1c7f056c685b9b9ab809210b6d70526f1f4;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git
diff --git a/www/plugins-dist/medias/formulaires/joindre_document.php b/www/plugins-dist/medias/formulaires/joindre_document.php
index 8869e1c7..50243afa 100644
--- a/www/plugins-dist/medias/formulaires/joindre_document.php
+++ b/www/plugins-dist/medias/formulaires/joindre_document.php
@@ -1,328 +1,506 @@
-".joli_repertoire($dir)."";
- }
- }
- // On ne propose le FTP que si on a des choses a afficher
- $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']);
-
- if ($galerie){
- # passer optionnellement une galerie jointe au form
- # plus utilise nativement, on prefere la mise a jour
- # apres upload par ajaxReload('documents')
- $valeurs['_galerie'] = $galerie;
- }
- if ($objet AND $id_objet){
- $valeurs['id_objet'] = $id_objet;
- $valeurs['objet'] = $objet;
- $valeurs['refdoc_joindre'] = '';
- if ($valeurs['editable']){
- include_spip('inc/autoriser');
- $valeurs['editable'] = autoriser('joindredocument',$objet,$id_objet)?' ':'';
- }
- }
-
- return $valeurs;
-}
-
-
-function formulaires_joindre_document_verifier_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){
- include_spip('inc/joindre_document');
-
- $erreurs = array();
- // on joint un document deja dans le site
- if (_request('joindre_mediatheque')){
- $refdoc_joindre = intval(preg_replace(',^(doc|document|img),','',_request('refdoc_joindre')));
- if (!sql_getfetsel('id_document','spip_documents','id_document='.intval($refdoc_joindre)))
- $erreurs['message_erreur'] = _T('medias:erreur_aucun_document');
- }
- // sinon c'est un upload
- else {
- $files = joindre_trouver_fichier_envoye();
- if (is_string($files))
- $erreurs['message_erreur'] = $files;
- elseif(is_array($files)){
- // erreur si on a pas trouve de fichier
- if (!count($files))
- $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
-
- else{
- // regarder si on a eu une erreur sur l'upload d'un fichier
- foreach($files as $file){
- if (isset($file['error'])
- AND $test = joindre_upload_error($file['error'])){
- if (is_string($test))
- $erreurs['message_erreur'] = $test;
- else
- $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
- }
- }
-
- // si ce n'est pas deja un post de zip confirme
- // regarder si il faut lister le contenu du zip et le presenter
- if (!count($erreurs)
- AND !_request('joindre_zip')
- AND $contenu_zip = joindre_verifier_zip($files)){
- list($fichiers,$erreurs,$tmp_zip) = $contenu_zip;
- if ($fichiers){
- // on passe le md5 du fichier uniquement, on le retrouvera dans zip_to_clean de la session
- $token_zip = md5($tmp_zip);
- $erreurs['lister_contenu_archive'] = recuperer_fond("formulaires/inc-lister_archive_jointe",array('chemin_zip'=>$token_zip,'liste_fichiers_zip'=>$fichiers,'erreurs_fichier_zip'=>$erreurs));
- }
- else
- $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
- }
- }
- }
-
- if (count($erreurs) AND defined('_tmp_dir'))
- effacer_repertoire_temporaire(_tmp_dir);
- }
-
- return $erreurs;
-}
-
-function formulaires_joindre_document_traiter_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){
- $res = array('editable'=>true);
- $ancre = '';
- // on joint un document deja dans le site
- if (_request('joindre_mediatheque')){
- $refdoc_joindre = _request('refdoc_joindre');
- $refdoc_joindre = strtr($refdoc_joindre,";,"," ");
- $refdoc_joindre = preg_replace(',\b(doc|document|img),','',$refdoc_joindre);
- // expliciter les intervales xxx-yyy
- while(preg_match(",\b(\d+)-(\d+)\b,",$refdoc_joindre,$m))
- $refdoc_joindre = str_replace($m[0],implode(" ",range($m[1],$m[2])),$refdoc_joindre);
- $refdoc_joindre = explode(" ",$refdoc_joindre);
- include_spip('action/editer_document');
- foreach($refdoc_joindre as $j){
- if ($j = intval(preg_replace(',^(doc|document|img),','',$j))){
- // lier le parent en plus
- $champs = array('ajout_parents' => array("$objet|$id_objet"));
- document_modifier($j,$champs);
- if (!$ancre)
- $ancre = $j;
- $sel[] = $j;
- $res['message_ok'] = _T('medias:document_attache_succes');
- }
- }
- if ($sel)
- $res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_attache_succes','medias:nb_documents_attache_succes');
- set_request('refdoc_joindre',''); // vider la saisie
- }
- // sinon c'est un upload
- else {
- $ajouter_documents = charger_fonction('ajouter_documents', 'action');
-
- $mode = joindre_determiner_mode($mode,$id_document,$objet);
- include_spip('inc/joindre_document');
- $files = joindre_trouver_fichier_envoye();
-
- $nouveaux_doc = $ajouter_documents($id_document,$files,$objet,$id_objet,$mode);
-
- if (defined('_tmp_zip'))
- unlink(_tmp_zip);
- if (defined('_tmp_dir'))
- effacer_repertoire_temporaire(_tmp_dir);
-
- // checker les erreurs eventuelles
- $messages_erreur = array();
- $nb_docs = 0;
- $sel = array();
- foreach ($nouveaux_doc as $doc) {
- if (!is_numeric($doc))
- $messages_erreur[] = $doc;
- // cas qui devrait etre traite en amont
- elseif(!$doc)
- $messages_erreur[] = _T('medias:erreur_insertion_document_base',array('fichier'=>'???'));
- else{
- if (!$ancre)
- $ancre = $doc;
- $sel[] = $doc;
- }
- }
- if (count($messages_erreur))
- $res['message_erreur'] = implode('
',$messages_erreur);
- if ($sel)
- $res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_installe_succes','medias:nb_documents_installe_succes');
- if ($ancre)
- $res['redirect'] = "#doc$ancre";
- }
- if (count($sel) OR isset($res['message_ok'])){
- $callback = "";
- if ($ancre)
- $callback .= "jQuery('#doc$ancre a.editbox').eq(0).focus();";
- if (count($sel)){
- // passer les ids document selectionnes aux pipelines
- $res['ids'] = $sel;
-
- $sel = "#doc".implode(",#doc",$sel);
- $callback .= "jQuery('$sel').animateAppend();";
- }
- $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ $callback }});});";
- $js = "";
- if (isset($res['message_erreur']))
- $res['message_erreur'].= $js;
- else
- $res['message_ok'] .= $js;
- }
-
- return $res;
-}
-
-/**
- * Retourner le contenu du select HTML d'utilisation de fichiers envoyes
- *
- * @param string $dir
- * @param string $mode
- * @return string
- */
-function joindre_options_upload_ftp($dir, $mode = 'document') {
- $fichiers = preg_files($dir);
- $exts = $dirs = $texte_upload = array();
-
- // en mode "charger une image", ne proposer que les inclus
- $inclus = ($mode == 'image' OR $mode =='vignette')
- ? " AND inclus='image'"
- : '';
-
- foreach ($fichiers as $f) {
- $f = preg_replace(",^$dir,",'',$f);
- if (preg_match(",\.([^.]+)$,", $f, $match)) {
- $ext = strtolower($match[1]);
- if (!isset($exts[$ext])) {
- include_spip('action/ajouter_documents');
- $ext = corriger_extension($ext);
- if (sql_fetsel('extension', 'spip_types_documents', $a = "extension='$ext'" . $inclus))
- $exts[$ext] = 'oui';
- else $exts[$ext] = 'non';
- }
-
- $k = 2*substr_count($f,'/');
- $n = strrpos($f, "/");
- if ($n === false)
- $lefichier = $f;
- else {
- $lefichier = substr($f, $n+1, strlen($f));
- $ledossier = substr($f, 0, $n);
- if (!in_array($ledossier, $dirs)) {
- $texte_upload[] = "\n";
- $dirs[]= $ledossier;
- }
- }
-
- if ($exts[$ext] == 'oui')
- $texte_upload[] = "\n";
- }
- }
-
- $texte = join('', $texte_upload);
- if (count($texte_upload)>1) {
- $texte = "\n" . $texte;
- }
-
- return $texte;
-}
-
-/**
- * Lister les fichiers contenus dans un zip
- *
- * @param unknown_type $files
- * @return unknown
- */
-function joindre_liste_contenu_tailles_archive($files) {
- include_spip('inc/charsets'); # pour le nom de fichier
-
- $res = '';
- if (is_array($files))
- foreach ($files as $nom => $file) {
- $nom = translitteration($nom);
- $date = date_interface(date("Y-m-d H:i:s", $file['mtime']));
-
- $taille = taille_en_octets($file['size']);
- $res .= "
$nom – $taille
$date\n";
- }
-
- return $res;
-}
-
-function joindre_liste_erreurs_to_li($erreurs){
- if (count($erreurs)==1)
- return "".reset($erreurs)."
";
-
- $res = implode("",$erreurs);
- if (strlen($res)) $res = "$res";
- if (count($erreurs)>4)
- $res = ""._T("medias:erreurs_voir",array('nb'=>count($erreurs)))."
";
- else
- $res = "";
- return $res;
-}
-
-?>
+' . joli_repertoire($dir) . '';
+ }
+ }
+ }
+ // On ne propose le FTP que si on a des choses a afficher
+ $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']);
+
+ if ($galerie) {
+ # passer optionnellement une galerie jointe au form
+ # plus utilise nativement, on prefere la mise a jour
+ # apres upload par ajaxReload('documents')
+ $valeurs['_galerie'] = $galerie;
+ }
+ if ($objet and $id_objet) {
+ $valeurs['id_objet'] = $id_objet;
+ $valeurs['objet'] = $objet;
+ $valeurs['refdoc_joindre'] = '';
+ if ($valeurs['editable']) {
+ include_spip('inc/autoriser');
+ $valeurs['editable'] = autoriser('joindredocument', $objet, $id_objet) ? ' ' : '';
+ }
+ }
+
+ return $valeurs;
+}
+
+/**
+ * Vérification du formulaire
+ *
+ * @param int|string $id_document
+ * L'identidiant numérique du document s'il est à remplacer, sinon "new"
+ * @param int $id_objet
+ * L'identifiant numérique de l'objet sur lequel on ajoute le document
+ * @param string $objet
+ * Le type de l'objet sur lequel on ajoute le document
+ * @param string $mode
+ * Le mode du document (auto,choix,document,image,vignette...), par défaut auto
+ * @param string $galerie
+ * Passer optionnellement une galerie jointe au form, plus utilise nativement,
+ * on prefere la mise a jour apres upload par ajaxReload('documents')
+ * @param bool|string $proposer_media
+ * Doit on afficher la médiathèque ? par défaut oui
+ * Valeurs possibles si string : false,'non','no'.
+ * @param bool|string $proposer_ftp
+ * Doit on afficher le ftp ? par défaut oui
+ * Valeurs possibles si string : false,'non','no'.
+ * @return array $erreurs
+ * Les erreurs éventuelles dans un tableau
+ */
+function formulaires_joindre_document_verifier_dist(
+ $id_document = 'new',
+ $id_objet = 0,
+ $objet = '',
+ $mode = 'auto',
+ $galerie = false,
+ $proposer_media = true,
+ $proposer_ftp = true
+) {
+ include_spip('inc/joindre_document');
+
+ $erreurs = array();
+ // on joint un document deja dans le site
+ if (_request('joindre_mediatheque')) {
+ $refdoc_joindre = intval(preg_replace(',^(doc|document|img),', '', _request('refdoc_joindre')));
+ if (!sql_getfetsel('id_document', 'spip_documents', 'id_document=' . intval($refdoc_joindre))) {
+ $erreurs['message_erreur'] = _T('medias:erreur_aucun_document');
+ }
+ } // sinon c'est un upload
+ else {
+ $files = joindre_trouver_fichier_envoye();
+ if (is_string($files)) {
+ $erreurs['message_erreur'] = $files;
+ } elseif (is_array($files)) {
+ // erreur si on a pas trouve de fichier
+ if (!count($files)) {
+ $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
+ } else {
+ // regarder si on a eu une erreur sur l'upload d'un fichier
+ foreach ($files as $file) {
+ if (isset($file['error'])
+ and $test = joindre_upload_error($file['error'])
+ ) {
+ if (is_string($test)) {
+ $erreurs['message_erreur'] = $test;
+ } else {
+ $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
+ }
+ }
+ }
+
+ // si ce n'est pas deja un post de zip confirme
+ // regarder si il faut lister le contenu du zip et le presenter
+ if (!count($erreurs)
+ and !_request('joindre_zip')
+ and $contenu_zip = joindre_verifier_zip($files)
+ ) {
+ list($fichiers, $erreurs, $tmp_zip) = $contenu_zip;
+ if ($fichiers) {
+ // on passe le md5 du fichier uniquement, on le retrouvera dans zip_to_clean de la session
+ $token_zip = md5($tmp_zip);
+ $erreurs['message_erreur'] = '';
+ $erreurs['lister_contenu_archive'] = recuperer_fond(
+ 'formulaires/inc-lister_archive_jointe',
+ array(
+ 'chemin_zip' => $token_zip,
+ 'liste_fichiers_zip' => $fichiers,
+ 'erreurs_fichier_zip' => $erreurs
+ )
+ );
+ } else {
+ $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier');
+ }
+ }
+ }
+ }
+
+ if (count($erreurs) and defined('_TMP_DIR')) {
+ effacer_repertoire_temporaire(_TMP_DIR);
+ }
+ }
+
+ return $erreurs;
+}
+
+/**
+ * Traitement du formulaire
+ *
+ * @param int|string $id_document
+ * L'identidiant numérique du document s'il est à remplacer, sinon "new"
+ * @param int $id_objet
+ * L'identifiant numérique de l'objet sur lequel on ajoute le document
+ * @param string $objet
+ * Le type de l'objet sur lequel on ajoute le document
+ * @param string $mode
+ * Le mode du document (auto,choix,document,image,vignette...), par défaut auto
+ * @param string $galerie
+ * Passer optionnellement une galerie jointe au form, plus utilise nativement,
+ * on prefere la mise a jour apres upload par ajaxReload('documents')
+ * @param bool|string $proposer_media
+ * Doit on afficher la médiathèque ? par défaut oui
+ * Valeurs possibles si string : false,'non','no'.
+ * @param bool|string $proposer_ftp
+ * Doit on afficher le ftp ? par défaut oui
+ * Valeurs possibles si string : false,'non','no'.
+ * @return array $res
+ * Le tableau renvoyé par les CVT avec le message et editable
+ */
+function formulaires_joindre_document_traiter_dist(
+ $id_document = 'new',
+ $id_objet = 0,
+ $objet = '',
+ $mode = 'auto',
+ $galerie = false,
+ $proposer_media = true,
+ $proposer_ftp = true
+) {
+ $res = array('editable' => true);
+ $ancre = '';
+ // on joint un document deja dans le site
+ if (_request('joindre_mediatheque')) {
+ $sel = array();
+ $refdoc_joindre = _request('refdoc_joindre');
+ $refdoc_joindre = strtr($refdoc_joindre, ';,', ' ');
+ $refdoc_joindre = preg_replace(',\b(doc|document|img),', '', $refdoc_joindre);
+ // expliciter les intervales xxx-yyy
+ while (preg_match(",\b(\d+)-(\d+)\b,", $refdoc_joindre, $m)) {
+ $refdoc_joindre = str_replace($m[0], implode(' ', range($m[1], $m[2])), $refdoc_joindre);
+ }
+ $refdoc_joindre = explode(' ', $refdoc_joindre);
+ include_spip('action/editer_document');
+ foreach ($refdoc_joindre as $j) {
+ if ($j = intval(preg_replace(',^(doc|document|img),', '', $j))) {
+ // lier le parent en plus
+ $champs = array('ajout_parents' => array("$objet|$id_objet"));
+ document_modifier($j, $champs);
+ if (!$ancre) {
+ $ancre = $j;
+ }
+ $sel[] = $j;
+ $res['message_ok'] = _T('medias:document_attache_succes');
+ }
+ }
+ if ($sel) {
+ $res['message_ok'] = singulier_ou_pluriel(
+ count($sel),
+ 'medias:document_attache_succes',
+ 'medias:nb_documents_attache_succes'
+ );
+ }
+ set_request('refdoc_joindre', ''); // vider la saisie
+ } // sinon c'est un upload
+ else {
+ $ajouter_documents = charger_fonction('ajouter_documents', 'action');
+
+ $mode = joindre_determiner_mode($mode, $id_document, $objet);
+ include_spip('inc/joindre_document');
+ $files = joindre_trouver_fichier_envoye();
+
+ $nouveaux_doc = $ajouter_documents($id_document, $files, $objet, $id_objet, $mode);
+
+ if (defined('_TMP_ZIP')) {
+ unlink(_TMP_ZIP);
+ }
+ if (defined('_TMP_DIR')) {
+ effacer_repertoire_temporaire(_TMP_DIR);
+ }
+
+ // checker les erreurs eventuelles
+ $messages_erreur = array();
+ $sel = array();
+ foreach ($nouveaux_doc as $doc) {
+ if (!is_numeric($doc)) {
+ $messages_erreur[] = $doc;
+ } // cas qui devrait etre traite en amont
+ elseif (!$doc) {
+ $messages_erreur[] = _T('medias:erreur_insertion_document_base', array('fichier' => '???'));
+ } else {
+ if (!$ancre) {
+ $ancre = $doc;
+ }
+ $sel[] = $doc;
+ }
+ }
+ if (count($messages_erreur)) {
+ $res['message_erreur'] = implode('
', $messages_erreur);
+ }
+ if ($sel) {
+ $res['message_ok'] = singulier_ou_pluriel(
+ count($sel),
+ 'medias:document_installe_succes',
+ 'medias:nb_documents_installe_succes'
+ );
+ }
+ if ($ancre) {
+ $res['redirect'] = "#doc$ancre";
+ }
+ }
+ if (count($sel) or isset($res['message_ok'])) {
+ $callback = '';
+ if ($ancre) {
+ $callback .= "jQuery('#doc$ancre a.editbox').eq(0).focus();";
+ }
+ if (count($sel)) {
+ // passer les ids document selectionnes aux pipelines
+ $res['ids'] = $sel;
+
+ $sel = '#doc' . implode(',#doc', $sel);
+ $callback .= "jQuery('$sel').animateAppend();";
+ }
+ $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ $callback }});});";
+ $js = "";
+ if (isset($res['message_erreur'])) {
+ $res['message_erreur'] .= $js;
+ } else {
+ $res['message_ok'] .= $js;
+ }
+ }
+
+ return $res;
+}
+
+/**
+ * Retourner le contenu du select HTML d'utilisation de fichiers envoyes par le serveur
+ *
+ * @param string $dir
+ * Le répertoire de recherche des documents
+ * @param string $mode
+ * Le mode d'ajout de document
+ * @return string $texte
+ * Le contenu HTML du selecteur de documents
+ */
+function joindre_options_upload_ftp($dir, $mode = 'document') {
+ $fichiers = preg_files($dir);
+ $exts = $dirs = $texte_upload = array();
+
+ // en mode "charger une image", ne proposer que les inclus
+ $inclus = ($mode == 'image' or $mode == 'vignette')
+ ? " AND inclus='image'"
+ : '';
+
+ foreach ($fichiers as $f) {
+ $f = preg_replace(",^$dir,", '', $f);
+ if (preg_match(',\.([^.]+)$,', $f, $match)) {
+ $ext = strtolower($match[1]);
+ if (!isset($exts[$ext])) {
+ include_spip('action/ajouter_documents');
+ $ext = corriger_extension($ext);
+ if (sql_fetsel('extension', 'spip_types_documents', $a = "extension='$ext'" . $inclus)) {
+ $exts[$ext] = 'oui';
+ } else {
+ $exts[$ext] = 'non';
+ }
+ }
+
+ $k = 2 * substr_count($f, '/');
+ $n = strrpos($f, '/');
+ if ($n === false) {
+ $lefichier = $f;
+ } else {
+ $lefichier = substr($f, $n + 1, strlen($f));
+ $ledossier = substr($f, 0, $n);
+ if (!in_array($ledossier, $dirs)) {
+ $texte_upload[] = "\n';
+ $dirs[] = $ledossier;
+ }
+ }
+
+ if ($exts[$ext] == 'oui') {
+ $texte_upload[] = "\n';
+ }
+ }
+ }
+
+ $texte = join('', $texte_upload);
+ if (count($texte_upload) > 1) {
+ $texte = "\n' . $texte;
+ }
+
+ return $texte;
+}
+
+
+/**
+ * Lister les fichiers contenus dans un zip
+ *
+ * @param array $files
+ * La liste des fichiers
+ * @return string $res
+ * La liste HTML des fichiers ...
+ */
+function joindre_liste_contenu_tailles_archive($files) {
+ include_spip('inc/charsets'); # pour le nom de fichier
+
+ $res = '';
+ if (is_array($files)) {
+ foreach ($files as $nom => $file) {
+ $nom = translitteration($nom);
+ $date = date_interface(date('Y-m-d H:i:s', $file['mtime']));
+ $taille = taille_en_octets($file['size']);
+ $res .= '$nom – $taille
$date\n";
+ }
+ }
+
+ return $res;
+}
+
+/**
+ * Lister les erreurs dans une archive jointe
+ * Utilisé formulaires/inc-lister_archive_jointe.html
+ *
+ * @param array $erreurs
+ * La liste des erreurs
+ * @return string $res
+ * Le code HTML des erreurs
+ */
+function joindre_liste_erreurs_to_li($erreurs) {
+ if (count($erreurs) == 1) {
+ return '' . reset($erreurs) . '
';
+ }
+
+ $res = implode('', $erreurs);
+ if (strlen($res)) {
+ $res = "$res";
+ }
+ if (count($erreurs) > 4) {
+ $res = "" . _T(
+ 'medias:erreurs_voir',
+ array('nb' => count($erreurs))
+ ) . '
';
+ } else {
+ $res = "";
+ }
+
+ return $res;
+}