Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 david 1
<?php
2
 
3
/***************************************************************************\
4
 *  SPIP, Systeme de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright (c) 2001-2005                                                *
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
 
14
//
15
// Ce fichier ne sera execute qu'une fois
16
if (defined("_ECRIRE_INC_DOCUMENTS")) return;
17
define("_ECRIRE_INC_DOCUMENTS", "1");
18
 
19
include_ecrire ("inc_admin.php3");
20
include_ecrire ("inc_date.php3");
21
 
22
//
23
// Vignette pour les documents lies
24
//
25
 
26
function vignette_par_defaut($type_extension, $size=true) {
27
 
28
	if (!$type_extension)
29
		$type_extension = 'txt';
30
 
31
	$filename = _DIR_IMG_ICONES . "$type_extension";
32
 
33
	// Glurps !
34
	// je dirais meme plus: Glurps ! (esj)
35
	if (!@file_exists($v = $filename.'.png'))
36
	if (!@file_exists($v = $filename.'.gif'))
37
	if (!@file_exists($v = $filename.'-dist.png'))
38
	if (!@file_exists($v = $filename.'-dist.gif'))
39
	if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut.png"))
40
	if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut.gif"))
41
	if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut-dist.png"))
42
	if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut-dist.gif"))
43
	$v = _DIR_IMG_ICONES . "/defaut-dist.gif";
44
 
45
	if (!$size) return $v;
46
 
47
	if ($size = @getimagesize($v)) {
48
		$largeur = $size[0];
49
		$hauteur = $size[1];
50
	}
51
 
52
	return array($v, $largeur, $hauteur);
53
}
54
 
55
 
56
//
57
// Affiche le document avec sa vignette par defaut
58
//
59
// Attention : en mode 'doc', si c'est un fichier graphique on prefere
60
// afficher une vue reduite, quand c'est possible (presque toujours, donc)
61
// En mode 'vignette', l'image conserve sa taille
62
//
63
// A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille
64
// de la vignette -> c'est a ca que sert la variable $portfolio
65
function image_pattern($vignette) {
66
	return "<img src='"
67
			. (_DIR_RESTREINT ? '' : '../')
68
			. $vignette['fichier']."'
69
			width='".$vignette['largeur']."'
70
			height='".$vignette['hauteur']."'
71
			style='border-width: 0px;' />";
72
}
73
 
74
function document_et_vignette($document, $url, $portfolio=false) {
75
	// a supprimer avec spip_types_documents
76
	list($extension) = spip_fetch_array(spip_query("SELECT extension FROM
77
		spip_types_documents WHERE id_type=".$document['id_type']));
78
 
79
	if ($document['id_vignette'] > 0
80
	AND $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents
81
	WHERE id_document = ".$document['id_vignette']))) {
82
		if (!$portfolio OR !(lire_meta('creer_preview') == 'oui')) {
83
			$image = image_pattern($vignette);
84
		} else {
85
			$image = prive_lien_image_reduite ($vignette['largeur'],
86
				$vignette['hauteur'], $vignette['fichier']);
87
		}
88
	} else if (strstr(lire_meta('formats_graphiques'), $extension)
89
	AND lire_meta('creer_preview') == 'oui') {
90
		include_ecrire('inc_logos.php3');
91
		#var_dump($document);
92
		$local = copie_locale($document['fichier']);
93
		if ($portfolio)
94
			$image = reduire_image_logo($local, 110, 120);
95
		else
96
			$image = reduire_image_logo($local);
97
	}
98
 
99
	if (!$image) {
100
		list($fichier, $largeur, $hauteur) = vignette_par_defaut($extension);
101
		$image = "<img src='$fichier' style='border-width: 0px;'  height='$hauteur' width='$largeur' />";
102
	}
103
 
104
	if (!$url)
105
		return $image;
106
	else
107
		return "<a href='$url'>$image</a>";
108
}
109
 
110
//
111
// Integration (embed) multimedia
112
//
113
 
114
function embed_document($id_document, $les_parametres="", $afficher_titre=true) {
115
	global $id_doublons;
116
 
117
	$id_doublons['documents'] .= ",$id_document";
118
 
119
	if ($les_parametres) {
120
		$parametres = explode("|",$les_parametres);
121
 
122
		for ($i = 0; $i < count($parametres); $i++) {
123
			$parametre = $parametres[$i];
124
 
125
			if (eregi("^left|right|center$", $parametre)) {
126
				$align = $parametre;
127
			}
128
			else {
129
				$params[] = $parametre;
130
			}
131
		}
132
	}
133
 
134
	if (!($row = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)))))
135
		return '';
136
	$id_document = $row['id_document'];
137
	$id_type = $row['id_type'];
138
	$titre = propre($row ['titre']);
139
	$descriptif = propre($row['descriptif']);
140
	$fichier = generer_url_document($id_document);
141
	$largeur = $row['largeur'];
142
	$hauteur = $row['hauteur'];
143
	$taille = $row['taille'];
144
	$mode = $row['mode'];
145
 
146
	$result_type = spip_query("SELECT * FROM spip_types_documents WHERE id_type=" . intval($id_type));
147
	if ($row_type = @spip_fetch_array($result_type)) {
148
		$type = $row_type['titre'];
149
		$inclus = $row_type['inclus'];
150
		$extension = $row_type['extension'];
151
	}
152
	else $type = 'fichier';
153
 
154
	// Pour RealVideo
155
	$real = ((!ereg("^controls", $les_parametres)) AND (ereg("^(rm|ra|ram)$", $extension)));
156
 
157
	if ($inclus == "embed" AND !$real) {
158
 
159
				for ($i = 0; $i < count($params); $i++) {
160
					if (ereg("([^\=]*)\=([^\=]*)", $params[$i], $vals)){
161
						$nom = $vals[1];
162
						$valeur = $vals[2];
163
						$inserer_vignette .= "<param name='$nom' value='$valeur'>";
164
						$param_emb .= " $nom='$valeur'";
165
						if ($nom == "controls" AND $valeur == "PlayButton") {
166
							$largeur = 40;
167
							$hauteur = 25;
168
						}
169
						else if ($nom == "controls" AND $valeur == "PositionSlider") {
170
							$largeur = $largeur - 40;
171
							$hauteur = 25;
172
						}
173
					}
174
				}
175
 
176
				$vignette = "<object width='$largeur' height='$hauteur'>\n";
177
				$vignette .= "<param name='movie' value='$fichier'>\n";
178
				$vignette .= "<param name='src' value='$fichier'>\n";
179
				$vignette .= $inserer_vignette;
180
 
181
				$vignette .= "<embed src='$fichier' $param_emb width='$largeur' height='$hauteur'></embed></object>\n";
182
 
183
	}
184
	else if ($inclus == "embed" AND $real) {
185
			$vignette .= "<div>".embed_document ($id_document, "controls=ImageWindow|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false)."</div>";
186
			$vignette .= embed_document ($id_document, "controls=PlayButton|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);
187
			$vignette .= embed_document ($id_document, "controls=PositionSlider|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);
188
		}
189
	else if ($inclus == "image") {
190
		$fichier_vignette = $fichier;
191
		$largeur_vignette = $largeur;
192
		$hauteur_vignette = $hauteur;
193
		if ($fichier_vignette) {
194
			$vignette = "<img src='$fichier_vignette' style='border-width: 0px;'";
195
			if ($largeur_vignette && $hauteur_vignette)
196
				$vignette .= " width='$largeur_vignette' height='$hauteur_vignette'";
197
			if ($titre) {
198
				$titre_ko = ($taille > 0) ? ($titre . " - ". taille_en_octets($taille)) : $titre;
199
				$titre_ko = supprimer_tags(propre($titre_ko));
200
				$vignette .= " alt=\"$titre_ko\" title=\"$titre_ko\"";
201
			}else{  $vignette .= " alt=\"\" title=\"\""; }
202
			$vignette .= " />";
203
		}
204
	}
205
 
206
	if (!$afficher_titre) return $vignette;
207
 
208
	if ($largeur_vignette < 120) $largeur_vignette = 120;
209
	$forcer_largeur = " width = '$largeur_vignette'";
210
 
211
	if ($align != 'center') $float = " style='float: $align;'";
212
 
213
	$retour .= "<div class='spip_documents spip_documents_$align'$float>\n";
214
	$retour .= $vignette;
215
 
216
	if ($titre) $retour .= "<div class='spip_doc_titre'><strong>$titre</strong></div>";
217
 
218
	if ($descriptif) {
219
	  $retour .= "<div class='spip_doc_descriptif'>$descriptif</div>";
220
	}
221
 
222
	$retour .= "</div>\n";
223
 
224
	return $retour;
225
}
226
 
227
 
228
//
229
// Integration des images et documents
230
//
231
 
232
function integre_image($id_document, $align, $type_aff) {
233
	global $id_doublons;
234
 
235
	$id_doublons['documents'] .= ",$id_document";
236
 
237
	if (!($row = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document))))) return "";
238
	$id_document = $row['id_document'];
239
	$id_type = $row['id_type'];
240
	$titre = typo($row['titre']);
241
	$descriptif = propre($row['descriptif']);
242
	$fichier = $row['fichier'];
243
	$url_fichier = generer_url_document($id_document);
244
	$largeur = $row['largeur'];
245
	$hauteur = $row['hauteur'];
246
	$taille = $row['taille'];
247
	$mode = $row['mode'];
248
	$id_vignette = $row['id_vignette'];
249
 
250
	// on construira le lien en fonction du type de doc
251
	if ($t = @spip_fetch_array(spip_query(
252
	"SELECT titre,extension FROM spip_types_documents
253
	WHERE id_type = $id_type"))) {
254
			$extension = $t['extension']; # jpg, tex
255
			$type = $t['titre']; # JPEG, LaTeX
256
	}
257
 
258
	// Attention ne pas confondre :
259
	// pour un document affiche avec le raccourci <IMG> on a
260
	// $mode == 'document' et $type_aff == 'IMG'
261
	// inversement, pour une image presentee en mode 'DOC',
262
	// $mode == 'vignette' et $type_aff == 'DOC'
263
 
264
	// Type : vignette ou document ?
265
	if ($mode == 'document') {
266
		$vignette = document_et_vignette($row, $url_fichier);
267
	} else {
268
		$vignette = image_pattern($row);
269
	}
270
 
271
	//
272
	// Regler le alt et title
273
	//
274
	$alt_titre_doc = entites_html(texte_backend(supprimer_tags($titre)));
275
	$alt_infos_doc = entites_html($type
276
		. (($taille>0) ? ' - '.texte_backend(taille_en_octets($taille)) : ''));
277
	if ($row['distant'] == 'oui')
278
		$alt_infos_doc .= ", ".$url_fichier;
279
	if ($alt_titre_doc) $alt_sep = ', ';
280
 
281
	// documents presentes en mode <DOC> : alt et title "JPEG, 54 ko"
282
	// mais pas de titre puisqu'il est en dessous
283
	if ($mode == 'document' AND $type_aff == 'DOC') {
284
		$alt = " alt=\"$alt_infos_doc\" title=\"$alt_infos_doc\"";
285
	}
286
	// document en mode <IMG> : alt + title detailles
287
	else if ($mode == 'document' AND $type_aff == 'IMG') {
288
		$alt = " alt=\"$alt_titre_doc$alt_sep$alt_infos_doc\"
289
			title=\"$alt_titre_doc$alt_sep$alt_infos_doc\"";
290
	}
291
	// vignette en mode <DOC> : alt disant "JPEG", pas de title
292
	else if ($mode == 'vignette' AND $type_aff == 'DOC') {
293
		$alt = " alt=\"($type)\"";
294
	}
295
	// vignette en mode <IMG> : alt + title s'il y a un titre
296
	else if ($mode == 'vignette' AND $type_aff == 'IMG') {
297
		if (strlen($titre))
298
			$alt = " alt=\"$alt_titre_doc ($type)\" title=\"$alt_titre_doc\"";
299
		else
300
			$alt = " alt=\"($type)\"";
301
	}
302
 
303
	$vignette = str_replace(' />', "$alt />", $vignette); # inserer l'attribut
304
 
305
	// Preparer le texte sous l'image pour les <DOC>
306
	if ($type_aff == 'DOC') {
307
		if (strlen($titre))
308
			$txt = "\n<div class='spip_doc_titre'><strong>"
309
				. $titre
310
				. "</strong></div>\n";
311
		if (strlen($descriptif))
312
			$txt .= "<div class='spip_doc_descriptif'>$descriptif</div>\n";
313
	}
314
 
315
	// Passer un DIV pour les images centrees et, dans tous les cas, les <DOC>
316
	if ($align == 'center' OR $type_aff =='DOC') {
317
		$span = "div";
318
	} else {
319
		$span = "span";
320
	}
321
 
322
	if ($align != 'center') {
323
		// Largeur de la div = celle de l'image ; mais s'il y a une legende
324
		// mettre au moins 120px
325
		$width = extraire_attribut($vignette, 'width');
326
		if (strlen($txt) AND $width < 120) $width = 120;
327
		$width = 'width: '.$width.'px;';
328
 
329
		$style = " style='float: $align; $width'";
330
	}
331
 
332
	return
333
		"<$span class='spip_documents spip_documents_$align' $style>"
334
		. $vignette
335
		. $txt
336
		. "</$span>\n";
337
}
338
 
339
//
340
// Parcourt recursivement le repertoire upload/ (ou tout autre repertoire, d'ailleurs)
341
//
342
function fichiers_upload($dir) {
343
	$fichiers = array();
344
	$d = opendir($dir);
345
 
346
	while ($f = readdir($d)) {
347
		if (is_file("$dir/$f") AND is_readable("$dir/$f")
348
		AND $f != 'remove.txt')
349
			$fichiers[] = "$dir/$f";
350
		else
351
		if (is_dir("$dir/$f") AND is_readable("$dir/$f")
352
		AND $f != '.' AND $f != '..')
353
			$fichiers = array_merge($fichiers, fichiers_upload("$dir/$f"));
354
 
355
	}
356
	closedir($d);
357
 
358
	sort($fichiers);
359
 
360
	return $fichiers;
361
}
362
 
363
//
364
// Retourner le code HTML d'utilisation de fichiers uploades a la main
365
//
366
 
367
function texte_upload_manuel($dir, $inclus = '') {
368
	$fichiers = fichiers_upload($dir);
369
	$exts = array();
370
 
371
	foreach ($fichiers as $f) {
372
		$f = ereg_replace("^$dir/","",$f);
373
		if (ereg("\.([^.]+)$", $f, $match)) {
374
			$ext = strtolower($match[1]);
375
			if (!$exts[$ext]) {
376
				if ($ext == 'jpeg') $ext = 'jpg';
377
				$req = "SELECT extension FROM spip_types_documents WHERE extension='$ext'";
378
				if ($inclus) $req .= " AND inclus='$inclus'";
379
				if (@spip_fetch_array(spip_query($req))) $exts[$ext] = 'oui';
380
				else $exts[$ext] = 'non';
381
			}
382
 
383
			$ledossier = substr($f, 0, strrpos($f,"/"));
384
			$lefichier = substr($f, strrpos($f, "/"), strlen($f));
385
 
386
			if ($ledossier != $ledossier_prec) {
387
				$texte_upload .= "\n<option value=\"$ledossier\" style='font-weight: bold;'>"
388
				._T('tout_dossier_upload', array('upload' => $ledossier))
389
				."</option>";
390
			}
391
 
392
			$ledossier_prec = $ledossier;
393
 
394
			if ($exts[$ext] == 'oui') $texte_upload .= "\n<option value=\"$f\">&nbsp; &nbsp; &nbsp; &nbsp; $lefichier</option>";
395
		}
396
	}
397
 
398
	if ($texte_upload) {
399
		$texte_upload = "\n<option value=\"/\" style='font-weight: bold;'>"
400
				._T('info_installer_tous_documents')
401
				."</option>" . $texte_upload;
402
	}
403
 
404
	return $texte_upload;
405
}
406
 
407
 
408
//
409
// Retourne le lien HTML vers l'image reduite (pour l'espace prive)
410
//
411
function prive_lien_image_reduite ($largeur_vignette, $hauteur_vignette, $fichier_vignette) {
412
	global $connect_id_auteur;
413
	include_ecrire("inc_logos.php3");
414
 
415
	return reduire_image_logo('../'.$fichier_vignette, 120, 110);
416
}
417
 
418
// Bloc d'edition de la taille du doc (pour embed)
419
function afficher_formulaire_taille($document, $type_inclus='AUTO') {
420
 
421
	// (on ne le propose pas pour les images qu'on sait
422
	// lire, id_type<=3), sauf bug, ou document distant
423
	if ($document['id_type'] <= 3
424
	AND $document['hauteur']*$document['largeur']>0
425
	AND $document['distant']!='oui')
426
		return '';
427
 
428
	// Si on n'a pas le type_inclus, on va le chercher dans spip_types_documents
429
	if ($type_inclus == 'AUTO'
430
	AND $r = spip_query("SELECT * FROM spip_types_documents
431
	WHERE id_type=".$document['id_type'])
432
	AND $type = @spip_fetch_array($r))
433
			$type_inclus = $type['inclus'];
434
 
435
	if (($type_inclus == "embed"  #meme pour le MP3 : "l x h pixels"?
436
	OR $type_inclus == "image")) {
437
		echo "<br /><b>"._T('entree_dimensions')."</b><br />\n";
438
		echo "<input type='text' name='largeur_document' class='fondl' style='font-size:9px;' value=\"".$document['largeur']."\" size='5'>";
439
		echo " &#215; <input type='text' name='hauteur_document' class='fondl' style='font-size:9px;' value=\"".$document['hauteur']."\" size='5'> "._T('info_pixels');
440
	}
441
}
442
 
443
 
444
//
445
// Afficher un formulaire d'upload
446
//
447
 
448
function afficher_upload($link, $redirect='', $intitule, $inclus = '', $envoi_multiple = true, $forcer_document = false) {
449
	global $clean_link, $connect_statut, $connect_toutes_rubriques, $options, $spip_lang_right;
450
	static $num_form = 0; $num_form ++;
451
 
452
	if (!$redirect)
453
		$redirect = $clean_link->getUrl();
454
	$link->addVar('redirect', $redirect);
455
 
456
	if ($forcer_document)
457
		$link->addVar('forcer_document', 'oui');
458
 
459
	echo $link->getForm('POST', '', 'multipart/form-data');
460
	echo "<div>";
461
 
462
	// bouton permettant de telecharger 10 images ou docs a la fois
463
	$envoi_multiple &= ($options == "avancees");
464
	if ($envoi_multiple OR $forcer_document)
465
		echo bouton_block_invisible("ftp$num_form");
466
 
467
	if (tester_upload()) {
468
		echo "$intitule</div>";
469
 
470
		// un modele de selecteur de fichier
471
		$upload = "<div><input name='fichier*' type='File' style='font-size: 10px;' class='forml' size='15'></div>";
472
 
473
		// afficher le premier
474
		echo str_replace('*', '1', $upload);
475
 
476
		/* (TESTS POUR ENVOI MULTIPLE ; DESACTIVE)
477
		// afficher les suivants, masques
478
		if ($envoi_multiple) {
479
			echo debut_block_invisible ("upload$num_form");
480
			for ($i=2; $i<=10; $i++)
481
				echo str_replace('*', "$i", $upload);
482
			echo fin_block();
483
		}
484
		*/
