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

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

Réparer la création d'une organisation fille...
Il faut que le numéro d'organisation du parent soit bien envoyé (et pas le nom de l'organisation, aussi affiché dans un input)

File size: 4.0 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
134spip_log($c, 'l');     
135spip_log($row, 'l');
136spip_log($id_organisation, 'l');
137        // Verifier que le parent demandee existe et est different
138        // du parent actuel
139        if (isset($c['id_parent'])
140                AND $id_parent = intval($c['id_parent'])
141                AND $id_parent != $id_parent_actuel
142                AND sql_getfetsel('1', 'spip_organisations', 'id_organisation='.$id_parent))
143        {
144                $champs['id_parent'] = $id_parent;
145        }
146       
147        // Envoyer aux plugins
148        $champs = pipeline(
149                'pre_edition',
150                array(
151                        'args' => array(
152                                'table' => 'spip_organisations',
153                                'id_objet' => $id_organisation,
154                                'action' => 'instituer',
155                        ),
156                        'data' => $champs
157                )
158        );
159
160        if (!count($champs)) return;
161
162        // sauver les changements
163        sql_updateq('spip_organisations', $champs, "id_organisation=$id_organisation");
164       
165        // Invalider les caches
166        include_spip('inc/invalideur');
167        suivre_invalideur("id='id_organisation/$id_organisation'");
168       
169        // Pipeline
170        pipeline(
171                'post_edition',
172                array(
173                        'args' => array(
174                                'table' => 'spip_organisations',
175                                'id_objet' => $id_organisation,
176                                'action' => 'instituer'
177                        ),
178                        'data' => $champs
179                )
180        );
181       
182       
183        return '';
184}
185
186
187?>
Note: See TracBrowser for help on using the repository browser.