source: spip-zone/_plugins_/parrainage/formulaires/parrainage.php @ 54053

Last change on this file since 54053 was 54053, checked in by rastapopoulos@…, 9 years ago

Importation du plugin "Parrainage", permettant de faire des campagnes de... parrainage.

N'importe quel utilisateur peut avoir une liste de contacts à qui faire la pub du site. Tout contact est identifié par son adresse email. Dans sa liste, on peut ajouter un contact avec un formulaire simple (nom, email) : #FORMULAIRE_AJOUTER_FILLEUL. On peut aussi utiliser le plugin "Importateur de contacts", notamment avec OpenInviter?, pour importer en masse : #FORMULAIRE_IMPORTER_CONTACTS{#SELF, parrainage_importer_contacts}.

On voit sa liste avec #FORMULAIRE_PARRAINAGE. On peut alors sélectionner à qui envoyer le message, ajouter un texte, et balancer tout ça. Chaque contact a un statut (juste un contact, déjà contacté, déjà inscrit mais pas grâce à toi, ou filleul cad inscrit grace à toi).

Les filleuls potentiels reçoivent un mail invitant à s'inscrire. Lors de l'inscription, un champ supplémentaire permet de renseigner la clé du parrain (c'est automatique si on suit le lien du mail). Un utilisateur inscrit de cette manière, sera alors lié à son parrain.

Il est possible de configurer le plugin pour *obliger* les inscrits à avoir un parrain. Il est alors impossible de s'inscrire sur le site si l'on a pas reçu une invitation. Cela permet de faire un peu de "buzz".

File size: 2.9 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6function formulaires_parrainage_charger(){
7        include_spip('inc/session');
8       
9        // S'il n'y a pas d'auteur connecté, pas de formulaire
10        if (!($id_auteur = session_get('id_auteur')) > 0)
11                return false;
12        else{
13                $contexte = array(
14                        'filleuls' => array(),
15                        'message' => '',
16                        'inviter_tous' => '',
17                        'supprimer_filleul' => '',
18                        '_id_parrain' => $id_auteur
19                );
20                return $contexte;
21        }
22}
23
24function formulaires_parrainage_verifier(){
25        $erreurs = array();
26       
27        if (!_request('supprimer_filleul') and !_request('filleuls')){
28                $erreurs['filleuls'] = _T('parrainage:erreur_aucun_filleul');
29        }
30       
31        return $erreurs;
32}
33
34function formulaires_parrainage_traiter(){
35        // On revient toujours en éditable
36        $retours = array('editable' => true);
37       
38        // Si c'est une supression d'un seul filleul
39        if ($id_filleul = intval(_request('supprimer_filleul'))){
40                sql_delete('spip_filleuls', 'id_filleul = '.$id_filleul);
41        }
42        // Sinon ce sont des envois d'invitations
43        elseif ($filleuls = _request('filleuls') and is_array($filleuls)){
44                $retours = array_merge($retours,traiter_inviter_filleuls($filleuls));
45        }
46       
47        return $retours;
48}
49
50function traiter_inviter_filleuls($filleuls){
51        $filleuls = array_map('intval',$filleuls);
52        // On envoie pas à n'importe qui, on filtre ceux qui peuvent être invités
53        $filleuls = sql_allfetsel(
54                'id_filleul',
55                'spip_filleuls',
56                array(
57                        sql_in('id_filleul', $filleuls),
58                        sql_in('statut', array('contact', 'sans_nouvelles'))
59                )
60        );
61        $filleuls = array_map('reset', $filleuls);
62
63        // S'il en reste dans la liste
64        if ($filleuls){
65                $nombre = 0;
66                $ok = true;
67
68                // L'éventuel message perso
69                $message = _request('message');
70
71                foreach ($filleuls as $id_filleul){
72                        // On programme l'invitation au plus tôt
73                        $id_job = job_queue_add('inviter_filleul', "Inviter le filleul $id_filleul", array($id_filleul, $message), 'action/', true);
74                        // Si c'est bon
75                        if ($id_job){
76                                // On lie l'invitation au filleul
77                                job_queue_link($id_job, array('objet'=>'filleul', 'id_objet'=>$id_filleul));
78                                // On change le statut
79                                sql_updateq(
80                                        'spip_filleuls',
81                                        array(
82                                                'statut' => 'en_cours'
83                                        ),
84                                        'id_filleul = '.$id_filleul
85                                );
86                                // On incrémente le nombre d'invitation envoyée
87                                $nombre+=1;
88                        }
89                        // Si c'est pas bon
90                        else{
91                                $ok = false;
92                        }
93                }
94
95                // Si au moins un message a bien été envoyé on le dit
96                if ($nombre)
97                        $retours['message_ok'] = $nombre > 1 ? _T('parrainage:parrainage_message_ok_pluriel', array('nombre'=>$nombre)) : _T('parrainage:parrainage_message_ok_singulier');
98                // Si au moins un message a merdé on le dit
99                if (!$ok)
100                        $retours['message_erreur'] = _T('parrainage:parrainage_message_erreur');
101        }
102        // Si on invite personne dans la sélection
103        else{
104                if (count($filleuls)>1)
105                        $retours['message_ok'] = _T('parrainage:parrainage_message_aucun');
106                else
107                        $retours['message_ok'] = _T('parrainage:parrainage_message_aucun_1');
108        }
109        return $retours;
110}
111?>
Note: See TracBrowser for help on using the repository browser.