485
 
486
		echo "<div align='".$GLOBALS['spip_lang_right']."'><input name='ok_post' type='Submit' VALUE='"._T('bouton_telecharger')."' CLASS='fondo'></div>\n<div>";
487
	}
488
 
489
	echo debut_block_invisible("ftp$num_form");
490
 
491
	if ($connect_statut == '0minirezo' AND $connect_toutes_rubriques
492
	AND $envoi_multiple) {
493
		$texte_upload = texte_upload_manuel(_DIR_TRANSFERT, $inclus);
494
		if ($texte_upload) {
495
			echo "<p><div style='color: #505050;'>";
496
			if ($forcer_document) echo '<input type="hidden" name="forcer_document" value="oui">';
497
			echo "\n"._T('info_selectionner_fichier')."&nbsp;:<br />";
498
			echo "\n<select name='image2' size='1' class='fondl'>";
499
			echo $texte_upload;
500
			echo "\n</select>";
501
			echo "\n  <div align='".$GLOBALS['spip_lang_right']."'><input name='ok_ftp' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>";
502
 
503
			echo "</div>\n";
504
		}
505
		else {
506
			echo "<div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>";
507
			echo _T('info_installer_ftp').aide("ins_upload");
508
			echo "</div>";
509
		}
510
	}
511
 
