Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************///// Ce fichier ne sera execute qu'une foisif (defined("_ECRIRE_INC_DOCUMENTS")) return;define("_ECRIRE_INC_DOCUMENTS", "1");include_ecrire ("inc_admin.php3");include_ecrire ("inc_date.php3");//// Vignette pour les documents lies//function vignette_par_defaut($type_extension, $size=true) {if (!$type_extension)$type_extension = 'txt';$filename = _DIR_IMG_ICONES . "$type_extension";// Glurps !// je dirais meme plus: Glurps ! (esj)if (!@file_exists($v = $filename.'.png'))if (!@file_exists($v = $filename.'.gif'))if (!@file_exists($v = $filename.'-dist.png'))if (!@file_exists($v = $filename.'-dist.gif'))if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut.png"))if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut.gif"))if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut-dist.png"))if (!@file_exists($v = _DIR_IMG_ICONES . "/defaut-dist.gif"))$v = _DIR_IMG_ICONES . "/defaut-dist.gif";if (!$size) return $v;if ($size = @getimagesize($v)) {$largeur = $size[0];$hauteur = $size[1];}return array($v, $largeur, $hauteur);}//// Affiche le document avec sa vignette par defaut//// Attention : en mode 'doc', si c'est un fichier graphique on prefere// afficher une vue reduite, quand c'est possible (presque toujours, donc)// En mode 'vignette', l'image conserve sa taille//// A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille// de la vignette -> c'est a ca que sert la variable $portfoliofunction image_pattern($vignette) {return "<img src='". (_DIR_RESTREINT ? '' : '../'). $vignette['fichier']."'width='".$vignette['largeur']."'height='".$vignette['hauteur']."'style='border-width: 0px;' />";}function document_et_vignette($document, $url, $portfolio=false) {// a supprimer avec spip_types_documentslist($extension) = spip_fetch_array(spip_query("SELECT extension FROMspip_types_documents WHERE id_type=".$document['id_type']));if ($document['id_vignette'] > 0AND $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documentsWHERE id_document = ".$document['id_vignette']))) {if (!$portfolio OR !(lire_meta('creer_preview') == 'oui')) {$image = image_pattern($vignette);} else {$image = prive_lien_image_reduite ($vignette['largeur'],$vignette['hauteur'], $vignette['fichier']);}} else if (strstr(lire_meta('formats_graphiques'), $extension)AND lire_meta('creer_preview') == 'oui') {include_ecrire('inc_logos.php3');#var_dump($document);$local = copie_locale($document['fichier']);if ($portfolio)$image = reduire_image_logo($local, 110, 120);else$image = reduire_image_logo($local);}if (!$image) {list($fichier, $largeur, $hauteur) = vignette_par_defaut($extension);$image = "<img src='$fichier' style='border-width: 0px;' height='$hauteur' width='$largeur' />";}if (!$url)return $image;elsereturn "<a href='$url'>$image</a>";}//// Integration (embed) multimedia//function embed_document($id_document, $les_parametres="", $afficher_titre=true) {global $id_doublons;$id_doublons['documents'] .= ",$id_document";if ($les_parametres) {$parametres = explode("|",$les_parametres);for ($i = 0; $i < count($parametres); $i++) {$parametre = $parametres[$i];if (eregi("^left|right|center$", $parametre)) {$align = $parametre;}else {$params[] = $parametre;}}}if (!($row = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)))))return '';$id_document = $row['id_document'];$id_type = $row['id_type'];$titre = propre($row ['titre']);$descriptif = propre($row['descriptif']);$fichier = generer_url_document($id_document);$largeur = $row['largeur'];$hauteur = $row['hauteur'];$taille = $row['taille'];$mode = $row['mode'];$result_type = spip_query("SELECT * FROM spip_types_documents WHERE id_type=" . intval($id_type));if ($row_type = @spip_fetch_array($result_type)) {$type = $row_type['titre'];$inclus = $row_type['inclus'];$extension = $row_type['extension'];}else $type = 'fichier';// Pour RealVideo$real = ((!ereg("^controls", $les_parametres)) AND (ereg("^(rm|ra|ram)$", $extension)));if ($inclus == "embed" AND !$real) {for ($i = 0; $i < count($params); $i++) {if (ereg("([^\=]*)\=([^\=]*)", $params[$i], $vals)){$nom = $vals[1];$valeur = $vals[2];$inserer_vignette .= "<param name='$nom' value='$valeur'>";$param_emb .= " $nom='$valeur'";if ($nom == "controls" AND $valeur == "PlayButton") {$largeur = 40;$hauteur = 25;}else if ($nom == "controls" AND $valeur == "PositionSlider") {$largeur = $largeur - 40;$hauteur = 25;}}}$vignette = "<object width='$largeur' height='$hauteur'>\n";$vignette .= "<param name='movie' value='$fichier'>\n";$vignette .= "<param name='src' value='$fichier'>\n";$vignette .= $inserer_vignette;$vignette .= "<embed src='$fichier' $param_emb width='$largeur' height='$hauteur'></embed></object>\n";}else if ($inclus == "embed" AND $real) {$vignette .= "<div>".embed_document ($id_document, "controls=ImageWindow|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false)."</div>";$vignette .= embed_document ($id_document, "controls=PlayButton|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);$vignette .= embed_document ($id_document, "controls=PositionSlider|type=audio/x-pn-realaudio-plugin|console=Console$id_document|nojava=true|$les_parametres", false);}else if ($inclus == "image") {$fichier_vignette = $fichier;$largeur_vignette = $largeur;$hauteur_vignette = $hauteur;if ($fichier_vignette) {$vignette = "<img src='$fichier_vignette' style='border-width: 0px;'";if ($largeur_vignette && $hauteur_vignette)$vignette .= " width='$largeur_vignette' height='$hauteur_vignette'";if ($titre) {$titre_ko = ($taille > 0) ? ($titre . " - ". taille_en_octets($taille)) : $titre;$titre_ko = supprimer_tags(propre($titre_ko));$vignette .= " alt=\"$titre_ko\" title=\"$titre_ko\"";}else{ $vignette .= " alt=\"\" title=\"\""; }$vignette .= " />";}}if (!$afficher_titre) return $vignette;if ($largeur_vignette < 120) $largeur_vignette = 120;$forcer_largeur = " width = '$largeur_vignette'";if ($align != 'center') $float = " style='float: $align;'";$retour .= "<div class='spip_documents spip_documents_$align'$float>\n";$retour .= $vignette;if ($titre) $retour .= "<div class='spip_doc_titre'><strong>$titre</strong></div>";if ($descriptif) {$retour .= "<div class='spip_doc_descriptif'>$descriptif</div>";}$retour .= "</div>\n";return $retour;}//// Integration des images et documents//function integre_image($id_document, $align, $type_aff) {global $id_doublons;$id_doublons['documents'] .= ",$id_document";if (!($row = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document))))) return "";$id_document = $row['id_document'];$id_type = $row['id_type'];$titre = typo($row['titre']);$descriptif = propre($row['descriptif']);$fichier = $row['fichier'];$url_fichier = generer_url_document($id_document);$largeur = $row['largeur'];$hauteur = $row['hauteur'];$taille = $row['taille'];$mode = $row['mode'];$id_vignette = $row['id_vignette'];// on construira le lien en fonction du type de docif ($t = @spip_fetch_array(spip_query("SELECT titre,extension FROM spip_types_documentsWHERE id_type = $id_type"))) {$extension = $t['extension']; # jpg, tex$type = $t['titre']; # JPEG, LaTeX}// Attention ne pas confondre :// pour un document affiche avec le raccourci <IMG> on a// $mode == 'document' et $type_aff == 'IMG'// inversement, pour une image presentee en mode 'DOC',// $mode == 'vignette' et $type_aff == 'DOC'// Type : vignette ou document ?if ($mode == 'document') {$vignette = document_et_vignette($row, $url_fichier);} else {$vignette = image_pattern($row);}//// Regler le alt et title//$alt_titre_doc = entites_html(texte_backend(supprimer_tags($titre)));$alt_infos_doc = entites_html($type. (($taille>0) ? ' - '.texte_backend(taille_en_octets($taille)) : ''));if ($row['distant'] == 'oui')$alt_infos_doc .= ", ".$url_fichier;if ($alt_titre_doc) $alt_sep = ', ';// documents presentes en mode <DOC> : alt et title "JPEG, 54 ko"// mais pas de titre puisqu'il est en dessousif ($mode == 'document' AND $type_aff == 'DOC') {$alt = " alt=\"$alt_infos_doc\" title=\"$alt_infos_doc\"";}// document en mode <IMG> : alt + title detailleselse if ($mode == 'document' AND $type_aff == 'IMG') {$alt = " alt=\"$alt_titre_doc$alt_sep$alt_infos_doc\"title=\"$alt_titre_doc$alt_sep$alt_infos_doc\"";}// vignette en mode <DOC> : alt disant "JPEG", pas de titleelse if ($mode == 'vignette' AND $type_aff == 'DOC') {$alt = " alt=\"($type)\"";}// vignette en mode <IMG> : alt + title s'il y a un titreelse if ($mode == 'vignette' AND $type_aff == 'IMG') {if (strlen($titre))$alt = " alt=\"$alt_titre_doc ($type)\" title=\"$alt_titre_doc\"";else$alt = " alt=\"($type)\"";}$vignette = str_replace(' />', "$alt />", $vignette); # inserer l'attribut// Preparer le texte sous l'image pour les <DOC>if ($type_aff == 'DOC') {if (strlen($titre))$txt = "\n<div class='spip_doc_titre'><strong>". $titre. "</strong></div>\n";if (strlen($descriptif))$txt .= "<div class='spip_doc_descriptif'>$descriptif</div>\n";}// Passer un DIV pour les images centrees et, dans tous les cas, les <DOC>if ($align == 'center' OR $type_aff =='DOC') {$span = "div";} else {$span = "span";}if ($align != 'center') {// Largeur de la div = celle de l'image ; mais s'il y a une legende// mettre au moins 120px$width = extraire_attribut($vignette, 'width');if (strlen($txt) AND $width < 120) $width = 120;$width = 'width: '.$width.'px;';$style = " style='float: $align; $width'";}return"<$span class='spip_documents spip_documents_$align' $style>". $vignette. $txt. "</$span>\n";}//// Parcourt recursivement le repertoire upload/ (ou tout autre repertoire, d'ailleurs)//function fichiers_upload($dir) {$fichiers = array();$d = opendir($dir);while ($f = readdir($d)) {if (is_file("$dir/$f") AND is_readable("$dir/$f")AND $f != 'remove.txt')$fichiers[] = "$dir/$f";elseif (is_dir("$dir/$f") AND is_readable("$dir/$f")AND $f != '.' AND $f != '..')$fichiers = array_merge($fichiers, fichiers_upload("$dir/$f"));}closedir($d);sort($fichiers);return $fichiers;}//// Retourner le code HTML d'utilisation de fichiers uploades a la main//function texte_upload_manuel($dir, $inclus = '') {$fichiers = fichiers_upload($dir);$exts = array();foreach ($fichiers as $f) {$f = ereg_replace("^$dir/","",$f);if (ereg("\.([^.]+)$", $f, $match)) {$ext = strtolower($match[1]);if (!$exts[$ext]) {if ($ext == 'jpeg') $ext = 'jpg';$req = "SELECT extension FROM spip_types_documents WHERE extension='$ext'";if ($inclus) $req .= " AND inclus='$inclus'";if (@spip_fetch_array(spip_query($req))) $exts[$ext] = 'oui';else $exts[$ext] = 'non';}$ledossier = substr($f, 0, strrpos($f,"/"));$lefichier = substr($f, strrpos($f, "/"), strlen($f));if ($ledossier != $ledossier_prec) {$texte_upload .= "\n<option value=\"$ledossier\" style='font-weight: bold;'>"._T('tout_dossier_upload', array('upload' => $ledossier))."</option>";}$ledossier_prec = $ledossier;if ($exts[$ext] == 'oui') $texte_upload .= "\n<option value=\"$f\"> $lefichier</option>";}}if ($texte_upload) {$texte_upload = "\n<option value=\"/\" style='font-weight: bold;'>"._T('info_installer_tous_documents')."</option>" . $texte_upload;}return $texte_upload;}//// Retourne le lien HTML vers l'image reduite (pour l'espace prive)//function prive_lien_image_reduite ($largeur_vignette, $hauteur_vignette, $fichier_vignette) {global $connect_id_auteur;include_ecrire("inc_logos.php3");return reduire_image_logo('../'.$fichier_vignette, 120, 110);}// Bloc d'edition de la taille du doc (pour embed)function afficher_formulaire_taille($document, $type_inclus='AUTO') {// (on ne le propose pas pour les images qu'on sait// lire, id_type<=3), sauf bug, ou document distantif ($document['id_type'] <= 3AND $document['hauteur']*$document['largeur']>0AND $document['distant']!='oui')return '';// Si on n'a pas le type_inclus, on va le chercher dans spip_types_documentsif ($type_inclus == 'AUTO'AND $r = spip_query("SELECT * FROM spip_types_documentsWHERE id_type=".$document['id_type'])AND $type = @spip_fetch_array($r))$type_inclus = $type['inclus'];if (($type_inclus == "embed" #meme pour le MP3 : "l x h pixels"?OR $type_inclus == "image")) {echo "<br /><b>"._T('entree_dimensions')."</b><br />\n";echo "<input type='text' name='largeur_document' class='fondl' style='font-size:9px;' value=\"".$document['largeur']."\" size='5'>";echo " × <input type='text' name='hauteur_document' class='fondl' style='font-size:9px;' value=\"".$document['hauteur']."\" size='5'> "._T('info_pixels');}}//// Afficher un formulaire d'upload//function afficher_upload($link, $redirect='', $intitule, $inclus = '', $envoi_multiple = true, $forcer_document = false) {global $clean_link, $connect_statut, $connect_toutes_rubriques, $options, $spip_lang_right;static $num_form = 0; $num_form ++;if (!$redirect)$redirect = $clean_link->getUrl();$link->addVar('redirect', $redirect);if ($forcer_document)$link->addVar('forcer_document', 'oui');echo $link->getForm('POST', '', 'multipart/form-data');echo "<div>";// bouton permettant de telecharger 10 images ou docs a la fois$envoi_multiple &= ($options == "avancees");if ($envoi_multiple OR $forcer_document)echo bouton_block_invisible("ftp$num_form");if (tester_upload()) {echo "$intitule</div>";// un modele de selecteur de fichier$upload = "<div><input name='fichier*' type='File' style='font-size: 10px;' class='forml' size='15'></div>";// afficher le premierecho str_replace('*', '1', $upload);/* (TESTS POUR ENVOI MULTIPLE ; DESACTIVE)// afficher les suivants, masquesif ($envoi_multiple) {echo debut_block_invisible ("upload$num_form");for ($i=2; $i<=10; $i++)echo str_replace('*', "$i", $upload);echo fin_block();}*/echo "<div align='".$GLOBALS['spip_lang_right']."'><input name='ok_post' type='Submit' VALUE='"._T('bouton_telecharger')."' CLASS='fondo'></div>\n<div>";}echo debut_block_invisible("ftp$num_form");if ($connect_statut == '0minirezo' AND $connect_toutes_rubriquesAND $envoi_multiple) {$texte_upload = texte_upload_manuel(_DIR_TRANSFERT, $inclus);if ($texte_upload) {echo "<p><div style='color: #505050;'>";if ($forcer_document) echo '<input type="hidden" name="forcer_document" value="oui">';echo "\n"._T('info_selectionner_fichier')." :<br />";echo "\n<select name='image2' size='1' class='fondl'>";echo $texte_upload;echo "\n</select>";echo "\n <div align='".$GLOBALS['spip_lang_right']."'><input name='ok_ftp' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>";echo "</div>\n";}else {echo "<div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>";echo _T('info_installer_ftp').aide("ins_upload");echo "</div>";}}// Lien document distant, jamais en mode imageif ($forcer_document) {echo "<p /><div style='border: 1px #303030 solid; padding: 4px; color: #505050;'>";echo "<img src='"._DIR_IMG_PACK.'attachment.gif',"' style='float: $spip_lang_right;' alt=\"\" />\n";echo "\n"._T('info_referencer_doc_distant')."<br />";echo "\n<input name='image_url' size='32' class='fondo' value='http://' />";echo "\n <div align='".$GLOBALS['spip_lang_right']."'><input name='ok_url' type='Submit' value='"._T('bouton_choisir')."' class='fondo'></div>";echo "</div>\n";}echo "</div>\n";echo fin_block();echo "</form>\n";}//// Afficher les documents non inclus// (page des articles)function afficher_portfolio ($documents = array(), # liste des documents, avec toutes les donnees$id_article, # numero de l'article ou de la rubrique$type = "article", # article ou rubrique ?$album = 'portfolio', # album d'images ou de documents ?$flag_modif = false, # a-t-on le droit de modifier ?$image_url, # adresse du lien spip_image$redirect_url, # adresse du retour apres spip-image$couleur # couleur des cases du tableau) {global $connect_id_auteur, $connect_statut;global $id_doublons, $options;global $spip_lang_left, $spip_lang_right;// la derniere case d'une rangee$bord_droit = ($album == 'portfolio' ? 2 : 1);foreach ($documents as $document) {$id_document = $document['id_document'];$id_vignette = $document['id_vignette'];$id_type = $document['id_type'];$titre = $document['titre'];$descriptif = $document['descriptif'];$url = generer_url_document($id_document);$fichier = $document['fichier'];$largeur = $document['largeur'];$hauteur = $document['hauteur'];$taille = $document['taille'];$date = $document['date'];$mode = $document['mode'];$flag_deplie = teste_doc_deplie($id_document);if ($case == 0) {echo "<tr style='border-top: 1px solid black;'>";}$style = "border-$spip_lang_left: 1px solid $couleur; border-bottom: 1px solid $couleur;";if ($case == $bord_droit) $style .= " border-$spip_lang_right: 1px solid $couleur;";echo "<td width='33%' style='text-align: $spip_lang_left; $style' valign='top'>";// Signaler les documents distants par une icone de tromboneif ($document['distant'] == 'oui') {echo "<img src='"._DIR_IMG_PACK.'attachment.gif'."' style='float: $spip_lang_right;' alt=\"".entites_html($document['fichier'])."\" title=\"" .entites_html($document['fichier'])."\" />\n";}// bloc vignette + rotationecho "<div style='text-align:center;'>";# 'extension', a ajouter dans la base quand on supprimera spip_types_documentsswitch ($id_type) {case 1:$document['extension'] = "jpg";break;case 2:$document['extension'] = "png";break;case 3:$document['extension'] = "gif";break;}// bloc rotation de l'image// si c'est une image, qu'on sait la faire tourner, qu'elle// n'est pas distante, et qu'elle n'a pas de vignette perso !if ($flag_modifAND strstr(lire_meta('formats_graphiques'), $document['extension'])AND $document['distant']!='oui'AND !$id_vignette) {echo "<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";$process = lire_meta('image_process');if ($process == 'imagick' OR $process == 'gd2'OR $process == 'convert' OR $process == 'netpbm') {// tourner a gauche$link_rot = new Link ($image_url);$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));$link_rot->addVar('hash_id_auteur', $connect_id_auteur);$link_rot->addVar('doc_rotate', $id_document);$link_rot->addVar('var_rot', -90);$link_rot->addVar('redirect',$redirect_url.'&show_docs='.$id_document);$link_rot->addVar('ancre', $album);echo http_href_img($link_rot->getUrl(), 'tourner-gauche.gif', "style='border-width: 0px;'", _T('image_tourner_gauche'), '', 'bouton_rotation');echo "<br />";// tourner a droite$link_rot = new Link ($image_url);;$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));$link_rot->addVar('hash_id_auteur', $connect_id_auteur);$link_rot->addVar('doc_rotate', $id_document);$link_rot->addVar('var_rot', 90);$link_rot->addVar('redirect',$redirect_url.'&show_docs='.$id_document);$link_rot->addVar('ancre', $album);echo http_href_img($link_rot->getUrl(),'tourner-droite.gif', "style='border-width: 0px;'",_T('image_tourner_droite'), '', 'bouton_rotation');echo "<br />";// tourner 180$link_rot = new Link ($image_url);;$link_rot->addVar('hash', calculer_action_auteur("rotate ".$id_document));$link_rot->addVar('hash_id_auteur', $connect_id_auteur);$link_rot->addVar('doc_rotate', $id_document);$link_rot->addVar('var_rot', 180);$link_rot->addVar('redirect',$redirect_url.'&show_docs='.$id_document);$link_rot->addVar('ancre', $album);echo http_href_img($link_rot->getUrl(),'tourner-180.gif', "style='border-width: 0px;'",_T('image_tourner_180'), '', 'bouton_rotation');}echo "</div>\n";} // fin bloc rotation//// Recuperer la vignette et afficher le doc//echo document_et_vignette($document, $url, true);echo "</div>"; // fin du bloc vignette + rotation// bloc titre et descriptifif ($flag_modif) {if ($flag_deplie)$triangle = bouton_block_visible("port$id_document");else$triangle = bouton_block_invisible("port$id_document");}if (strlen($titre) > 0) {echo "<div class='verdana2'><b>$triangle".typo($titre)."</b></div>";} else {$nom_fichier = basename($fichier);if (strlen($nom_fichier) > 20) {$nom_fichier = substr($nom_fichier, 0, 10)."...".substr($nom_fichier, strlen($nom_fichier)-10, strlen($nom_fichier));}echo "<div class='verdana1'>$triangle$nom_fichier</div>";}if (strlen($descriptif) > 0) {echo "<div class='verdana1'>".propre($descriptif)."</div>";}// Taille de l'image ou poids du documentecho "<div class='verdana1' style='text-align: center;'>";if ($largeur * $hauteur)echo _T('info_largeur_vignette',array('largeur_vignette' => $largeur,'hauteur_vignette' => $hauteur));elseecho taille_en_octets($taille);echo "</div>";if ($flag_modif) {if ($flag_deplie)echo debut_block_visible("port$id_document");elseecho debut_block_invisible("port$id_document");echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px;'>";$link = new Link($redirect_url);$link->addVar('modif_document', 'oui');$link->addVar('id_document', $id_document);$link->addVar('show_docs', $id_document);if ($document['id_article'])$query = '?id_article='.$document['id_article'];if ($document['id_rubrique'])$query = '?id_rubrique='.$document['id_rubrique'];echo $link->getForm('POST', "$query#$album");echo "<b>"._T('titre_titre_document')."</b><br />\n";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";// modifier la date (seulement dans les rubriques - et encore)if ($type == 'rubrique'AND $options == "avancees"AND $connect_statut == '0minirezo') {if (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})", $date, $regs)) {$mois = $regs[2];$jour = $regs[3];$annee = $regs[1];}echo "<b>"._T('info_mise_en_ligne')."</b><br />\n",afficher_jour($jour, "NAME='jour_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\""),afficher_mois($mois, "NAME='mois_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block');\""),afficher_annee($annee, "NAME='annee_doc' SIZE='1' CLASS='fondl' style='font-size:9px;'\n\tonChange=\"changeVisible(true, 'valider_doc$id_document', 'block', 'block')\""),"<br />\n";}// bloc descriptif (affiche ou hidden)if ($options == "avancees") {echo "<b>"._T('info_description')."</b><br />\n";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');\">";echo entites_html($descriptif);echo "</textarea>\n";if ($options == "avancees")afficher_formulaire_taille($document);} else {echo "<input type='hidden' name='descriptif_document' value=\"".entites_html($descriptif)."\" />\n";}echo "<div class='display_au_chargement' id='valider_doc$id_document' align='".$GLOBALS['spip_lang_right']."'>";echo "<input TYPE='submit' class='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";echo "</div>";echo "</form>";// bloc mettre a jour la vignetteecho "<hr />";bloc_gerer_vignette($document, $image_url, $redirect_url, $album);echo "</div>";// bouton "supprimer le doc"$link_supp = new Link ($image_url);$link_supp->addVar('redirect', $redirect_url);$link_supp->addVar('hash',calculer_action_auteur("supp_doc ".$id_document));$link_supp->addVar('hash_id_auteur', $connect_id_auteur);$link_supp->addVar('doc_supp', $id_document);$link_supp->addVar('ancre', $album);icone_horizontale(_T('icone_supprimer_document'),$link_supp->getUrl(), "image-24.gif", "supprimer.gif");} // fin block modifs// fin bloc titre + descriptifecho fin_block();echo "</td>\n";$case ++;if ($case > $bord_droit) {$case = 0;echo "</tr>\n";}$id_doublons['documents'] .= ",$id_document";}// fermer la derniere ligneif ($case > 0) {echo "<td style='border-$spip_lang_left: 1px solid $couleur;'> </td>";echo "</tr>";}}function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) {global $connect_id_auteur;$id_document = $document['id_document'];$id_vignette = $document['id_vignette'];echo bouton_block_invisible("gerer_vignette$id_document");echo "<b>"._T('info_vignette_personnalisee')."</b>\n";echo debut_block_invisible("gerer_vignette$id_document");if ($id_vignette) {$link = new Link ($image_url);$link->addVar('redirect',$redirect_url.'&show_docs='.$id_document);$link->addVar('hash',calculer_action_auteur("supp_doc ".$id_vignette));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('doc_supp', $id_vignette);$link->addVar('ancre', $album);icone_horizontale (_T('info_supprimer_vignette'),$link->getUrl(), "vignette-24.png", "supprimer.gif");}else {/****OBSOLETE// lien "creation automatique"if (strstr(lire_meta('formats_graphiques'), $document['extension'])AND lire_meta('creer_preview') == 'oui'AND $document['distant'] != 'oui') {$link = new Link($image_url);$link->addvar('creer_vignette', 'oui');$link->addVar('redirect',$redirect_url.'&show_docs='.$id_document);$link->addvar('vignette', $document['fichier']);$link->addVar('hash',calculer_action_auteur("vign ".$document['fichier']));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('id_document', $id_document);$link->addVar('ancre', $album);icone_horizontale(_T('info_creer_vignette'),$link->getUrl(), "vignette-24.png", "creer.gif");}*****/// lien "upload vignette"$link = new Link ($image_url);$link->addVar('hash', calculer_action_auteur("ajout_doc"));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('ajout_doc', 'oui');$link->addVar('id_document', $id_document);$link->addVar('mode', 'vignette');$link->addVar('ancre', $album);afficher_upload($link,$redirect_url.'&show_docs='.$id_document,/* _T('info_remplacer_vignette') */'', 'portfolio', false);}echo fin_block();}function afficher_documents_non_inclus($id_article, $type = "article", $flag_modif) {global $couleur_foncee, $couleur_claire;global $connect_id_auteur, $connect_statut;global $id_doublons, $options;global $spip_lang_left, $spip_lang_right;$image_url = '../spip_image.php3?';if ($id_article)$image_url .= 'id_article='.$id_article;else if ($id_rubrique)$image_url .= 'id_article='.$id_rubrique;$redirect_url = new Link();if ($type == "rubrique")$redirect_url->addVar('modifier_rubrique', 'oui');$redirect_url = $redirect_url->getUrl();// Afficher portfolio/////////$query = "SELECT docs.* FROM spip_documents AS docs, spip_documents_".$type."s AS l, spip_types_documents AS lestypes "."WHERE l.id_$type=$id_article AND l.id_document=docs.id_document "."AND docs.mode='document'"." AND docs.id_type=lestypes.id_type AND lestypes.extension IN ('gif', 'jpg', 'png')";if ($id_doublons['documents']) $query .= " AND docs.id_document NOT IN (0".$id_doublons['documents'].") ";$query .= " ORDER BY docs.id_document";//// recuperer tout le tableau des images du portfolio//$images_liees = spip_query($query);$documents = array();while ($document = spip_fetch_array($images_liees))$documents[] = $document;if (count($documents)) {echo "<a name='portfolio'></a>";echo "<div> </div>";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>";echo "<table width='100%' cellspacing='0' cellpadding='3'>";afficher_portfolio ($documents, $id_article, $type, 'portfolio', $flag_modif, $image_url, $redirect_url, $couleur_claire);echo "</table>\n";}//// Documents associes$query = "SELECT * FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_$type=$id_article AND l.id_document=docs.id_document "."AND docs.mode='document'";if ($id_doublons['documents']) $query .= " AND docs.id_document NOT IN (0".$id_doublons['documents'].") ";$query .= " ORDER BY docs.id_document";$documents_lies = spip_query($query);$documents = array();while ($document = spip_fetch_array($documents_lies))$documents[] = $document;if (count($documents)) {echo "<a id='documents'></a>";echo "<div> </div>";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>";echo "<table width='100%' cellspacing='0' cellpadding='5'>";afficher_portfolio ($documents, $id_article, $type, 'documents', $flag_modif, $image_url, $redirect_url, '#aaaaaa');echo "</table>";}if (lire_meta("documents_$type") != 'non' AND $flag_modif) {/// Ajouter nouveau document/imageecho "<p> </p>";echo "<div align='right'>";echo "<table width='50%' cellpadding=0 cellspacing=0 border=0><tr><td style='text-align: $spip_lang_left;'>";echo debut_cadre_relief("image-24.gif", false, "", _T('titre_joindre_document'));$link = new Link ($image_url);$link->addVar('hash', calculer_action_auteur("ajout_doc"));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('ajout_doc', 'oui');$link->addVar('type', $type);afficher_upload($link, $redirect_url, _T('info_telecharger_ordinateur'), '', true, true);echo fin_cadre_relief();echo "</td></tr></table>";echo "</div>";}}//// Afficher un document dans la colonne de gauche// (edition des articles)function afficher_documents_colonne($id_article, $type="article", $flag_modif = true) {global $connect_id_auteur, $connect_statut;global $couleur_foncee, $couleur_claire, $options;global $clean_link;$image_url = '../spip_image.php3';if ($id_article) $image_url .= '?id_article='.$id_article;$id_doc_actif = $id_document;# HACK!!! simule une mise en page pour affecter la globale id_doublons# referencee dans afficher_case_document appelee plus loin :# utile pour un affichage differencie des image "libres" et des images# integrees via <imgXX|left> dans le textepropre($GLOBALS['descriptif']." ".$GLOBALS['texte']." ".$GLOBALS['chapo']);/// Ajouter nouvelle imageecho "<a id='images'></a>\n";$titre_cadre = _T('bouton_ajouter_image').aide("ins_img");debut_cadre_relief("image-24.gif", false, "creer.gif", $titre_cadre);$link = new Link ($image_url);$link->addVar('hash', calculer_action_auteur("ajout_doc"));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('ajout_doc', 'oui');$link->addVar('mode', 'vignette');$link->addVar('type', $type);afficher_upload($link, $redirect_url, _T('info_telecharger'));fin_cadre_relief();//// Documents associes$query = "SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document "."AND docs.mode='document' ORDER BY docs.id_document";$res = spip_query($query);$documents_lies = array();while ($row = spip_fetch_array($res))$documents_lies[]= $row['id_document'];if (count($documents_lies)) {$res = spip_query("SELECT DISTINCT id_vignette FROM spip_documents "."WHERE id_document in (".join(',', $documents_lies).")");while ($v = spip_fetch_array($res))$vignettes[]= $v['id_vignette'];$docs_exclus = ereg_replace('^,','',join(',', $vignettes).','.join(',', $documents_lies));if ($docs_exclus)$docs_exclus = "AND l.id_document NOT IN ($docs_exclus) ";}//// Images sans documents$query = "SELECT docs.id_document FROM spip_documents AS docs, spip_documents_".$type."s AS l "."WHERE l.id_".$type."=$id_article AND l.id_document=docs.id_document ".$docs_exclus."AND docs.mode='vignette' ORDER BY docs.id_document";$images_liees = spip_query($query);echo "\n<p />";while ($document = spip_fetch_array($images_liees)) {$id_document = $document['id_document'];afficher_case_document($id_document, $image_url, $redirect_url, $id_doc_actif == $id_document);}/// Ajouter nouveau documentecho "<p> </p>\n";echo "<a name='documents'></a>\n";echo "<a name='portfolio'></a>\n";if ($type == "article" AND lire_meta("documents_$type") != 'non') {$titre_cadre = _T('bouton_ajouter_document').aide("ins_doc");debut_cadre_enfonce("doc-24.gif", false, "creer.gif", $titre_cadre);$link = new Link ($image_url);$link->addVar('hash', calculer_action_auteur("ajout_doc"));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('ajout_doc', 'oui');$link->addVar('mode', 'document');$link->addVar('type', $type);afficher_upload($link, $redirect_url,_T('info_telecharger_ordinateur'));fin_cadre_enfonce();}// Afficher les documents liesecho "<p />\n";if ($type == "article") {if ($documents_lies) {reset($documents_lies);while (list(, $id_document) = each($documents_lies)) {afficher_case_document($id_document, $image_url, $redirect_url, $id_doc_actif == $id_document);}}}}//// Affiche le raccourci <doc123|left>// et l'insere quand on le clique//function affiche_raccourci_doc($doc, $id, $align) {if ($align) {$pipe = "|$align";if ($GLOBALS['browser_barre'])$onclick = " ondblclick='barre_inserer(\"<$doc$id$pipe>\", document.formulaire.texte);' title=\"". entites_html(_T('double_clic_inserer_doc'))."\"";} else {$align='center';}return "<div align='$align'$onclick><$doc$id$pipe></div>\n";}//// Afficher un document sous forme de ligne depliable//function afficher_case_document($id_document, $image_url, $redirect_url = "", $deplier = false) {global $connect_id_auteur, $connect_statut;global $couleur_foncee, $couleur_claire;global $clean_link;global $options;global $id_doublons;global $spip_lang_left, $spip_lang_right;$flag_deplie = teste_doc_deplie($id_document);$doublons = $id_doublons['documents'].",";if (!$redirect_url) $redirect_url = $clean_link->getUrl();$document = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = " . intval($id_document)));$id_vignette = $document['id_vignette'];$id_type = $document['id_type'];$titre = $document['titre'];$descriptif = $document['descriptif'];$url = generer_url_document($id_document);$fichier = $document['fichier'];$largeur = $document['largeur'];$hauteur = $document['hauteur'];$taille = $document['taille'];$mode = $document['mode'];if (!$titre) {$titre_fichier = _T('info_sans_titre_2');$titre_fichier .= " <small>(".ereg_replace("^[^\/]*\/[^\/]*\/","",$fichier).")</small>";}$result = spip_query("SELECT * FROM spip_types_documents WHERE id_type=$id_type");if ($type = @spip_fetch_array($result)) {$type_extension = $type['extension'];$type_inclus = $type['inclus'];$type_titre = $type['titre'];}//// Afficher un document//if ($mode == 'document') {$titre_cadre = lignes_longues(typo($titre).typo($titre_fichier), 30);debut_cadre_enfonce("doc-24.gif", false, "", $titre_cadre);echo "<div style='float: $spip_lang_left;'>";$block = "document $id_document";if ($flag_deplie) echo bouton_block_visible($block);else echo bouton_block_invisible($block);echo "</div>";//// Affichage de la vignette//echo "<div align='center'>\n";echo document_et_vignette($document, $url, true);echo "</div>\n";// Affichage du raccourci <doc...> correspondantif (!ereg(",$id_document,", $doublons)) {echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {echo "<b>"._T('info_inclusion_vignette')."</b><br />";}echo "<font color='333333'>". affiche_raccourci_doc('doc', $id_document, 'left'). affiche_raccourci_doc('doc', $id_document, 'center'). affiche_raccourci_doc('doc', $id_document, 'right'). "</font>\n";echo "</font></div>";if ($options == "avancees" AND ($type_inclus == "embed" OR $type_inclus == "image") AND $largeur > 0 AND $hauteur > 0) {echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";echo "<b>"._T('info_inclusion_directe')."</b></br>";echo "<font color='333333'>". affiche_raccourci_doc('emb', $id_document, 'left'). affiche_raccourci_doc('emb', $id_document, 'center'). affiche_raccourci_doc('emb', $id_document, 'right'). "</font>\n";echo "</font></div>";}}//// Edition des champs//if ($flag_deplie)echo debut_block_visible($block);elseecho debut_block_invisible($block);if (ereg(",$id_document,", $doublons)) {echo "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";echo affiche_raccourci_doc('doc', $id_document, '');echo "</font></div>";}echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px; text-align: left; background-color: white;'>";if (strlen($descriptif) > 0) echo propre($descriptif)."<br />";if ($options == "avancees") {echo "<div style='color: black;'>";if ($type_titre){echo "$type_titre";} else {echo _T('info_document').' '.majuscules($type_extension);}if ($largeur * $hauteur)echo ", "._T('info_largeur_vignette',array('largeur_vignette' => $largeur,'hauteur_vignette' => $hauteur));echo ', '.taille_en_octets($taille);echo "</div>";}$link = new Link($redirect_url);$link->addVar('modif_document', 'oui');$link->addVar('id_document', $id_document);$link->addVar('show_docs', $id_document);echo $link->getForm('POST');echo "<b>"._T('entree_titre_document')."</b><br />\n";echo "<input type='text' name='titre_document' class='formo' value=\"".entites_html($titre)."\" size='40'><br />\n";if ($descriptif OR $options == "avancees") {echo "<b>"._T('info_description_2')."</b><br />\n";echo "<textarea name='descriptif_document' rows='4' class='formo' cols='*' wrap='soft'>";echo entites_html($descriptif);echo "</textarea>\n";}if ($options == "avancees")afficher_formulaire_taille($document, $type_inclus);echo "<div align='".$GLOBALS['spip_lang_right']."'>";echo "<input TYPE='submit' class='fondo' style='font-size:9px;' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";echo "</div>";echo "</form>";$link_supp = new Link ($image_url);$link_supp->addVar('redirect', $redirect_url);$link_supp->addVar('hash', calculer_action_auteur("supp_doc ".$id_document));$link_supp->addVar('hash_id_auteur', $connect_id_auteur);$link_supp->addVar('doc_supp', $id_document);$link_supp->addVar('ancre', 'documents');echo "</div>";echo fin_block();// Fin edition des champsecho "<p /><div align='center'>";icone_horizontale(_T('icone_supprimer_document'), $link_supp->getUrl(), "doc-24.gif", "supprimer.gif");echo "</div>";// Bloc edition de la vignetteif ($options == 'avancees') {echo "<div class='verdana1' style='color: $couleur_foncee; border: 1px solid $couleur_foncee; padding: 5px; margin-top: 3px;'>";# 'extension', a ajouter dans la base quand on supprimera spip_types_documentsswitch ($id_type) {case 1:$document['extension'] = "jpg";break;case 2:$document['extension'] = "png";break;case 3:$document['extension'] = "gif";break;}bloc_gerer_vignette($document, $image_url, $redirect_url, 'documents');echo "</div>\n";}fin_cadre_enfonce();}//// Afficher une image inserable dans l'article//else if ($mode == 'vignette') {$block = "image $id_document";$titre_cadre = lignes_longues(typo($titre).typo($titre_fichier), 30);debut_cadre_relief("image-24.gif", false, "", $titre_cadre);echo "<div style='float: $spip_lang_left;'>";if ($flag_deplie) echo bouton_block_visible($block);else echo bouton_block_invisible($block);echo "</div>";//// Preparer le raccourci a afficher sous la vignette ou sous l'apercu//$raccourci_doc = "<div style='padding:2px;'><font size='1' face='arial,helvetica,sans-serif'>";if (strlen($descriptif) > 0 OR strlen($titre) > 0)$doc = 'doc';else$doc = 'img';if (!ereg(",$id_document,", $doublons)) {$raccourci_doc .=affiche_raccourci_doc($doc, $id_document, 'left'). affiche_raccourci_doc($doc, $id_document, 'center'). affiche_raccourci_doc($doc, $id_document, 'right');} else {$raccourci_doc .= affiche_raccourci_doc($doc, $id_document, '');;}$raccourci_doc .= "</font></div>\n";//// Afficher un apercu (pour les images)//if ($type_inclus == 'image') {echo "<div style='text-align: center; padding: 2px;'>\n";echo document_et_vignette($document, $url, true);echo "</div>\n";if (strlen($descriptif)>0)echo "<font face='Verdana,Arial,Sans,sans-serif' size='2'>". propre($descriptif). "</font>";if (!ereg(",$id_document,", $doublons))echo $raccourci_doc;}if ($flag_deplie) echo debut_block_visible($block);else echo debut_block_invisible($block);if (ereg(",$id_document,", $doublons))echo $raccourci_doc;echo "\n<div class='verdana1' align='center'>",_T('info_largeur_vignette', array('largeur_vignette' => $largeur, 'hauteur_vignette' => $hauteur)),"</div>\n";$link = new Link($redirect_url);$link->addVar('modif_document', 'oui');$link->addVar('id_document', $id_document);$link->addVar('show_docs', $id_document);echo $link->getForm('POST');echo "<div class='verdana1' style='color: #999999; border: 1px solid #999999; padding: 5px; margin-top: 3px; text-align: left; background-color: #eeeeee;'>";echo "<b>"._T('entree_titre_image')."</b><br />\n";echo "<input type='text' name='titre_document' class='formo' value=\"".entites_html($titre)."\" size='40'><br />";if ($descriptif OR $options == "avancees") {echo "<b>"._T('info_description_2')."</b><br />\n";echo "<textarea name='descriptif_document' rows='4' class='formo' cols='*' style='font-size:9px;' wrap='soft'>";echo entites_html($descriptif);echo "</textarea>\n";}echo "<div align='".$GLOBALS['spip_lang_right']."'>";echo "<input class='fondo' style='font-size: 9px;' TYPE='submit' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'>";echo "</div>";echo "</div>";echo "</form>";echo "<center>";$link = new Link ($image_url);$link->addVar('redirect', $redirect_url);$link->addVar('hash', calculer_action_auteur("supp_doc ".$id_document));$link->addVar('hash_id_auteur', $connect_id_auteur);$link->addVar('doc_supp', $id_document);$link->addVar('ancre', 'images');icone_horizontale (_T('icone_supprimer_image'), $link->getUrl(), "image-24.gif", "supprimer.gif");echo "</center>\n";echo fin_block();fin_cadre_relief();}}function teste_doc_deplie($id_document) {global $show_docs;static $deplies;if (!$deplies)$deplies = split('-',$show_docs);return in_array($id_document, $deplies);}// Mettre a jour la description du document postee par le redacteur// TODO: pour le moment cette fonction ne sait traiter qu'un document...function maj_documents ($id_objet, $type) {global $_POST;if ($id_objetAND $id_document = intval($_POST['id_document'])AND $_POST['modif_document'] == 'oui') {// "securite" : verifier que le document est bien lie a l'objet$result_doc = spip_query("SELECT * FROM spip_documents_".$type."sWHERE id_document=".$id_document."AND id_".$type." = $id_objet");if (spip_num_rows($result_doc) > 0) {$titre_document = addslashes(corriger_caracteres($_POST['titre_document']));$descriptif_document = addslashes(corriger_caracteres($_POST['descriptif_document']));$query = "UPDATE spip_documentsSET titre='$titre_document', descriptif='$descriptif_document'";// taille du document (cas des embed)if ($largeur_document = intval($_POST['largeur_document'])AND $hauteur_document = intval($_POST['hauteur_document']))$query .= ", largeur='$largeur_document',hauteur='$hauteur_document'";$query .= " WHERE id_document=".$_POST['id_document'];spip_query($query);// Date du document (uniquement dans les rubriques)if ($_POST['jour_doc']) {if ($_POST['annee_doc'] == "0000")$_POST['mois_doc'] = "00";if ($_POST['mois_doc'] == "00")$_POST['jour_doc'] = "00";$date = $_POST['annee_doc'].'-'.$_POST['mois_doc'].'-'.$_POST['jour_doc'];if (preg_match('/^[0-9-]+$/', $date)) {spip_query("UPDATE spip_documentsSET date='$date'WHERE id_document=$id_document");// Changement de date, ce qui nous oblige a :calculer_rubriques();}}}// Demander l'indexation du documentinclude_ecrire('inc_index.php3');marquer_indexer('document', $id_document);}}?>