Changeset 51914 in spip-zone


Ignore:
Timestamp:
Sep 27, 2011, 12:36:32 PM (8 years ago)
Author:
toutati@…
Message:

Ajout d'un champ nb_rub sur les offres d'abonnement, permettant de dépasser la restriction des dates de parution

Necessite de datesrubriques

Rendre beau et fonctionnel et eclaircir le formulaire des abonnements concernant les ouvertures d'acces:
Acces internet personnalise oui/non
Oui, accès aux rubriques des dates de l'abonnement, avec possibilité de préciser le nombre de numéros accessibles
On garde l'ouverture des zones, qui permet de ne pas dependre des dates des rubriques

Les appelations sont plus claires

Modification du filtre de test des acces qui permet de faire
[(#SESSION{id_auteur}|abonne_objet{rubrique,#ID_RUBRIQUE}|oui) <:acces_ouvert:> ]
[(#SESSION{id_auteur}|abonne_objet{article,#ID_ARTICLE}|non) <:acces_restreint:> ]

Location:
_plugins_/abonnement-z/zabonnement/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/abonnement-z/zabonnement/trunk/abonnement_fonctions.php

    r51511 r51914  
    1717- a un abonnement direct si article
    1818- 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
     19- a un abonnement à 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- a un abonnement si le nombre de rubriques à ouvrir est insuffisant (nb_rub)
    2122
    2223[(#SESSION{id_auteur}|abonne_objet{rubrique,#ID_RUBRIQUE}|oui) <:acces_ouvert:> ]
     
    3132 * @return bool
    3233 */
    33 function abonne_objet($id_auteur, $objet="rubrique", $id_objet){
     34function abonne_objet($id_auteur, $objet, $id_objet){
    3435       
    35 if (is_numeric($id_objet)){
     36        $valide=false;
     37       
     38        //on annule de suite si les donnees sont incompletes
     39        if (!$id_auteur OR !intval($id_objet)) return false;
     40       
    3641        $objets = array();
    37         //soit article soit rubrique
     42       
     43        //recuperer l'id_rubrique que l'objet soit un article ou une rubrique
    3844        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'];
     45                $objets['article']=$id_objet;
     46                $id_rubrique = sql_getfetsel('id_rubrique','spip_articles',"id_article=".intval($id_objet));
     47        } else $id_rubrique=$id_objet;
    4748       
    4849        $rubrique = sql_fetsel('date_utile,id_parent','spip_rubriques',"id_rubrique=".intval($id_rubrique));
    4950
    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));
     51        #1 //si l'auteur a acces a la rubrique via une zone
     52                $zones=accesrestreint_zones_rubrique($id_rubrique);
     53                //ou si id_parent est dans la zone -> deproteger la rubrique enfant
     54                $id_parent=$rubrique['id_parent'];
     55                $zones=array_merge($zones,accesrestreint_zones_rubrique($id_parent));
     56               
     57                foreach($zones as $id_zone){
     58                        if(accesrestreint_acces_zone($id_zone,$id_auteur)) {
     59                                if (_DEBUG_ABONNEMENT) spip_log("oui, acces zone auteur $id_auteur pour rubrique $id_rubrique",'abodate');
     60                                return true;
     61                        }
     62                }
     63               
     64        #2 //si l'auteur a accès a l'article - ou a sa rubrique - ou a la rubrique elle meme   
     65                $objets['rubrique']=$id_rubrique;
     66                foreach($objets as $objet => $id_objet){
     67                        $where = array();
     68                        $where[] = "id_objet=".intval($id_objet);
     69                        $where[] = "objet='$objet'";
     70                        $where[] = "id_auteur=".intval($id_auteur);
     71                        $where[] = "date<='".date('Y-m-d H:i:s')."'";
     72                        $where[] = "validite>='".date('Y-m-d H:i:s')."'";
     73                        $where[] = "statut_abonnement IN ('paye','offert')";
    5574       
    56         foreach($zones as $id_zone){
    57                 if(accesrestreint_acces_zone($id_zone,$id_auteur))
    58                         return true;
    59         }
     75                        $liste_objets = sql_getfetsel('id_objet','spip_contacts_abonnements',$where);
     76                                if ($liste_objets) {
     77                                        if (_DEBUG_ABONNEMENT) spip_log("oui, acces objet auteur $id_auteur pour $objet $id_objet",'abodate');
     78                                        return true;
     79                                }
     80                }
     81               
     82        #3 //sinon l'auteur a peut-etre un abonnement(s) en cours ?
     83                $date_utile=$rubrique['date_utile'];
     84                $valide=verifier_abonnement($id_auteur,$id_rubrique,$date_utile);
     85               
     86        return $valide;
     87}
     88
     89
     90function verifier_abonnement($id_auteur,$id_rubrique,$date_utile){
    6091       
    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         }
     92        $valide=false;
    7393       
    74         //abonnement(s) en cours
    7594                $w = array();
    7695                $w[] = "objet='abonnement'";
    7796                $w[] = "id_auteur=".intval($id_auteur);
    78                 $w[] = "validite>='".date('Y-m-d H:i:s')."'";
     97                $w[] = "date<='".date('Y-m-d H:i:s')."'";
    7998                $w[] = "statut_abonnement IN ('paye','offert')";
    8099               
    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'];
     100                $contacts_abonnements = sql_allfetsel('id_objet,date,validite','spip_contacts_abonnements',$w);
    86101               
    87         //on verifie les correspondances de dates
    88         $date_utile=$rubrique['date_utile'];
    89                 if(($date<=$date_utile) && ($validite>=$date_utile)){
    90                         $valide=true;
     102                foreach($contacts_abonnements as $abo){
     103                        $id_abo=$abo['id_objet'];
     104                        $date_debut=$abo['date'];
     105                        $date_fin=$abo['validite'];
     106               
     107                        //on verifie si l'acces doit etre ouvert, si les dates correspondent ou si un nombre de rubriques est demandé
     108                        //on recherche donc exact et nb_rub     
     109                        $offre_abonnement = sql_fetsel('exact,nb_rub','spip_abonnements',array("id_abonnement=".$id_abo));
     110                                $exact=$offre_abonnement['exact'];
     111                                $nb_rub=$offre_abonnement['nb_rub'];
     112                       
     113                        //aucun acces - (on a demande uniquement un abonnement papier)
     114                        if($exact=='non') {
     115                                if (_DEBUG_ABONNEMENT) spip_log("non, exact=non aucun acces auteur $id_auteur pour rubrique $id_rubrique",'abodate');
     116                                return false;
     117                        }
     118               
     119                        //acces demande
     120                        if($exact=='oui'){
     121                                        //on commence par verifier si il y a une correspondances avec la date de parution
     122                                        //la date_utile de la rubrique doit être comprise entre le début et la fin de l'abonnement
     123                                       
     124                                        if($date_utile>=$date_debut && $date_utile<=$date_fin){
     125                                                if (_DEBUG_ABONNEMENT) spip_log("oui, acces auteur $id_auteur pour rubrique $id_rubrique",'abodate');
     126                                                return true;
     127                                        }
     128                       
     129                                        //sinon on verifie si il y a bien le nombre de rubriques demandees
     130                                        if($nb_rub>0){
     131                                                //compter toutes les rubriques ayant une date de parution superieure au debut de l'abonnement
     132                                                $result=sql_allfetsel('id_rubrique','spip_rubriques',"date_utile >=".sql_quote($date_debut));
     133                                                $total = count($result);
     134                                                //total au-dela du nombre de rubriques demandees en accès
     135                                                if($total>$nb_rub){
     136                                                        if (_DEBUG_ABONNEMENT) spip_log("non, depassement du nombre de rubriques total=$total> nb_rub=$nb_rub",'abodate');
     137                                                        return false;
     138                                                }
     139                                                //total en dessous
     140                                                foreach($result as $row){
     141                                                        if($id_rubrique==$row['id_rubrique']) $valide=true;
     142                                                        if (_DEBUG_ABONNEMENT) spip_log("la rubrique ". $row['id_rubrique']." est dans les rubriques >= $date_debut",'abodate');
     143                                                }
     144                                        }
     145                        }
     146               
    91147                }
    92148               
    93         $exact = sql_getfetsel('exact','spip_abonnements','id_abonnement='."'$id_abo'","'exact' ASC");
    94         if ($exact!='oui') $valide=false;
     149        if ($valide==false) if (_DEBUG_ABONNEMENT) spip_log("non, au final aucun acces auteur $id_auteur pour rubrique $id_rubrique",'abodate');
    95150       
    96         if($valide){
    97         return true;
    98         }
    99 
    100 
    101         }
     151        return $valide;
    102152}
    103153
    104 }
    105154
    106155//ids_zone est une liste d'identifiants separes par une virgule
  • _plugins_/abonnement-z/zabonnement/trunk/action/editer_abonnement.php

    r49813 r51914  
    2525        $c = $opt = array();
    2626        foreach (array(
    27                 'titre', 'duree', 'periode','exact','ids_zone', 'prix',  'descriptif'
     27                'titre', 'duree', 'periode','exact','nb_rub','ids_zone', 'prix',  'descriptif'
    2828        ) as $champ)
    2929                $c[$champ] = _request($champ);
  • _plugins_/abonnement-z/zabonnement/trunk/base/abonnement.php

    r51843 r51914  
    3232                "periode"       => "text NOT NULL",
    3333                "exact"         => "ENUM('oui','non') NOT NULL DEFAULT 'non'",
     34                'nb_rub'        => 'bigint(21) not null default 0',
    3435                "ids_zone"      => "text NOT NULL",     
    3536                "prix"          => 'float not null default 0',
  • _plugins_/abonnement-z/zabonnement/trunk/base/abonnement_upgrade.php

    r51843 r51914  
    3737        if (version_compare($current_version,"1.2","<=")){
    3838                sql_alter("TABLE spip_contacts_abonnements ADD id_contacts_abonnement bigint(21) not null FIRST");
     39                creer_base();
     40                ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
     41        }
     42       
     43        if (version_compare($current_version,"1.3","<=")){
     44                sql_alter("TABLE spip_abonnements ADD nb_rub bigint(21) not null default 0 AFTER exact");
    3945                creer_base();
    4046                ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
  • _plugins_/abonnement-z/zabonnement/trunk/formulaires/editer_abonnement.html

    r49813 r51914  
    2525                [(#SAISIE{input,prix,obligatoire=oui,
    2626                        label=<:abo:label_prix:>})]
     27         
     28                <li class="fieldset">
     29                        <fieldset>
     30                                <h3 class="legend"><:abo:acces_internet_explication:></h3>
     31                                <ul>
     32                                        [(#SAISIE{radio, exact,
     33                                        label=<:abo:acces_internet_nozone:>,
     34                                        datas=#ARRAY{
     35                                                non,<:abo:acces_internet_explication_non:>,
     36                                                oui,<:abo:acces_internet_explication_oui:>}}
     37                                        )]
     38                                               
     39                                        [(#SAISIE{input,nb_rub,
     40                                        explication=<:abo:acces_internet_nb_rub_explication:>,
     41                                        label=<:abo:acces_internet_nb_rub:>}
     42                                        )]
     43                                       
     44                                        [(#SAISIE{input,ids_zone,
     45                                        explication=<:abo:acces_internet_ids_zone_explication:>,
     46                                        label=<:abo:acces_internet_ids_zone:> [<br /><a href="(#URL_ECRIRE{acces_restreint})]"><:abo:voir_zones:></a>}
     47                                        )]
     48                                </ul>
     49                        </fieldset>
     50                </li>
    2751               
    28                 [(#SAISIE{input,ids_zone,
    29                         explication=<:abo:explication_ids_zone:>,
    30                         label=<:abo:label_ids_zone:>})]
    3152               
    32                 [(#SAISIE{radio, exact,
    33                 label=<:abo:dates_exactes:>,
    34                 explication=<:abo:abonnement_coordonne_dates:>,
    35                 datas=#ARRAY{
    36                         non,<:abo:non_toutes_dates:>,
    37                         oui,<:abo:oui_dates_exactes:>}})]
    38                        
    39         [(#REM) <!-- archives automatiques (fusionner avec exact et trouver un autre nom?)
    40         Abonnement aux archives, commence aujourd\'hui moins le nombre de jours
    41         -->
    42                 [(#SAISIE{input, archives,
    43                 label=<:abo:dates_exactes:>,
    44                 explication=<:abo:abonnement_archives:>,
    45                 label=<:abo:label_archives:>})]
    46         ]
     53               
    4754                       
    4855                [(#SAISIE{textarea,descriptif,
  • _plugins_/abonnement-z/zabonnement/trunk/lang/abo_fr.php

    r51729 r51914  
    55        'abonnements' => 'Abonnements',
    66        'abonnement_archives'=>'Abonnement aux archives, commence aujourd\'hui moins le nombre de jours',
    7         'abonnement_coordonne_dates'=>'Seules les rubriques avec une date comprise dans la période de l\'abonnement seront accessibles.',
    87        'abonnement_debut'=>'Début',
    98        'abonnements_echus' => 'Abonnements échus',
     
    2221
    2322        'acces_complet' => 'Votre abonnement permet un accès complet à cette page.',
     23        'acces_label'=>'Accès',
     24        'acces_internet_explication'=>'Faut-il accorder un accès internet personnel le temps que dure l\'abonnement?',
     25        'acces_internet_nozone' =>'Accorder un accès',
     26        'acces_internet_explication_non'=>'Non, aucun accès internet (c\'est un abonnement papier).',
     27        'acces_internet_explication_oui'=>'Oui, accès aux rubriques des dates de l\'abonnement.',
     28        'acces_internet_nb_rub'=>'Nombre de rubriques accessibles',
     29        'acces_internet_nb_rub_explication'=>'Si vous n\'êtes pas certain des dates de publication, précisez le nombre de rubriques accessibles pour cet abonnement.',
     30        'acces_internet_ids_zone'=>'Accès à une zone restreinte',
     31        'acces_internet_ids_zone_explication'=>'Accès à une zone, quelque soit la date des rubriques. <br />Séparer les identifiants des zones à ouvrir par une virgule.',
     32
    2433        'acces_refuse' => 'Votre abonnement ne permet pas un accès complet à cette page.',
    2534        'action_creer_offre_abo' => 'Créer une offre d\'abonnement',
     
    5564
    5665//D
    57         'dates_exactes'=>'Dates en correspondance exacte',
    5866        'date_utile'=>'Date de publication',
    5967        'date_abonnement'=>'Date',
     
    7785        'erreur_presente' => 'Une erreur est présente dans votre saisie',
    7886        'erreur_selection_abonnement' => 'Vous devez choisir un abonnement !',
    79         'explication_ids_zone'=>'Séparer les numeros par une virgule. Laisser vide signifie qu\'aucune zone restreinte ne sera ouverte.',
    8087        'explication_environnement' => 'Vous pouvez utiliser des fichiers de tests
    8188                pour vérifier que les abonnements fonctionnent correctement.
     
    123130        'label_environnement_test' => 'Environnement de test',
    124131        'label_environnement_prod' => 'Environnement de production',
    125         'label_ids_zone'=>'Identifiants des zones à ouvrir',
    126132        'label_proposer_paiement' => 'Proposer le paiement à l\'inscription',
    127133        'label_action' => 'Action',
     
    154160        'liste_des_offres'=>'Liste des offres d\'abonnements',
    155161        'les_abonnements'=>'Les offres d\'abonnements',
     162        'logo'=>'Logo',
    156163
    157164
     
    170177        'nombre_abonnes_relances' => 'abonnés relancés :',
    171178        'nombre_abonnes_inscrits' => 'abonnés inscrits :',
    172         'non_toutes_dates'=>'Non, les dates de publication sont indifférentes',
    173179        'nombre_acheteurs_differents' => 'acheteurs différents : ',
     180        'num'=>'Num',
    174181       
    175182       
    176183//O
    177184        'offres_abonnement'=>'Offres d\'abonnements',
    178         'oui_dates_exactes'=>'Oui, restreindre aux dates de l\'abonnement',
    179185
    180186//P
     
    209215        'valide_echu_depuis'=>'Votre abonnement n\'est plus valable depuis le @date@',
    210216        'voir'=>'Voir',
     217        'voir_zones'=>'Voir les zones',
    211218        'vos_articles' => 'Vos articles',
    212219        'vos_acces_articles'=>'Vous avez accès aux articles suivants :',
  • _plugins_/abonnement-z/zabonnement/trunk/plugin.xml

    r51843 r51914  
    33        <auteur>Anne-lise Martenot (elastick.net) - BoOz (booz@reo.net)</auteur>
    44        <version>1.3.6</version>
    5         <version_base>1.2</version_base>
     5        <version_base>1.3</version_base>
    66        <etat>test</etat>
    77    <slogan>
     
    7575        <necessite id="SPIP" version="[2.1.8;]" />
    7676        <necessite id="facteur" version="[1.0;]" />
    77     <utilise id="zcommerce" version="[0.1;[" />
     77        <utilise id="zcommerce" version="[0.1;[" />
     78        <necessite id="daterubriques" version="[1.1;[" />
    7879   
    7980        <categorie>divers</categorie>
  • _plugins_/abonnement-z/zabonnement/trunk/prive/liste/abonnements.html

    r51729 r51914  
    1 <B_liste_abonnements>
     1[(#SET{defaut_tri,#ARRAY{
     2        date,-1,
     3        periode,-1,
     4        titre,1,
     5        id_abonnement,1
     6        prix,1
     7}})
     8]<B_liste_abonnements>
    29#ANCRE_PAGINATION
    310<div class="liste-elements abonnements">
     
    512[<caption><strong class="caption">(#ENV*{titre,<:abo:liste_des_offres:>})</strong></caption>]
    613        <thead>
    7         <tr>    <th><:abo:id:></th>
    8                 <th><:abo:label_titre:></th>
    9                 <th><:abo:label_duree:></th>
    10                 <th><:abo:label_zones_ouvrir:></th>
    11                 <th><:abo:exact:></th>
    12                 <th><:abo:label_prix:></th>
    13                 <th><:abo:label_action:></th>
     14        <tr class='first_row'>
     15                        <th class='id' style='width:3%;'>[(#TRI{id_abonnement,<:info_numero_abbreviation:>,ajax})]</th>
     16                        <th class='logo'><:abo:logo:></th>
     17                        <th class='titre'>[(#TRI{titre,<:abo:label_titre:>,ajax})]</th>
     18                        <th class='periode'>[(#TRI{periode,<:abo:label_duree:>,ajax})]</th>
     19                        <th class='prix'>[(#TRI{prix,<:abo:label_prix:>,ajax})]</th>
     20                        <th class='ids_zone'>[(#TRI{ids_zone,<:abo:label_zones_ouvrir:>,ajax})]</th>
     21                        <th class='exact'>[(#TRI{exact,<:abo:acces_label:>,ajax})]</th>
     22                        <th class='nb_rub'>[(#TRI{nb_rub,<:abo:num:>,ajax})]</th>
     23                        <th class='action'><:abo:label_action:></th>
    1424        </tr>
    1525        </thead>
    1626        <tbody>
    17         <BOUCLE_liste_abonnements(ABONNEMENTS){pagination 10}{par id_abonnement}>
     27        <BOUCLE_liste_abonnements(ABONNEMENTS)
     28                        {id_abonnement?}{where?}{titre?}
     29                {duree ?}{prix ?}{tri #ENV{order,id_abonnement},#GET{defaut_tri}}
     30                {pagination #ENV{nb,30}}>
    1831                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    19                         <td>#ID_ABONNEMENT</td>
    20                         <td class="#EDIT{titre}" style="width:30%">#TITRE</td>
     32                        <td class='id'>#ID_ABONNEMENT</td>
     33                        <td class='logo'>[(#LOGO_ABONNEMENT|image_reduire{24})]</td>
     34                        <td class="titre">#TITRE</td>
    2135                        <td>#DUREE #PERIODE</td>
     36                        <td class='prix'>#PRIX</td>
    2237                        <td>
    2338                        [(#SET{id_zones,#ARRAY})]
     
    2641                        <a href="[(#URL_ECRIRE{acces_restreint})]" title="#TITRE">#ID_ZONE</a>
    2742                        </BOUCLE_zones>
    28                         <:abo:aucune_zone:>
    2943                        <//B_zones>
    3044                        </td>
    31                         <td>#EXACT</td>
    32                         <td>#PRIX</td>
    33                         <td>
     45                        <td class='exact'>#EXACT</td>
     46                        <td class='nb_rub'>#NB_RUB</td>
     47                        <td class='action'>
    3448                        [(#AUTORISER{creer,abonnement}|non)
    3549                                <a href="[(#URL_ECRIRE{abonnement_edit}|parametre_url{id_abonnement,#ID_ABONNEMENT})]">
  • _plugins_/abonnement-z/zabonnement/trunk/prive/liste/abonnements_stats.html

    r51729 r51914  
    2222                        <th class='descriptif'>[(#TRI{objet,<:abo:contenu:>,ajax})]</th>
    2323                        <th class='prix'>[(#TRI{prix,<:abo:montant:>,ajax})]</th>
    24                         <th class='action'></th>
     24                        <th class='action'><:abo:label_action:></th>
    2525                </tr>
    2626        </thead>
Note: See TracChangeset for help on using the changeset viewer.