512
	// Lien document distant, jamais en mode image
513
	if ($forcer_document) {
514
		echo "<p /><div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>";
515
		echo "<img src='"._DIR_IMG_PACK.'attachment.gif',
516
			"' style='float: $spip_lang_right;' alt=\"\" />\n";
517
		echo "\n"._T('info_referencer_doc_distant')."<br />";
518
		echo "\n<input name='image_url' size='32' class='fondo' value='http://' />";
519
		echo "\n  <div align='".$GLOBALS['spip_lang_right']."'><input name='ok_url' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>";
520
		echo "</div>\n";
521
	}
522
 
523
	echo "</div>\n";
524
	echo fin_block();
525
	echo "</form>\n";
526
 
527
}
528
 
529
 
530
//
531
// Afficher les documents non inclus
532
// (page des articles)
533
 
534
function afficher_portfolio (
535
	$documents = array(),	# liste des documents, avec toutes les donnees
536
	$id_article, 			# numero de l'article ou de la rubrique
537
	$type = "article",		# article ou rubrique ?
538
	$album = 'portfolio',	# album d'images ou de documents ?
539
	$flag_modif = false,	# a-t-on le droit de modifier ?
540
	$image_url,				# adresse du lien spip_image
541
	$redirect_url,			# adresse du retour apres spip-image
542
	$couleur				# couleur des cases du tableau
543
) {
544
	global $connect_id_auteur, $connect_statut;
545
	global $id_doublons, $options;
546
	global $spip_lang_left, $spip_lang_right;
547
 
548
	// la derniere case d'une rangee
549
	$bord_droit = ($album == 'portfolio' ? 2 : 1);
550
 
551
	foreach ($documents as $document) {
552
		$id_document = $document['id_document'];
553
		$id_vignette = $document['id_vignette'];
554
		$id_type = $document['id_type'];
555
		$titre = $document['titre'];
556
		$descriptif = $document['descriptif'];
557
		$url = generer_url_document($id_document);
558
		$fichier = $document['fichier'];
559
		$largeur = $document['largeur'];
560
		$hauteur = $document['hauteur'];
561
		$taille = $document['taille'];
562
		$date = $document['date'];
563
		$mode = $document['mode'];
564
 
565
		$flag_deplie = teste_doc_deplie($id_document);
566
 
567
		if ($case == 0) {
568
			echo "<tr style='border-top: 1px solid black;'>";
569
		}
570
 
571
		$style = "border-$spip_lang_left: 1px solid $couleur; border-bottom: 1px solid $couleur;";
572
		if ($case == $bord_droit) $style .= " border-$spip_lang_right: 1px solid $couleur;";
573
		echo "<td width='33%' style='text-align: $spip_lang_left; $style' valign='top'>";
574
 
575
			// Signaler les documents distants par une icone de trombone
576
			if ($document['distant'] == 'oui') {
577
				echo "<img src='"._DIR_IMG_PACK.'attachment.gif'."' style='float: $spip_lang_right;' alt=\"".entites_html($document['fichier'])."\" title=\"" .
578
entites_html($document['fichier'])."\" />\n";
579
			}
580
 
581
			// bloc vignette + rotation
582
			echo "<div style='text-align:center;'>";
583
 
584
 
585
			# 'extension', a ajouter dans la base quand on supprimera spip_types_documents
586
			switch ($id_type) {
587
				case 1:
588
					$document['extension'] = "jpg";
589
					break;
590
				case 2:
591
					$document['extension'] = "png";
592
					break;
593
				case 3:
594
					$document['extension'] = "gif";
595
					break;
596
			}
597
 
598
			// bloc rotation de l'image
599
			// si c'est une image, qu'on sait la faire tourner, qu'elle
600
			// n'est pas distante, et qu'elle n'a pas de vignette perso !
601
			if ($flag_modif
602
			AND strstr(lire_meta('formats_graphiques'), $document['extension'])
603
			AND $document['distant']!='oui'
604
			AND !$id_vignette) {
605
				echo "<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";
606
				$process = lire_meta('image_process');
607
				if ($process == 'imagick' OR $process == 'gd2'
608
				OR $process == 'convert' OR $process == 'netpbm') {
609
					// tourner a gauche
610
					$link_rot = new Link ($image_url);
611
					$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));
612
					$link_rot->addVar('hash_id_auteur', $connect_id_auteur);
613
					$link_rot->addVar('doc_rotate', $id_document);
614
					$link_rot->addVar('var_rot', -90);
615
					$link_rot->addVar('redirect',
616
						$redirect_url.'&show_docs='.$id_document);
617
					$link_rot->addVar('ancre', $album);
618
					echo http_href_img($link_rot->getUrl(), 'tourner-gauche.gif', "style='border-width: 0px;'", _T('image_tourner_gauche'), '', 'bouton_rotation');
619
					echo "<br />";
620
 
621
					// tourner a droite
622
					$link_rot = new Link ($image_url);;
623
					$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));
