Gestion de prix_ht et taxe pour se rapprocher du fonctionnement de produits

le prix est copié dans prix_ht lors de la mise à jour du plugin
svn/attic/shelves/BoOz/122940
gornety@no-log.org 7 years ago
parent df0909ba2d
commit dd7f805f61

2
.gitattributes vendored

@ -5,6 +5,7 @@
action/modifier_echeance_abonnement.php -text
action/renouveler_abonnement.php -text
base/abonnements.php -text
css/abonnements_prive.css -text
formulaires/editer_abonnement.html -text
formulaires/editer_abonnement.php -text
formulaires/editer_abonnements_offre.html -text
@ -77,5 +78,6 @@ prive/themes/spip/images/abonnements_offre-new-32.png -text
prive/themes/spip/images/arrow_refresh-16.png -text
prive/themes/spip/images/arrow_refresh-24.png -text
prive/themes/spip/images/arrow_refresh-32.png -text
prix/abonnements_offre.php -text
saisies-vues/abonnements_offres.html -text
saisies/abonnements_offres.html -text

@ -1,40 +1,48 @@
<?php
/**
* Plugin Abonnements
* (c) 2012 Les Développements Durables
* Licence GNU/GPL v3
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION'))
return;
/**
* Fonction d'installation du plugin et de mise à jour.
**/
* */
function abonnements_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
$maj['create'] = array(array('maj_tables', array('spip_abonnements_offres', 'spip_abonnements_offres_liens', 'spip_abonnements', 'spip_abonnements_offres_notifications')));
// Ajout de la config des notifications
$maj['2.1.0'] = array(
array('maj_tables', array('spip_abonnements_offres_notifications'))
);
// Ajout de la date d'échéance possiblement différente avec la date de fin
$maj['2.2.0'] = array(
array('maj_tables', array('spip_abonnements')),
array('sql_update', 'spip_abonnements', array('date_echeance'=>'date_fin')),
array('sql_update', 'spip_abonnements', array('date_echeance' => 'date_fin'))
);
// Ajout des champs taxe et prix_ht, on copie la valeur de prix dans prix_ht
$maj['2.2.2'] = array(
array('maj_tables', array('spip_abonnements_offres')),
array('sql_alter', 'TABLE spip_abonnements_offres ADD prix_ht float(10,2) not null default 0 AFTER periode'),
array('sql_alter', 'TABLE spip_abonnements_offres ADD taxe decimal(4,4) null default 0 AFTER prix_ht'),
array('sql_update', 'spip_abonnements_offres', array('prix_ht' => 'prix')),
array('sql_update', 'spip_abonnements_offres', array('prix' => '0'))
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin.
**/
* */
function abonnements_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_abonnements_offres");
@ -42,9 +50,9 @@ function abonnements_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_abonnements");
# Nettoyer les versionnages et forums
sql_delete("spip_versions", sql_in("objet", array('abonnements_offre', 'abonnement')));
sql_delete("spip_versions_fragments", sql_in("objet", array('abonnements_offre', 'abonnement')));
sql_delete("spip_forum", sql_in("objet", array('abonnements_offre', 'abonnement')));
sql_delete("spip_versions", sql_in("objet", array('abonnements_offre', 'abonnement')));
sql_delete("spip_versions_fragments", sql_in("objet", array('abonnements_offre', 'abonnement')));
sql_delete("spip_forum", sql_in("objet", array('abonnements_offre', 'abonnement')));
effacer_meta($nom_meta_base_version);
}

