source: spip-zone/_core_/plugins/medias/medias_pipelines.php @ 46156

Last change on this file since 46156 was 46156, checked in by cedric@…, 10 years ago

des logs en moins, et calcul des type/table/...

File size: 6.0 KB
Line 
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
14if (!defined('_ECRIRE_INC_VERSION')) return;
15
16function 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
28function 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
51function medias_configurer_liste_metas($config){
52        $config['documents_objets'] = '';
53        $config['documents_date'] = 'non';
54        return $config;
55}
56
57
58function 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                instituer_document($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                                instituer_document($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 */
105function 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
115function 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
128function medias_document_desc_actions($flux){
129        return $flux;
130}
131
132function 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 */
143function 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}
Note: See TracBrowser for help on using the repository browser.