|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Plugin Abonnements
|
|
|
|
* (c) 2012 Les Développements Durables
|
|
|
|
* Licence GNU/GPL v3
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Optimiser la base de donnees des abonnements
|
|
|
|
*
|
|
|
|
* @param int $n
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
function abonnements_optimiser_base_disparus($flux){
|
|
|
|
|
|
|
|
//Offres d'abonnement à la poubelle
|
|
|
|
sql_delete("spip_abonnements_offres", "statut='poubelle' AND maj < ".$flux['args']['date']);
|
|
|
|
|
|
|
|
//Supprimer les abonnements lies à une offre d'abonnement inexistante
|
|
|
|
$res = sql_select("DISTINCT abonnements.id_abonnements_offre","spip_abonnements AS abonnements
|
|
|
|
LEFT JOIN spip_abonnements_offres AS offres
|
|
|
|
ON abonnements.id_abonnements_offre=offres.id_abonnements_offre","offres.id_abonnements_offre IS NULL");
|
|
|
|
while ($row = sql_fetch($res))
|
|
|
|
sql_delete("spip_abonnements", "id_abonnements_offre=".$row['id_abonnements_offre']);
|
|
|
|
|
|
|
|
//Abonnements à la poubelle
|
|
|
|
sql_delete("spip_abonnements", "statut='poubelle' AND maj < ".$flux['args']['date']);
|
|
|
|
|
|
|
|
include_spip('action/editer_liens');
|
|
|
|
$flux['data'] += objet_optimiser_liens(array('abonnement'=>'*'),'*');
|
|
|
|
return $flux;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Des modifs supplémentaires après édition
|
|
|
|
*/
|
|
|
|
function abonnements_post_edition($flux){
|
|
|
|
// Si on modifie un abonnement
|
|
|
|
if ($flux['args']['table'] == 'spip_abonnements') {
|
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.
9 years ago
|
|
|
$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();
|
|
|
|
|
|
|
|
// Si l'échéance est VIDE, et que pourtant l'offre parente A BIEN une durée
|
|
|
|
// alors c'est qu'il faut initialiser l'échéance !
|
|
|
|
if ($abonnement['date_fin'] == '0000-00-00 00:00:00' and ($duree = $offre['duree']) > 0){
|
|
|
|
// De combien doit-on augmenter la date
|
|
|
|
switch ($offre['periode']){
|
|
|
|
case 'heures':
|
|
|
|
$ajout = " + ${duree} hours";
|
|
|
|
break;
|
|
|
|
case 'jours':
|
|
|
|
$ajout = " + ${duree} days";
|
|
|
|
break;
|
|
|
|
case 'mois':
|
|
|
|
$ajout = " + ${duree} months";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$ajout ='';
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Calcul de la date de fin
|
|
|
|
$modifs['date_fin'] = date('Y-m-d H:i:s', strtotime($abonnement['date_debut'].$ajout));
|
|
|
|
|
|
|
|
$modifs = pipeline(
|
|
|
|
'abonnement_initialisation_dates',
|
|
|
|
array(
|
|
|
|
'args' => array('abonnement' => $abonnement, 'offre' => $offre),
|
|
|
|
'data' => $modifs
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Si les dates ont été changées, on change le tableau de l'abonnement pour le test de statut qui suivra
|
|
|
|
if (isset($modifs['date_debut'])) {
|
|
|
|
$abonnement['date_debut'] = $modifs['date_debut'];
|
|
|
|
}
|
|
|
|
if (isset($modifs['date_fin'])) {
|
|
|
|
$abonnement['date_fin'] = $modifs['date_fin'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Si 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') {
|
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.
9 years ago
|
|
|
$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') {
|
|
|
|
$liens = objet_trouver_liens(array('job' => '*'), array('abonnement' => $abonnement['id_abonnement']));
|
|
|
|
if ($liens and is_array($liens)){
|
|
|
|
// Et on les supprime toutes !
|
|
|
|
foreach ($liens as $lien){
|
|
|
|
job_queue_remove($lien['id_job']);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
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.
9 years ago
|
|
|
// 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');
|
|
|
|
objet_modifier('abonnement', $flux['args']['id_objet'], $modifs);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Si dans les modifications demandées au départ, il y a la date de fin, on reprogramme la désactivation
|
|
|
|
if (isset($flux['data']['date_fin'])) {
|
|
|
|
include_spip('inc/abonnements');
|
|
|
|
abonnements_programmer_desactivation($flux['args']['id_objet'], $flux['data']['date_fin']);
|
|
|
|
}
|
|
|
|
}
|
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.
9 years ago
|
|
|
// 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/');
|
|
|
|
$retour = $action($id_auteur.'/'.$id_abonnements_offre);
|
|
|
|
|
|
|
|
// Si on a un retour correct avec un abonnement
|
|
|
|
if (
|
|
|
|
is_array($retour)
|
|
|
|
and $id_abonnement = intval(reset($retour))
|
|
|
|
and $id_abonnement > 0
|
|
|
|
) {
|
|
|
|
// On lie cet abonnement avec la commande qui l'a généré
|
|
|
|
include_spip('action/editer_liens');
|
|
|
|
objet_associer(
|
|
|
|
array('commande' => $id_commande),
|
|
|
|
array('abonnement' => $id_abonnement)
|
|
|
|
);
|
|
|
|
}
|
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.
9 years ago
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $flux;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Ajout d'une tache CRON pour vérifier toutes les heures si les abonnements actifs ont une tâche de désactivation
|
|
|
|
*/
|
|
|
|
function abonnements_taches_generales_cron($taches){
|
|
|
|
$taches['abonnements_verifier_desactivation'] = 60 * 60; // toutes les heures
|
|
|
|
$taches['abonnements_verifier_notifications'] = 24 * 3600; // une fois par jour
|
|
|
|
return $taches;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Ajouter la config des notifications
|
|
|
|
*/
|
|
|
|
function abonnements_affiche_gauche($flux){
|
|
|
|
if ($flux['args']['exec'] == 'abonnements_offre'){
|
|
|
|
$flux['data'] .= recuperer_fond(
|
|
|
|
'prive/squelettes/navigation/inc-abonnements_notifications',
|
|
|
|
array('id_abonnements_offre' => $flux['args']['id_abonnements_offre'])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $flux;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Ajouter la boite des abonnements sur la fiche auteur
|
|
|
|
*/
|
|
|
|
function abonnements_affiche_milieu($flux){
|
|
|
|
|
|
|
|
if ($e = trouver_objet_exec($flux['args']['exec'])
|
|
|
|
AND $e['type'] == 'auteur'
|
|
|
|
AND $e['edition'] == false) {
|
|
|
|
|
|
|
|
$id_auteur = $flux['args']['id_auteur'];
|
|
|
|
|
|
|
|
$ins = recuperer_fond('prive/squelettes/inclure/abonnements_auteur',array('id_auteur'=>$id_auteur));
|
|
|
|
if (($p = strpos($flux['data'],"<!--affiche_milieu-->")) !== false)
|
|
|
|
$flux['data'] = substr_replace($flux['data'],$ins,$p,0);
|
|
|
|
else
|
|
|
|
$flux['data'] .= $ins;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return $flux;
|
|
|
|
}
|