@ -1,13 +1,12 @@
<?php
/**
* Plugin Abonnements
* (c) 2012 Les Développements Durables
* Licence GNU/GPL v3
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION'))
return;
/**
* Optimiser la base de donnees des abonnements
@ -15,80 +14,80 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* @param int $n
* @return int
*/
function abonnements_optimiser_base_disparus($flux){
function abonnements_optimiser_base_disparus($flux) {
//Offres d'abonnement à la poubelle
sql_delete("spip_abonnements_offres", "statut='poubelle' AND maj < ".$flux['args']['date']);
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
$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");
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']);
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']);
sql_delete("spip_abonnements", "statut='poubelle' AND maj < " . $flux['args']['date']);
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(array('abonnement'=>'*'),'*');
$flux['data'] += objet_optimiser_liens(array('abonnement' => '*'), '*');
return $flux;
}
/*
* Des modifs supplémentaires après édition
*/
function abonnements_post_edition($flux){
function abonnements_post_edition($flux) {
// Si on modifie un abonnement
if ($flux['args']['table'] == 'spip_abonnements') {
include_spip('inc/abonnements');
$id_abonnement = intval($flux['args']['id_objet']);
$abonnement = sql_fetsel('*', 'spip_abonnements', 'id_abonnement = '.$id_abonnement);
$offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre = '.intval($abonnement['id_abonnements_offre']));
$abonnement = sql_fetsel('*', 'spip_abonnements', 'id_abonnement = ' . $id_abonnement);
$offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre = ' . intval($abonnement['id_abonnements_offre']));
$jourdhui = date('Y-m-d H:i:s');
// Si la date de fin a été modifiée et qu'elle est dans le future
// on reprogramme la désactivation
if (isset($flux['data']['date_fin']) and $flux['data']['date_fin'] > $jourdhui) {
abonnements_programmer_desactivation($flux['args']['id_objet'], $flux['data']['date_fin']);
}
// Si on a mis l'abonnement inactif ou à la poubelle, on doit enlever les tâches liées
if (
isset($flux['data']['statut'])
and in_array($flux['data']['statut'], array('inactif', 'poubelle'))
isset($flux['data']['statut'])
and in_array($flux['data']['statut'], array('inactif', 'poubelle'))
) {
include_spip('action/editer_liens');
$liens = objet_trouver_liens(array('job' => '*'), array('abonnement' => $abonnement['id_abonnement']));
if ($liens and is_array($liens)){
if ($liens and is_array($liens)) {
// Et on les supprime toutes !
foreach ($liens as $lien){
foreach ($liens as $lien) {
job_queue_remove($lien['id_job']);
}
}
}
// Si on a un id_commande dans l'environnement, on lie la commande à l'abonnement
if (
$id_commande = intval(_request('id_commande'))
and defined('_DIR_PLUGIN_COMMANDES')
$id_commande = intval(_request('id_commande'))
and defined('_DIR_PLUGIN_COMMANDES')
) {
// 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)
array('commande' => $id_commande), array('abonnement' => $id_abonnement)
);
}
$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 les dates !
if ($abonnement['date_echeance'] == '0000-00-00 00:00:00' and ($duree = $offre['duree']) > 0) {
if ($abonnement['date_echeance'] == '0000-00-00 00:00:00' and ( $duree = $offre['duree']) > 0) {
$modifs = abonnements_initialisation_dates($abonnement, $offre);
}
// Si les dates doivent être 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'];
@ -96,65 +95,65 @@ function abonnements_post_edition($flux){
if (isset($modifs['date_fin'])) {
$abonnement['date_fin'] = $modifs['date_fin'];
}
// Seulement si personne n'a modifié le statut manuellement, alors on check les dates pour statufier
if (!$flux['data']['statut']) {
// Si aujourd'hui est entre date_debut et date_echeance, on active
if (
$abonnement['statut'] == 'inactif'
and $jourdhui >= $abonnement['date_debut']
and $jourdhui <= $abonnement['date_echeance']
$abonnement['statut'] == 'inactif'
and $jourdhui >= $abonnement['date_debut']
and $jourdhui <= $abonnement['date_echeance']
) {
$modifs['statut'] = 'actif';
}
// Si aujourd'hui est en dehors des dates début et FIN, on désactive
// on ne teste pas date_echeance car ce sera à un génie de désactiver si trop dépassée
elseif (
$abonnement['statut'] == 'actif'
and ($jourdhui < $abonnement['date_debut'] or $jourdhui >= $abonnement['date_fin'])
$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)){
if (!empty($modifs)) {
include_spip('action/editer_objet');
objet_modifier('abonnement', $flux['args']['id_objet'], $modifs);
}
}
// 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)
// 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) {
if ($detail['objet'] == 'abonnements_offre' and ( $id_abonnements_offre = $detail['id_objet']) > 0) {
// Si la commande est renouvelable et que c'est le PREMIER paiement (activation)
// on force toujours la création d'un nouvel abonnement
$forcer_creation = false;
if (
in_array($commande['echeances_type'], array('mois', 'annee'))
and include_spip('inc/commandes_echeances')
and commandes_nb_echeances_payees($id_commande) <= 1
in_array($commande['echeances_type'], array('mois', 'annee'))
and include_spip('inc/commandes_echeances')
and commandes_nb_echeances_payees($id_commande) <= 1
) {
$forcer_creation = true;
}
// On crée ou renouvelle
include_spip('inc/abonnements');
set_request('id_commande', $id_commande); // on garde l'id_commande dans l'environnement
@ -162,22 +161,23 @@ function abonnements_post_edition($flux){
}
}
}
return $flux;
}
/*
* Ajout de tâches nécessaires aux abonnements
*
*
* - Une tâche pour vérifier toutes les heures si on a pas trop dépassé des échéances
* - Une tâche pour vérifier toutes les heures si les abonnements actifs ont une tâche de désactivation
* - Une tâche pour programmer les emails de notification à envoyer
*
*
* @pipeline taches_generales_cron
* @param array $taches Liste des génies et leur périodicité
* @return array Liste des tâches possiblement modifiées
*/
function abonnements_taches_generales_cron($taches){
function abonnements_taches_generales_cron($taches) {
$taches['abonnements_verifier_echeances'] = 60 * 60; // toutes les heures
$taches['abonnements_verifier_desactivation'] = 60 * 60; // toutes les heures
$taches['abonnements_verifier_notifications'] = 24 * 3600; // une fois par jour
@ -187,35 +187,49 @@ function abonnements_taches_generales_cron($taches){
/*
* Ajouter la config des notifications
*/
function abonnements_affiche_gauche($flux){
if ($flux['args']['exec'] == 'abonnements_offre'){
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'])
'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){
function abonnements_affiche_milieu($flux) {
if ($e = trouver_objet_exec($flux['args']['exec'])
AND $e['type'] == 'auteur'
AND $e['edition'] == false) {
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);
$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;
}
/*
* Ajouter une feuille de style privée
*/
function abonnements_header_prive($flux) {
$flux = abonnements_insert_head($flux);
return $flux;
}
function abonnements_insert_head($flux) {
$flux .= '<link rel="stylesheet" href="' . _DIR_PLUGIN_ABONNEMENTS . 'css/abonnements_prive.css" type="text/css" />';
return $flux;
}

@ -1,12 +1,12 @@
<?php
/**
* Plugin Abonnements
* (c) 2012 Les Développements Durables
* Licence GNU/GPL v3
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION'))
return;
/**
* Déclaration des alias de tables et filtres automatiques de champs
@ -19,46 +19,46 @@ function abonnements_declarer_tables_interfaces($interfaces) {
return $interfaces;
}
/**
* Déclaration des objets éditoriaux
*/
function abonnements_declarer_tables_objets_sql($tables) {
$tables['spip_abonnements_offres'] = array(
'type' => 'abonnements_offre',
'principale' => "oui",
'table_objet_surnoms' => array('abonnementsoffre'), // table_objet('abonnement') => 'abonnements_offres'
'field'=> array(
'principale' => "oui",
'table_objet_surnoms' => array('abonnementsoffre'), // table_objet('abonnement') => 'abonnements_offres'
'field' => array(
"id_abonnements_offre" => "bigint(21) NOT NULL",
"titre" => "text NOT NULL DEFAULT ''",
"descriptif" => "text NOT NULL DEFAULT ''",
"duree" => "int(11) NOT NULL DEFAULT 0",
"periode" => "varchar(25) NOT NULL DEFAULT ''",
'prix' => 'float(10,2) not null default 0',
"statut" => "varchar(20) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP"
"titre" => "text NOT NULL DEFAULT ''",
"descriptif" => "text NOT NULL DEFAULT ''",
"duree" => "int(11) NOT NULL DEFAULT 0",
"periode" => "varchar(25) NOT NULL DEFAULT ''",
'prix_ht' => 'float(10,2) not null default 0',
"taxe" => "decimal(4,4) default 0",
"statut" => "varchar(20) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP"
),
'key' => array(
"PRIMARY KEY" => "id_abonnements_offre",
"KEY statut" => "statut",
"PRIMARY KEY" => "id_abonnements_offre",
"KEY statut" => "statut",
),
'titre' => "titre AS titre, '' AS lang",
#'date' => "",
'champs_editables' => array('titre', 'descriptif', 'duree', 'periode', 'prix'),
'champs_versionnes' => array('titre', 'descriptif', 'duree', 'periode', 'prix'),
#'date' => "",
'champs_editables' => array('titre', 'descriptif', 'duree', 'periode', 'prix_ht', 'taxe'),
'champs_versionnes' => array('titre', 'descriptif', 'duree', 'periode', 'prix_ht', 'taxe'),
'rechercher_champs' => array("titre" => 10, "descriptif" => 5),
'tables_jointures' => array('spip_abonnements_offres_liens'),
'tables_jointures' => array('spip_abonnements_offres_liens'),
'statut_textes_instituer' => array(
'prepa' => 'texte_statut_en_cours_redaction',
'publie' => 'texte_statut_publie',
'prepa' => 'texte_statut_en_cours_redaction',
'publie' => 'texte_statut_publie',
'poubelle' => 'texte_statut_poubelle',
),
'statut'=> array(
'statut' => array(
array(
'champ' => 'statut',
'publie' => 'publie',
'previsu' => 'publie,prepa',
'exception' => array('statut','tout')
'champ' => 'statut',
'publie' => 'publie',
'previsu' => 'publie,prepa',
'exception' => array('statut', 'tout')
)
),
'texte_modifier' => 'abonnementsoffre:icone_modifier_abonnementsoffre',
@ -80,32 +80,32 @@ function abonnements_declarer_tables_objets_sql($tables) {
'principale' => "oui",
# 'url_voir' => false,
# 'url_edit' => false,
'field'=> array(
"id_abonnement" => "bigint(21) NOT NULL",
'field' => array(
"id_abonnement" => "bigint(21) NOT NULL",
"id_abonnements_offre" => "bigint(21) NOT NULL DEFAULT 0",
"id_auteur" => "bigint(21) NOT NULL DEFAULT 0",
"date_debut" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"date_echeance" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"date_fin" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"statut" => "varchar(20) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP"
"id_auteur" => "bigint(21) NOT NULL DEFAULT 0",
"date_debut" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"date_echeance" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"date_fin" => "datetime NOT NULL DEFAULT '0000-00-00 00:00:00'",
"statut" => "varchar(20) DEFAULT '0' NOT NULL",
"maj" => "TIMESTAMP"
),
'key' => array(
"PRIMARY KEY" => "id_abonnement",
"KEY statut" => "statut",
"PRIMARY KEY" => "id_abonnement",
"KEY statut" => "statut",
"KEY id_abonnements_offre" => "id_abonnements_offre",
"KEY id_auteur" => "id_auteur",
),
'titre' => "'' AS titre, '' AS lang",
'date' => "date_debut",
'champs_editables' => array('id_abonnements_offre', 'id_auteur', 'date_debut', 'date_echeance', 'date_fin'),
'champs_editables' => array('id_abonnements_offre', 'id_auteur', 'date_debut', 'date_echeance', 'date_fin'),
'champs_versionnes' => array('id_abonnements_offre', 'id_auteur', 'date_debut', 'date_echeance', 'date_fin'),
'rechercher_champs' => array(),
'tables_jointures' => array(),
'join' => array('id_auteur' => 'id_auteur'),
'tables_jointures' => array(),
'join' => array('id_auteur' => 'id_auteur'),
'statut_textes_instituer' => array(
'inactif' => 'abonnement:statut_inactif',
'actif' => 'abonnement:statut_actif',
'actif' => 'abonnement:statut_actif',
'poubelle' => 'texte_statut_poubelle',
),
'statut_images' => array(
@ -114,15 +114,15 @@ function abonnements_declarer_tables_objets_sql($tables) {
'actif' => 'puce-publier-8.png',
'poubelle' => 'puce-supprimer-8.png',
),
'statut'=> array(
'statut' => array(
array(
'champ' => 'statut',
'publie' => 'actif',
'previsu' => 'actif,inactif',
'exception' => array('statut','tout')
'champ' => 'statut',
'publie' => 'actif',
'previsu' => 'actif,inactif',
'exception' => array('statut', 'tout')
)
),
'texte_changer_statut' => 'abonnement:texte_changer_statut_abonnement',
'texte_changer_statut' => 'abonnement:texte_changer_statut_abonnement',
);
return $tables;
@ -131,20 +131,21 @@ function abonnements_declarer_tables_objets_sql($tables) {
/*
* Déclaration des tables principales non objet
*/
function abonnements_declarer_tables_principales($tables) {
$tables['spip_abonnements_offres_notifications'] = array(
'field' => array(
'id_abonnements_offres_notification' => 'bigint(21) not null',
'id_abonnements_offre' => 'bigint(21) DEFAULT 0 NOT NULL',
'duree' => 'int(11) NOT NULL DEFAULT 0',
'periode' => 'varchar(25) NOT NULL DEFAULT ""',
'id_abonnements_offre' => 'bigint(21) DEFAULT 0 NOT NULL',
'duree' => 'int(11) NOT NULL DEFAULT 0',
'periode' => 'varchar(25) NOT NULL DEFAULT ""',
),
'key' => array(
'PRIMARY KEY' => 'id_abonnements_offres_notification',
'PRIMARY KEY' => 'id_abonnements_offres_notification',
'KEY id_abonnements_offre' => 'id_abonnements_offre',
),
);
return $tables;
}
@ -155,16 +156,16 @@ function abonnements_declarer_tables_auxiliaires($tables) {
$tables['spip_abonnements_offres_liens'] = array(
'field' => array(
"id_abonnements_offre" => "bigint(21) DEFAULT '0' NOT NULL",
"id_objet" => "bigint(21) DEFAULT '0' NOT NULL",
"objet" => "VARCHAR(25) DEFAULT '' NOT NULL",
"vu" => "VARCHAR(6) DEFAULT 'non' NOT NULL"
"id_objet" => "bigint(21) DEFAULT '0' NOT NULL",
"objet" => "VARCHAR(25) DEFAULT '' NOT NULL",
"vu" => "VARCHAR(6) DEFAULT 'non' NOT NULL"
),
'key' => array(
"PRIMARY KEY" => "id_abonnements_offre,id_objet,objet",
"KEY id_abonnements_offre" => "id_abonnements_offre"
"PRIMARY KEY" => "id_abonnements_offre,id_objet,objet",
"KEY id_abonnements_offre" => "id_abonnements_offre"
)
);
return $tables;
}

@ -0,0 +1,17 @@
#wysiwyg .contenu_prix_ttc{
font-weight: 700;
}
.abonnements_offres .abonnements,
.abonnements_offres .taxe{
text-align: center;
}
.abonnements_offres td.prix{
text-align: right;
width:50px;
}
.liste-objets.abonnements_offres tr > .id {
text-align: right;
width: 20px;
}

@ -1,11 +1,12 @@
<?php
/**
* Plugin Abonnements
* (c) 2012 Les Développements Durables
* Licence GNU/GPL v3
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION'))
return;
include_spip('inc/actions');
include_spip('inc/editer');
@ -13,7 +14,9 @@ include_spip('inc/editer');
/*
* Déclaration des champs du formulaire
*/
function formulaires_editer_abonnements_offre_saisies_dist($id_abonnements_offre='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
function formulaires_editer_abonnements_offre_saisies_dist($id_abonnements_offre = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$taxe_default = lire_config('produits/taxe', 0);
return array(
array(
'saisie' => 'input',
@ -64,8 +67,8 @@ function formulaires_editer_abonnements_offre_saisies_dist($id_abonnements_offre
array(
'saisie' => 'input',
'options' => array(
'nom' => 'prix',
'label' => _T('abonnementsoffre:champ_prix_label'),
'nom' => 'prix_ht',
'label' => _T('abonnementsoffre:champ_prix_ht_label'),
'obligatoire' => 'oui',
'defaut' => 0,
),
@ -76,38 +79,60 @@ function formulaires_editer_abonnements_offre_saisies_dist($id_abonnements_offre
),
),
),
array(
'saisie' => 'input',
'options' => array(
'nom' => 'taxe',
'label' => _T('abonnementsoffre:champ_taxe_label'),
'obligatoire' => 'oui',
'defaut' => $taxe_default,
),
'verifier' => array(
'type' => 'decimal',
'options' => array(
'min' => 0,
'max' => 100
),
),
),
);
}
/**
* Identifier le formulaire en faisant abstraction des parametres qui ne representent pas l'objet edite
*/
function formulaires_editer_abonnements_offre_identifier_dist($id_abonnements_offre='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
function formulaires_editer_abonnements_offre_identifier_dist($id_abonnements_offre = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return serialize(array(intval($id_abonnements_offre)));
}
/**
* Declarer les champs postes et y integrer les valeurs par defaut
*/
function formulaires_editer_abonnements_offre_charger_dist($id_abonnements_offre='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
$valeurs = formulaires_editer_objet_charger('abonnements_offre',$id_abonnements_offre,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
function formulaires_editer_abonnements_offre_charger_dist($id_abonnements_offre = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$valeurs = formulaires_editer_objet_charger('abonnements_offre', $id_abonnements_offre, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
unset($valeurs['id_abonnements_offre']);
if ($valeurs['taxe'] == 0)
$valeurs['taxe'] = '0';
else {
$valeurs['taxe'] = $valeurs['taxe'] * 100;
}
return $valeurs;
}
/**
* Verifier les champs postes et signaler d'eventuelles erreurs
*/
function formulaires_editer_abonnements_offre_verifier_dist($id_abonnements_offre='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
return formulaires_editer_objet_verifier('abonnements_offre',$id_abonnements_offre, array('titre'));
function formulaires_editer_abonnements_offre_verifier_dist($id_abonnements_offre = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
return formulaires_editer_objet_verifier('abonnements_offre', $id_abonnements_offre, array('titre'));
}
/**
* Traiter les champs postes
*/
function formulaires_editer_abonnements_offre_traiter_dist($id_abonnements_offre='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
return formulaires_editer_objet_traiter('abonnements_offre',$id_abonnements_offre,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
function formulaires_editer_abonnements_offre_traiter_dist($id_abonnements_offre = 'new', $retour = '', $lier_trad = 0, $config_fonc = '', $row = array(), $hidden = '') {
$taxe = _request('taxe') / 100;
set_request('taxe', $taxe);
return formulaires_editer_objet_traiter('abonnements_offre', $id_abonnements_offre, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
}
?>

@ -1,12 +1,12 @@
<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<div class="liste-objets liste-objets-lies abonnements_offres_notifications">
<table class="spip liste">
<caption><strong class="caption"><:abonnementsoffre:configurer_notifications:></strong></caption>
@ -37,14 +37,14 @@
</tbody>
</table>
</div>
<ul>
#GENERER_SAISIES{#ENV{_saisies}}
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons">
<span class="image_loading"></span>
<input type="submit" class="submit" value="<:bouton_enregistrer:>" />

@ -1,4 +1,5 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/abonnements/trunk/lang/
if (!defined('_ECRIRE_INC_VERSION')) {
@ -6,10 +7,8 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'ajouter_lien_abonnementsoffre' => 'Ajouter cette offre dabonnement',
// C
'champ_descriptif_label' => 'Descriptif',
'champ_duree_0' => 'Sans limite',
@ -22,11 +21,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'champ_periode_nb_jours' => '@nb@ jour(s)',
'champ_periode_nb_mois' => '@nb@ mois',
'champ_prix_0' => 'Gratuit',
'champ_prix_ht_label' => 'Prix HT',
'champ_prix_label' => 'Prix',
'champ_prix_ttc_label' => 'Prix TTC',
'champ_taxe_label' => 'Tva (%)',
'champ_titre_label' => 'Titre',
'configurer_notifications' => 'Configurer les notifications',
'configurer_notifications_quand' => 'Quand ?',
// I
'icone_creer_abonnementsoffre' => 'Créer une offre dabonnement',
'icone_modifier_abonnementsoffre' => 'Modifier cette offre dabonnement',
@ -34,11 +35,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_abonnementsoffres_auteur' => 'Les offres dabonnement de cet auteur',
'info_aucun_abonnementsoffre' => 'Aucune offre dabonnement',
'info_nb_abonnementsoffres' => '@nb@ offres dabonnement',
// N
'nb_abonnements' => 'Nb. abo.',
// R
'retirer_lien_abonnementsoffre' => 'Retirer cette offre dabonnement',
'retirer_tous_liens_abonnementsoffres' => 'Retirer toutes les offres dabonnement',
// T
'texte_ajouter_abonnementsoffre' => 'Ajouter une offre dabonnement',
'texte_changer_statut_abonnementsoffre' => 'Cette offre dabonnement est :',

@ -1,15 +1,15 @@
<paquet
prefix="abonnements"
categorie="auteur"
version="3.0.13"
schema="2.2.1"
version="3.1.0"
schema="2.2.2"
etat="test"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/abonnements-64.png"
documentation="http://contrib.spip.net/4607"
>
<nom>Abonnements</nom>
<credit lien="http://contrib.spip.net/BoOz,502">BoOz</credit>
<credit lien="http://www.elastick.net">Anne-lise Martenot</credit>
<credit lien="http://www.magraine.net/">Matthieu Marcillaud</credit>
@ -18,12 +18,13 @@
<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
<licence>GNU/GPL v3</licence>
<necessite nom="saisies" compatibilite="[1.28.1;]" />
<necessite nom="verifier" compatibilite="[1.0.0;]" />
<necessite nom="saisies" compatibilite="[1.28.1;]" />
<necessite nom="verifier" compatibilite="[1.0.0;]" />
<necessite nom="yaml" compatibilite="[1.5.0;]" />
<necessite nom="facteur" compatibilite="[3.0.1;]" />
<necessite nom="prix" compatibilite="[0.1.11;]" />
<utilise nom="commandes" compatibilite="[1.6.8;]" />
<!-- Autorisations générales -->
<pipeline nom="autoriser" inclure="abonnements_autorisations.php" />
<!-- Modifications de la base -->
@ -40,7 +41,8 @@
<pipeline nom="affiche_milieu" inclure="abonnements_pipelines.php" />
<!-- Pipelines ajoutés par ce plugin -->
<pipeline nom="abonnement_initialisation_dates" action="" />
<pipeline nom="header_prive" inclure="abonnements_pipelines.php" />
<menu nom="abonnements_offres" titre="abonnementsoffre:titre_abonnementsoffres" parent="menu_publication" icone="images/abonnement-16.png" action="abonnements_offres" />
<menu nom="abonnements" titre="abonnement:titre_abonnements_suivre" parent="menu_activite" icone="images/abonnement-16.png" action="abonnements" />
<menu nom="abonnements_offres" titre="abonnementsoffre:titre_abonnementsoffres" parent="menu_publication" icone="images/abonnement-16.png" action="abonnements_offres" />
<menu nom="abonnements" titre="abonnement:titre_abonnements_suivre" parent="menu_activite" icone="images/abonnement-16.png" action="abonnements" />
</paquet>

@ -15,9 +15,26 @@
<span dir='#LANG_DIR' class='#EDIT{duree} duree'>[(#DUREE|=={0}|?{<:abonnementsoffre:champ_duree_0:>,#VAL{abonnementsoffre:champ_periode_nb_}|concat{#PERIODE}|_T{#ARRAY{nb,#DUREE}}})]</span>
</div>
[(#TAXE|floatval|>{0}|oui)
<div class="champ contenu_prix">
<label><:abonnementsoffre:champ_prix_label:> : </label>
<span dir='#LANG_DIR' class='#EDIT{prix} prix'>[(#PRIX*|=={0}|?{<:abonnementsoffre:champ_prix_0:>,#PRIX})]</span>
<label><:abonnementsoffre:champ_prix_ht_label:> : </label>
<span dir='#LANG_DIR' class='#EDIT{prix_ht} prix'>[(#PRIX_HT*|=={0}|?{<:abonnementsoffre:champ_prix_0:>,#PRIX_HT})]</span>
</div>
<div class="champ contenu_prix_ttc">
<label><:abonnementsoffre:champ_prix_ttc_label:> : </label>
<span dir='#LANG_DIR' class='prix'>[(#PRIX*|appliquer_filtre{prix_formater,true})]</span>
</div>
#SET{taxe,#TAXE|floatval|>{0}|?{#TAXE,#CONFIG{produits/taxe,0}}}
<div class="champ contenu_taxe[ (#GET{taxe}|strlen|?{'',vide})]">
<label><:abonnementsoffre:champ_taxe_label:> : </label>
<span dir='#LANG_DIR' class='#EDIT{taxe} taxe'>[(#GET{taxe}|mult{100})&nbsp;&#37;]</span>
</div>
][(#TAXE|floatval|>{0}|non)
<div class="champ contenu_prix_ttc">
<label><:abonnementsoffre:champ_prix_label:> : </label>
<span dir='#LANG_DIR' class='prix'>[(#PRIX*|appliquer_filtre{prix_formater,true})]</span>
</div>
]
</BOUCLE_abonnements_offre>

@ -1,6 +1,6 @@
[(#SET{defaut_tri,#ARRAY{
num titre,1,
titre,1,
titre,1,
id_abonnements_offre,1,
points,-1
}})]<B_liste_abonnements_offres>
@ -10,11 +10,13 @@
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{abonnementsoffre:info_1_abonnementsoffre,abonnementsoffre:info_nb_abonnementsoffres}})</strong></caption>]
<thead>
<tr class='first_row'>
<th class="statut" scope="col'">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
<th class="statut" scope="col'">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
<th class="titre" scope="col'">[(#TRI{titre,<:abonnementsoffre:champ_titre_label:>,ajax})]</th>
<th class="duree" scope="col'">[(#TRI{periode,<:abonnementsoffre:champ_duree_label:>,ajax})]</th>
<th class="prix">[(#TRI{prix,<:abonnementsoffre:champ_prix_label:>,ajax})]</th>
<th class="abonnements"><:abonnement:titre_abonnements:></th>
<th class="prix">[(#TRI{prix_ht,<:abonnementsoffre:champ_prix_ht_label:>,ajax})]</th>
<th class="taxe">[(#TRI{taxe,<:abonnementsoffre:champ_taxe_label:>,ajax})]</th>
<th class="prix">[(#TRI{taxe,<:abonnementsoffre:champ_prix_ttc_label:>,ajax})]</th>
<th class="abonnements"><:abonnementsoffre:nb_abonnements:></th>
<th class="id" scope="col'">[(#TRI{id_abonnements_offre,<:info_numero_abbreviation:>,ajax})]</th>
</tr>
</thead>
@ -28,12 +30,14 @@
{pagination #ENV{nb,10}}
>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
<td class="statut">[(#STATUT|puce_statut{abonnements_offre,#ID_ABONNEMENTS_OFFRE})]</td>
<td class="statut">[(#STATUT|puce_statut{abonnements_offre,#ID_ABONNEMENTS_OFFRE})]</td>
<td class="titre principale">[(#LOGO_ABONNEMENTS_OFFRE|image_reduire{20,26})]<a href="[(#ID_ABONNEMENTS_OFFRE|generer_url_entite{abonnements_offre})]" title="<:info_numero_abbreviation|attribut_html:> #ID_ABONNEMENTS_OFFRE">[(#RANG). ]#TITRE</a></td>
<td class="duree secondaire">[(#DUREE|=={0}|?{<:abonnementsoffre:champ_duree_0:>,#VAL{abonnementsoffre:champ_periode_nb_}|concat{#PERIODE}|_T{#ARRAY{nb,#DUREE}}})]</td>
<td class="prix">[(#PRIX*|=={0}|?{<:abonnementsoffre:champ_prix_0:>,#PRIX})]</td>
<td class="prix">[(#PRIX_HT*|=={0}|?{<:abonnementsoffre:champ_prix_0:>,#PRIX_HT})]</td>
<td class="taxe">[(#TAXE*|=={0}|?{'-',[(#TAXE*|mult{100})&nbsp;&#37;]})]</td>
<td class="prix">[(#PRIX*|appliquer_filtre{prix_formater,true})]</td>
<td class="abonnements"><BOUCLE_abonnements(ABONNEMENTS){id_abonnements_offre}/>#TOTAL_BOUCLE<//B_abonnements></td>
<td class="id">[(#AUTORISER{modifier,abonnements_offre,#ID_ABONNEMENTS_OFFRE}|?{
<td class="id">[(#AUTORISER{modifier,abonnements_offre,#ID_ABONNEMENTS_OFFRE}|?{
<a href="[(#URL_ECRIRE{abonnements_offre_edit,id_abonnements_offre=#ID_ABONNEMENTS_OFFRE})]">#ID_ABONNEMENTS_OFFRE</a>,
#ID_ABONNEMENTS_OFFRE
})]</td>

@ -0,0 +1,26 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION'))
return;
function prix_abonnements_offre_dist($id_objet, $prix_ht) {
$prix = $prix_ht;
// S'il y a une taxe de définie explicitement dans le produit, on applique en priorité
if (($id_produit = intval($id_objet)) > 0
and include_spip('base/abstract_sql')
and ( $taxe = sql_getfetsel('taxe', 'spip_abonnements_offres', 'id_abonnements_offre = ' . $id_produit)) !== null
) {
$prix += $prix * $taxe;
}
// Sinon on applique la taxe par défaut
else {
include_spip('inc/config');
$prix += $prix * lire_config('produits/taxe', 0);
}
return $prix;
}
?>
Loading…
Cancel
Save