624
					$link_rot->addVar('hash_id_auteur', $connect_id_auteur);
625
					$link_rot->addVar('doc_rotate', $id_document);
626
					$link_rot->addVar('var_rot', 90);
627
					$link_rot->addVar('redirect',
628
						$redirect_url.'&show_docs='.$id_document);
629
					$link_rot->addVar('ancre', $album);
630
					echo http_href_img($link_rot->getUrl(),
631
						'tourner-droite.gif', "style='border-width: 0px;'",
632
						_T('image_tourner_droite'), '', 'bouton_rotation');
633
					echo "<br />";
634
 
635
					// tourner 180
636
					$link_rot = new Link ($image_url);;
637
					$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));
638
					$link_rot->addVar('hash_id_auteur', $connect_id_auteur);
639
					$link_rot->addVar('doc_rotate', $id_document);
640
					$link_rot->addVar('var_rot', 180);
641
					$link_rot->addVar('redirect',
642
						$redirect_url.'&show_docs='.$id_document);
643
					$link_rot->addVar('ancre', $album);
644
					echo http_href_img($link_rot->getUrl(),
645
						'tourner-180.gif', "style='border-width: 0px;'",
646
						_T('image_tourner_180'), '', 'bouton_rotation');
647
				}
648
				echo "</div>\n";
649
			} // fin bloc rotation
650
 
651
			//
652
			// Recuperer la vignette et afficher le doc
653
			//
654
			echo document_et_vignette($document, $url, true);
655
 
656
			echo "</div>"; // fin du bloc vignette + rotation
657
 
658
 
659
			// bloc titre et descriptif
660
			if ($flag_modif) {
661
				if ($flag_deplie)
662
					$triangle = bouton_block_visible("port$id_document");
663
				else
664
					$triangle = bouton_block_invisible("port$id_document");
665
			}
666
			if (strlen($titre) > 0) {
667
				echo "<div class='verdana2'><b>$triangle".typo($titre)."</b></div>";
668
			} else {
669
				$nom_fichier = basename($fichier);
670
 
671
				if (strlen($nom_fichier) > 20) {
672
					$nom_fichier = substr($nom_fichier, 0, 10)."...".substr($nom_fichier, strlen($nom_fichier)-10, strlen($nom_fichier));
673
				}
674
				echo "<div class='verdana1'>$triangle$nom_fichier</div>";
675
			}
676
 
677
 
678
			if (strlen($descriptif) > 0) {
679
				echo "<div class='verdana1'>".propre($descriptif)."</div>";
680
			}
681
 
682
			// Taille de l'image ou poids du document
683
			echo "<div class='verdana1' style='text-align: center;'>";
684
			if ($largeur * $hauteur)
685
				echo _T('info_largeur_vignette',
686
					array('largeur_vignette' => $largeur,
687
					'hauteur_vignette' => $hauteur));
688
			else
689
				echo taille_en_octets($taille);
690
			echo "</div>";
691
 
692
 
693
			if ($flag_modif) {
694
				if ($flag_deplie)
695
					echo debut_block_visible("port$id_document");
696
				else
697
					echo debut_block_invisible("port$id_document");
698
 
699
				echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px;'>";
700
				$link = new Link($redirect_url);
701
				$link->addVar('modif_document', 'oui');
702
				$link->addVar('id_document', $id_document);
703
				$link->addVar('show_docs', $id_document);
704
 
705
				if ($document['id_article'])
706
					$query = '?id_article='.$document['id_article'];
707
				if ($document['id_rubrique'])
708
					$query = '?id_rubrique='.$document['id_rubrique'];
709
 
710
				echo $link->getForm('POST', "$query#$album");
711
				echo "<b>"._T('titre_titre_document')."</b><br />\n";
712
				echo "<input type='text' onFocus=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\" name='titre_document' class='formo' style='font-size:11px;' value=\"".entites_html($titre)."\" size='40'><br />\n";
713
 
714
				// modifier la date (seulement dans les rubriques - et encore)
715
				if ($type == 'rubrique'
716
				AND $options == "avancees"
717
				AND $connect_statut == '0minirezo') {
718
					if (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $date, $regs)) {
719
						$mois = $regs[2];
720
						$jour = $regs[3];
721
						$annee = $regs[1];
722
					}
723
					echo "<b>"._T('info_mise_en_ligne')."</b><br />\n",
724
					  afficher_jour($jour, "NAME='jour_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\""),
725
					  afficher_mois($mois, "NAME='mois_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\""),
726
					  afficher_annee($annee, "NAME='annee_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block')\""),
727
					  "<br />\n";
728
				}
