source: spip-zone/_plugins_/abonnement/zabonnement/trunk/abonnement_pipelines.php @ 51709

Last change on this file since 51709 was 51675, checked in by toutati@…, 10 years ago

malgré un svn mv, j'ai l'impression que ça delete ...

version amélioree des codes pour abonnement, on suit facilement les details de la commande quand elle change de statut

mais on peut se passer de toute commande normalement, puisqu'un auteur a une jolie boite d'abonnement,
que chaque element d'abonnement : abonnement, article ou rubrique peut lier un auteur
et que chaque contacts_abonnement est éditable

enjoy :)

  • Property svn:executable set to *
File size: 6.9 KB
Line 
1<?php
2 
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5
6/**
7 * Plugin Groupes pour Spip 2.0
8 * Licence GPL (c) 2008 Matthieu Marcillaud
9 * (selecteur des auteurs a abonner)
10 */
11
12function abonnement_inserer_js_recherche_objet(){
13        return <<<EOS
14
15                function rechercher_objet(id_selecteur, page_selection) {
16                        // chercher l'input de saisie
17                        var me = jQuery(id_selecteur+' input[name=nom_objet]');
18                        me.autocomplete(page_selection,
19                                        {
20                                                delay: 200,
21                                                autofill: false,
22                                                minChars: 1,
23                                                multiple:false,
24                                                multipleSeparator:";",
25                                                formatItem: function(data, i, n, value) {
26                                                        return data[0];
27                                                },
28                                                formatResult: function(data, i, n, value) {
29                                                        return data[1];
30                                                }
31                                        }
32                                );
33                                me.result(function(event, data, formatted) {
34                                        if (data[2] > 0) {
35                                                jQuery(id_selecteur + ' #pid_objet').val(data[2]);
36                                                jQuery(id_selecteur + ' input[type="submit"]').focus();
37                                                jQuery(me)
38                                                .end();
39                                        }
40                                        else{
41                                                return data[1];
42                                        }
43                                });
44                        };
45EOS;
46}
47
48function abonnement_inserer_javascript($flux){
49        include_spip('selecteurgenerique_fonctions');
50        $flux .= selecteurgenerique_verifier_js($flux);
51
52        $js = abonnement_inserer_js_recherche_objet();
53        $js = "<script type='text/javascript'><!--\n$js\n// --></script>\n";
54
55        return $flux.$js;
56}
57
58// espace public
59// si sql spip_commandes_details => gerer l'abonnement aux objets avec statut_commande repris
60function abonnement_post_insertion($flux){
61       
62        //pour les details (voir panier2commande) a la creation des details de la commande
63        if (
64                $flux['args']['table'] == 'spip_commandes_details'
65                and ($id_commande_detail = intval($flux['args']['id_objet'])) > 0
66                and ($id_commande = intval($flux['data']['id_commande'])) > 0
67        ){
68                       
69                //on recupere le statut de la commande
70                $commande=sql_fetsel(
71                        'statut,id_auteur',
72                        'spip_commandes',
73                        'id_commande = '.$id_commande
74                );
75               
76                // si dans le detail de la commande il y a abonnement, article ou rubrique en objet
77                $objet=$flux['data']['objet'];
78                $objets=array('article','rubrique','abonnement');
79               
80                if(in_array($objet, $objets)){
81                        $id_objet=$flux['data']['id_objet'];
82                        $prix=$flux['data']['prix_unitaire_ht'];
83                       
84                if (_DEBUG_ABONNEMENT) spip_log("flux details id_auteur=".$commande['id_auteur']." $statut pour objet = $objet id_commande_detail= $id_commande_detail",'abonnement');
85
86                                        $arg=array(
87                                                'id_auteur'=>$commande['id_auteur'],
88                                                'objet'=>$objet,
89                                                'id_objet' => $id_objet,
90                                                'id_commandes_detail'=>$id_commande_detail,
91                                                'statut_abonnement'=>$commande['statut'],
92                                                );
93                                        include_spip('action/editer_contacts_abonnement');
94                                        insert_contacts_abonnement($arg);
95                }
96        }
97       
98        //pour les details a la modif de la commande
99        if (
100                $flux['args']['table'] == 'spip_commandes'
101                and ($id_commande = intval($flux['args']['id_objet'])) > 0
102                and ($id_auteur = intval($flux['data']['id_auteur'])) > 0
103        ){
104                       
105                //statut de la commande
106                $statut=$flux['data']['statut'];
107               
108                if (_DEBUG_ABONNEMENT) spip_log("modif id_commande=$id_commande statut=$statut pour auteur=$id_auteur",'abonnement');
109               
110                // si dans les details de la commande il y a abonnement, article ou rubrique en objet
111                $objets=array('article','rubrique','abonnement');
112                foreach($objets as $objet){
113                        if (_DEBUG_ABONNEMENT) spip_log("a_p_i objet= $objet",'abonnement');           
114
115                        $commande_abos = sql_allfetsel(
116                                '*',
117                                'spip_commandes_details',
118                                'id_commande = '.$id_commande." AND objet='$objet'"
119                        );
120                       
121                                // Pour chaque commande contenant article ou rubrique en objet
122                                foreach($commande_abos as $abo){
123                                       
124                                        $id_commandes_detail=$abo['id_commandes_detail'];
125                                        //$id_objet=$abo['id_objet'];
126                                       
127                                        //recupere id_contacts_abonnement si il existe
128                                        $contact_abo = sql_fetsel('id_contacts_abonnement,statut_abonnement', 'spip_contacts_abonnements', 'id_commandes_detail='.$id_commandes_detail);
129                                       
130                                        $id_contacts_abonnement=$contact_abo['id_contacts_abonnement'];
131                                        if (_DEBUG_ABONNEMENT) spip_log("pour id_contacts_abonnement = $id_contacts_abonnement on fait ".'id_commandes_detail='.$id_commandes_detail,'abonnement');
132
133                                       
134                                        //on institue le contacts_abonnement
135                                        $action = charger_fonction('instituer_contacts_abonnement', 'action');
136                                        $action($id_contacts_abonnement."-".$statut);
137                                }
138                }
139
140        }
141
142return $flux;
143       
144}             
145
146
147//espace prive
148//affiche les abonnements auxquels l'auteur est abonne (sur auteur_infos)
149function abonnement_affiche_milieu($flux){
150        if($flux['args']['exec'] == 'auteur_infos' && $id_auteur=$flux['args']['id_auteur']) {
151                include_spip('inc/presentation');
152                $flux['data'] .= recuperer_fond('prive/boite/contacts_abonnements', array('page_envoi'=>'auteur_infos','id_auteur'=>$id_auteur), array('ajax'=>true));
153        }
154
155        if ($exec = $flux['args']['exec']){
156                switch ($exec){
157                        case 'articles':
158                                $source = 'article';
159                                $id_source = $flux['args']['id_article'];
160                                break;
161                        case 'abonnement_edit':
162                                $source = 'abonnement';
163                                $id_source = $flux['args']['id_abonnement'];
164                                break;
165                        case 'naviguer':
166                                $source = 'rubrique';
167                                $id_source = $flux['args']['id_rubrique'];
168                                break;
169                        /*
170                        //abonnes a un mot-clef
171                        case 'mots_edit':
172                                $source = 'mot';
173                                $id_source = $flux['args']['id_mot'];
174                                break;
175                        */
176                        default:
177                                $source = $id_source = '';
178                                break;
179                }
180                if ($source && intval($id_source)) {
181       
182//a partir de source et id_source on retrouve les abonnes en cascade
183//on les affiche avec l'icone de leur abonnement (article-rubrique-abonnement)?
184
185                $contexte= array(
186                        'objet' => 'auteurs',
187                        'titre_bouton'=>_T('abo:titre_les_abonnes'),
188                        'source'=>$source,
189                        'id_source'=> $id_source,
190                        'id_table_source'=>'spip_contacts_abonnements',
191                        );
192               
193                $flux['data'] .= recuperer_fond("prive/liste/lister-contacts_abonnements", $contexte); 
194               
195                }
196        }
197       
198        return $flux;
199}
200
201include_spip('inc/autoriser');
202
203//affiche liste des abonnements pour s'abonner dans le formulaire d'un auteur
204function abonnement_editer_contenu_objet($flux){
205
206       
207        return $flux;
208}
209
210
211/**
212 *
213 * Insertion dans le pipeline post_edition
214 * ajouter les champs abonnement soumis lors de la soumission du formulaire CVT editer_auteur
215 *
216 * @return
217 * @param object $flux
218 */
219  /*
220$flux['args']['action'] = modifier
221 il faudrait savoir si on est dans prive ou en public
222 todo car determine si paiement possible...
223 ne sert actuellement que dans le backoffice en 'cadeau' (statut paye sans lien a une commande = offert)
224 */
225function abonnement_post_edition($flux){
226
227               
228//reprendre la meme fonction que post_insertion pour traiter les details de la commande
229                if (
230                        $flux['args']['table'] == 'spip_commandes'
231                ){
232                if (_DEBUG_ABONNEMENT) spip_log("abonnement_post_edition args ".join(",\n", $flux['args'])." data= ".join(",\n", $flux['data']),'commande');
233                $flux = abonnement_post_insertion($flux);
234                }
235
236        return $flux;
237}
238
239
240
241//utiliser le cron pour gerer les dates de validite des abonnements et envoyer les messages de relance
242function abonnement_taches_generales_cron($taches_generales){
243        $taches_generales['abonnement'] = 60*60*24 ;
244        return $taches_generales;
245}
246
247
248
249?>
Note: See TracBrowser for help on using the repository browser.