source: spip-zone/_plugins_/contacts_et_organisations/action/editer_organisation.php @ 47041

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

Pouvoir ajouter des organisations filles

File size: 3.9 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6/**
7 * Action de création / Modification d'une organisation
8 * @param unknown_type $arg
9 * @return unknown_type
10 */
11function action_editer_organisation_dist($arg=null) {
12        if (is_null($arg)){
13                $securiser_action = charger_fonction('securiser_action', 'inc');
14                $arg = $securiser_action();
15        }
16
17        // si id_organisation n'est pas un nombre, c'est une creation
18        if (!$id_organisation = intval($arg)) {
19                $id_organisation = insert_organisation();
20        }
21
22        // Enregistre l'envoi dans la BD
23        if ($id_organisation > 0) $err = organisation_set($id_organisation);
24
25        return array($id_organisation,$err);
26}
27
28/**
29 * Crée une nouvelle organisation et retourne son ID
30 *
31 * @param array $champs Un tableau avec les champs par défaut lors de l'insertion
32 * @return int id_organisation
33 */
34function insert_organisation($champs=array()) {
35        $id_organisation = false;
36       
37        // Envoyer aux plugins avant insertion
38        $champs = pipeline('pre_insertion',
39                array(
40                        'args' => array(
41                                'table' => 'spip_organisations',
42                        ),
43                        'data' => $champs
44                )
45        );
46       
47        // Insérer l'objet
48        $id_organisation = sql_insertq('spip_organisations', $champs);
49       
50        // Envoyer aux plugins après insertion
51        pipeline('post_insertion',
52                array(
53                        'args' => array(
54                                'table' => 'spip_organisations',
55                        ),
56                        'data' => $champs
57                )
58        );
59       
60        return $id_organisation;
61}
62
63
64/**
65 * Appelle la fonction de modification d'une organisation
66 *
67 * @param int $id_organisation
68 * @param unknown_type $set
69 * @return $err
70 */
71function organisation_set($id_organisation, $set=null) {
72        $err = '';
73       
74        $champs = array(
75                'nom', 'statut_juridique', 'identification',
76                'activite', 'date_creation', 'descriptif'
77        );
78       
79        $c = array();
80        foreach ($champs as $champ)
81                $c[$champ] = _request($champ,$set);
82
83               
84        include_spip('inc/modifier');
85        revision_organisation($id_organisation, $c);
86       
87        // Modification de statut, changement de rubrique ?
88        $c = array();
89        foreach (array(
90                'id_parent'
91        ) as $champ)
92                $c[$champ] = _request($champ, $set);
93        $err .= instituer_organisation($id_organisation, $c);
94       
95        return $err;
96}
97
98/**
99 * Enregistre une révision de organisation
100 *
101 * @param int $id_produit
102 * @param array $c
103 * @return
104 */
105function revision_organisation($id_organisation, $c=false) {
106        $invalideur = "id='id_organisation/$id_organisation'";
107
108        modifier_contenu('organisation', $id_organisation,
109                array(
110                        'nonvide' => array('titre' => _T('info_sans_titre')),
111                        'invalideur' => $invalideur
112                ),
113                $c);
114
115        return ''; // pas d'erreur
116}
117
118/**
119 * Modifie des éléments à part que sont le parent, la date, le statut
120 *
121 * @param int $id_organisation
122 * @param array $c
123 * @return
124 */
125function instituer_organisation($id_organisation, $c, $calcul_rub=true){
126        include_spip('inc/autoriser');
127        include_spip('inc/rubriques');
128        include_spip('inc/modifier');
129       
130        $row = sql_fetsel("id_parent", "spip_organisations", "id_organisation=$id_organisation");
131        $id_parent_actuel = $row['id_parent'];
132        $champs = array();
133
134       
135        // Verifier que le parent demandee existe et est different
136        // du parent actuel
137        if (isset($c['id_parent'])
138                AND $id_parent = intval($c['id_parent'])
139                AND $id_parent != $id_parent_actuel
140                AND sql_getfetsel('1', 'spip_organisations', 'id_organisation='.$id_parent))
141        {
142                $champs['id_parent'] = intval($id_parent);
143        }
144       
145        // Envoyer aux plugins
146        $champs = pipeline(
147                'pre_edition',
148                array(
149                        'args' => array(
150                                'table' => 'spip_organisations',
151                                'id_objet' => $id_organisation,
152                                'action' => 'instituer',
153                        ),
154                        'data' => $champs
155                )
156        );
157
158        if (!count($champs)) return;
159
160        // sauver les changements
161        sql_updateq('spip_organisations', $champs, "id_organisation=$id_organisation");
162       
163        // Invalider les caches
164        include_spip('inc/invalideur');
165        suivre_invalideur("id='id_organisation/$id_organisation'");
166       
167        // Pipeline
168        pipeline(
169                'post_edition',
170                array(
171                        'args' => array(
172                                'table' => 'spip_organisations',
173                                'id_objet' => $id_organisation,
174                                'action' => 'instituer'
175                        ),
176                        'data' => $champs
177                )
178        );
179       
180       
181        return '';
182}
183
184
185?>
Note: See TracBrowser for help on using the repository browser.