Changeset 68551 in spip-zone for _plugins_/abonnements_zones


Ignore:
Timestamp:
Dec 21, 2012, 9:25:54 PM (7 years ago)
Author:
rastapopoulos@…
Message:

Et voilà la suite, le pipeline suivant : quand on ajoute ou retire *une liaison* de zone à une offre, alors automatiquement tous les abonnés *actifs* sont impactés immédiatement : on leur ajoute ou retire le droit à cette zone.

Location:
_plugins_/abonnements_zones/trunk
Files:
2 edited

Legend:

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

    r68549 r68551  
    6565}
    6666
     67/*
     68 * Ajouter ou retirer un utilisateur d'une zone qui vient d'être liée ou déliée à une offre
     69 */
     70function abozones_post_edition_lien($flux){
     71        // Lorsqu'on vient de modifier un lien de zone pour une offre, et que celle-ci a des abonnements actifs
     72        if (
     73                $flux['args']['objet_source'] == 'zone'
     74                and $id_zone = intval($flux['args']['id_objet_source'])
     75                and $flux['args']['objet'] == 'abonnements_offre'
     76                and $id_abonnements_offre = intval($flux['args']['id_objet'])
     77                and $auteurs_actifs = sql_allfetsel(
     78                        'u.id_auteur',
     79                        'spip_auteurs as u join spip_abonnements as a on a.id_auteur=u.id_auteur',
     80                        array('a.id_abonnements_offre = '.$id_abonnements_offre, 'a.statut = "actif"')
     81                )
     82                and is_array($auteurs_actifs)
     83        ) {
     84                include_spip('inc/autoriser');
     85                include_spip('action/editer_zone');
     86               
     87                // Pour chacun des auteurs ayant un abonnement actif de l'offre
     88                $auteurs_actifs = array_map('reset', $auteurs_actifs);
     89                foreach ($auteurs_actifs as $id_auteur){
     90                        // Si c'était un ajout de zone, on ajoute la zone aux auteurs
     91                        if ($flux['args']['action'] == 'insert') {
     92                                autoriser_exception('affecterzones', 'auteur', $id_auteur);
     93                                zone_lier($id_zone, 'auteur', $id_auteur);
     94                                autoriser_exception('affecterzones', 'auteur', $id_auteur, false);
     95                        }
     96                        // Si c'était une suppression de zone, on supprime la zone aux auteurs
     97                        elseif ($flux['args']['action'] == 'delete') {
     98                                autoriser_exception('retirerzones', 'auteur', $id_auteur);
     99                                zone_lier($id_zone, 'auteur', $id_auteur, 'del');
     100                                autoriser_exception('retirerzones', 'auteur', $id_auteur, false);
     101                        }
     102                }
     103        }
     104}
     105
    67106?>
  • _plugins_/abonnements_zones/trunk/paquet.xml

    r68547 r68551  
    2222        <pipeline nom="afficher_complement_objet" inclure="abozones_pipelines.php" />
    2323        <pipeline nom="post_edition" inclure="abozones_pipelines.php" />
     24        <pipeline nom="post_edition_lien" inclure="abozones_pipelines.php" />
    2425</paquet>
Note: See TracChangeset for help on using the changeset viewer.