Changeset 90516 in spip-zone


Ignore:
Timestamp:
Jun 25, 2015, 3:24:06 PM (4 years ago)
Author:
rastapopoulos@…
Message:

Lorsqu'on détecte une commande payée pour un abonnement, on détecte aussi si c'est une commande avec renouvellement auto, et si c'est le cas, on force toujours la création d'un nouvel abonnement dédié, jamais de renouvellement d'un ancien. Au passage la fonction pour creer_ou_renouveler est déplacée PAS dans action/ car c'est pas un humain qui appelle ça. On le met dans le inc/ et du coup on a des vrais arguments classiques.

Location:
_plugins_/abonnements/trunk
Files:
1 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/abonnements/trunk/abonnements_pipelines.php

    r90245 r90516  
    131131                        // Si on trouve une offre d'abonnement
    132132                        if ($detail['objet'] = 'abonnements_offre' and ($id_abonnements_offre = $detail['id_objet']) > 0) {
     133                                // Si la commande est renouvelable et que c'est le PREMIER paiement (activation)
     134                                // on force toujours la création d'un nouvel abonnement
     135                                $forcer_creation = false;
     136                                if (
     137                                        in_array($commande['echeances_type'], array('mois', 'annee'))
     138                                        and include_spip('inc/commandes_echeances')
     139                                        and commandes_nb_echeances_payees($id_commande) <= 1
     140                                ) {
     141                                        $forcer_creation = true;
     142                                }
     143                               
    133144                                // On crée ou renouvelle
    134                                 $action = charger_fonction('creer_ou_renouveler_abonnement', 'action/');
    135                                 $retour = $action($id_auteur.'/'.$id_abonnements_offre);
     145                                include_spip('inc/abonnements');
     146                                $retour = abonnements_creer_ou_renouveler($id_auteur, $id_abonnements_offre, $forcer_creation);
    136147                               
    137148                                // Si on a un retour correct avec un abonnement
  • _plugins_/abonnements/trunk/inc/abonnements.php

    r90429 r90516  
    77
    88if (!defined('_ECRIRE_INC_VERSION')) return;
     9
     10/**
     11 * Créer ou renouveler un abonnement
     12 *
     13 * Si l'utilisateur n'a rien de cette offre, on crée un nouvel abonnement.
     14 * Si l'utilisateur a toujours ou avait précédemment un abonnement de cette offre, on le renouvelle.
     15 *
     16 * On s'assure d'avoir les droits pendant les modifs
     17 * car ce n'est pas un humain avec des droits qui déclanche ça explicitement
     18 *
     19 * @param int $id_auteur
     20 *              Identifiant de l'utilisateur pour lequel on veut créer un abonnement
     21 * @param int $id_abonnements_offre
     22 *              Identifiant de l'offre d'abonnement voulue
     23 * @param bool $forcer_creation
     24 *              `true` si on veut forcer la création sans chercher à renouveler
     25 * @return mixed
     26 */
     27function abonnements_creer_ou_renouveler($id_auteur, $id_abonnements_offre, $forcer_creation=false) {
     28        // Si on a bien un auteur et une offre
     29        if (
     30                ($id_auteur = intval($id_auteur)) > 0
     31                and ($id_abonnements_offre = intval($id_abonnements_offre)) > 0
     32        ) {
     33                include_spip('inc/config');
     34                include_spip('inc/autoriser');
     35               
     36                // On cherche la durée limite pour renouveler un abonnement
     37                $heures_limite = lire_config('abonnements/renouvellement_heures_limite', 48);
     38               
     39                // Si on trouve un abonnement de cette offre (le dernier en date)
     40                // et qu'il n'est pas trop vieux !
     41                // et qu'on a pas forcé la création…
     42                if (
     43                        !$forcer_creation
     44                        and $abonnement = sql_fetsel(
     45                                'id_abonnement, date_fin',
     46                                'spip_abonnements',
     47                                array(
     48                                        'id_auteur = '.$id_auteur,
     49                                        'id_abonnements_offre = '.$id_abonnements_offre,
     50                                        'statut != "poubelle"'
     51                                ),
     52                                '',
     53                                'date_fin desc',
     54                                '0,1'
     55                        )
     56                        and $abonnement['date_fin'] >= date('Y-m-d H:i:s', strtotime('- '.$heures_limite.' hours'))
     57                        and $id_abonnement = intval($abonnement['id_abonnement'])
     58                ) {
     59                        autoriser_exception('modifier', 'abonnement', $id_abonnement, true);
     60                        // On le renouvelle !
     61                        $renouveler = charger_fonction('renouveler_abonnement', 'action/');
     62                        $retour = $renouveler($id_abonnement);
     63                        autoriser_exception('modifier', 'abonnement', $id_abonnement, false);
     64                        return $retour;
     65                }
     66                // Sinon on en crée un nouveau
     67                else {
     68                        include_spip('action/editer_objet');
     69                        autoriser_exception('creer', 'abonnement', '', true);
     70                        if ($id_abonnement = objet_inserer('abonnement')) {
     71                                autoriser_exception('creer', 'abonnement', '', false);
     72                                autoriser_exception('modifier', 'abonnement', $id_abonnement, true);
     73                                $erreur = objet_modifier(
     74                                        'abonnement', $id_abonnement,
     75                                        array(
     76                                                'id_auteur' => $id_auteur,
     77                                                'id_abonnements_offre' => $id_abonnements_offre,
     78                                        )
     79                                );
     80                                autoriser_exception('modifier', 'abonnement', $id_abonnement, false);
     81                                return array($id_abonnement, $erreur);
     82                        }
     83                }
     84        }
     85       
     86        return false;
     87}
    988
    1089/**
  • _plugins_/abonnements/trunk/paquet.xml

    r90440 r90516  
    22        prefix="abonnements"
    33        categorie="auteur"
    4         version="3.0.5"
     4        version="3.0.6"
    55        schema="2.2.0"
    66        etat="dev"
     
    2323        <necessite nom="yaml" compatibilite="[1.5.0;]" />
    2424        <necessite nom="facteur" compatibilite="[3.0.1;]" />
    25         <utilise nom="commandes" compatibilite="[1.5.0;]" />
     25        <utilise nom="commandes" compatibilite="[1.6.8;]" />
    2626       
    2727        <!-- Autorisations générales -->
Note: See TracChangeset for help on using the changeset viewer.