d84fc255044029b0325d505e3e86703306dc536e
[ptitvelo/web/www.git] / www / plugins-dist / medias / inc / documents.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2013 *
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 // inclure les fonctions bases du core
16 include_once _DIR_RESTREINT . "inc/documents.php";
17
18 include_spip('inc/actions'); // *action_auteur et determine_upload
19 include_spip('inc/date');
20
21 // Constante indiquant le charset probable des documents non utf-8 joints
22
23 if (!defined('CHARSET_JOINT')) define('CHARSET_JOINT', 'iso-8859-1');
24
25 // Filtre pour #FICHIER permettant d'incruster le contenu d'un document
26 // Si 2e arg fourni, conversion dans le charset du site si possible
27
28 // http://doc.spip.org/@contenu_document
29 function contenu_document($arg, $charset='')
30 {
31 if (is_numeric($arg)) {
32 $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".intval($arg));
33 if (!$r) return '';
34 $f = $r['fichier'];
35 $f = ($r['distant'] =='oui') ? _DIR_RACINE . copie_locale($f) : get_spip_doc($f);
36 }
37 else {
38 if (!@file_exists($f=$arg)){
39 if (!$f = copie_locale($f))
40 return '';
41 $f = _DIR_RACINE . $f;
42 }
43 }
44
45 $r = spip_file_get_contents($f);
46
47 if ($charset) {
48 include_spip('inc/charset');
49 if ($charset !== 'auto') {
50 $r = importer_charset($r, $charset);
51 } elseif ($GLOBALS['meta']['charset'] == 'utf-8' AND !is_utf8($r))
52 $r = importer_charset($r, CHARSET_JOINT);
53 }
54 return $r;
55 }
56
57 // http://doc.spip.org/@generer_url_document_dist
58 function generer_url_document_dist($id_document, $args='', $ancre='') {
59
60 include_spip('inc/autoriser');
61 if (!autoriser('voir', 'document', $id_document)) return '';
62
63 $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".intval($id_document));
64
65 if (!$r) return '';
66
67 $f = $r['fichier'];
68
69 if ($r['distant'] == 'oui') return $f;
70
71 // Si droit de voir tous les docs, pas seulement celui-ci
72 // il est inutilement couteux de rajouter une protection
73 $r = (autoriser('voir', 'document'));
74 if (($r AND $r !== 'htaccess'))
75 return get_spip_doc($f);
76
77 include_spip('inc/securiser_action');
78
79 // cette action doit etre publique !
80 return generer_url_action('acceder_document',
81 $args . ($args ? "&" : '')
82 . 'arg='.$id_document
83 . ($ancre ? "&ancre=$ancre" : '')
84 . '&cle=' . calculer_cle_action($id_document.','.$f)
85 . '&file=' . rawurlencode($f)
86 ,true,true);
87 }
88
89 //
90 // Affiche le document avec sa vignette par defaut
91 //
92 // Attention : en mode 'doc', si c'est un fichier graphique on prefere
93 // afficher une vue reduite, quand c'est possible (presque toujours, donc)
94 // En mode 'image', l'image conserve sa taille
95 //
96 // A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille
97 // de la vignette -> c'est a ca que sert la variable $portfolio
98 // http://doc.spip.org/@vignette_automatique
99 function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='spip_logos')
100 {
101 include_spip('inc/distant');
102 include_spip('inc/texte');
103 include_spip('inc/filtres_images_mini');
104 $e = $doc['extension'];
105 if (!$img) {
106 if ($img = image_du_document($doc)) {
107 if (!$x AND !$y) // eviter une double reduction
108 $img = image_reduire($img);
109 }
110 else{
111 $f = charger_fonction('vignette','inc');
112 $img = $f($e, false);
113 $size = @getimagesize($img);
114 $img = "<img src='$img' ".$size[3]." />";
115 }
116 }
117 else{
118 $size = @getimagesize($img);
119 $img = "<img src='$img' ".$size[3]." />";
120 }
121 // on appelle image_reduire independamment de la presence ou non
122 // des librairies graphiques
123 // la fonction sait se debrouiller et faire de son mieux dans tous les cas
124 if ($x OR $y) {
125 $img = image_reduire($img, $x, $y);
126 }
127 $img = inserer_attribut($img, 'alt', '');
128 $img = inserer_attribut($img, 'class', $class);
129 if ($align) $img = inserer_attribut($img, 'align', $align);
130
131 if (!$lien) return $img;
132
133 $titre = supprimer_tags(typo($doc['titre']));
134 $titre = " - " .taille_en_octets($doc['taille'])
135 . ($titre ? " - $titre" : "");
136
137 $type = sql_fetsel('titre, mime_type','spip_types_documents', "extension = " . sql_quote($e));
138
139 $mime = $type['mime_type'];
140 $titre = attribut_html(couper($type['titre'] . $titre, 80));
141
142 return "<a href='$lien' type='$mime' title='$titre'>$img</a>";
143 }
144
145 // Trouve une image caracteristique d'un document.
146 // Si celui-ci est une image et que les outils graphiques sont dispos,
147 // retourner le document (en exploitant sa copie locale s'il est distant).
148 // Autrement retourner la vignette fournie par SPIP pour ce type MIME
149 // Resultat: un fichier local existant
150
151 function image_du_document($document)
152 {
153 $e = $document['extension'];
154 if ((strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false)
155 AND (!test_espace_prive() OR $GLOBALS['meta']['creer_preview']=='oui')
156 AND $document['fichier']) {
157 if ($document['distant'] == 'oui') {
158 $image = _DIR_RACINE.copie_locale($document['fichier']);
159 }
160 else
161 $image = get_spip_doc($document['fichier']);
162 if (@file_exists($image)) return $image;
163 }
164 return '';
165 }
166
167
168 /**
169 * Afficher un document dans la colonne de gauche
170 *
171 * @deprecated
172 * Utiliser l'inclusion prévue ou une véritable
173 * déclaration d'objet éditorial (la colonne document
174 * est alors affichée automatiquement sur la page d'édition de l'objet)
175 *
176 * @param int $id
177 * Identifiant de l'objet, ou id_auteur négatif pour un nouvel objet
178 * @param string $type
179 * Type d'objet
180 * @param null $script
181 * ??
182 * @return string
183 * Code HTML permettant de gérer des documents
184 */
185 function afficher_documents_colonne($id, $type="article", $script=NULL) {
186 return recuperer_fond('prive/objets/editer/colonne_document', array('objet'=>$type,'id_objet'=>$id));
187 }
188
189
190 /**
191 * Affiche le code d'un raccourcis de document, tel que <doc123|left>
192 *
193 * Affiche un code de raccourcis de document, et l'insère
194 * dans le textarea principal de l'objet (champ 'texte') sur un double-clic
195 *
196 * @param string $doc
197 * Type de raccourcis : doc,img,emb...
198 * @param int $id
199 * Identifiant du document
200 * @param string $align
201 * Alignement du document : left,center,right
202 *
203 * @return string
204 * Texte du raccourcis
205 **/
206 function affiche_raccourci_doc($doc, $id, $align) {
207 static $num = 0;
208 $pipe = $onclick = "";
209
210 if ($align) {
211 $pipe = "|$align";
212 $onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe&gt;', $('textarea[name=texte]')[0]);\"\ntitle=\"". str_replace('&amp;', '&', entites_html(_T('medias:double_clic_inserer_doc')))."\"";
213 } else {
214 $align='center';
215 }
216
217 return "\n<div style='text-align: $align'$onclick>&lt;$doc$id$pipe&gt;</div>\n";
218 }
219
220 ?>