source: spip-zone/_plugins_/produits/trunk/formulaires/editer_produit.php @ 112839

Last change on this file since 112839 was 112839, checked in by arnaud.berard@…, 2 years ago

Associer les produits a un auteur

  • ajout du formulaire d'association
  • force la jointure et autorise l'utilisation de id_auteur dans les boucle PRODUITS
  • ajoute la liste des produits sur la vue d'un auteur
  • associe l'auteur en cours lors de la création d'un nouveau produit
  • + au passage … correction d'un warning non_numeric value quand le champ taxe est vide (j'ai mis la taxe definie par defaut dans la saisie si elle n'est pas remplie, c'est ptet pas le mieux … j'ai fait au plus simple )

+z

File size: 9.6 KB
Line 
1<?php
2/**
3 * Gestion du formulaire de d'édition de produit
4 *
5 * @plugin     Produits
6 * @copyright  2015
7 * @author     Les Développements Durables
8 * @licence    GNU/GPL
9 * @package    SPIP\Produits\Formulaires
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16include_spip('inc/config');
17include_spip('inc/actions');
18include_spip('inc/editer');
19
20function formulaires_editer_produit_saisies_dist($id_produit = 'new', $id_rubrique = 0, $retour = '') {
21        include_spip('inc/config');
22        $editer_ttc = lire_config('produits/editer_ttc');
23        $taxe_defaut = 100 * lire_config('produits/taxe', 0);
24
25        $saisies = array(
26                array(
27                        'saisie' => 'input',
28                        'options' => array(
29                                'nom' => 'titre',
30                                'label' => _T('produits:produit_champ_titre_label'),
31                                'obligatoire' => 'oui',
32                                'placeholder' => _T('info_sans_titre')
33                        )
34                ),
35                array(
36                        'saisie' => 'input',
37                        'options' => array(
38                                'nom' => 'reference',
39                                'label' => _T('produits:produit_champ_reference_label'),
40                        )
41                ),
42                array(
43                        'saisie' => 'selecteur_rubrique',
44                        'options' => array(
45                                'nom' => 'parent',
46                                'label' => _T('produits:produit_champ_rubrique_label'),
47                                'multiple' => '0'
48                        )
49                ),
50                array(
51                        'saisie' => 'input',
52                        'options' => array(
53                                'nom' => ($editer_ttc) ? 'prix_ttc' : 'prix_ht',
54                                'label' => ($editer_ttc) ?
55                                _T('produits:produit_champ_prix_ttc_label') :
56                                _T('produits:produit_champ_prix_ht_label'),
57                                'obligatoire' => 'oui'
58                        ),
59                        'verifier' => array(
60                                'type' => 'decimal'
61                        )
62                ),
63                array(
64                        'saisie' => 'input',
65                        'options' => array(
66                                'nom' => 'taxe',
67                                'label' => _T('produits:produit_champ_taxe_label'),
68                                'explication' => _T(
69                                        'produits:produit_champ_taxe_explication',
70                                        array('taxe' => $taxe_defaut.'&nbsp;&#37;')
71                                ),
72                                'defaut' => $taxe_defaut,
73                                'inserer_fin' => '<span class="pourcent">&nbsp;&#37;</span>'
74                        ),
75                        'verifier' => array(
76                                'type' => 'decimal'
77                        )
78                ),
79                array(
80                        'saisie' => 'textarea',
81                        'options' => array(
82                                'nom' => 'descriptif',
83                                'label' => _T('produits:produit_champ_descriptif_label'),
84                                'rows' => 5
85                        )
86                ),
87                array(
88                        'saisie' => 'textarea',
89                        'options' => array(
90                                'nom' => 'texte',
91                                'label' => _T('produits:produit_champ_texte_label'),
92                                'rows' => 7
93                        )
94                ),
95                array(
96                        'saisie' => 'fieldset',
97                        'options' => array(
98                                'nom' => 'conditionnement',
99                                'label' => _T('produits:legend_dimensions')
100                        ),
101                        'saisies' => array(
102                                array(
103                                        'saisie' => 'case',
104                                        'options' => array(
105                                                'nom' => 'immateriel',
106                                                'label_case' => _T('produits:produit_champ_immateriel_label'),
107                                                'li_class' => 'pleine_largeur',
108                                                'valeur_oui' => '1'
109                                        )
110                                ),
111                                array(
112                                        'saisie' => 'input',
113                                        'options' => array(
114                                                'nom' => 'poids',
115                                                'label' => _T('produits:produit_champ_poids_label'),
116                                                'li_class' => 'unit size1of4',
117                                                'afficher_si' => '@immateriel@==""'
118                                        )
119                                ),
120                                array(
121                                        'saisie' => 'input',
122                                        'options' => array(
123                                                'nom' => 'largeur',
124                                                'label' => _T('produits:produit_champ_largeur_label'),
125                                                'li_class' => 'unit size1of4',
126                                                'afficher_si' => '@immateriel@==""'
127                                        )
128                                ),
129                                array(
130                                        'saisie' => 'input',
131                                        'options' => array(
132                                                'nom' => 'longueur',
133                                                'label' => _T('produits:produit_champ_longueur_label'),
134                                                'li_class' => 'unit size1of4',
135                                                'afficher_si' => '@immateriel@==""'
136                                        )
137                                ),
138                                array(
139                                        'saisie' => 'input',
140                                        'options' => array(
141                                                'nom' => 'hauteur',
142                                                'label' => _T('produits:produit_champ_hauteur_label'),
143                                                'li_class' => 'unit size1of4',
144                                                'afficher_si' => '@immateriel@==""'
145                                        )
146                                )
147                        )
148                )
149        );
150
151        return $saisies;
152}
153
154/**
155 * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
156 *
157 * @param int|string $id_produit
158 *     Identifiant du produit. 'new' pour un nouveau produit.
159 * @param int $id_rubrique
160 *     Identifiant de la rubrique parente (si connue)
161 * @param string $retour
162 *     URL de redirection après le traitement
163 * @return string
164 *     Hash du formulaire
165 */
166function formulaires_editer_produit_identifier_dist($id_produit = 'new', $id_rubrique = 0, $retour = '') {
167        return serialize(array(intval($id_produit)));
168}
169
170/**
171 * Chargement du formulaire d'édition de produit
172 *
173 * Déclarer les champs postés et y intégrer les valeurs par défaut
174 *
175 * @uses formulaires_editer_objet_charger()
176 *
177 * @param int|string $id_produit
178 *     Identifiant du produit. 'new' pour un nouveau produit.
179 * @param int $id_rubrique
180 *     Identifiant de la rubrique parente (si connue)
181 * @param string $retour
182 *     URL de redirection après le traitement
183 * @return array
184 *     Environnement du formulaire
185 */
186function formulaires_editer_produit_charger($id_produit = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0) {
187        $config = lire_config('produits') ;
188
189        // Si pas de rubrique passée et que l'insertion est limitée à une seule rubrique, on peut déjà la passer par defaut
190        if (!$id_rubrique && $config['limiter_ajout'] && (count($config['limiter_ident_secteur']) == 1)) {
191                $id_rubrique = $config['limiter_ident_secteur'][0];
192        }
193
194        $contexte = formulaires_editer_objet_charger('produit', $id_produit, $id_rubrique, $lier_trad, $retour, '');
195
196        //Si on a déjà le $id_produit il faut afficher sa rubrique!
197        if ($id_produit > 0) {
198                $id_rubrique = sql_getfetsel('id_rubrique', 'spip_produits', 'id_produit='.sql_quote($id_produit));
199        }
200        if ($id_rubrique != 0) {
201                $contexte['parent'] = 'rubrique|'.($contexte['id_rubrique'] ? $contexte['id_rubrique'] : $id_rubrique);
202        }
203
204        //Calculer le prix TTC selon le contexte
205        $taxe = floatval($contexte['taxe'] ? $contexte['taxe'] : lire_config('produits/taxe', 0));
206        if (strlen($contexte['taxe'])) {
207                $contexte['taxe'] = 100 * $contexte['taxe'];
208        }
209        $contexte['_taxe_defaut'] = 100 * lire_config('produits/taxe', 0);
210
211        $precision_ttc = intval(lire_config('produits/precision_ttc', 2));
212        $contexte['prix_ht'] = floatval($contexte['prix_ht']);
213        $contexte['prix_ttc'] = round($contexte['prix_ht'] * (1+$taxe), $precision_ttc);
214
215        unset($contexte['id_produit']);
216        unset($contexte['id_rubrique']);
217
218        return $contexte;
219}
220
221/**
222 * Vérifications du formulaire d'édition de produit
223 *
224 * Vérifier les champs postés et signaler d'éventuelles erreurs
225 *
226 * @uses formulaires_editer_objet_verifier()
227 *
228 * @param int|string $id_produit
229 *     Identifiant du produit. 'new' pour un nouveau produit.
230 * @param int $id_rubrique
231 *     Identifiant de la rubrique parente (si connue)
232 * @param string $retour
233 *     URL de redirection après le traitement
234 * @return array
235 *     Tableau des erreurs
236 */
237function formulaires_editer_produit_verifier($id_produit = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0) {
238        $erreurs = array();
239        $config = lire_config('produits');
240
241        // Vérifier que la rubrique choisie se trouve dans les secteurs autorisés
242        if (
243                !empty($config['limiter_ajout'])
244                and is_array($config['limiter_ident_secteur'])
245                and $id_rubrique = produits_id_parent()
246        ) {
247                $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval(produits_id_parent()));
248                if (!in_array($id_secteur, $config['limiter_ident_secteur'])) {
249                        $titres = '';
250                        foreach ($config['limiter_ident_secteur'] as $id_secteur) {
251                                $titres .= sql_getfetsel('titre', 'spip_rubriques', 'id_rubrique=' . intval($id_secteur)).' / ';
252                        }
253                        $erreurs['parent'] .= _T('produits:secteurs_autorises', array('secteurs' => $titres));
254                }
255        }
256
257        return $erreurs ;
258}
259
260/**
261 * Traitement du formulaire d'édition de produit
262 *
263 * Traiter les champs postés
264 *
265 * @uses formulaires_editer_objet_traiter()
266 *
267 * @param int|string $id_produit
268 *     Identifiant du produit. 'new' pour un nouveau produit.
269 * @param int $id_rubrique
270 *     Identifiant de la rubrique parente (si connue)
271 * @param string $retour
272 *     URL de redirection après le traitement
273 * @return array
274 *     Retours des traitements
275 */
276function formulaires_editer_produit_traiter($id_produit = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0) {
277        set_request('id_parent', produits_id_parent());
278        if ($taxe = _request('taxe')) {
279                set_request('taxe', $taxe/100);
280        }
281
282        if (lire_config('produits/editer_ttc')) {
283                $prix_ht = _request('prix_ttc') / (1 + _request('taxe', lire_config('produits/taxe', 0)));
284                set_request('prix_ht', $prix_ht);
285        }
286
287        $retours = formulaires_editer_objet_traiter('produit', $id_produit, $id_rubrique, $lier_trad, $retour);
288
289        // Dans le cas d'une création on lie l'auteur au produit
290        if(!is_numeric($id_produit)){
291                include_spip('action/editer_liens');
292                $id_auteur = session_get('id_auteur');
293                objet_associer(array("auteur"=>$id_auteur), array("produit"=>$retours['id_produit']));
294        }
295
296        // cas d’erreur conserver la valeur de taxe saisie.
297        if (!empty($retours['message_erreur'])) {
298                if ($taxe = _request('taxe')) {
299                        set_request('taxe', $taxe*100);
300                }
301        }
302        return $retours;
303}
304
305/**
306 * Fonction qui retourne l'identifiant de la rubrique choisie via le sélecteur de rubrique
307 *
308 * Le sélecteur retourne un tableau : `array('rubrique|10')`
309 *
310 * @return int
311 *     Identifiant de la rubrique
312 */
313function produits_id_parent() {
314        // On reformule l'id_parent
315        $id_parent = _request('parent');
316        // La saisie retourne normalement un tableau, dans ce cas on considére
317        // la premiere valeur comme vrai parent (logique issue de polyhierarchie)
318        if (is_array($id_parent)) {
319                $id_parent = array_shift($id_parent);
320        }
321        return( str_replace('rubrique|', '', $id_parent));
322}
Note: See TracBrowser for help on using the repository browser.