729
 
730
				// bloc descriptif (affiche ou hidden)
731
				if ($options == "avancees") {
732
					echo "<b>"._T('info_description')."</b><br />\n";
733
					echo "<textarea name='descriptif_document' rows='4' class='forml' style='font-size:10px;' cols='*' wrap='soft' onFocus=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\">";
734
					echo entites_html($descriptif);
735
					echo "</textarea>\n";
736
 
737
					if ($options == "avancees")
738
						afficher_formulaire_taille($document);
739
 
740
				} else {
741
					echo "<input type='hidden' name='descriptif_document' value=\"".entites_html($descriptif)."\" />\n";
742
				}
743
 
744
				echo "<div class='display_au_chargement' id='valider_doc$id_document' align='".$GLOBALS['spip_lang_right']."'>";
745
				echo "<input TYPE='submit' class='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";
746
				echo "</div>";
747
				echo "</form>";
748
 
749
 
750
				// bloc mettre a jour la vignette
751
				echo "<hr />";
752
				bloc_gerer_vignette($document, $image_url, $redirect_url, $album);
753
 
754
				echo "</div>";
755
 
756
				// bouton "supprimer le doc"
757
				$link_supp = new Link ($image_url);
758
				$link_supp->addVar('redirect', $redirect_url);
759
				$link_supp->addVar('hash',
760
					calculer_action_auteur("supp_doc ".$id_document));
761
				$link_supp->addVar('hash_id_auteur', $connect_id_auteur);
762
				$link_supp->addVar('doc_supp', $id_document);
763
				$link_supp->addVar('ancre', $album);
764
				icone_horizontale(_T('icone_supprimer_document'),
765
					$link_supp->getUrl(), "image-24.gif", "supprimer.gif");
766
 
767
			} // fin block modifs
768
 
769
 
770
			// fin bloc titre + descriptif
771
			echo fin_block();
772
 
773
			echo "</td>\n";
774
			$case ++;
775
 
776
			if ($case > $bord_droit) {
777
				$case = 0;
778
				echo "</tr>\n";
779
			}
780
 
781
			$id_doublons['documents'] .= ",$id_document";
782
		}
783
 
784
		// fermer la derniere ligne
785
		if ($case > 0) {
786
			echo "<td style='border-$spip_lang_left: 1px solid $couleur;'>&nbsp;</td>";
787
			echo "</tr>";
788
		}
789
 
790
}
791
 
792
 
793
function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) {
794
	global $connect_id_auteur;
795
 
796
	$id_document = $document['id_document'];
797
	$id_vignette = $document['id_vignette'];
798
 
799
	echo bouton_block_invisible("gerer_vignette$id_document");
800
	echo "<b>"._T('info_vignette_personnalisee')."</b>\n";
801
	echo debut_block_invisible("gerer_vignette$id_document");
802
 
803
	if ($id_vignette) {
804
		$link = new Link ($image_url);
805
		$link->addVar('redirect',
806
		$redirect_url.'&show_docs='.$id_document);
807
		$link->addVar('hash',
808
			calculer_action_auteur("supp_doc ".$id_vignette));
809
		$link->addVar('hash_id_auteur', $connect_id_auteur);
810
		$link->addVar('doc_supp', $id_vignette);
811
 
812
		$link->addVar('ancre', $album);
813
 
814
		icone_horizontale (_T('info_supprimer_vignette'),
815
		$link->getUrl(), "vignette-24.png", "supprimer.gif");
816
	}
817
	else {
818
/****
819
	OBSOLETE
820
		// lien "creation automatique"
821
		if (strstr(lire_meta('formats_graphiques'), $document['extension'])
822
		AND lire_meta('creer_preview') == 'oui'
823
		AND $document['distant'] != 'oui') {
824
			$link = new Link($image_url);
825
			$link->addvar('creer_vignette', 'oui');
826
			$link->addVar('redirect',
827
				$redirect_url.'&show_docs='.$id_document);
828
			$link->addvar('vignette', $document['fichier']);
829
			$link->addVar('hash',
830
				calculer_action_auteur("vign ".$document['fichier']));
831
			$link->addVar('hash_id_auteur', $connect_id_auteur);
832
			$link->addVar('id_document', $id_document);
833
			$link->addVar('ancre', $album);
834
			icone_horizontale(_T('info_creer_vignette'),
835
			$link->getUrl(), "vignette-24.png", "creer.gif");
836
		}
837
*****/
838
 
839
		// lien "upload vignette"
840
		$link = new Link ($image_url);
841
		$link->addVar('hash', calculer_action_auteur("ajout_doc"));
842
		$link->addVar('hash_id_auteur', $connect_id_auteur);
843
		$link->addVar('ajout_doc', 'oui');
844
		$link->addVar('id_document', $id_document);
845
		$link->addVar('mode', 'vignette');
846
		$link->addVar('ancre', $album);
847
		afficher_upload($link,
848
			$redirect_url.'&show_docs='.$id_document,
849
			/* _T('info_remplacer_vignette') */'', 'portfolio', false);
850
	}
851
	echo fin_block();
852
}
853
 
854
function afficher_documents_non_inclus($id_article, $type = "article", $flag_modif) {
855
	global $couleur_foncee, $couleur_claire;
856
	global $connect_id_auteur, $connect_statut;
857
	global $id_doublons, $options;
858
	global $spip_lang_left, $spip_lang_right;
859
 
860
	$image_url = '../spip_image.php3?';
861
	if ($id_article)
862
		$image_url .= 'id_article='.$id_article;
863
	else if ($id_rubrique)
864
		$image_url .= 'id_article='.$id_rubrique;
865
 
866
	$redirect_url = new Link();
867
	if ($type == "rubrique")
868
		$redirect_url->addVar('modifier_rubrique', 'oui');
869
	$redirect_url = $redirect_url->getUrl();
870
 
871
	// Afficher portfolio
872
	/////////
873
 
874
	$query = "SELECT docs.* FROM spip_documents AS docs, spip_documents_".$type."s AS l, spip_types_documents AS lestypes ".
875
		"WHERE l.id_$type=$id_article AND l.id_document=docs.id_document ".
876
		"AND docs.mode='document'".
877
		" AND docs.id_type=lestypes.id_type AND lestypes.extension IN ('gif', 'jpg', 'png')";
878
 
879
	if ($id_doublons['documents']) $query .= " AND docs.id_document NOT IN (0".$id_doublons['documents'].") ";
880
	$query .= " ORDER BY docs.id_document";
881
 
882
	//
883
	// recuperer tout le tableau des images du portfolio
884
	//
885
	$images_liees = spip_query($query);
886
	$documents = array();
887
	while ($document = spip_fetch_array($images_liees))
888
		$documents[] = $document;
889
 
890
	if (count($documents)) {
891
		echo "<a name='portfolio'></a>";
892
		echo "<div>&nbsp;</div>";
893
		echo "<div style='background-color: $couleur_claire; padding: 4px; color: black; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;' class='verdana2'><b>".majuscules(_T('info_portfolio'))."</b></div>";
894
		echo "<table width='100%' cellspacing='0' cellpadding='3'>";
895
 
896
		afficher_portfolio ($documents, $id_article, $type, 'portfolio', $flag_modif, $image_url, $redirect_url, $couleur_claire);
897
 
898
		echo "</table>\n";
899
	}
900
 
901
 
902
 
903
	//// Documents associes
904
	$query = "SELECT * FROM spip_documents AS docs, spip_documents_".$type."s AS l ".
905
		"WHERE l.id_$type=$id_article AND l.id_document=docs.id_document ".
906
		"AND docs.mode='document'";
907
 
908
	if ($id_doublons['documents']) $query .= " AND docs.id_document NOT IN (0".$id_doublons['documents'].") ";
909
	$query .= " ORDER BY docs.id_document";
910
 
911
	$documents_lies = spip_query($query);
912
 
913
	$documents = array();
914
	while ($document = spip_fetch_array($documents_lies))
915
		$documents[] = $document;
916
 
917
	if (count($documents)) {
918
		echo "<a id='documents'></a>";
919
		echo "<div>&nbsp;</div>";
920
		echo "<div style='background-color: #aaaaaa; padding: 4px; color: black; -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;' class='verdana2'><b>". majuscules(_T('info_documents')) ."</b></div>";
921
		echo "<table width='100%' cellspacing='0' cellpadding='5'>";
922
 
923
		afficher_portfolio ($documents, $id_article, $type, 'documents', $flag_modif, $image_url, $redirect_url, '#aaaaaa');
924
 
925
		echo "</table>";
926
	}
927
 
928
 
929
	if (lire_meta("documents_$type") != 'non' AND $flag_modif) {
930
		/// Ajouter nouveau document/image
931
 
932
		echo "<p>&nbsp;</p>";
933
 
934
		echo "<div align='right'>";
935
		echo "<table width='50%' cellpadding=0 cellspacing=0 border=0><tr><td style='text-align: $spip_lang_left;'>";
936
 
937
		echo debut_cadre_relief("image-24.gif", false, "", _T('titre_joindre_document'));
938
 
939
		$link = new Link ($image_url);
940
		$link->addVar('hash', calculer_action_auteur("ajout_doc"));
941
		$link->addVar('hash_id_auteur', $connect_id_auteur);
942
		$link->addVar('ajout_doc', 'oui');
943
		$link->addVar('type', $type);
944
 
945
		afficher_upload($link, $redirect_url, _T('info_telecharger_ordinateur'), '', true, true);
946
 
947
		echo fin_cadre_relief();
948
 
949
 
950
		echo "</td></tr></table>";
951
		echo "</div>";
952
	}
953
 
954
}
955
 
