[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / medias / medias_pipelines.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 if (!defined('_ECRIRE_INC_VERSION')) return;
15
16 function medias_detecter_fond_par_defaut($fond){
17 // traiter le cas pathologique d'un upload de document ayant echoue
18 // car trop gros
19 if (empty($_GET) AND empty($_POST) AND empty($_FILES)
20 AND isset($_SERVER["CONTENT_LENGTH"])
21 AND strstr($_SERVER["CONTENT_TYPE"], "multipart/form-data;")) {
22 include_spip('inc/getdocument');
23 erreur_upload_trop_gros();
24 }
25 return $fond;
26 }
27
28
29 /**
30 * A chaque insertion d'un nouvel objet editorial
31 * auquel on a attache des documents, restituer l'identifiant
32 * du nouvel objet cree sur les liaisons documents/objet,
33 * qui ont ponctuellement un identifiant id_objet negatif.
34 * cf. medias_affiche_gauche()
35 **/
36 function medias_post_insertion($flux){
37
38 $objet = objet_type($flux['args']['table']);
39 $id_objet = $flux['args']['id_objet'];
40
41 include_spip('inc/autoriser');
42
43 if (autoriser('joindredocument', $objet, $id_objet)
44 AND $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur'])){
45
46 # cf. HACK medias_affiche_gauche()
47 # rattrapper les documents associes a cet objet nouveau
48 # ils ont un id = 0-id_auteur
49
50 # utiliser l'api editer_lien pour les appels aux pipeline edition_lien
51 include_spip('action/editer_liens');
52 $liens = objet_trouver_liens(array('document'=>'*'),array($objet=>0-$id_auteur));
53 foreach($liens as $lien){
54 objet_associer(array('document'=>$lien['document']),array($objet=>$id_objet),$lien);
55 }
56 // un simple delete pour supprimer les liens temporaires
57 sql_delete("spip_documents_liens", array("id_objet = ".(0-$id_auteur),"objet=".sql_quote($objet)));
58 }
59
60 return $flux;
61 }
62
63 /**
64 * Configuration des contenus
65 * @param array $flux
66 * @return array
67 */
68 function medias_affiche_milieu($flux){
69 if ($flux["args"]["exec"] == "configurer_contenu") {
70 $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_documents'));
71 }
72 return $flux;
73 }
74
75 function medias_configurer_liste_metas($config){
76 $config['documents_objets'] = 'spip_articles';
77 $config['documents_date'] = 'non';
78 return $config;
79 }
80
81
82 function medias_post_edition($flux){
83 // le serveur n'est pas toujours la
84 $serveur = (isset($flux['args']['serveur']) ? $flux['args']['serveur'] : '');
85 // si on ajoute un document, mettre son statut a jour
86 if($flux['args']['action']=='ajouter_document'){
87 include_spip('action/editer_document');
88 // mettre a jour le statut si necessaire
89 document_instituer($flux['args']['id_objet']);
90 }
91 // si on institue un objet, mettre ses documents lies a jour
92 elseif ($flux['args']['table']!=='spip_documents'){
93 $type = isset($flux['args']['type'])?$flux['args']['type']:objet_type($flux['args']['table']);
94 // verifier d'abord les doublons !
95 include_spip('inc/autoriser');
96 if (autoriser('autoassocierdocument',$type,$flux['args']['id_objet'])){
97 $table_objet = isset($flux['args']['table_objet'])?$flux['args']['table_objet']:table_objet($flux['args']['table'],$serveur);
98 $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
99 $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$type,id_table_objet($type, $serveur),$table_objet,$flux['args']['table'], '', $serveur);
100 }
101
102 if($flux['args']['action']=='instituer' OR isset($flux['data']['statut'])){
103 include_spip('base/abstract_sql');
104 $id = $flux['args']['id_objet'];
105 $docs = array_map('reset',sql_allfetsel('id_document','spip_documents_liens','id_objet='.intval($id).' AND objet='.sql_quote($type)));
106 include_spip('action/editer_document');
107 foreach($docs as $id_document)
108 // mettre a jour le statut si necessaire
109 document_instituer($id_document);
110 }
111 }
112 else {
113 if ($flux['args']['table']!=='spip_documents'){
114 // verifier les doublons !
115 $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
116 $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$flux['args']['type'],id_table_objet($flux['args']['type'], $serveur),$flux['args']['table_objet'],$flux['args']['spip_table_objet'], '', $serveur);
117 }
118 }
119 return $flux;
120 }
121
122 /**
123 * Pipeline afficher_complement_objet
124 * afficher le portfolio et ajout de document sur les fiches objet
125 * sur lesquelles les medias ont ete activees
126 * Pour les articles, on ajoute toujours !
127 *
128 * @param $flux
129 * @return
130 */
131 function medias_afficher_complement_objet($flux){
132 if ($type=$flux['args']['type']
133 AND $id=intval($flux['args']['id'])
134 AND (autoriser('joindredocument',$type,$id))) {
135 $documenter_objet = charger_fonction('documenter_objet','inc');
136 $flux['data'] .= $documenter_objet($id,$type);
137 }
138 return $flux;
139 }
140
141 /**
142 * Pipeline affiche_gauche
143 * Affiche le formulaire d'ajout de document sur le formulaire d'edition
144 * d'un objet (lorsque cet objet peut recevoir des documents).
145 *
146 * HACK : Lors d'une premiere creation de l'objet, celui-ci n'ayant pas
147 * encore d'identifiant tant que le formulaire d'edition n'est pas enregistre,
148 * les liaisions entre les documents lies et l'objet a creer sauvegardent
149 * un identifiant d'objet negatif de la valeur de id_auteur (l'auteur
150 * connecte). Ces liaisons seront corrigees apres validation dans
151 * medias_post_insertion()
152 */
153 function medias_affiche_gauche($flux){
154 if ($en_cours = trouver_objet_exec($flux['args']['exec'])
155 AND $en_cours['edition']!==false // page edition uniquement
156 AND $type = $en_cours['type']
157 AND $id_table_objet = $en_cours['id_table_objet']
158 // id non defini sur les formulaires de nouveaux objets
159 AND (isset($flux['args'][$id_table_objet]) and $id = intval($flux['args'][$id_table_objet])
160 // et justement dans ce cas, on met un identifiant negatif
161 OR $id = 0-$GLOBALS['visiteur_session']['id_auteur'])
162 AND autoriser('joindredocument',$type,$id)){
163 $flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document',array('objet'=>$type,'id_objet'=>$id));
164 }
165
166 return $flux;
167 }
168
169 function medias_document_desc_actions($flux){
170 return $flux;
171 }
172
173 function medias_editer_document_actions($flux){
174 return $flux;
175 }
176
177 function medias_renseigner_document_distant($flux){
178 return $flux;
179 }
180
181 /**
182 * Compter les documents dans un objet
183 *
184 * @param array $flux
185 * @return array
186 */
187 function medias_objet_compte_enfants($flux){
188 if ($objet = $flux['args']['objet']
189 AND $id=intval($flux['args']['id_objet'])) {
190 // juste les publies ?
191 if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
192 $flux['data']['document'] = sql_countsel('spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', "L.objet=".sql_quote($objet)."AND L.id_objet=".intval($id)." AND (D.statut='publie')");
193 } else {
194 $flux['data']['document'] = sql_countsel('spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', "L.objet=".sql_quote($objet)."AND L.id_objet=".intval($id)." AND (D.statut='publie' OR D.statut='prepa')");
195 }
196 }
197 return $flux;
198 }
199
200 /**
201 * Afficher le nombre de documents dans chaque rubrique
202 *
203 * @param array $flux
204 * @return array
205 */
206 function medias_boite_infos($flux){
207 if ($flux['args']['type']=='rubrique'
208 AND $id_rubrique = $flux['args']['id']){
209 if ($nb = sql_countsel('spip_documents_liens',"objet='rubrique' AND id_objet=".intval($id_rubrique))){
210 $nb = "<div>". singulier_ou_pluriel($nb, "medias:un_document", "medias:des_documents") . "</div>";
211 if ($p = strpos($flux['data'],"<!--nb_elements-->"))
212 $flux['data'] = substr_replace($flux['data'],$nb,$p,0);
213 }
214 }
215 return $flux;
216 }