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 | |
---|
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 | function medias_post_insertion($flux){ |
---|
29 | |
---|
30 | $objet = objet_type($flux['args']['table']); |
---|
31 | if (in_array($objet,array('article','rubrique')) |
---|
32 | AND $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur'])){ |
---|
33 | |
---|
34 | # cf. GROS HACK ecrire/inc/getdocument |
---|
35 | # rattrapper les documents associes a cet objet nouveau |
---|
36 | # ils ont un id = 0-id_auteur |
---|
37 | $id_objet = $flux['args']['id_objet']; |
---|
38 | # utiliser l'api editer_lien pour les appels aux pipeline edition_lien |
---|
39 | include_spip('action/editer_liens'); |
---|
40 | $liens = objet_trouver_liens(array('document'=>'*'),array($objet=>0-$id_auteur)); |
---|
41 | foreach($liens as $lien){ |
---|
42 | objet_associer(array('document'=>$lien['document']),array($objet=>$id_objet),$lien); |
---|
43 | } |
---|
44 | // un simple delete pour supprimer les liens temporaires |
---|
45 | sql_delete("spip_documents_liens", array("id_objet = ".(0-$id_auteur),"objet=".sql_quote($objet))); |
---|
46 | } |
---|
47 | |
---|
48 | return $flux; |
---|
49 | } |
---|
50 | |
---|
51 | function medias_configurer_liste_metas($config){ |
---|
52 | $config['documents_objets'] = ''; |
---|
53 | $config['documents_date'] = 'non'; |
---|
54 | return $config; |
---|
55 | } |
---|
56 | |
---|
57 | |
---|
58 | function medias_post_edition($flux){ |
---|
59 | // si on ajoute un document, mettre son statut a jour |
---|
60 | if($flux['args']['operation']=='ajouter_document'){ |
---|
61 | include_spip('action/editer_document'); |
---|
62 | // mettre a jour le statut si necessaire |
---|
63 | document_instituer($flux['args']['id_objet']); |
---|
64 | } |
---|
65 | // si on institue un objet, mettre ses documents lies a jour |
---|
66 | elseif ($flux['args']['table']!=='spip_documents'){ |
---|
67 | $type = isset($flux['args']['type'])?$flux['args']['type']:objet_type($flux['args']['table']); |
---|
68 | // verifier d'abord les doublons ! |
---|
69 | include_spip('inc/autoriser'); |
---|
70 | if (autoriser('autoassocierdocument',$type,$flux['args']['id_objet'])){ |
---|
71 | $table_objet = isset($flux['args']['table_objet'])?$flux['args']['table_objet']:table_objet($flux['args']['table'],$flux['args']['serveur']); |
---|
72 | $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); |
---|
73 | $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$type,id_table_objet($type, $flux['args']['serveur']),$table_objet,$flux['args']['table'], '', $flux['args']['serveur']); |
---|
74 | } |
---|
75 | |
---|
76 | if($flux['args']['operation']=='instituer' OR isset($flux['data']['statut'])){ |
---|
77 | include_spip('base/abstract_sql'); |
---|
78 | $id = $flux['args']['id_objet']; |
---|
79 | $docs = array_map('reset',sql_allfetsel('id_document','spip_documents_liens','id_objet='.intval($id).' AND objet='.sql_quote($type))); |
---|
80 | include_spip('action/editer_document'); |
---|
81 | foreach($docs as $id_document) |
---|
82 | // mettre a jour le statut si necessaire |
---|
83 | document_instituer($id_document); |
---|
84 | } |
---|
85 | } |
---|
86 | else { |
---|
87 | if ($flux['args']['table']!=='spip_documents'){ |
---|
88 | // verifier les doublons ! |
---|
89 | $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); |
---|
90 | $marquer_doublons_doc($flux['data'],$flux['args']['id_objet'],$flux['args']['type'],id_table_objet($flux['args']['type'], $flux['args']['serveur']),$flux['args']['table_objet'],$flux['args']['spip_table_objet'], '', $flux['args']['serveur']); |
---|
91 | } |
---|
92 | } |
---|
93 | return $flux; |
---|
94 | } |
---|
95 | |
---|
96 | /** |
---|
97 | * Pipeline afficher_complement_objet |
---|
98 | * afficher le portfolio et ajout de document sur les fiches objet |
---|
99 | * sur lesquelles les medias ont ete activees |
---|
100 | * Pour les articles, on ajoute toujours ! |
---|
101 | * |
---|
102 | * @param $flux |
---|
103 | * @return |
---|
104 | */ |
---|
105 | function medias_afficher_complement_objet($flux){ |
---|
106 | if ($type=$flux['args']['type'] |
---|
107 | AND $id=intval($flux['args']['id']) |
---|
108 | AND (autoriser('joindredocument',$type,$id))) { |
---|
109 | $documenter_objet = charger_fonction('documenter_objet','inc'); |
---|
110 | $flux['data'] .= $documenter_objet($id,$type); |
---|
111 | } |
---|
112 | return $flux['data']; |
---|
113 | } |
---|
114 | |
---|
115 | function medias_affiche_gauche($flux){ |
---|
116 | if ($en_cours = trouver_objet_exec($flux['args']['exec']) |
---|
117 | AND $en_cours['edition']!==false // page edition uniquement |
---|
118 | AND $type = $en_cours['type'] |
---|
119 | AND $id_table_objet = $en_cours['id_table_objet'] |
---|
120 | AND ($id = intval($flux['args'][$id_table_objet]) OR $id = 0-$GLOBALS['visiteur_session']['id_auteur']) |
---|
121 | AND autoriser('joindredocument',$type,$id)){ |
---|
122 | $flux['data'] .= recuperer_fond('prive/objets/editer/colonne_document',array('objet'=>$type,'id_objet'=>$id)); |
---|
123 | } |
---|
124 | |
---|
125 | return $flux; |
---|
126 | } |
---|
127 | |
---|
128 | function medias_document_desc_actions($flux){ |
---|
129 | return $flux; |
---|
130 | } |
---|
131 | |
---|
132 | function medias_editer_document_actions($flux){ |
---|
133 | return $flux; |
---|
134 | } |
---|
135 | |
---|
136 | |
---|
137 | /** |
---|
138 | * Compter les documents dans un objet |
---|
139 | * |
---|
140 | * @param array $flux |
---|
141 | * @return array |
---|
142 | */ |
---|
143 | function medias_objet_compte_enfants($flux){ |
---|
144 | if ($objet = $flux['args']['objet'] |
---|
145 | AND $id=intval($flux['args']['id_objet'])) { |
---|
146 | // juste les publies ? |
---|
147 | if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) { |
---|
148 | $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')"); |
---|
149 | } else { |
---|
150 | $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')"); |
---|
151 | } |
---|
152 | } |
---|
153 | return $flux; |
---|
154 | } |
---|