956
 
957
//
958
// Afficher un document dans la colonne de gauche
959
// (edition des articles)
960
 
961
function afficher_documents_colonne($id_article, $type="article", $flag_modif = true) {
962
	global $connect_id_auteur, $connect_statut;
963
	global $couleur_foncee, $couleur_claire, $options;
964
	global $clean_link;
965
 
966
	$image_url = '../spip_image.php3';
967
	if ($id_article) $image_url .= '?id_article='.$id_article;
968
 
969
	$id_doc_actif = $id_document;
970
 
971
	# HACK!!! simule une mise en page pour affecter la globale id_doublons
972
	# referencee dans afficher_case_document appelee plus loin :
973
	# utile pour un affichage differencie des image "libres" et des images
974
	# integrees via <imgXX|left> dans le texte
975
	propre($GLOBALS['descriptif']." ".$GLOBALS['texte']." ".$GLOBALS['chapo']);
976
 
977
	/// Ajouter nouvelle image
978
	echo "<a id='images'></a>\n";
979
	$titre_cadre = _T('bouton_ajouter_image').aide("ins_img");
980
	debut_cadre_relief("image-24.gif", false, "creer.gif", $titre_cadre);
981
 
982
	$link = new Link ($image_url);
983
	$link->addVar('hash', calculer_action_auteur("ajout_doc"));
984
	$link->addVar('hash_id_auteur', $connect_id_auteur);
985
	$link->addVar('ajout_doc', 'oui');
986
	$link->addVar('mode', 'vignette');
987
	$link->addVar('type', $type);
988
	afficher_upload($link, $redirect_url, _T('info_telecharger'));
989
 
990
	fin_cadre_relief();
991
 
992
 
993
	//// Documents associes
994
	$query = "SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l ".
995
		"WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document ".
996
		"AND docs.mode='document' ORDER BY docs.id_document";
997
 
998
	$res = spip_query($query);
999
	$documents_lies = array();
1000
	while ($row = spip_fetch_array($res))
1001
		$documents_lies[]= $row['id_document'];
1002
 
1003
	if (count($documents_lies)) {
1004
		$res = spip_query("SELECT DISTINCT id_vignette FROM spip_documents ".
1005
			"WHERE id_document in (".join(',', $documents_lies).")");
1006
		while ($v = spip_fetch_array($res))
1007
			$vignettes[]= $v['id_vignette'];
1008
		$docs_exclus = ereg_replace('^,','',join(',', $vignettes).','.join(',', $documents_lies));
1009
 
1010
		if ($docs_exclus)
1011
			$docs_exclus = "AND l.id_document NOT IN ($docs_exclus) ";
1012
	}
1013
 
1014
	//// Images sans documents
1015
	$query = "SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l ".
1016
			"WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document ".$docs_exclus.
1017
			"AND docs.mode='vignette' ORDER BY docs.id_document";
1018
 
1019
	$images_liees = spip_query($query);
1020
 
1021
	echo "\n<p />";
1022
	while ($document = spip_fetch_array($images_liees)) {
1023
		$id_document = $document['id_document'];
1024
		afficher_case_document($id_document, $image_url, $redirect_url, $id_doc_actif == $id_document);
1025
	}
1026
 
1027
 
1028
	/// Ajouter nouveau document
1029
	echo "<p>&nbsp;</p>\n";
1030
	echo "<a name='documents'></a>\n";
1031
	echo "<a name='portfolio'></a>\n";
1032
	if ($type == "article" AND lire_meta("documents_$type") != 'non') {
1033
		$titre_cadre = _T('bouton_ajouter_document').aide("ins_doc");
1034
 
1035
		debut_cadre_enfonce("doc-24.gif", false, "creer.gif", $titre_cadre);
1036
			$link = new Link ($image_url);
1037
			$link->addVar('hash', calculer_action_auteur("ajout_doc"));
1038
			$link->addVar('hash_id_auteur', $connect_id_auteur);
1039
			$link->addVar('ajout_doc', 'oui');
1040
			$link->addVar('mode', 'document');
1041
			$link->addVar('type', $type);
1042
		afficher_upload($link, $redirect_url,
1043
			_T('info_telecharger_ordinateur'));
1044
		fin_cadre_enfonce();
1045
	}
1046
 
1047
	// Afficher les documents lies
1048
	echo "<p />\n";
1049
	if ($type == "article") {
1050
		if ($documents_lies) {
1051
			reset($documents_lies);
1052
			while (list(, $id_document) = each($documents_lies)) {
1053
				afficher_case_document($id_document, $image_url, $redirect_url, $id_doc_actif == $id_document);
1054
			}
1055
		}
1056
	}
1057
}
1058
 
1059
//
1060
// Affiche le raccourci &lt;doc123|left&gt;
1061
// et l'insere quand on le clique
1062
//
1063
function affiche_raccourci_doc($doc, $id, $align) {
1064
	if ($align) {
1065
		$pipe = "|$align";
1066
 
1067
		if ($GLOBALS['browser_barre'])
1068
			$onclick = " ondblclick='barre_inserer(\"&lt;$doc$id$pipe&gt;\", document.formulaire.texte);' title=\"". entites_html(_T('double_clic_inserer_doc'))."\"";
1069
	} else {
1070
		$align='center';
1071
	}
1072
	return "<div align='$align'$onclick>&lt;$doc$id$pipe&gt;</div>\n";
1073
}
1074
 
1075
//
1076
// Afficher un document sous forme de ligne depliable
1077
//
1078
 
1079
function afficher_case_document($id_document, $image_url, $redirect_url = "", $deplier = false) {
1080
	global $connect_id_auteur, $connect_statut;
1081
	global $couleur_foncee, $couleur_claire;
1082
	global $clean_link;
1083
	global $options;
1084
	global $id_doublons;
1085
	global $spip_lang_left, $spip_lang_right;
1086
 
1087
 
1088
	$flag_deplie = teste_doc_deplie($id_document);
1089
 
1090
 	$doublons = $id_doublons['documents'].",";
1091
 
1092
	if (!$redirect_url) $redirect_url = $clean_link->getUrl();
1093
 
1094
	$document = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)));
1095
 
1096
	$id_vignette = $document['id_vignette'];
1097
	$id_type = $document['id_type'];
1098
	$titre = $document['titre'];
1099
	$descriptif = $document['descriptif'];
1100
	$url = generer_url_document($id_document);
1101
	$fichier = $document['fichier'];
1102
	$largeur = $document['largeur'];
1103
	$hauteur = $document['hauteur'];
1104
	$taille = $document['taille'];
1105
	$mode = $document['mode'];
1106
	if (!$titre) {
1107
		$titre_fichier = _T('info_sans_titre_2');
1108
		$titre_fichier .= " <small>(".ereg_replace("^[^\/]*\/[^\/]*\/","",$fichier).")</small>";
1109
	}
1110
 
1111
	$result = spip_query("SELECT * FROM spip_types_documents WHERE id_type=$id_type");
1112
	if ($type = @spip_fetch_array($result))	{
1113
		$type_extension = $type['extension'];
1114
		$type_inclus = $type['inclus'];
1115
		$type_titre = $type['titre'];
1116
	}
1117
 
1118
	//
1119
	// Afficher un document
1120
	//
1121
 
1122
	if ($mode == 'document') {
1123
		$titre_cadre = lignes_longues(typo($titre).typo($titre_fichier), 30);
1124
		debut_cadre_enfonce("doc-24.gif", false, "", $titre_cadre);
1125
 
1126
		echo "<div style='float: $spip_lang_left;'>";
1127
		$block = "document $id_document";
1128
		if ($flag_deplie) echo bouton_block_visible($block);
1129
		else echo bouton_block_invisible($block);
1130
		echo "</div>";
1131
 
1132
 
1133
		//
1134
		// Affichage de la vignette
1135
		//
1136
		echo "<div align='center'>\n";
1137
		echo document_et_vignette($document, $url, true);
1138
		echo "</div>\n";
1139
 
1140
 
1141
		// Affichage du raccourci <doc...> correspondant
1142
		if (!ereg(",$id_document,", $doublons)) {
1143
			echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";
1144
			if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {
1145
				echo "<b>"._T('info_inclusion_vignette')."</b><br />";
1146
			}
1147
			echo "<font color='333333'>"
1148
			. affiche_raccourci_doc('doc', $id_document, 'left')
1149
			. affiche_raccourci_doc('doc', $id_document, 'center')
1150
			. affiche_raccourci_doc('doc', $id_document, 'right')
1151
			. "</font>\n";
1152
			echo "</font></div>";
1153
 
1154
			if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {
1155
				echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";
1156
				echo "<b>"._T('info_inclusion_directe')."</b></br>";
1157
				echo "<font color='333333'>"
1158
				. affiche_raccourci_doc('emb', $id_document, 'left')
1159
				. affiche_raccourci_doc('emb', $id_document, 'center')
1160
				. affiche_raccourci_doc('emb', $id_document, 'right')
1161
				. "</font>\n";
1162
				echo "</font></div>";
1163
			}
1164
		}
1165
 
1166
		//
1167
		// Edition des champs
1168
		//
1169
 
1170
		if ($flag_deplie)
1171
			echo debut_block_visible($block);
1172
		else
1173
			echo debut_block_invisible($block);
1174
 
1175
		if (ereg(",$id_document,", $doublons)) {
1176
			echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";
1177
			echo affiche_raccourci_doc('doc', $id_document, '');
1178
			echo "</font></div>";
1179
		}
1180
 
1181
		echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px; text-align: left; background-color: white;'>";
1182
		if (strlen($descriptif) > 0) echo propre($descriptif)."<br />";
1183
 
1184
 
1185
		if ($options == "avancees") {
1186
			echo "<div style='color: black;'>";
1187
			if ($type_titre){
1188
				echo "$type_titre";
1189
			} else {
1190
				echo _T('info_document').' '.majuscules($type_extension);
1191
			}
1192
 
1193
			if ($largeur * $hauteur)
1194
				echo ", "._T('info_largeur_vignette',
1195
					array('largeur_vignette' => $largeur,
1196
					'hauteur_vignette' => $hauteur));
1197
 
1198
			echo ', '.taille_en_octets($taille);
1199
			echo "</div>";
1200
		}
1201
 
1202
		$link = new Link($redirect_url);
1203
		$link->addVar('modif_document', 'oui');
1204
		$link->addVar('id_document', $id_document);
1205
		$link->addVar('show_docs', $id_document);
1206
		echo $link->getForm('POST');
1207
 
1208
		echo "<b>"._T('entree_titre_document')."</b><br />\n";
1209
		echo "<input type='text' name='titre_document' class='formo' value=\"".entites_html($titre)."\" size='40'><br />\n";
1210
 
1211
		if ($descriptif OR $options == "avancees") {
1212
			echo "<b>"._T('info_description_2')."</b><br />\n";
1213
			echo "<textarea name='descriptif_document' rows='4' class='formo' cols='*' wrap='soft'>";
1214
			echo entites_html($descriptif);
1215
			echo "</textarea>\n";
1216
		}
1217
 
1218
		if ($options == "avancees")
1219
			afficher_formulaire_taille($document, $type_inclus);
1220
 
1221
		echo "<div align='".$GLOBALS['spip_lang_right']."'>";
1222
		echo "<input TYPE='submit' class='fondo' style='font-size:9px;' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";
1223
		echo "</div>";
1224
		echo "</form>";
1225
 
1226
		$link_supp = new Link ($image_url);
1227
		$link_supp->addVar('redirect', $redirect_url);
1228
		$link_supp->addVar('hash', calculer_action_auteur("supp_doc ".$id_document));
1229
		$link_supp->addVar('hash_id_auteur', $connect_id_auteur);
1230
		$link_supp->addVar('doc_supp', $id_document);
1231
		$link_supp->addVar('ancre', 'documents');
1232
 
1233
		echo "</div>";
1234
		echo fin_block();
1235
		// Fin edition des champs
1236
 
1237
		echo "<p /><div align='center'>";
1238
		icone_horizontale(_T('icone_supprimer_document'), $link_supp->getUrl(), "doc-24.gif", "supprimer.gif");
1239
		echo "</div>";
1240
 
1241
 
1242
		// Bloc edition de la vignette
1243
		if ($options == 'avancees') {
1244
			echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px;'>";
1245
			# 'extension', a ajouter dans la base quand on supprimera spip_types_documents
1246
			switch ($id_type) {
1247
				case 1:
1248
					$document['extension'] = "jpg";
1249
					break;
1250
				case 2:
1251
					$document['extension'] = "png";
1252
					break;
1253
				case 3:
1254
					$document['extension'] = "gif";
1255
					break;
1256
			}
1257
			bloc_gerer_vignette($document, $image_url, $redirect_url, 'documents');
1258
			echo "</div>\n";
1259
		}
1260
 
1261
		fin_cadre_enfonce();
1262
	}
