Changeset 98099 in spip-zone for _plugins_/abonnements_zones


Ignore:
Timestamp:
May 28, 2016, 11:17:37 PM (3 years ago)
Author:
rastapopoulos@…
Message:

Quand un abonnement se termine, on retire les zones liées à cet abonnement MAIS ATTENTION : il ne faut pas retirer les zones qui seraient aussi liées à D'AUTRES abonnements actifs de la même personne qu'elle aurait en même temps (elle peut très bien avoir plusieurs abonnements actifs à la fois). On vérifie donc s'il y a d'autres abonnements et on soustrait leurs zones si elles existent.

Location:
_plugins_/abonnements_zones/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/abonnements_zones/trunk/abozones_pipelines.php

    r87946 r98099  
    5454                }
    5555                // Si c'est une désactivation (ancien statut actif, et nouveau différent)
    56                 // on supprime les zones
     56                // on supprime les zones SAUF s'il y a d'autres abonnements qui y donnent aussi accès
    5757                elseif (
    5858                        $flux['args']['statut_ancien'] == 'actif'
     
    6060                        and $flux['data']['statut'] != 'actif'
    6161                ) {
     62                        // On cherche si la personne a d'autres abonnements ACTIFS en même temps
     63                        if ($autres_abonnements = sql_allfetsel(
     64                                'id_abonnement, id_abonnements_offre',
     65                                'spip_abonnements',
     66                                array('id_auteur = '.$id_auteur, 'id_abonnement != '.$id_abonnement, 'statut = "actif"')
     67                        )) {
     68                                $zones_a_pas_retirer = array();
     69                               
     70                                foreach ($autres_abonnements as $autre_abonnement) {
     71                                        // Si cet abonnement a des zones restreintes liées
     72                                        if ($liens_autre = objet_trouver_liens(
     73                                                array('zones'=>'*'),
     74                                                array('abonnements_offre'=>$autre_abonnement['id_abonnements_offre'])
     75                                        )) {
     76                                                // On ne va PAS retirer ces zones à l'utilisateur
     77                                                foreach ($liens_autre as $lien_autre) {
     78                                                        $zones_a_pas_retirer[] = $lien_autre['id_zone'];
     79                                                }
     80                                        }
     81                                }
     82                               
     83                                // On soustraie les zones à ne pas retirer
     84                                $zones = array_diff($zones, $zones_a_pas_retirer);
     85                        }
     86                       
     87                        // On retire à l'utilisateur toutes les zones qui ne sont pas aussi dans d'autres abonnements actifs
    6288                        autoriser_exception('retirerzones', 'auteur', $id_auteur);
    6389                        zone_lier($zones, 'auteur', $id_auteur, 'del');
  • _plugins_/abonnements_zones/trunk/paquet.xml

    r87946 r98099  
    22        prefix="abozones"
    33        categorie="auteur"
    4         version="1.0.3"
     4        version="1.0.4"
    55        etat="stable"
    66        compatibilite="[3.0.5;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.