[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / inc / documenter.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
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 // 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.
18
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)
27 ) {
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);
37 } else {
38 $docs = $doc;
39 $opt = array();
40 }
41
42 if (!$docs) return '';
43
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'))) {
49 $res = " ";
50 } else {
51 $res = documenter_boucle($docs, $type, $ancre, $tous, $appelant, $opt);
52 if (is_int($doc))
53 $res = documenter_bloc($doc, $res, $s, $appelant, $ancre, $tous, $type);
54 }
55 return ajax_action_greffe("documenter", "$s$doc", $res);
56 }
57
58 // http://doc.spip.org/@documenter_bloc
59 function documenter_bloc($id, $res, $s, $script, $ancre, $tous, $type)
60 {
61 // seulement s'il y a au moins un document dedans
62 if (!$res) return "";
63
64 if ($tous) {
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')))
67 . "</div>\n";
68 } else $tous = '';
69
70 $bouton = bouton_block_depliable(majuscules(_T("info_$ancre")),true,"portfolio_$ancre");
71
72 return debut_cadre("$ancre","","",$bouton)
73 . debut_block_depliable(true,"portfolio_$ancre")
74 . $tous
75 . $res
76 . fin_block()
77 . fin_cadre();
78 }
79
80 // http://doc.spip.org/@documenter_boucle
81 function documenter_boucle($documents, $type, $ancre, &$tous_autorises, $appelant, $opt=array())
82 {
83 // la derniere case d'une rangee
84 $bord_droit = ($ancre == 'portfolio' ? 2 : 1);
85 $case = 0;
86 $res = '';
87
88 $tourner = charger_fonction('tourner', 'inc');
89 $legender = charger_fonction('legender', 'inc');
90
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'])
94 AND is_int($doc)) {
95 $r = sql_fetsel("chapo,texte", "spip_articles", "id_article=".sql_quote($doc));
96 propre(join(" ",$r));
97 }*/
98
99 $show_docs = explode(',', _request('show_docs'));
100
101 foreach ($documents as $document) {
102 $id_document = $document['id_document'];
103
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))
106 continue;
107
108 if (isset($document['script']))
109 $script = $document['script']; # pour plugin Cedric
110 else
111 // ref a $exec inutilise en standard
112 $script = $appelant ? $appelant : $GLOBALS['exec'];
113
114 if (!$case)
115 $res .= "<tr>";
116
117 $flag = autoriser('modifier', 'document', $id_document);
118 $tous_autorises &= $flag;
119 $vu = ($document['vu']=='oui') ? ' vu':'';
120
121 $vue_document = $tourner($id_document, $document, $script, $flag, $type);
122
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>"));
127
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',
131 array(
132 'args' => array(
133 'type'=> 'case_document',
134 'id'=>$id_document
135 ),
136 'data'=> $vue_document
137 )
138 );
139
140 $editer_document = pipeline('editer_contenu_objet',
141 array(
142 'args' => array(
143 'type'=> 'case_document',
144 'id'=>$id_document
145 ),
146 'data'=> $editer_document
147 )
148 );
149
150 $res .= "\n<td class='document$vu'>"
151 . $vue_document
152 . $editer_document
153 . "</td>\n";
154
155 $case++;
156 if ($case > $bord_droit) {
157 $case = 0;
158 $res .= "</tr>\n";
159 }
160 }
161
162 // fermer la derniere ligne
163 if ($case) {
164 $res .= "<td></td>";
165 $res .= "</tr>";
166 }
167
168 // pas de contenu, pas de tableau
169 if (!$res) return "";
170
171 return "\n<table width='100%' cellspacing='0' cellpadding='4'>"
172 . $res
173 . "</table>";
174 }
175 ?>