source: spip-zone/_plugins_/produits/trunk/produits_pipelines.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: 6.9 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) {
5        return;
6}
7
8// Export de la config
9function produits_ieconfig_metas($table) {
10        $table['produits']['titre'] = _T('produit:titre_produit');
11        $table['produits']['icone'] = 'prive/themes/spip/images/produit-16.png';
12        $table['produits']['metas_serialize'] = 'produits,produits_*';
13
14        return $table;
15}
16
17/**
18 * Insertion dans le pipeline grappes_objets_lies (Plugin Grappes)
19 * Définis le tableau des objets pouvant être liés aux grappes, la clé est le type d'objet (au pluriel),
20 * la valeur, le label affiché dans le formulaire d'édition de grappe
21 * @param array $array
22 *      Le tableau du pipeline
23 * @return array $array
24 *      Le tableau complété
25 */
26function produits_grappes_objets_lies($array) {
27        $array['produits'] = _T('produits:titre_page_configurer_produits');
28        return $array;
29}
30
31/**
32 * produits_acceuil_encours
33 *
34 * Afficher les produits en cours de validation
35 * sur l'acceuil de l'espace privé
36 */
37function produits_accueil_encours($flux) {
38        $flux .= recuperer_fond(
39                'prive/objets/liste/produits',
40                array(
41                        'statut' => array('prepa','prop'),
42                        'cacher_tri' => true,
43                        'nb' => 5
44                ),
45                array('ajax' => true)
46        );
47
48        return $flux;
49}
50
51
52// Insérer les listes de produits et le bouton de création
53// dans les pages rubriques et la liste des produits de l'auteur
54function produits_affiche_enfants($flux) {
55        if (isset($flux['args']['id_rubrique'])
56                AND $flux['args']['id_rubrique'] > 0) {
57                $flux['data'] .= recuperer_fond(
58                        'prive/objets/liste/produits',
59                        array('id_rubrique' => $flux['args']['id_rubrique']),
60                        array(
61                                'ajax' => true
62                        )
63                );
64
65                if (autoriser('creerproduitdans', 'rubrique', $flux['args']['id_rubrique'])) {
66                        $flux['data'] .= icone_verticale(_T('produit:icone_creer_produit'), generer_url_ecrire('produit_edit', 'id_rubrique='.$flux['args']['id_rubrique']), find_in_path('prive/themes/spip/images/produits-24.png'), 'new', 'right'). "<br class='nettoyeur' />";
67                }
68        }
69        // Afficher les produits sur la page d'un auteur
70        if ($e = trouver_objet_exec($flux['args']['exec'])
71          AND $e['type'] == 'auteur'
72          AND $e['edition'] == false) {
73                        $id_auteur = $flux['args']['id_objet'];
74                        $lister_objets = charger_fonction('lister_objets','inc');
75                        $flux['data'] .= $lister_objets('produits', array('titre'=>_L('Produits de cet auteur') , 'id_auteur'=>$id_auteur, 'par'=>'date'));
76                        $flux['data'] .= "<br class='nettoyeur' />";
77        }
78
79        return $flux;
80}
81
82/**
83 * Afficher le nombre d'éléments dans les parents
84 *
85 * @pipeline boite_infos
86 * @param  array $flux Données du pipeline
87 * @return array       Données du pipeline
88 **/
89function produits_boite_infos($flux) {
90        if (isset($flux['args']['type']) and isset($flux['args']['id']) and $id = intval($flux['args']['id'])) {
91                $texte = '';
92                if ($flux['args']['type'] == 'rubrique' and $nb = sql_countsel('spip_produits', array("statut='publie'", 'id_rubrique=' . $id))) {
93                        $texte .= '<div>' . singulier_ou_pluriel($nb, 'produit:info_1_produit', 'produit:info_nb_produits') . "</div>\n";
94                }
95                if ($texte and $p = strpos($flux['data'], '<!--nb_elements-->')) {
96                        $flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
97                }
98        }
99        return $flux;
100}
101
102/**
103 * Compter les enfants d'un objet
104 *
105 * @pipeline objets_compte_enfants
106 * @param  array $flux Données du pipeline
107 * @return array       Données du pipeline
108**/
109function produits_objet_compte_enfants($flux) {
110        if ($flux['args']['objet'] == 'rubrique' and $id_rubrique = intval($flux['args']['id_objet'])) {
111                // juste les publiés ?
112                if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) {
113                        $flux['data']['produits'] = sql_countsel('spip_produits', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut = 'publie')");
114                }
115                else {
116                        $flux['data']['produits'] = sql_countsel('spip_produits', 'id_rubrique= ' . intval($id_rubrique) . " AND (statut <> 'poubelle')");
117                }
118        }
119        return $flux;
120}
121
122
123/**
124 * Publier et dater les rubriques qui ont un produit publie
125 *
126 * @param array $flux
127 * @return array
128 */
129function produits_calculer_rubriques($flux){
130        include_spip('inc/config');
131        if (lire_config('produits/publier_rubriques')) {
132                $r = sql_select("R.id_rubrique AS id, max(A.date) AS date_h", "spip_rubriques AS R, spip_produits AS A", "R.id_rubrique = A.id_rubrique AND R.date_tmp <= A.date AND A.statut='publie' ", "R.id_rubrique");
133                while ($row = sql_fetch($r)) {
134                        sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']), "id_rubrique=" . $row['id']);
135                }
136        }
137        return $flux;
138}
139
140// Si pas de critère "statut", on affiche que les produits publiés
141function produits_pre_boucle($boucle) {
142        if ($boucle->type_requete == 'produits') {
143                $id_table = $boucle->id_table;
144                $statut = "$id_table.statut";
145                if (!isset($boucle->modificateur['criteres']['statut']) and !isset($boucle->modificateur['tout'])) {
146                        $boucle->where[] = array("'='", "'$statut'", "sql_quote('publie')");
147                }
148        }
149        return $boucle;
150}
151
152
153// Lier les auteurs aux produits
154// inssérer le formulaire de liaison d'auteur sur la vue d'un produit
155function produits_affiche_milieu($flux) {
156        if ($e = trouver_objet_exec($flux['args']['exec'])
157                        AND $e['edition'] == false
158                  AND $e['type'] == 'produit'
159                        AND $id_table_objet = $e['id_table_objet']) {
160
161                        $texte = recuperer_fond('prive/objets/editer/liens', array(
162                                'table_source' => 'auteurs',
163                                'objet' => $e['type'],
164                                'id_objet' => $flux['args'][$id_table_objet],
165                                #'editable'=>autoriser('associerauteurs', $e['type'], $e['id_objet']) ? 'oui' : 'non'
166                        ));
167                if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
168                        $flux['data'] = substr_replace($flux['data'],$texte,$p,0);
169                else
170                        $flux['data'] .= $texte;
171        }
172
173        return $flux;
174}
175/**
176 * Optimiser la base de données
177 * Supprime les liens orphelins de l'objet vers quelqu'un et de quelqu'un vers l'objet.
178 * Supprime les objets à la poubelle.
179 *
180 * @pipeline optimiser_base_disparus
181 * @param  array $flux Données du pipeline
182 * @return array           Données du pipeline
183 */
184function produits_optimiser_base_disparus($flux) {
185        include_spip('action/editer_liens');
186        $flux['data'] += objet_optimiser_liens(array('produit'=>'*'), '*');
187        sql_delete('spip_produits', "statut='poubelle' AND maj < " . $flux['args']['date']);
188
189        return $flux;
190}
191
192/**
193 * Pipeline de la corbeille, permet de définir les objets à supprimer
194 *
195 * @param array $param Tableau d'objets
196 *
197 * @return array Tableau d'objets complété
198 */
199function produits_corbeille_table_infos($param){
200        $param['produits'] = array(
201                'statut' => 'poubelle',
202                'tableliee'=> array('spip_produits'),
203        );
204        return $param;
205}
206
207/**
208 * Déclarer l'héritage pour compositions
209 *
210 * @param $heritages
211 *
212 * @return mixed
213 */
214function produits_compositions_declarer_heritage($heritages){
215        $heritages['produit'] = 'rubrique';
216        return $heritages;
217}
Note: See TracBrowser for help on using the repository browser.