source: spip-zone/_plugins_/parrainage/action/ajouter_filleul.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.4 KB
Line 
1<?php
2
3// Sécurité
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6/**
7 * Action de création d'un filleul
8 * @param unknown_type $arg
9 * @return unknown_type
10 */
11function action_ajouter_filleul_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_parrain n'est pas un nombre correct, on prend l'auteur en cours
18        if (!($id_parrain = intval($arg)) > 0) {
19                include_spip('inc/session');
20                $id_parrain = intval(session_get('id_auteur'));
21        }
22       
23        $id_filleul = 0;
24       
25        // Ensuite on fait quelque chose seulement si on a bien id_parrain et au moins l'email
26        if ($id_parrain > 0 AND $email = _request('email')){
27                $id_filleul = ajouter_filleul($id_parrain, $email,_request('nom'));
28        }
29
30        return $id_filleul;
31}
32
33function ajouter_filleul($id_parrain,$email,$nom){
34        // Est-ce qu'il y a un nom, sinon le login de l'email
35        if (!$nom){
36                $decoupe = explode('@', $email);
37                $nom = $decoupe[0];
38        }
39
40        // Si l'email est déjà inscrit sur le site on récupère les infos
41        if ($id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'email = '.sql_quote($email))){
42                $statut = 'deja_inscrit';
43        }
44        else{
45                $statut = 'contact';
46                $id_auteur = 0;
47        }
48
49        // On insère le filleul seulement si le mail n'existe pas déjà dans les contacts de ce parrain
50        // Sinon du coup on renvoie l'id_filleul déjà existant
51        if (!$id_filleul = intval(sql_getfetsel('id_filleul', 'spip_filleuls', array('email = '.sql_quote($email), 'id_parrain = '.$id_parrain))))
52                $id_filleul = insert_filleul(array(
53                        'id_parrain' => $id_parrain,
54                        'email' => $email,
55                        'nom' => $nom,
56                        'statut' => $statut,
57                        'id_auteur' => $id_auteur,
58                        'code_invitation' => md5($nom.$email.rand())
59                ));
60
61        return $id_filleul;
62}
63
64/**
65 * Crée un nouveau filleul et retourne son ID
66 *
67 * @param array $champs Un tableau avec les champs par défaut lors de l'insertion
68 * @return int id_filleul
69 */
70function insert_filleul($champs=array()) {
71        // Envoyer aux plugins avant insertion
72        $champs = pipeline('pre_insertion',
73                array(
74                        'args' => array(
75                                'table' => 'spip_filleuls',
76                        ),
77                        'data' => $champs
78                )
79        );
80       
81        // Insérer l'objet
82        $id_filleul = sql_insertq("spip_filleuls", $champs);
83       
84        // Envoyer aux plugins après insertion
85        pipeline('post_insertion',
86                array(
87                        'args' => array(
88                                'table' => 'spip_filleuls',
89                        ),
90                        'data' => $champs
91                )
92        );
93
94        return $id_filleul;
95}
96
97?>
Note: See TracBrowser for help on using the repository browser.