[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 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 include_spip('inc/actions'); // *action_auteur et determine_upload 16 include_spip('inc/date'); 17 include_spip('base/abstract_sql'); 18 19 // 20 // Vignette pour les documents lies 21 // 22 23 // http://doc.spip.org/@vignette_par_defaut 24 function vignette_par_defaut($ext, $size=true, $loop = true) { 25 26 if (!$ext) 27 $ext = 'txt'; 28 29 // Chercher la vignette correspondant a ce type de document 30 // dans les vignettes persos, ou dans les vignettes standard 31 if (!@file_exists($v = _DIR_IMG_ICONES . $ext.'.png') 32 AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.gif') 33 # icones standard 34 AND !@file_exists($v = _DIR_IMG_ICONES_DIST . $ext.'.png') 35 # cas d'une install dans un repertoire "applicatif"... 36 AND !@file_exists(_ROOT_IMG_ICONES_DIST . $v) 37 ) 38 if ($loop) 39 $v = vignette_par_defaut('defaut', false, $loop=false); 40 else 41 $v = false; # pas trouve l'icone de base 42 43 if (!$size) return $v; 44 45 if ($size = @getimagesize($v)) { 46 $largeur = $size[0]; 47 $hauteur = $size[1]; 48 } 49 50 return array($v, $largeur, $hauteur); 51 } 52 53 // 54 // Affiche le document avec sa vignette par defaut 55 // 56 // Attention : en mode 'doc', si c'est un fichier graphique on prefere 57 // afficher une vue reduite, quand c'est possible (presque toujours, donc) 58 // En mode 'vignette', l'image conserve sa taille 59 // 60 // A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille 61 // de la vignette -> c'est a ca que sert la variable $portfolio 62 // http://doc.spip.org/@image_pattern 63 function image_pattern($vignette) { 64 return "<img src='" 65 . _DIR_RACINE 66 . $vignette['fichier']."' 67 alt=' ' 68 width='".$vignette['largeur']."' 69 height='".$vignette['hauteur']."' />"; 70 } 71 72 // http://doc.spip.org/@document_et_vignette 73 function document_et_vignette($document, $url, $portfolio=false) { 74 // a supprimer avec spip_types_documents 75 $extension = spip_fetch_array(spip_query("SELECT extension, mime_type FROM spip_types_documents WHERE id_type=".$document['id_type'])); 76 $mime = $extension['mime_type']; 77 $extension = $extension['extension']; 78 $vignette = $document['id_vignette']; 79 80 if ($vignette) 81 $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = ".$vignette)); 82 if ($vignette) { 83 if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) { 84 $image = image_pattern($vignette); 85 } else { 86 include_spip('inc/filtres'); 87 $image = filtrer('image_reduire',_DIR_RACINE.$vignette['fichier'], 120, 110, false, true); 88 } 89 } 90 else if (strstr($GLOBALS['meta']['formats_graphiques'], $extension) 91 AND $GLOBALS['meta']['creer_preview'] == 'oui') { 92 include_spip('inc/distant'); 93 include_spip('inc/filtres'); 94 if ($document['distant'] != 'oui') 95 $image = _DIR_RACINE.$document['fichier']; 96 if ($portfolio) { 97 $image = filtrer('image_reduire',$image, 110, 120, false, true); 98 } else { 99 $image = filtrer('image_reduire',$image,-1,-1,false, true); 100 } 101 } else { 102 $image = ''; 103 } 104 if (!$image) { 105 list($fichier, $largeur, $hauteur) = vignette_par_defaut($extension); 106 $image = "<img src='$fichier'\n\theight='$hauteur' width='$largeur' alt=' ' />"; 107 } 108 109 if (!$url) 110 return $image; 111 else 112 return "<a href='$url'\n\ttype='$mime'>$image</a>"; 113 } 114 115 116 // 117 // Afficher un document dans la colonne de gauche 118 // 119 120 // http://doc.spip.org/@afficher_documents_colonne 121 function afficher_documents_colonne($id, $type="article",$script=NULL) { 122 include_spip('inc/autoriser'); 123 // il faut avoir les droits de modif sur l'article pour pouvoir uploader ! 124 if (!autoriser('modifier',$type, $id)) 125 return ""; 126 127 include_spip('inc/minipres'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette 128 include_spip('inc/presentation'); // pour l'aide quand on appelle afficher_documents_colonne depuis un squelette 129 // seuls cas connus : article, breve ou rubrique 130 if ($script==NULL){ 131 $script = $type.'s_edit'; 132 if (_DIR_RESTREINT) 133 $script = parametre_url(self(),"show_docs",''); 134 } 135 $id_document_actif = _request('show_docs'); 136 137 /// Ajouter nouvelle image 138 $ret .= "<a name='images'></a>\n"; 139 $titre_cadre = _T('bouton_ajouter_image').aide("ins_img"); 140 141 $joindre = charger_fonction('joindre', 'inc'); 142 $ret .= debut_cadre_relief("image-24.gif", true, "creer.gif", $titre_cadre); 143 $ret .= $joindre($script, "id_$type=$id", $id, _T('info_telecharger'),'vignette',$type,'',0,generer_url_ecrire("documents_colonne","id=$id&type=$type",true)); 144 145 $ret .= fin_cadre_relief(true); 146 147 //// Documents associes 148 $res = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l WHERE l.id_".$type."=$id AND l.id_document=docs.id_document AND docs.mode='document' ORDER BY docs.id_document"); 149 150 $documents_lies = array(); 151 while ($row = spip_fetch_array($res)) 152 $documents_lies[]= $row['id_document']; 153 154 if (count($documents_lies)) { 155 $res = spip_query("SELECT DISTINCT id_vignette FROM spip_documents WHERE id_document in (".join(',', $documents_lies).")"); 156 while ($v = spip_fetch_array($res)) 157 $vignettes[]= $v['id_vignette']; 158 $docs_exclus = ereg_replace('^,','',join(',', $vignettes).','.join(',', $documents_lies)); 159 160 if ($docs_exclus) $docs_exclus = "AND l.id_document NOT IN ($docs_exclus) "; 161 } else $docs_exclus = ''; 162 163 //// Images sans documents 164 $images_liees = spip_query("SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_".$type."=$id AND l.id_document=docs.id_document ".$docs_exclus."AND docs.mode='vignette' ORDER BY docs.id_document"); 165 166 $ret .= "\n<p></p><div id='liste_images'>"; 167 while ($doc = spip_fetch_array($images_liees)) { 168 $id_document = $doc['id_document']; 169 $deplier = $id_document_actif==$id_document; 170 $ret .= afficher_case_document($id_document, $id, $script, $type, $deplier); 171 } 172 173 /// Ajouter nouveau document 174 $ret .= "</div><p> </p>\n<a name='documents'></a>\n<a name='portfolio'></a>\n"; 175 176 if ($GLOBALS['meta']["documents_" . $type] == 'oui') { 177 $titre_cadre = _T('bouton_ajouter_document').aide("ins_doc"); 178 $ret .= debut_cadre_enfonce("doc-24.gif", true, "creer.gif", $titre_cadre); 179 $ret .= $joindre($script, "id_$type=$id", $id, _T('info_telecharger_ordinateur'), 'document',$type,'',0,generer_url_ecrire("documents_colonne","id=$id&type=$type",true)); 180 $ret .= fin_cadre_enfonce(true); 181 } 182 183 // Afficher les documents lies 184 $ret .= "<p></p><div id='liste_documents'>\n"; 185 186 foreach($documents_lies as $doc) { 187 $id_document = $doc['id_document']; 188 $deplier = $id_document_actif==$id_document; 189 $ret .= afficher_case_document($doc, $id, $script, $type, $deplier); 190 } 191 $ret .= "</div>"; 192 if (!_DIR_RESTREINT){ 193 $ret .= "<script src='"._DIR_JAVASCRIPT."async_upload.js' type='text/javascript'></script>\n"; 194 $ret .= <<<EOF 195 <script type='text/javascript'> 196 $("form.form_upload").async_upload(async_upload_article_edit) 197 </script> 198 EOF; 199 } 200 201 return $ret; 202 } 203 204 // 205 // Affiche le raccourci <doc123|left> 206 // et l'insere quand on le clique 207 // 208 // http://doc.spip.org/@affiche_raccourci_doc 209 function affiche_raccourci_doc($doc, $id, $align) { 210 if ($align) { 211 $pipe = "|$align"; 212 213 if ($GLOBALS['browser_barre']) 214 $onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe>', document.formulaire.texte);\"\ntitle=\"". str_replace('&', '&', entites_html(_T('double_clic_inserer_doc')))."\""; 215 } else { 216 $align='center'; 217 } 218 return "\n<div align='$align'$onclick><$doc$id$pipe></div>\n"; 219 } 220 221 222 // Est-ce que le document est inclus dans le texte ? 223 // http://doc.spip.org/@est_inclus 224 function est_inclus($id_document) { 225 return isset($GLOBALS['doublons_documents_inclus']) ? 226 in_array($id_document,$GLOBALS['doublons_documents_inclus']) : false; 227 } 228 229 // 230 // Afficher un document sous forme de ligne depliable (pages xxx_edit) 231 // 232 // TODO: il y a du code a factoriser avec inc/documenter 233 234 // http://doc.spip.org/@afficher_case_document 235 function afficher_case_document($id_document, $id, $script, $type, $deplier=false) { 236 global $options, $couleur_foncee, $spip_lang_left, $spip_lang_right; 237 238 charger_generer_url(); 239 240 $document = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document))); 241 242 $id_vignette = $document['id_vignette']; 243 $id_type = $document['id_type']; 244 $titre = $document['titre']; 245 $descriptif = $document['descriptif']; 246 $url = generer_url_document($id_document); 247 $fichier = $document['fichier']; 248 $largeur = $document['largeur']; 249 $hauteur = $document['hauteur']; 250 $taille = $document['taille']; 251 $mode = $document['mode']; 252 $distant = $document['distant']; 253 254 // le doc est-il appele dans le texte ? 255 $doublon = est_inclus($id_document); 256 257 $cadre = strlen($titre) ? $titre : basename($document['fichier']); 258 259 $result = spip_query("SELECT * FROM spip_types_documents WHERE id_type=$id_type"); 260 if ($letype = @spip_fetch_array($result)) { 261 $type_extension = $letype['extension']; 262 $type_inclus = $letype['inclus']; 263 $type_titre = $letype['titre']; 264 } 265 266 // 267 // Afficher un document 268 // 269 $ret = ""; 270 if ($mode == 'document') { 271 if ($options == "avancees") { 272 # 'extension', a ajouter dans la base quand on supprimera spip_types_documents 273 switch ($id_type) { 274 case 1: 275 $document['extension'] = "jpg"; 276 break; 277 case 2: 278 $document['extension'] = "png"; 279 break; 280 case 3: 281 $document['extension'] = "gif"; 282 break; 283 } 284 285 $ret .= "<a id='document$id_document' name='document$id_document'></a>\n"; 286 $ret .= debut_cadre_enfonce("doc-24.gif", true, "", lignes_longues(typo($cadre),20)); 287 288 // 289 // Affichage de la vignette 290 // 291 $ret .= "\n<div align='center'>"; 292 293 // Signaler les documents distants par une icone de trombone 294 $ret .= ($document['distant'] == 'oui') 295 ? "\n<img src='"._DIR_IMG_PACK.'attachment.gif'."'\n\t style='float: $spip_lang_right;'\n\talt=\"$fichier\"\n\ttitle=\"$fichier\" />\n" 296 :''; 297 298 $ret .= document_et_vignette($document, $url, true); 299 $ret .= '</div>'; 300 $ret .= "\n<div class='verdana1' style='text-align: center; color: black;'>\n"; 301 $ret .= ($type_titre ? $type_titre : 302 ( _T('info_document').' '.majuscules($type_extension))); 303 $ret .= "</div>"; 304 305 // Affichage du raccourci <doc...> correspondant 306 $raccourci = ''; 307 if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) { 308 $raccourci .= "<b>"._T('info_inclusion_vignette')."</b><br />"; 309 } 310 $raccourci .= "<div style='color: 333333'>" 311 . affiche_raccourci_doc('doc', $id_document, 'left') 312 . affiche_raccourci_doc('doc', $id_document, 'center') 313 . affiche_raccourci_doc('doc', $id_document, 'right') 314 . "</div>\n"; 315 316 if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) { 317 $raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>"; 318 $raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />"; 319 $raccourci .= "<div style='color: 333333'>" 320 . affiche_raccourci_doc('emb', $id_document, 'left') 321 . affiche_raccourci_doc('emb', $id_document, 'center') 322 . affiche_raccourci_doc('emb', $id_document, 'right') 323 . "</div>\n"; 324 $raccourci .= "</div>"; 325 } 326 327 $raccourci = $doublon 328 ? affiche_raccourci_doc('doc', $id_document, '') 329 : $raccourci; 330 331 $ret .= "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>" 332 . $raccourci."</div>\n"; 333 334 $legender = charger_fonction('legender', 'inc'); 335 $ret .= $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier); 336 337 $ret .= fin_cadre_enfonce(true); 338 } 339 } 340 341 // 342 // Afficher une image inserable dans l'article 343 // 344 else if ($mode == 'vignette') { 345 346 $ret .= debut_cadre_relief("image-24.gif", true, "", lignes_longues(typo($cadre),20)); 347 348 // 349 // Afficher un apercu (pour les images) 350 // 351 if ($type_inclus == 'image') { 352 $ret .= "<div style='text-align: center; padding: 2px;'>\n"; 353 $ret .= document_et_vignette($document, $url, true); 354 $ret .= "</div>\n"; 355 } 356 357 // 358 // Preparer le raccourci a afficher sous la vignette ou sous l'apercu 359 // 360 $raccourci = ""; 361 if (strlen($descriptif) > 0 OR strlen($titre) > 0) 362 $doc = 'doc'; 363 else 364 $doc = 'img'; 365 366 $raccourci .= 367 affiche_raccourci_doc($doc, $id_document, 'left') 368 . affiche_raccourci_doc($doc, $id_document, 'center') 369 . affiche_raccourci_doc($doc, $id_document, 'right'); 370 371 $raccourci = $doublon 372 ? affiche_raccourci_doc($doc, $id_document, '') 373 : $raccourci; 374 375 $ret .= "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>" 376 . $raccourci."</div>\n"; 377 378 379 $legender = charger_fonction('legender', 'inc'); 380 $ret .= $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier); 381 382 $ret .= fin_cadre_relief(true); 383 } 384 return $ret; 385 } 386 387 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |