Deux ajouts notoires :

- Quand on modife les dates d'un abonnement, ça vérifie si aujourd'hui on est dedans ou dehors, et ça active ou désactive l'abonnement automatiquement. Il est toujours possible de changer le statut manuellement pour mettre inactif même si on est dans les bonnes dates, ou inversement.
- Surtout, le plugin est désormais copain avec Commandes : quand un utilisateur commande des offres d'abonnements, alors dès qu'il a enfin payé, ça le détecte et ça crée un nouvel abonnement OU ça renouvelle un existant si on en avait déjà un avec cette offre. Au passage, on ajoute donc une action pratique "creer_ou renouveler_abonnement" qui sait bien faire les choses en lui donnant un auteur et une offre.
- Pour que tout marche, on déplace "inactif" en statut par défaut (premier), pour que ça le change ensuite, et que "abonnements à des zones" détecte bien une activation lors de la toute première création.
v2
rastapopoulos@spip.org 9 years ago
parent 933fd1f4bc
commit ad9fefd033

1
.gitattributes vendored

@ -2,6 +2,7 @@
/abonnements_administrations.php -text
/abonnements_autorisations.php -text
/abonnements_pipelines.php -text
action/creer_ou_renouveler_abonnement.php -text
action/modifier_echeance_abonnement.php -text
action/renouveler_abonnement.php -text
base/abonnements.php -text

@ -41,8 +41,8 @@ function abonnements_optimiser_base_disparus($flux){
function abonnements_post_edition($flux){
// Si on modifie un abonnement
if ($flux['args']['table'] == 'spip_abonnements') {
$abonnement = sql_fetsel('*', 'spip_abonnements', 'id_abonnement = '.$flux['args']['id_objet']);
$offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre = '.$abonnement['id_abonnements_offre']);
$abonnement = sql_fetsel('*', 'spip_abonnements', 'id_abonnement = '.intval($flux['args']['id_objet']));
$offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre = '.intval($abonnement['id_abonnements_offre']));
$modifs = array();
@ -66,13 +66,13 @@ function abonnements_post_edition($flux){
}
// Calcul de la date de fin
$modifs['date_fin'] = date('Y-m-d H:i:s', strtotime($abonnement['date_debut'].$ajout));
$modifs['date_fin'] = $abonnement['date_fin'] = date('Y-m-d H:i:s', strtotime($abonnement['date_debut'].$ajout));
}
// S'il le statut est "prepa" c'est une création et on doit changer ça
// car pour l'instant SPIP ne permet pas de déclarer le statut par défaut !
if ($abonnement['statut'] == 'prepa') {
$modifs['statut'] = 'actif';
$modifs['statut'] = $abonnement['statut'] = 'actif';
}
// Si on a mis l'abonnement à la poubelle, on doit enlever les tâches liées
elseif ($abonnement['statut'] == 'poubelle') {
@ -85,6 +85,26 @@ function abonnements_post_edition($flux){
}
}
// Seulement si personne n'a modifié le statut manuellement, alors on check les dates pour statufier
if (!$flux['data']['statut']) {
$jourdhui = date('Y-m-d H:i:s');
// Si aujourd'hui est dans les dates, on active
if (
$abonnement['statut'] == 'inactif'
and $jourdhui >= $abonnement['date_debut']
and $jourdhui <= $abonnement['date_fin']
) {
$modifs['statut'] = 'actif';
}
// Si aujourd'hui est en dehors des dates, on désactive
elseif (
$abonnement['statut'] == 'actif'
and ($jourdhui < $abonnement['date_debut'] or $jourdhui > $abonnement['date_fin'])
) {
$modifs['statut'] = 'inactif';
}
}
// S'il y a des modifs à faire on appelle l'API de modif
if (!empty($modifs)){
include_spip('action/editer_objet');
@ -97,6 +117,33 @@ function abonnements_post_edition($flux){
abonnements_programmer_desactivation($flux['args']['id_objet'], $flux['data']['date_fin']);
}
}
// Détection magique du plugin Commandes et d'une commande d'offre d'abonnement
elseif (
// Si on institue une commande
$flux['args']['table'] == 'spip_commandes'
and $id_commande = intval($flux['args']['id_objet'])
and $flux['args']['action'] == 'instituer'
// Et qu'on passe en statut "paye" depuis autre chose
and $flux['data']['statut'] == 'paye'
and $flux['args']['statut_ancien'] != 'paye'
// Et que la commande existe bien
and $commande = sql_fetsel('*', 'spip_commandes', 'id_commande = '.$id_commande)
// Et que cette commande a un utilisateur correct
and ($id_auteur = $commande['id_auteur']) > 0
// Et qu'on a des détails dans cette commande
and $details = sql_allfetsel('*', 'spip_commandes_details', 'id_commande = '.$id_commande)
and is_array($details)
) {
// On cherche si on a des offres d'abonnements dans les détails de la commande
foreach ($details as $detail) {
// Si on trouve une offre d'abonnement
if ($detail['objet'] = 'abonnements_offre' and ($id_abonnements_offre = $detail['id_objet']) > 0) {
// On crée ou renouvelle
$action = charger_fonction('creer_ou_renouveler_abonnement', 'action/');
$action($id_auteur.'/'.$id_abonnements_offre);
}
}
}
return $flux;
}

@ -0,0 +1,60 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Créer ou renouveler un abonnement
*
* Si l'utilisateur n'a rien de cette offre, on crée un nouvel abonnement.
* Si l'utilisateur a toujours ou avait précédemment un abonnement de cette offre, on le renouvelle.
*
* @param string|null $arg
* L'argument doit contenir "id_auteur/id_abonnements_offre".
* @return mixed
*/
function action_creer_ou_renouveler_abonnement_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
list($id_auteur,$id_abonnements_offre) = explode('/', $arg);
// Si on a bien un auteur et une offre
if (
($id_auteur = intval($id_auteur)) > 0
and ($id_abonnements_offre = intval($id_abonnements_offre)) > 0
) {
// Si on trouve un abonnement (le dernier en date)
if ($id_abonnement = intval(sql_getfetsel(
'id_abonnement',
'spip_abonnements',
array('id_auteur = '.$id_auteur, 'id_abonnements_offre = '.$id_abonnements_offre, 'statut != "poubelle"'),
'',
'date_fin desc',
'0,1'
))) {
// On le renouvelle !
$renouveler = charger_fonction('renouveler_abonnement', 'action/');
return $renouveler($id_abonnement);
}
// Sinon on en crée un nouveau
else {
include_spip('action/editer_objet');
if ($id_abonnement = objet_inserer('abonnement')) {
$erreur = objet_modifier(
'abonnement', $id_abonnement,
array(
'id_auteur' => $id_auteur,
'id_abonnements_offre' => $id_abonnements_offre,
)
);
return array($id_abonnement, $erreur);
}
}
}
return false;
}

@ -102,14 +102,14 @@ function abonnements_declarer_tables_objets_sql($tables) {
'rechercher_champs' => array(),
'tables_jointures' => array(),
'statut_textes_instituer' => array(
'actif' => 'abonnement:statut_actif',
'inactif' => 'abonnement:statut_inactif',
'actif' => 'abonnement:statut_actif',
'poubelle' => 'texte_statut_poubelle',
),
'statut_images' => array(
'prepa' => 'puce-preparer-8.png',
'actif' => 'puce-publier-8.png',
'inactif' => 'puce-refuser-8.png',
'actif' => 'puce-publier-8.png',
'poubelle' => 'puce-supprimer-8.png',
),
'statut'=> array(

@ -58,8 +58,7 @@ function formulaires_editer_abonnement_saisies_dist($id_abonnement='new', $retou
),
);
}
// Sinon si c'est une demande de modification, on ne peut modifier que l'échéance
// Et uniquement en ajoutant avec durée et période
// Sinon si c'est une demande de modification, on ne peut modifier que les dates
elseif ($id_abonnement > 0) {
$saisies = array(
array(
@ -93,41 +92,6 @@ function formulaires_editer_abonnement_saisies_dist($id_abonnement='new', $retou
),
),
);
# $saisies = array(
# array(
# 'saisie' => 'fieldset',
# 'options' => array(
# 'nom' => 'date_fin_allonger',
# 'label' => _T('abonnement:champ_date_fin_allonger_label'),
# ),
# 'saisies' => array(
# array(
# 'saisie' => 'input',
# 'options' => array(
# 'nom' => 'duree',
# 'label' => _T('abonnementsoffre:champ_duree_label'),
# 'defaut' => 0,
# ),
# 'verifier' => array(
# 'type' => 'entier',
# ),
# ),
# array(
# 'saisie' => 'selection',
# 'options' => array(
# 'nom' => 'periode',
# 'label' => _T('abonnementsoffre:champ_periode_label'),
# 'cacher_option_intro' => 'oui',
# 'datas' => array(
# 'mois' => _T('abonnementsoffre:champ_periode_choix_mois'),
# 'jours' => _T('abonnementsoffre:champ_periode_choix_jours'),
# 'heures' => _T('abonnementsoffre:champ_periode_choix_heures'),
# ),
# ),
# ),
# ),
# ),
# );
}
return $saisies;

@ -1,7 +1,7 @@
<paquet
prefix="abonnements"
categorie="auteur"
version="2.2.3"
version="2.3.0"
schema="2.1.0"
etat="stable"
compatibilite="[3.0.5;3.0.*]"

Loading…
Cancel
Save