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

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

la table spip_contacts_abonnements est mise à jour avec le statut de la commande au retour de Paypal et suivant les détails de la commande : article, rubrique ou abonnement

todo: nettoyage des logs

  • Property svn:executable set to *
File size: 3.5 KB
Line 
1<?php
2
3//Securite
4if (!defined('_ECRIRE_INC_VERSION')) return;
5
6function modifier_date($givendate,$day=0,$mth=0,$yr=0) 
7{
8      $cd = strtotime($givendate);
9      $newdate = date('Y-m-d h:i:s', mktime(date('h',$cd), date('i',$cd), date('s',$cd), date('m',$cd)+$mth, date('d',$cd)+$day, date('Y',$cd)+$yr));
10      return $newdate;
11}
12
13/**
14
15filtre unique pour determiner l'acces (en cascade) d'un auteur e un objet, ce filtre teste si l'auteur
16- est lie e la zone restreinte e laquelle appartient la rubrique
17- a un abonnement direct si article
18- a un abonnement direct si rubrique
19- a un abonnement e la rubrique parente si article
20- a un abonnement si la date de validite correspond a la date_utile de la rubrique si exact est demande
21
22[(#SESSION{id_auteur}|abonne_objet{rubrique,#ID_RUBRIQUE}|oui) <:acces_ouvert:> ]
23[(#SESSION{id_auteur}|abonne_objet{article,#ID_ARTICLE}|non) <:acces_restreint:> ]
24
25*/
26
27/**
28 * filtre de test pour savoir si le visiteur est abonne a
29 * l'article ou a la rubrique demande
30 * @param int $id_rubrique
31 * @return bool
32 */
33function abonne_objet($id_auteur, $objet="rubrique", $id_objet){
34       
35if (is_numeric($id_objet)){
36        $objets = array();
37        //soit article soit rubrique
38        if($objet=="article"){
39        $objets['article']=$id_objet;
40        $id_rubrique = sql_getfetsel('id_rubrique','spip_articles',"id_article=".intval($id_objet));
41        }
42        else {
43        $id_rubrique=$id_objet;
44        }
45        $objets['rubrique']=$id_rubrique;
46        if (is_null($id_auteur)) $id_auteur=$GLOBALS['visiteur_session']['id_auteur'];
47       
48        $rubrique = sql_fetsel('date_utile,id_parent','spip_rubriques',"id_rubrique=".intval($id_rubrique));
49
50        //si l'auteur a acces a la rubrique via une zone
51        $zones=accesrestreint_zones_rubrique($id_rubrique);
52        //ou si id_parent est dans la zone -> deprotege la rubrique enfant
53        $id_parent=$rubrique['id_parent'];
54        $zones=array_merge($zones,accesrestreint_zones_rubrique($id_parent));
55       
56        foreach($zones as $id_zone){
57                if(accesrestreint_acces_zone($id_zone,$id_auteur)) 
58                        return true;
59        }
60       
61        foreach($objets as $objet => $id_objet){
62        //si l'auteur a acc√©s a l'article - ou sa rubrique - ou a la rubrique elle meme
63                $where = array();
64                $where[] = "id_objet=".intval($id_objet);
65                $where[] = "objet='$objet'";
66                $where[] = "id_auteur=".intval($id_auteur);
67                $where[] = "validite>='".date('Y-m-d H:i:s')."'";
68                $where[] = "statut_abonnement IN ('paye','offert')";
69
70        $liste_objets = sql_getfetsel('id_objet','spip_contacts_abonnements',$where);
71        if ($liste_objets) return $liste_objets;
72        }
73       
74        //abonnement(s) en cours
75                $w = array();
76                $w[] = "objet='abonnement'";
77                $w[] = "id_auteur=".intval($id_auteur);
78                $w[] = "validite>='".date('Y-m-d H:i:s')."'";
79                $w[] = "statut_abonnement IN ('paye','offert')";
80               
81        $abonnements = sql_allfetsel('id_objet,date,validite','spip_contacts_abonnements',$w);
82        foreach($abonnements as $abo){
83                $id_abo=$abo['id_objet'];
84                $date=$abo['date'];
85                $validite=$abo['validite'];
86               
87        //on verifie les correspondances de dates
88        $date_utile=$rubrique['date_utile'];
89                if(($date<=$date_utile) && ($validite>=$date_utile)){
90                        $valide=true;
91                }
92               
93        $exact = sql_getfetsel('exact','spip_abonnements','id_abonnement='."'$id_abo'","'exact' ASC");
94        if ($exact!='oui') $valide=false;
95       
96        if($valide){
97        return true;
98        }
99
100
101        }
102}
103
104}
105
106//ids_zone est une liste d'identifiants separes par une virgule
107function fermer_zone($id_auteur,$ids_zone)
108{
109        $array_ids = explode(",", $ids_zone);
110        foreach($array_ids as $id_zone)
111        {
112        if (_DEBUG_ABONNEMENT) spip_log("fermer_zone $id_zone pour $id_auteur",'abonnement');
113                sql_delete("spip_zones_auteurs", array(
114                        "id_zone"=>$id_zone,
115                        "id_auteur"=>$id_auteur
116                ));
117        }
118}
119
120?>
Note: See TracBrowser for help on using the repository browser.