1263
 
1264
	//
1265
	// Afficher une image inserable dans l'article
1266
	//
1267
	else if ($mode == 'vignette') {
1268
		$block = "image $id_document";
1269
		$titre_cadre = lignes_longues(typo($titre).typo($titre_fichier), 30);
1270
 
1271
		debut_cadre_relief("image-24.gif", false, "", $titre_cadre);
1272
 
1273
		echo "<div style='float: $spip_lang_left;'>";
1274
		if ($flag_deplie) echo bouton_block_visible($block);
1275
		else echo bouton_block_invisible($block);
1276
		echo "</div>";
1277
 
1278
 
1279
		//
1280
		// Preparer le raccourci a afficher sous la vignette ou sous l'apercu
1281
		//
1282
		$raccourci_doc = "<div style='padding:2px;'>
1283
		<font size='1' face='arial,helvetica,sans-serif'>";
1284
		if (strlen($descriptif) > 0 OR strlen($titre) > 0)
1285
			$doc = 'doc';
1286
		else
1287
			$doc = 'img';
1288
		if (!ereg(",$id_document,", $doublons)) {
1289
			$raccourci_doc .=
1290
				affiche_raccourci_doc($doc, $id_document, 'left')
1291
				. affiche_raccourci_doc($doc, $id_document, 'center')
1292
				. affiche_raccourci_doc($doc, $id_document, 'right');
1293
		} else {
1294
			$raccourci_doc .= affiche_raccourci_doc($doc, $id_document, '');;
1295
		}
1296
		$raccourci_doc .= "</font></div>\n";
1297
 
1298
		//
1299
		// Afficher un apercu (pour les images)
1300
		//
1301
		if ($type_inclus == 'image') {
1302
			echo "<div style='text-align: center; padding: 2px;'>\n";
1303
			echo document_et_vignette($document, $url, true);
1304
			echo "</div>\n";
1305
			if (strlen($descriptif)>0)
1306
				echo "<font face='Verdana,Arial,Sans,sans-serif' size='2'>"
1307
				. propre($descriptif)
1308
				. "</font>";
1309
 
1310
			if (!ereg(",$id_document,", $doublons))
1311
				echo $raccourci_doc;
1312
		}
1313
 
1314
		if ($flag_deplie) echo debut_block_visible($block);
1315
		else  echo debut_block_invisible($block);
1316
 
1317
		if (ereg(",$id_document,", $doublons))
1318
			echo $raccourci_doc;
1319
 
1320
		echo "\n<div class='verdana1' align='center'>",
1321
		  _T('info_largeur_vignette', array('largeur_vignette' => $largeur, 'hauteur_vignette' => $hauteur)),
1322
		  "</div>\n";
1323
 
1324
		$link = new Link($redirect_url);
1325
		$link->addVar('modif_document', 'oui');
1326
		$link->addVar('id_document', $id_document);
1327
		$link->addVar('show_docs', $id_document);
1328
		echo $link->getForm('POST');
1329
 
1330
		echo "<div class='verdana1' style='color: #999999; border: 1px solid #999999; padding: 5px; margin-top: 3px; text-align: left; background-color: #eeeeee;'>";
1331
		echo "<b>"._T('entree_titre_image')."</b><br />\n";
1332
		echo "<input type='text' name='titre_document' class='formo' value=\"".entites_html($titre)."\" size='40'><br />";
1333
 
1334
		if ($descriptif OR $options == "avancees") {
1335
			echo "<b>"._T('info_description_2')."</b><br />\n";
1336
			echo "<textarea name='descriptif_document' rows='4' class='formo' cols='*' style='font-size:9px;' wrap='soft'>";
1337
			echo entites_html($descriptif);
1338
			echo "</textarea>\n";
1339
		}
1340
 
1341
		echo "<div align='".$GLOBALS['spip_lang_right']."'>";
1342
		echo "<input class='fondo' style='font-size: 9px;' TYPE='submit' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";
1343
		echo "</div>";
1344
		echo "</div>";
1345
		echo "</form>";
1346
 
1347
		echo "<center>";
1348
		$link = new Link ($image_url);
1349
		$link->addVar('redirect', $redirect_url);
1350
		$link->addVar('hash', calculer_action_auteur("supp_doc ".$id_document));
1351
		$link->addVar('hash_id_auteur', $connect_id_auteur);
1352
		$link->addVar('doc_supp', $id_document);
1353
		$link->addVar('ancre', 'images');
1354
		icone_horizontale (_T('icone_supprimer_image'), $link->getUrl(), "image-24.gif", "supprimer.gif");
1355
		echo "</center>\n";
1356
 
1357
 
1358
		echo fin_block();
1359
 
1360
		fin_cadre_relief();
1361
	}
1362
}
1363
 
1364
function teste_doc_deplie($id_document) {
1365
	global $show_docs;
1366
	static $deplies;
1367
 
1368
	if (!$deplies)
1369
		$deplies = split('-',$show_docs);
1370
 
1371
	return in_array($id_document, $deplies);
1372
}
1373
 
1374
 
1375
// Mettre a jour la description du document postee par le redacteur
1376
// TODO: pour le moment cette fonction ne sait traiter qu'un document...
1377
function maj_documents ($id_objet, $type) {
1378
	global $_POST;
1379
 
1380
	if ($id_objet
1381
	AND $id_document = intval($_POST['id_document'])
1382
	AND $_POST['modif_document'] == 'oui') {
1383
 
1384
		// "securite" : verifier que le document est bien lie a l'objet
1385
		$result_doc = spip_query("SELECT * FROM spip_documents_".$type."s
1386
		WHERE id_document=".$id_document."
1387
		AND id_".$type." = $id_objet");
1388
		if (spip_num_rows($result_doc) > 0) {
1389
			$titre_document = addslashes(corriger_caracteres(
1390
				$_POST['titre_document']));
1391
			$descriptif_document = addslashes(corriger_caracteres(
1392
				$_POST['descriptif_document']));
1393
			$query = "UPDATE spip_documents
1394
			SET titre='$titre_document', descriptif='$descriptif_document'";
1395
 
1396
			// taille du document (cas des embed)
1397
			if ($largeur_document = intval($_POST['largeur_document'])
1398
			AND $hauteur_document = intval($_POST['hauteur_document']))
1399
				$query .= ", largeur='$largeur_document',
1400
					hauteur='$hauteur_document'";
1401
 
1402
			$query .= " WHERE id_document=".$_POST['id_document'];
1403
			spip_query($query);
1404
 
1405
 
1406
			// Date du document (uniquement dans les rubriques)
1407
			if ($_POST['jour_doc']) {
1408
				if ($_POST['annee_doc'] == "0000")
1409
					$_POST['mois_doc'] = "00";
1410
				if ($_POST['mois_doc'] == "00")
1411
					$_POST['jour_doc'] = "00";
1412
				$date = $_POST['annee_doc'].'-'
1413
				.$_POST['mois_doc'].'-'.$_POST['jour_doc'];
1414
 
1415
				if (preg_match('/^[0-9-]+$/', $date)) {
1416
					spip_query("UPDATE spip_documents
1417
						SET date='$date'
1418
						WHERE id_document=$id_document");
1419
 
1420
					// Changement de date, ce qui nous oblige a :
1421
					calculer_rubriques();
1422
				}
1423
			}
1424
 
1425
		}
1426
 
1427
		// Demander l'indexation du document
1428
		include_ecrire('inc_index.php3');
1429
		marquer_indexer('document', $id_document);
1430
 
1431
	}
1432
}
1433
 
1434
?>