3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2014 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
13 if (!defined('_ECRIRE_INC_VERSION')) return;
15 // Affiche le portfolio et les documents lies a l'article (ou a la rubrique)
16 // => Nouveau : au lieu de les ignorer, on affiche desormais avec un fond gris
17 // les documents et images inclus dans le texte.
19 // http://doc.spip.org/@inc_documenter_dist
20 function inc_documenter_dist(
21 $doc, # tableau des documents ou numero de l'objet attachant
22 $type = "article", # article ou rubrique ?
23 $ancre = 'portfolio', # album d'images ou de documents ?
24 $ignore_flag = false, # IGNORE, remplace par autoriser(modifier,document)
25 $couleur='', # IGNORE couleur des cases du tableau
26 $appelant ='' # pour le rappel (cf plugin)
28 if (is_numeric($doc)) {
29 $prim = 'id_' . $type;
30 $img = ($ancre == 'portfolio') ?
'' : " NOT";
31 $select = "D.id_document, D.id_vignette, D.extension, D.titre, D.date, D.descriptif, D.fichier, D.taille, D.largeur, D.hauteur, D.mode, D.distant, L.vu, L.id_objet, L.id_objet as $prim";
32 $from = "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON L.id_document=D.id_document";
33 $where = "L.id_objet=$doc AND L.objet='$type' AND D.mode='document' AND D.extension $img IN ('gif', 'jpg', 'png')";
34 $order = "0+D.titre, D.date";
35 $docs = sql_allfetsel($select, $from, $where, '', $order);
36 $opt = array('objet'=>$type, 'id_objet' => $doc);
42 if (!$docs) return '';
44 // On passe &$tous dans la boucle pour verifier si on a bien
45 // le droit de supprimer tous les documents
46 $tous = (count($docs) > 3);
47 $s = ($ancre =='documents' ?
'': '-');
48 if (preg_match('/_edit$/', _request('script'))) {
51 $res = documenter_boucle($docs, $type, $ancre, $tous, $appelant, $opt);
53 $res = documenter_bloc($doc, $res, $s, $appelant, $ancre, $tous, $type);
55 return ajax_action_greffe("documenter", "$s$doc", $res);
58 // http://doc.spip.org/@documenter_bloc
59 function documenter_bloc($id, $res, $s, $script, $ancre, $tous, $type)
61 // seulement s'il y a au moins un document dedans
65 $tous = "<div class='lien_tout_supprimer'>"
66 . ajax_action_auteur('documenter', "$s$id/$type", $appelant ?
$appelant : _request('exec'), "id_$type=$id&s=$s&type=$type",array(_T('lien_tout_supprimer')))
70 $bouton = bouton_block_depliable(majuscules(_T("info_$ancre")),true,"portfolio_$ancre");
72 return debut_cadre("$ancre","","",$bouton)
73 . debut_block_depliable(true,"portfolio_$ancre")
80 // http://doc.spip.org/@documenter_boucle
81 function documenter_boucle($documents, $type, $ancre, &$tous_autorises, $appelant, $opt=array())
83 // la derniere case d'une rangee
84 $bord_droit = ($ancre == 'portfolio' ?
2 : 1);
88 $tourner = charger_fonction('tourner', 'inc');
89 $legender = charger_fonction('legender', 'inc');
91 // Pour les doublons d'article et en mode ajax, il faut faire propre()
92 /*if ($type=='article'
93 AND !isset($GLOBALS['doublons_documents_inclus'])
95 $r = sql_fetsel("chapo,texte", "spip_articles", "id_article=".sql_quote($doc));
99 $show_docs = explode(',', _request('show_docs'));
101 foreach ($documents as $document) {
102 $id_document = $document['id_document'];
104 // $opt : options pour l'autorisation (type d'objet parent, et id de l'objet parent)
105 if (!autoriser('voir', 'document', $id_document, null, $opt))
108 if (isset($document['script']))
109 $script = $document['script']; # pour plugin Cedric
111 // ref a $exec inutilise en standard
112 $script = $appelant ?
$appelant : $GLOBALS['exec'];
117 $flag = autoriser('modifier', 'document', $id_document);
118 $tous_autorises &= $flag;
119 $vu = ($document['vu']=='oui') ?
' vu':'';
121 $vue_document = $tourner($id_document, $document, $script, $flag, $type);
123 $editer_document = (!$flag ?
'' :
124 $legender($id_document, $document, $script, $type, $document["id_$type"], $ancre, in_array($id_document, $show_docs)))
125 . (!isset($document['info']) ?
'' :
126 ("<div class='verdana1'>".$document['info']."</div>"));
128 // Prevoir le passage de la vue et de l'edition sous forme de squelettes separes
129 // Ces pipelines seront alors inutiles, car integres dans l'appel des squelettes
130 $vue_document = pipeline('afficher_contenu_objet',
133 'type'=> 'case_document',
136 'data'=> $vue_document
140 $editer_document = pipeline('editer_contenu_objet',
143 'type'=> 'case_document',
146 'data'=> $editer_document
150 $res .= "\n<td class='document$vu'>"
156 if ($case > $bord_droit) {
162 // fermer la derniere ligne
168 // pas de contenu, pas de tableau
169 if (!$res) return "";
171 return "\n<table width='100%' cellspacing='0' cellpadding='4'>"