[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> documents.php (source)

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


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics