[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / medias / inc / renseigner_document.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 /**
16 * recuperer les infos distantes d'une url,
17 * et renseigner pour une insertion en base
18 * utilise une variable static car appellee plusieurs fois au cours du meme hit
19 * (verification puis traitement)
20 *
21 * @param string $source
22 * @return string
23 */
24 function renseigner_source_distante($source){
25 static $infos = array();
26 if (isset($infos[$source]))
27 return $infos[$source];
28
29 include_spip('inc/distant');
30 // on passe la source dans le pipeline, le premier plugin
31 // qui est capable de renseigner complete
32 // fichier et mode + tous les autres champs a son gout
33 // ex : oembed
34 $a = pipeline('renseigner_document_distant',array('source'=>$source));
35
36 // si la source est encore la, en revenir a la
37 // methode traditionnelle : chargement de l'url puis analyse
38 if (!isset($a['fichier']) OR !isset($a['mode'])){
39 if (!$a = recuperer_infos_distantes($a['source'])) {
40 return _T('medias:erreur_chemin_distant',array('nom'=>$source));
41 }
42 # NB: dans les bonnes conditions (fichier autorise et pas trop gros)
43 # $a['fichier'] est une copie locale du fichier
44 unset($a['body']);
45 $a['distant'] = 'oui';
46 $a['mode'] = 'document';
47 $a['fichier'] = set_spip_doc($source);
48 }
49
50 // stocker pour la seconde demande
51 return $infos[$source] = $a;
52 }
53
54 /**
55 * Renseigner les informations de taille et dimension d'un document
56 *
57 * Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document
58 * Utilise pour cela les fonctions du répertoire metadatas/*
59 *
60 * Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis
61 * comme editable dans la déclaration de la table spip_documents
62 *
63 * TODO Renommer cette fonction sans "_image"
64 *
65 * @param string $fichier
66 * Le fichier à examiner
67 * @param string $ext
68 * L'extension du fichier à examiner
69 * @return array|string $infos
70 * Si c'est une chaine, c'est une erreur
71 * Si c'est un tableau, l'ensemble des informations récupérées du fichier
72 */
73 function renseigner_taille_dimension_image($fichier,$ext){
74
75 $infos = array(
76 'largeur'=>0,
77 'hauteur'=>0,
78 'type_image'=>'',
79 'taille'=>0
80 );
81
82 // Quelques infos sur le fichier
83 if (
84 !$fichier
85 OR !@file_exists($fichier)
86 OR !$infos['taille'] = @intval(filesize($fichier))) {
87 spip_log ("Echec copie du fichier $fichier");
88 return _T('medias:erreur_copie_fichier',array('nom'=> $fichier));
89 }
90
91 // chercher une fonction de description
92 $meta = array();
93 if ($metadata = charger_fonction($ext,"metadata",true)){
94 $meta = $metadata($fichier);
95 }
96 else {
97 $media = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($ext));
98 if ($metadata = charger_fonction($media,"metadata",true)){
99 $meta = $metadata($fichier);
100 }
101 }
102
103 $meta = pipeline('renseigner_document',array('args'=>array('extension'=>$ext,'fichier'=>$fichier),'data' => $meta));
104
105 include_spip('inc/filtres'); # pour objet_info()
106 $editables = objet_info('document','champs_editables');
107 foreach($meta as $m=>$v)
108 if (isset($infos[$m]) OR in_array($m,$editables))
109 $infos[$m] = $v;
110
111 return $infos;
112 }
113
114 ?>