Accrobranche : en fait on déplace le plugin Abonnements nouvelle génération dans un dossier du même nom que son préfixe, qui n'est plus le même que l'ancienne version. Tout ça n'est en effet pas compatible même si c'est inspiré et à la suite de ce qui existait avant. Le préfixe et le dossier du nouveau suive un nommage plus habituel, avec le nom au pluriel, et les fonctionnalités ne sont pas du tout implémentée pareille, pas la même architecture, etc.
commit
b6cc82c746
@ -0,0 +1,71 @@
|
||||
* text=auto !eol
|
||||
/abonnements_administrations.php -text
|
||||
/abonnements_autorisations.php -text
|
||||
/abonnements_pipelines.php -text
|
||||
action/modifier_echeance_abonnement.php -text
|
||||
action/renouveler_abonnement.php -text
|
||||
base/abonnements.php -text
|
||||
formulaires/editer_abonnement.html -text
|
||||
formulaires/editer_abonnement.php -text
|
||||
formulaires/editer_abonnements_offre.html -text
|
||||
formulaires/editer_abonnements_offre.php -text
|
||||
formulaires/editer_abonnements_offre_notifications.html -text
|
||||
formulaires/editer_abonnements_offre_notifications.php -text
|
||||
genie/abonnements_verifier_desactivation.php -text
|
||||
genie/abonnements_verifier_notifications.php -text
|
||||
inc/abonnements.php -text
|
||||
lang/abonnement_fr.php -text
|
||||
lang/abonnementsoffre_fr.php -text
|
||||
lang/paquet-abonnements_fr.php -text
|
||||
notifications/abonnement_echeance.html -text
|
||||
/paquet.xml -text
|
||||
prive/objets/contenu/abonnement.html -text
|
||||
prive/objets/contenu/abonnements_offre-enfants.html -text
|
||||
prive/objets/contenu/abonnements_offre.html -text
|
||||
prive/objets/liste/abonnements.html -text
|
||||
prive/objets/liste/abonnements_offres.html -text
|
||||
prive/squelettes/contenu/abonnement.html -text
|
||||
prive/squelettes/contenu/abonnement_edit.html -text
|
||||
prive/squelettes/contenu/abonnements.html -text
|
||||
prive/squelettes/hierarchie/abonnement.html -text
|
||||
prive/squelettes/hierarchie/abonnement_edit.html -text
|
||||
prive/squelettes/inclure/abonnements_auteur.html -text
|
||||
prive/squelettes/navigation/inc-abonnements_notifications.html -text
|
||||
prive/themes/spip/images/abonnement-16.png -text
|
||||
prive/themes/spip/images/abonnement-24.png -text
|
||||
prive/themes/spip/images/abonnement-32.png -text
|
||||
prive/themes/spip/images/abonnement-add-16.png -text
|
||||
prive/themes/spip/images/abonnement-add-24.png -text
|
||||
prive/themes/spip/images/abonnement-add-32.png -text
|
||||
prive/themes/spip/images/abonnement-del-16.png -text
|
||||
prive/themes/spip/images/abonnement-del-24.png -text
|
||||
prive/themes/spip/images/abonnement-del-32.png -text
|
||||
prive/themes/spip/images/abonnement-edit-16.png -text
|
||||
prive/themes/spip/images/abonnement-edit-24.png -text
|
||||
prive/themes/spip/images/abonnement-edit-32.png -text
|
||||
prive/themes/spip/images/abonnement-new-16.png -text
|
||||
prive/themes/spip/images/abonnement-new-24.png -text
|
||||
prive/themes/spip/images/abonnement-new-32.png -text
|
||||
prive/themes/spip/images/abonnements-128.png -text
|
||||
prive/themes/spip/images/abonnements-32.png -text
|
||||
prive/themes/spip/images/abonnements-64.png -text
|
||||
prive/themes/spip/images/abonnements_offre-16.png -text
|
||||
prive/themes/spip/images/abonnements_offre-24.png -text
|
||||
prive/themes/spip/images/abonnements_offre-32.png -text
|
||||
prive/themes/spip/images/abonnements_offre-add-16.png -text
|
||||
prive/themes/spip/images/abonnements_offre-add-24.png -text
|
||||
prive/themes/spip/images/abonnements_offre-add-32.png -text
|
||||
prive/themes/spip/images/abonnements_offre-del-16.png -text
|
||||
prive/themes/spip/images/abonnements_offre-del-24.png -text
|
||||
prive/themes/spip/images/abonnements_offre-del-32.png -text
|
||||
prive/themes/spip/images/abonnements_offre-edit-16.png -text
|
||||
prive/themes/spip/images/abonnements_offre-edit-24.png -text
|
||||
prive/themes/spip/images/abonnements_offre-edit-32.png -text
|
||||
prive/themes/spip/images/abonnements_offre-new-16.png -text
|
||||
prive/themes/spip/images/abonnements_offre-new-24.png -text
|
||||
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
|
||||
saisies-vues/abonnements_offres.html -text
|
||||
saisies/abonnements_offres.html -text
|
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
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'))
|
||||
);
|
||||
|
||||
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");
|
||||
sql_drop_table("spip_abonnements_offres_liens");
|
||||
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')));
|
||||
|
||||
effacer_meta($nom_meta_base_version);
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,75 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
// declaration vide pour ce pipeline.
|
||||
function abonnements_autoriser(){}
|
||||
|
||||
|
||||
// -----------------
|
||||
// Objet abonnements_offres
|
||||
|
||||
|
||||
// bouton de menu
|
||||
function autoriser_abonnementsoffres_menu_dist($faire, $type, $id, $qui, $opts){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// creer
|
||||
function autoriser_abonnementsoffre_creer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
// voir les fiches completes
|
||||
function autoriser_abonnementsoffre_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// modifier
|
||||
function autoriser_abonnementsoffre_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
// supprimer
|
||||
function autoriser_abonnementsoffre_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
|
||||
// associer (lier / delier)
|
||||
function autoriser_associerabonnementsoffres_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
// -----------------
|
||||
// Objet abonnements
|
||||
|
||||
|
||||
|
||||
|
||||
// creer
|
||||
function autoriser_abonnement_creer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
// voir les fiches completes
|
||||
function autoriser_abonnement_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// modifier
|
||||
function autoriser_abonnement_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
// supprimer
|
||||
function autoriser_abonnement_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['statut'] == '0minirezo' AND !$qui['restreint'];
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,139 @@
|
||||
<?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') {
|
||||
$abonnement = sql_fetsel('*', 'spip_abonnements', 'id_abonnement = '.$flux['args']['id_objet']);
|
||||
$offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre = '.$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));
|
||||
}
|
||||
|
||||
// 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';
|
||||
}
|
||||
|
||||
// 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']);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* Action de modif de l'échéance d'un abonnement
|
||||
* @param unknown_type $arg
|
||||
* @return unknown_type
|
||||
*/
|
||||
function action_modifier_echeance_abonnement_dist($arg=null) {
|
||||
if (is_null($arg)){
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
}
|
||||
|
||||
list($id_abonnement, $duree, $periode) = explode('/', $arg);
|
||||
|
||||
// Si on a bien un abonnement et qu'on a le droit de le modifier et qu'on a une durée != 0
|
||||
if (
|
||||
$duree = intval($duree)
|
||||
and $id_abonnement = intval($id_abonnement)
|
||||
and autoriser('modifier', 'abonnement', $id_abonnement)
|
||||
and $abonnement = sql_fetsel('date_debut, date_fin', 'spip_abonnements', 'id_abonnement = '.$id_abonnement)
|
||||
) {
|
||||
$date_depart = $abonnement['date_fin'];
|
||||
if ($date_depart == '0000-00-00 00:00:00'){
|
||||
$date_depart = $abonnement['date_debut'];
|
||||
}
|
||||
|
||||
// De combien doit-on modifier la date
|
||||
switch ($periode){
|
||||
case 'heures':
|
||||
$ajout = " ${duree} hours";
|
||||
break;
|
||||
case 'jours':
|
||||
$ajout = " ${duree} days";
|
||||
break;
|
||||
case 'mois':
|
||||
$ajout = " ${duree} months";
|
||||
break;
|
||||
default:
|
||||
$ajout ='';
|
||||
break;
|
||||
}
|
||||
|
||||
// Si la période existe
|
||||
if ($ajout){
|
||||
// Si la durée est positive, on ajoute un + devant (le - est déjà là pour les négatives)
|
||||
if ($duree > 0){
|
||||
$ajout = ' +'.$ajout;
|
||||
}
|
||||
|
||||
// Calcul de la date de fin
|
||||
$nouvelle_echeance = date('Y-m-d H:i:s', strtotime($date_depart.$ajout));
|
||||
|
||||
// On lance la modification
|
||||
include_spip('action/editer_objet');
|
||||
$erreur = objet_modifier('abonnement', $id_abonnement, array('date_fin' => $nouvelle_echeance));
|
||||
|
||||
return array($id_abonnement, $erreur);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* Action de renouveler un abonnement
|
||||
* @param int $arg
|
||||
* @return unknown_type
|
||||
*/
|
||||
function action_renouveler_abonnement_dist($arg=null) {
|
||||
if (is_null($arg)){
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
}
|
||||
|
||||
// Si on a bien un abonnement et qu'on a le droit de le modifier
|
||||
if (
|
||||
$id_abonnement = intval($arg)
|
||||
and autoriser('modifier', 'abonnement', $id_abonnement)
|
||||
and $abonnement = sql_fetsel('id_abonnements_offre, date_debut, date_fin', 'spip_abonnements', 'id_abonnement = '.$id_abonnement)
|
||||
) {
|
||||
|
||||
$offre = sql_fetsel('duree, periode', 'spip_abonnements_offres', 'id_abonnements_offre = '.$abonnement['id_abonnements_offre']);
|
||||
|
||||
// Si l'offre parente A BIEN une durée
|
||||
if (($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 = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$date_depart = $abonnement['date_fin'];
|
||||
if ($date_depart == '0000-00-00 00:00:00'){
|
||||
$date_depart = $abonnement['date_debut'];
|
||||
}
|
||||
|
||||
// Si la période existe
|
||||
if (isset($ajout)){
|
||||
|
||||
// Calcul de la date de fin
|
||||
$nouvelle_echeance = date('Y-m-d H:i:s', strtotime($date_depart.$ajout));
|
||||
|
||||
// On lance la modification
|
||||
include_spip('action/editer_objet');
|
||||
$erreur = objet_modifier('abonnement', $id_abonnement, array('date_fin' => $nouvelle_echeance, 'statut' => 'actif'));
|
||||
|
||||
return array($id_abonnement, $erreur);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,169 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
|
||||
/**
|
||||
* Déclaration des alias de tables et filtres automatiques de champs
|
||||
*/
|
||||
function abonnements_declarer_tables_interfaces($interfaces) {
|
||||
$interfaces['table_des_tables']['abonnements_offres'] = 'abonnements_offres';
|
||||
$interfaces['table_des_tables']['abonnements'] = 'abonnements';
|
||||
$interfaces['table_des_tables']['abonnements_offres_notifications'] = 'abonnements_offres_notifications';
|
||||
|
||||
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(
|
||||
"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"
|
||||
),
|
||||
'key' => array(
|
||||
"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'),
|
||||
'rechercher_champs' => array("titre" => 10, "descriptif" => 5),
|
||||
'tables_jointures' => array('spip_abonnements_offres_liens'),
|
||||
'statut_textes_instituer' => array(
|
||||
'prepa' => 'texte_statut_en_cours_redaction',
|
||||
'publie' => 'texte_statut_publie',
|
||||
'poubelle' => 'texte_statut_poubelle',
|
||||
),
|
||||
'statut'=> array(
|
||||
array(
|
||||
'champ' => 'statut',
|
||||
'publie' => 'publie',
|
||||
'previsu' => 'publie,prepa',
|
||||
'exception' => array('statut','tout')
|
||||
)
|
||||
),
|
||||
'texte_modifier' => 'abonnementsoffre:icone_modifier_abonnementsoffre',
|
||||
'texte_creer' => 'abonnementsoffre:icone_creer_abonnementsoffre',
|
||||
'texte_creer_associer' => 'abonnementsoffre:texte_creer_associer_abonnementsoffre',
|
||||
'texte_ajouter' => 'abonnementsoffre:texte_ajouter_abonnementsoffre',
|
||||
'texte_objets' => 'abonnementsoffre:titre_abonnementsoffres',
|
||||
'texte_objet' => 'abonnementsoffre:titre_abonnementsoffre',
|
||||
'texte_logo_objet' => 'abonnementsoffre:titre_logo_abonnementsoffre',
|
||||
'texte_langue_objet' => 'abonnementsoffre:titre_langue_abonnementsoffre',
|
||||
'info_aucun_objet' => 'abonnementsoffre:info_aucun_abonnementsoffre',
|
||||
'info_1_objet' => 'abonnementsoffre:info_1_abonnementsoffre',
|
||||
'info_nb_objets' => 'abonnementsoffre:info_nb_abonnementsoffres',
|
||||
'texte_changer_statut' => 'abonnementsoffre:texte_changer_statut_abonnementsoffre',
|
||||
);
|
||||
|
||||
$tables['spip_abonnements'] = array(
|
||||
'type' => 'abonnement',
|
||||
'principale' => "oui",
|
||||
# 'url_voir' => false,
|
||||
# 'url_edit' => false,
|
||||
'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_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",
|
||||
"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_fin'),
|
||||
'champs_versionnes' => array('id_abonnements_offre', 'id_auteur', 'date_debut', 'date_fin'),
|
||||
'rechercher_champs' => array(),
|
||||
'tables_jointures' => array(),
|
||||
'statut_textes_instituer' => array(
|
||||
'actif' => 'abonnement:statut_actif',
|
||||
'inactif' => 'abonnement:statut_inactif',
|
||||
'poubelle' => 'texte_statut_poubelle',
|
||||
),
|
||||
'statut_images' => array(
|
||||
'prepa' => 'puce-preparer-8.png',
|
||||
'actif' => 'puce-publier-8.png',
|
||||
'inactif' => 'puce-refuser-8.png',
|
||||
'poubelle' => 'puce-supprimer-8.png',
|
||||
),
|
||||
'statut'=> array(
|
||||
array(
|
||||
'champ' => 'statut',
|
||||
'publie' => 'actif',
|
||||
'previsu' => 'actif,inactif',
|
||||
'exception' => array('statut','tout')
|
||||
)
|
||||
),
|
||||
'texte_changer_statut' => 'abonnement:texte_changer_statut_abonnement',
|
||||
);
|
||||
|
||||
return $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 ""',
|
||||
),
|
||||
'key' => array(
|
||||
'PRIMARY KEY' => 'id_abonnements_offres_notification',
|
||||
'KEY id_abonnements_offre' => 'id_abonnements_offre',
|
||||
),
|
||||
);
|
||||
|
||||
return $tables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Déclaration des tables secondaires (liaisons)
|
||||
*/
|
||||
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"
|
||||
),
|
||||
'key' => array(
|
||||
"PRIMARY KEY" => "id_abonnements_offre,id_objet,objet",
|
||||
"KEY id_abonnements_offre" => "id_abonnements_offre"
|
||||
)
|
||||
);
|
||||
|
||||
return $tables;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,192 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
include_spip('inc/actions');
|
||||
include_spip('inc/editer');
|
||||
|
||||
/*
|
||||
* Déclaration des champs du formulaire
|
||||
*/
|
||||
function formulaires_editer_abonnement_saisies_dist($id_abonnement='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
|
||||
$id_abonnement = intval($id_abonnement);
|
||||
|
||||
// Si c'est une demande de création et qu'on trouve une offre, on ne doit donner que l'utilisateur et l'abonnement est défini caché
|
||||
if ($id_abonnement == 0 and $id_abonnements_offre = _request('id_abonnements_offre')) {
|
||||
$saisies = array(
|
||||
array(
|
||||
'saisie' => 'hidden',
|
||||
'options' => array(
|
||||
'nom' => 'id_abonnements_offre',
|
||||
'defaut' => $id_abonnements_offre,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'auteurs',
|
||||
'options' => array(
|
||||
'nom' => 'id_auteur',
|
||||
'label' => _T('abonnement:champ_id_auteur_label'),
|
||||
'obligatoire' => 'oui',
|
||||
'cacher_option_intro' => 'oui',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
// Sinon si c'est une demande de création et qu'on trouve un auteur, on ne doit donner que les offres et l'utilisateur est défini caché
|
||||
elseif ($id_abonnement == 0 and $id_auteur = _request('id_auteur')) {
|
||||
$saisies = array(
|
||||
array(
|
||||
'saisie' => 'hidden',
|
||||
'options' => array(
|
||||
'nom' => 'id_auteur',
|
||||
'defaut' => $id_auteur,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'abonnements_offres',
|
||||
'options' => array(
|
||||
'nom' => 'id_abonnements_offre',
|
||||
'label' => _T('abonnement:champ_id_abonnements_offre_label'),
|
||||
'obligatoire' => 'oui',
|
||||
'cacher_option_intro' => 'oui',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
// 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
|
||||
elseif ($id_abonnement > 0) {
|
||||
$saisies = array(
|
||||
array(
|
||||
'saisie' => 'date',
|
||||
'options' => array(
|
||||
'nom' => 'date_debut',
|
||||
'label' => _T('abonnement:champ_date_debut_label'),
|
||||
'horaire' => 'on',
|
||||
'heure_pas' => 5,
|
||||
),
|
||||
'verifier' => array(
|
||||
'type' => 'date',
|
||||
'options' => array(
|
||||
'normaliser' => 'datetime',
|
||||
),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'date',
|
||||
'options' => array(
|
||||
'nom' => 'date_fin',
|
||||
'label' => _T('abonnement:champ_date_fin_label'),
|
||||
'horaire' => 'on',
|
||||
'heure_pas' => 5,
|
||||
),
|
||||
'verifier' => array(
|
||||
'type' => 'date',
|
||||
'options' => array(
|
||||
'normaliser' => 'datetime',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
# $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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Identifier le formulaire en faisant abstraction des parametres qui ne representent pas l'objet edite
|
||||
*/
|
||||
function formulaires_editer_abonnement_identifier_dist($id_abonnement='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
|
||||
return serialize(array(intval($id_abonnement)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Declarer les champs postes et y integrer les valeurs par defaut
|
||||
*/
|
||||
function formulaires_editer_abonnement_charger_dist($id_abonnement='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
|
||||
$valeurs = formulaires_editer_objet_charger('abonnement',$id_abonnement,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
|
||||
unset($valeurs['id_abonnement']);
|
||||
return $valeurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifier les champs postes et signaler d'eventuelles erreurs
|
||||
*/
|
||||
function formulaires_editer_abonnement_verifier_dist($id_abonnement='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
|
||||
$erreurs = array();//formulaires_editer_objet_verifier('abonnement',$id_abonnement);
|
||||
|
||||
// Pour une création on vérifie l'offre
|
||||
if (
|
||||
!intval($id_abonnement)
|
||||
and (
|
||||
!$id_abonnements_offre = _request('id_abonnements_offre')
|
||||
or !sql_getfetsel('id_abonnements_offre', 'spip_abonnements_offres', 'id_abonnements_offre = '.intval($id_abonnements_offre))
|
||||
)
|
||||
) {
|
||||
$erreurs['message_erreur'] = _T('abonnement:erreur_id_abonnements_offre');
|
||||
}
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Traiter les champs postes
|
||||
*/
|
||||
function formulaires_editer_abonnement_traiter_dist($id_abonnement='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
|
||||
# // Si c'est pour une modif on appelle l'allongement
|
||||
# if (intval($id_abonnement) > 0) {
|
||||
# // On récupère les champs qui ne font pas partie de la table
|
||||
# $duree = _request('duree');
|
||||
# $periode = _request('periode');
|
||||
# // On appelle l'action de modif d'échéance
|
||||
# $modifier_echeance = charger_fonction('modifier_echeance_abonnement', 'action/');
|
||||
# $modifier_echeance("$id_abonnement/$duree/$periode");
|
||||
# }
|
||||
|
||||
$retours = formulaires_editer_objet_traiter('abonnement',$id_abonnement,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
|
||||
|
||||
return $retours;
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,113 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
include_spip('inc/actions');
|
||||
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=''){
|
||||
return array(
|
||||
array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'titre',
|
||||
'label' => _T('abonnementsoffre:champ_titre_label'),
|
||||
'obligatoire' => 'oui',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'textarea',
|
||||
'options' => array(
|
||||
'nom' => 'descriptif',
|
||||
'label' => _T('abonnementsoffre:champ_descriptif_label'),
|
||||
'rows' => 10,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'duree',
|
||||
'label' => _T('abonnementsoffre:champ_duree_label'),
|
||||
'obligatoire' => 'oui',
|
||||
'defaut' => 0,
|
||||
),
|
||||
'verifier' => array(
|
||||
'type' => 'entier',
|
||||
'options' => array(
|
||||
'min' => 0,
|
||||
),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'selection',
|
||||
'options' => array(
|
||||
'nom' => 'periode',
|
||||
'label' => _T('abonnementsoffre:champ_periode_label'),
|
||||
'obligatoire' => 'oui',
|
||||
'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'),
|
||||
),
|
||||
'defaut' => 'mois',
|
||||
),
|
||||
),
|
||||
array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'prix',
|
||||
'label' => _T('abonnementsoffre:champ_prix_label'),
|
||||
'obligatoire' => 'oui',
|
||||
'defaut' => 0,
|
||||
),
|
||||
'verifier' => array(
|
||||
'type' => 'decimal',
|
||||
'options' => array(
|
||||
'min' => 0,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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=''){
|
||||
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);
|
||||
unset($valeurs['id_abonnements_offre']);
|
||||
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'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
||||
?>
|
@ -0,0 +1,53 @@
|
||||
<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
|
||||
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>
|
||||
<thead>
|
||||
<tr class="first_row">
|
||||
<th class="duree principale" scope="col'"><:abonnementsoffre:configurer_notifications_quand:></th>
|
||||
<th class="supprimer" scope="col'"><:lien_supprimer|ucfirst:></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<BOUCLE_notifications(ABONNEMENTS_OFFRES_NOTIFICATIONS){id_abonnements_offre}{!par periode}{!par duree}>
|
||||
<tr>
|
||||
<td class="duree principale">
|
||||
[(#VAL{abonnementsoffre:champ_periode_nb_}|concat{#PERIODE}|_T{#ARRAY{nb,#DUREE}})]
|
||||
</td>
|
||||
<td class="supprimer">
|
||||
<button class="button link delete" name="supprimer[#ID_ABONNEMENTS_OFFRES_NOTIFICATION]" value="X">
|
||||
<img src="#CHEMIN_IMAGE{supprimer-12.png}" width="12" height="12" alt="X" />
|
||||
<:lien_supprimer|ucfirst:>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</BOUCLE_notifications>
|
||||
<tr>
|
||||
<td colspan="2">Aucune notification</td>
|
||||
</tr>
|
||||
<//B_notifications>
|
||||
</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:>" />
|
||||
</p>
|
||||
</div></form>
|
||||
</div>
|
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
function formulaires_editer_abonnements_offre_notifications_saisies_dist($id_abonnements_offre, $retour=''){
|
||||
return array(
|
||||
array(
|
||||
'saisie' => 'input',
|
||||
'options' => array(
|
||||
'nom' => 'duree',
|
||||
'label' => _T('abonnementsoffre:champ_duree_label'),
|
||||
'defaut' => '',
|
||||
),
|
||||
'verifier' => array(
|
||||
'type' => 'entier',
|
||||
'options' => array(
|
||||
'min' => 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
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'),
|
||||
),
|
||||
'defaut' => 'mois',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
function formulaires_editer_abonnements_offre_notifications_charger_dist($id_abonnements_offre, $retour=''){
|
||||
if (!$id_abonnements_offre or !autoriser('configurer')){
|
||||
return false;
|
||||
}
|
||||
|
||||
$contexte = array(
|
||||
'supprimer' => array(),
|
||||
'id_abonnements_offre' => $id_abonnements_offre,
|
||||
'_hidden' => '<input type="hidden" name="id_abonnements_offre" value="'.$id_abonnements_offre.'" />',
|
||||
);
|
||||
return $contexte;
|
||||
}
|
||||
|
||||
function formulaires_editer_abonnements_offre_notifications_verifier_dist($id_abonnements_offre, $retour=''){
|
||||
$erreurs = array();
|
||||
|
||||
if (!$supprimer = _request('supprimer')){
|
||||
if (!_request('duree')){
|
||||
$erreurs['duree'] = _T('info_obligatoire');
|
||||
}
|
||||
}
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
function formulaires_editer_abonnements_offre_notifications_traiter_dist($id_abonnements_offre, $retour=''){
|
||||
// Si on demande à enregistrer une nouvelle notif
|
||||
if (!$supprimer = _request('supprimer')){
|
||||
include_spip('inc/editer');
|
||||
$retours = formulaires_editer_objet_traiter('abonnements_offres_notification','new','','',$retour,'','','');
|
||||
}
|
||||
// Sinon c'est pour en supprimer
|
||||
elseif (is_array($supprimer)){
|
||||
foreach ($supprimer as $id_notification=>$valeur){
|
||||
if ($id_notification = intval($id_notification)){
|
||||
sql_delete('spip_abonnements_offres_notifications', 'id_abonnements_offres_notification = '.$id_notification);
|
||||
$retours = array('redirect' => $retour);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $retours;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/*
|
||||
* Vérifie si les abonnements actifs ont bien une tâche précise de désactivation
|
||||
*/
|
||||
function genie_abonnements_verifier_desactivation_dist($time){
|
||||
include_spip('base/abstract_sql');
|
||||
$jourdhui = date('Y-m-d H:I:s');
|
||||
|
||||
// On va chercher tous les abonnements actifs + ayant une date de fin future + sans job lié
|
||||
if ($a_changer = sql_allfetsel(
|
||||
'id_abonnement, date_fin',
|
||||
'spip_abonnements as a left join spip_jobs_liens as l on l.objet="abonnement" and l.id_objet=a.id_abonnement left join spip_jobs as j on j.fonction="abonnements_desactiver" and j.id_job=l.id_job',
|
||||
array(
|
||||
'a.statut = "actif"',
|
||||
'a.date_fin > '.sql_quote($jourdhui),
|
||||
'l.id_job is null',
|
||||
)
|
||||
) and is_array($a_changer)) {
|
||||
include_spip('inc/abonnements');
|
||||
foreach ($a_changer as $abonnement){
|
||||
abonnements_programmer_desactivation($abonnement['id_abonnement'], $abonnement['date_fin']);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/*
|
||||
* Vérifie si aujourd'hui on a des notifications à envoyer à certains abonnés
|
||||
*/
|
||||
function genie_abonnements_verifier_notifications_dist($time){
|
||||
include_spip('base/abstract_sql');
|
||||
$jourdhui = date('Y-m-d H:I:s');
|
||||
|
||||
// On va chercher toutes les notifications
|
||||
if (
|
||||
$notifications = sql_allfetsel('*', 'spip_abonnements_offres_notifications')
|
||||
and is_array($notifications)
|
||||
){
|
||||
// Pour chaque notification on va chercher les abonnés dont c'est le moment
|
||||
foreach ($notifications as $notification){
|
||||
// De combien doit-on modifier la date
|
||||
switch ($notification['periode']){
|
||||
case 'jours':
|
||||
$ajout = " + ${notification['duree']} days";
|
||||
break;
|
||||
case 'mois':
|
||||
$ajout = " + ${notification['duree']} months";
|
||||
break;
|
||||
default:
|
||||
$ajout ='';
|
||||
break;
|
||||
}
|
||||
|
||||
// S'il y a de quoi ajouter, alors on va calculer l'échéance à chercher
|
||||
if ($ajout){
|
||||
$echeance = date('Y-m-d', strtotime($jourdhui.$ajout));
|
||||
}
|
||||
|
||||
// Pour cette notification on cherche donc tous les abonnés ayant cet échéance avec la même offre
|
||||
if ($a_notifier = sql_allfetsel(
|
||||
'id_abonnement, nom, email',
|
||||
'spip_abonnements as a left join spip_auteurs as u on a.id_auteur=u.id_auteur',
|
||||
array(
|
||||
'DATE_FORMAT(date_fin, "%Y-%m-%d") = '.sql_quote($echeance),
|
||||
'id_abonnements_offre = '.intval($notification['id_abonnements_offre']),
|
||||
'email is not null'
|
||||
)
|
||||
)){
|
||||
// Pour chacun on programme un envoi de mail
|
||||
foreach ($a_notifier as $abonne){
|
||||
$id_job = job_queue_add(
|
||||
'abonnements_notifier_echeance',
|
||||
"Notifier ${abonne['nom']} ${notification['duree']} ${notification['periode']} avant la fin de son abonnement ${abonne['id_abonnement']}",
|
||||
array($abonne['id_abonnement'], $abonne['nom'], $abonne['email'], $notification['duree'], $notification['periode']),
|
||||
'inc/abonnements',
|
||||
true
|
||||
);
|
||||
job_queue_link($id_job, array('objet'=>'abonnement', 'id_objet'=>$abonne['id_abonnement']));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,88 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Abonnements
|
||||
* (c) 2012 Les Développements Durables
|
||||
* Licence GNU/GPL v3
|
||||
*/
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/*
|
||||
* Programmer la désactivation d'un abonnement lors de sa date de fin
|
||||
*
|
||||
* @param int $id_abonnement
|
||||
* L'identifiant de l'abonnement
|
||||
* @param datetime $date_fin
|
||||
* Optionnellement la date de fin si on la connait déjà, ce qui évite une requête
|
||||
*/
|
||||
function abonnements_programmer_desactivation($id_abonnement, $date_fin=null){
|
||||
include_spip('action/editer_liens');
|
||||
$id_abonnement = intval($id_abonnement);
|
||||
|
||||
// Si on a pas de date, on va chercher
|
||||
if (!$date_fin){
|
||||
$date_fin = sql_getfetsel('date_fin', 'spip_abonnements', 'id_abonnement = '.$id_abonnement);
|
||||
}
|
||||
|
||||
// Dans tous les cas on cherche s'il y des tâches liées à cet abonnement
|
||||
$liens = objet_trouver_liens(array('job' => '*'), array('abonnement' => $id_abonnement));
|
||||
if ($liens and is_array($liens)){
|
||||
// Et on les supprime toutes !
|
||||
foreach ($liens as $lien){
|
||||
job_queue_remove($lien['id_job']);
|
||||
}
|
||||
}
|
||||
|
||||
// Seulement si on a bien une date de fin, on reprogramme, sans duplication possible
|
||||
if ($date_fin and $date_fin != '0000-00-00 00:00:00'){
|
||||
$id_job = job_queue_add(
|
||||
'abonnements_desactiver',
|
||||
_T('abonnement:job_desactivation', array('id'=>$id_abonnement)),
|
||||
array($id_abonnement),
|
||||
'inc/abonnements',
|
||||
true,
|
||||
strtotime($date_fin)
|
||||
);
|
||||
job_queue_link($id_job, array('objet'=>'abonnement', 'id_objet'=>$id_abonnement));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Désactiver un abonnement en utilisant l'API et sans autorisation
|
||||
*/
|
||||
function abonnements_desactiver($id_abonnement){
|
||||
include_spip('inc/autoriser');
|
||||
include_spip('action/editer_objet');
|
||||
// On inhibe les autorisations
|
||||
autoriser_exception('modifier', 'abonnement', $id_abonnement);
|
||||
autoriser_exception('instituer', 'abonnement', $id_abonnement);
|
||||
// On désactive l'abonnement
|
||||
objet_modifier('abonnement', $id_abonnement, array('statut' => 'inactif'));
|
||||
// On remet les autorisations
|
||||
autoriser_exception('instituer', 'abonnement', $id_abonnement, false);
|
||||
autoriser_exception('modifier', 'abonnement', $id_abonnement, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Envoyer un courriel à l'abonné pour lui rappeler combien de temps il lui reste
|
||||
*/
|
||||
function abonnements_notifier_echeance($id_abonnement, $nom, $email, $duree, $periode){
|
||||
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
||||
|
||||
$envoyer_mail(
|
||||
$email,
|
||||
_T('abonnement:notification_echeance_sujet_'.$periode, array('duree'=>$duree)),
|
||||
recuperer_fond(
|
||||
'notifications/abonnement_echeance',
|
||||
array(
|
||||
'id_abonnement' => $id_abonnement,
|
||||
'nom' => $nom,
|
||||
'email' => $email,
|
||||
'duree' => $duree,
|
||||
'periode' => $periode
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
|
||||
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
$GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||
|
||||
// A
|
||||
'abonnements_description' => 'Ce plugin a pour but de regrouper tout ce qui est commun aux différents types d\'abonnements possibles (à des zones restreintes, à des contenus précis, à une version papier pourquoi pas aussi...).
|
||||
|
||||
Il permet de définir les abonnements proposés par le site, et gère les personnes qui y sont abonnés, désactivant l\'abonnement au bout d\'un temps donné.
|
||||
|
||||
Comme il peut y avoir toute sorte de cas, ce n\'est pas ce plugin qui décide quels droits sont donnés lors d\'un abonnement. C\'est à d\'autres plugins d\'implémenter cela, par exemple pour lier alors automatiquement un utilisateur à une zone restreinte.',
|
||||
'abonnements_nom' => 'Abonnements',
|
||||
'abonnements_slogan' => 'Donner des droits pendant un certain temps',
|
||||
);
|
||||
|
||||
?>
|
@ -0,0 +1,10 @@
|
||||
<BOUCLE_abonnement(ABONNEMENTS){id_abonnement}>
|
||||
#SET{nom,#ENV{nom}}
|
||||
#SET{offre,#INFO_TITRE{abonnements_offre,#ID_ABONNEMENTS_OFFRE}}
|
||||
#SET{echeance, #VAL{abonnementsoffre:champ_periode_nb_}|concat{#ENV{periode}}|_T{#ARRAY{nb,#ENV{duree}}}}
|
||||
|
||||
<body>
|
||||
<:abonnement:notification_echeance_corps{nom=#GET{nom}, nom_site_spip=#NOM_SITE_SPIP, offre=#GET{offre}, echeance=#GET{echeance}}:>
|
||||
</body>
|
||||
</BOUCLE_abonnement>
|
||||
#FILTRE{facteur_email_wrap_to_html}
|
@ -0,0 +1,40 @@
|
||||
<paquet
|
||||
prefix="abonnements"
|
||||
categorie="auteur"
|
||||
version="2.2.0"
|
||||
schema="2.1.0"
|
||||
etat="stable"
|
||||
compatibilite="[3.0.5;3.0.*]"
|
||||
logo="prive/themes/spip/images/abonnements-64.png"
|
||||
documentation=""
|
||||
>
|
||||
<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>
|
||||
<credit lien="http://www.cym.net">Ateliers Cym</credit>
|
||||
<credit lien="http://www.latribunedelart.com">La tribune de l'art</credit>
|
||||
<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="yaml" compatibilite="[1.5.0;]" />
|
||||
<necessite nom="facteur" compatibilite="[3.0.1;]" />
|
||||
|
||||
<pipeline nom="autoriser" inclure="abonnements_autorisations.php" />
|
||||
|
||||
<pipeline nom="declarer_tables_objets_sql" inclure="base/abonnements.php" />
|
||||
<pipeline nom="declarer_tables_interfaces" inclure="base/abonnements.php" />
|
||||
<pipeline nom="declarer_tables_principales" inclure="base/abonnements.php" />
|
||||
<pipeline nom="declarer_tables_auxiliaires" inclure="base/abonnements.php" />
|
||||
<pipeline nom="optimiser_base_disparus" inclure="abonnements_pipelines.php" />
|
||||
<pipeline nom="post_edition" inclure="abonnements_pipelines.php" />
|
||||
<pipeline nom="taches_generales_cron" inclure="abonnements_pipelines.php" />
|
||||
<pipeline nom="affiche_gauche" inclure="abonnements_pipelines.php" />
|
||||
<pipeline nom="affiche_milieu" 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" />
|
||||
</paquet>
|
@ -0,0 +1,26 @@
|
||||
<BOUCLE_abonnement(ABONNEMENTS auteurs){id_abonnement}{statut?}>
|
||||
|
||||
[<div class="champ contenu_id_abonnements_offre[ (#ID_ABONNEMENTS_OFFRE*|strlen|?{'',vide})]">
|
||||
<label><:abonnement:champ_id_abonnements_offre_label:> : </label>
|
||||
<span dir='#LANG_DIR' class='#EDIT{id_abonnements_offre} id_abonnements_offre'>(#INFO_TITRE{abonnements_offre,#ID_ABONNEMENTS_OFFRE})</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_id_auteur[ (#ID_AUTEUR*|strlen|?{'',vide})]">
|
||||
<label><:abonnement:champ_id_auteur_label:> : </label>
|
||||
<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]"><span dir='#LANG_DIR' class='#EDIT{id_auteur} id_auteur'>(#NOM)</span></a>
|
||||
[(<a href="mailto:#EMAIL">(#EMAIL)</a>)]
|
||||
</div>]
|
||||
|
||||
#SET{horaires, #INFO_PERIODE{abonnements_offre, #ID_ABONNEMENTS_OFFRE}|=={heures}|?{' ',''}}
|
||||
|
||||
[<div class="champ contenu_date_debut[ (#DATE_DEBUT*|!={0000-00-00 00:00:00}|?{'',vide})]">
|
||||
<label><:abonnement:champ_date_debut_label:> : </label>
|
||||
<span dir='#LANG_DIR' class='#EDIT{date_debut} date_debut'>(#DATE_DEBUT|!={0000-00-00 00:00:00}|?{[(#GET{horaires}|?{[(#DATE_DEBUT|affdate_heure)], [(#DATE_DEBUT|affdate_jourcourt)]})]})</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_date_fin[ (#DATE_FIN*|!={0000-00-00 00:00:00}|?{'',vide})]">
|
||||
<label><:abonnement:champ_date_fin_label:> : </label>
|
||||
<span dir='#LANG_DIR' class='#EDIT{date_fin} date_fin'>(#DATE_FIN|!={0000-00-00 00:00:00}|?{[(#GET{horaires}|?{[(#DATE_FIN|affdate_heure)], [(#DATE_FIN|affdate_jourcourt)]})]})</span>
|
||||
</div>]
|
||||
|
||||
</BOUCLE_abonnement>
|
@ -0,0 +1,6 @@
|
||||
<INCLURE{fond=prive/objets/liste/abonnements, masquer_offre=oui, par=date_debut, env, ajax, sinon=<:abonnement:info_aucun_abonnement:>, id_abonnements_offre=#ENV{id_abonnements_offre}}>
|
||||
|
||||
[(#AUTORISER{creer,abonnement})
|
||||
[(#URL_ECRIRE{abonnement_edit,new=oui&id_abonnements_offre=#ENV{id_abonnements_offre}}|icone_verticale{<:abonnement:icone_creer_abonnement:>,abonnement,new,right})]
|
||||
]
|
||||
<div class="nettoyeur"></div>
|
@ -0,0 +1,23 @@
|
||||
<BOUCLE_abonnements_offre(ABONNEMENTS_OFFRES){id_abonnements_offre}{statut?}>
|
||||
|
||||
[<div class="champ contenu_titre[ (#TITRE*|strlen|?{'',vide})]">
|
||||
<label><:abonnementsoffre:champ_titre_label:> : </label>
|
||||
<span dir='#LANG_DIR' class='#EDIT{titre} titre'>(#TITRE)</span>
|
||||
</div>]
|
||||
|
||||
[<div class="champ contenu_descriptif[ (#DESCRIPTIF*|strlen|?{'',vide})]">
|
||||
<label><:abonnementsoffre:champ_descriptif_label:> : </label>
|
||||
<span dir='#LANG_DIR' class='#EDIT{descriptif} descriptif'>(#DESCRIPTIF)</span>
|
||||
</div>]
|
||||
|
||||
<div class="champ contenu_duree">
|
||||
<label><:abonnementsoffre:champ_duree_label:> : </label>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
</BOUCLE_abonnements_offre>
|
@ -0,0 +1,63 @@
|
||||
[(#SET{defaut_tri,#ARRAY{
|
||||
date_debut,#ENV{date_debut_sens,-1},
|
||||
date_fin,#ENV{date_fin_sens,-1},
|
||||
id_abonnement,1,
|
||||
id_auteur,1,
|
||||
nom,1,
|
||||
points,-1
|
||||
}})]<B_liste_abonnements>
|
||||
#ANCRE_PAGINATION
|
||||
<div class="liste-objets abonnements">
|
||||
<table class="spip liste">
|
||||
[<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{#ENV{titre_singulier,abonnement:info_1_abonnement},#ENV{titre_pluriel,abonnement:info_nb_abonnements}}})</strong></caption>]
|
||||
<thead>
|
||||
<tr class="first_row">
|
||||
<th class="statut" scope="col">[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
|
||||
[(#ENV{masquer_offre}|non)
|
||||
<th class="id_abonnements_offre" scope="col">[(#TRI{id_abonnements_offre,<:abonnement:champ_id_abonnements_offre_label:>,ajax})]</th>
|
||||
]
|
||||
[(#ENV{masquer_auteur}|non)
|
||||
<th class="nom" scope="col">[(#TRI{nom,<:abonnement:champ_id_auteur_label:>,ajax})]</th>
|
||||
]
|
||||
<th class="date date_debut" scope="col">[(#TRI{date_debut,<:abonnement:champ_date_debut_label:>,ajax})]</th>
|
||||
<th class="date date_fin" scope="col">[(#TRI{date_fin,<:abonnement:champ_date_fin_label:>,ajax})]</th>
|
||||
<th class="id" scope="col">[(#TRI{id_abonnement,<:abonnement:info_numero_abbr_maj|attribut_html:>,ajax})]</th>
|
||||
<th class="action" scope="col"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<BOUCLE_liste_abonnements(ABONNEMENTS auteurs)
|
||||
{where?}
|
||||
{id_abonnements_offre?}
|
||||
{id_auteur?}
|
||||
{statut?}
|
||||
{recherche?}
|
||||
{tri #ENV{par,date_debut},#GET{defaut_tri}}{pagination #ENV{nb,10}}
|
||||
>
|
||||
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
|
||||
<td class="statut">[(#STATUT|puce_statut{abonnement,#ID_ABONNEMENT})]</td>
|
||||
[(#ENV{masquer_offre}|non)
|
||||
<td class="id_abonnements_offre principale"><a href="[(#ID_ABONNEMENT|generer_url_entite{abonnement})]" title="<:abonnement:titre_abonnement|attribut_html:> <:abonnement:info_numero_abbr|attribut_html:>#ID_ABONNEMENT">#INFO_TITRE{abonnements_offre,#ID_ABONNEMENTS_OFFRE}</a></td>
|
||||
]
|
||||
[(#ENV{masquer_auteur}|non)
|
||||
<td class="nom principale"><a href="[(#ID_ABONNEMENT|generer_url_entite{abonnement})]" title="<:abonnement:titre_abonnement|attribut_html:> <:abonnement:info_numero_abbr|attribut_html:>#ID_ABONNEMENT">#NOM</a></td>
|
||||
]
|
||||
#SET{horaires, #INFO_PERIODE{abonnements_offre, #ID_ABONNEMENTS_OFFRE}|=={heures}|?{' ',''}}
|
||||
<td class="date date_debut secondaire">[(#DATE_DEBUT|!={0000-00-00 00:00:00}|?{[(#GET{horaires}|?{[(#DATE_DEBUT|affdate_heure)], [(#DATE_DEBUT|affdate_jourcourt)]})]})]</td>
|
||||
<td class="date date_fin secondaire">[(#DATE_FIN|!={0000-00-00 00:00:00}|?{[(#GET{horaires}|?{[(#DATE_FIN|affdate_heure)], [(#DATE_FIN|affdate_jourcourt)]})]})]</td>
|
||||
<td class="id">[(#AUTORISER{modifier,abonnement,#ID_ABONNEMENT}|?{
|
||||
<a href="[(#URL_ECRIRE{abonnement_edit,id_abonnement=#ID_ABONNEMENT})]" title="<:abonnement:icone_modifier_abonnement|attribut_html:>">#ID_ABONNEMENT</a>,
|
||||
#ID_ABONNEMENT
|
||||
})]</td>
|
||||
<td class="action">[(#AUTORISER{modifier,abonnement,#ID_ABONNEMENT}|et{#INFO_DUREE{abonnements_offre, #ID_ABONNEMENTS_OFFRE}}|?{
|
||||
<a href="[(#URL_ACTION_AUTEUR{renouveler_abonnement,#ID_ABONNEMENT,#SELF})]" title="<:abonnement:icone_renouveler_abonnement|attribut_html:> <:abonnement:info_numero_abbr|attribut_html:>#ID_ABONNEMENT">[(#CHEMIN_IMAGE{arrow_refresh-16.png}|balise_img{<:abonnement:icone_renouveler_abonnement:>,''})]</a>
|
||||
})]</td>
|
||||
</tr>
|
||||
</BOUCLE_liste_abonnements>
|
||||
</tbody>
|
||||
</table>
|
||||
[<p class="pagination">(#PAGINATION{prive})</p>]
|
||||
</div>
|
||||
</B_liste_abonnements>[
|
||||
<div class="liste-objets abonnements caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
|
||||
]<//B_liste_abonnements>
|
@ -0,0 +1,48 @@
|
||||
[(#SET{defaut_tri,#ARRAY{
|
||||
num titre,1,
|
||||
titre,1,
|
||||
id_abonnement,1,
|
||||
points,-1
|
||||
}})]<B_liste_abonnements_offres>
|
||||
#ANCRE_PAGINATION
|
||||
<div class="liste-objets abonnements_offres">
|
||||
<table class="spip liste">
|
||||
[<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="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="id" scope="col'">[(#TRI{id_abonnements_offre,<:info_numero_abbreviation:>,ajax})]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<BOUCLE_liste_abonnements_offres(ABONNEMENTS_OFFRES)
|
||||
{where?}
|
||||
{id_auteur?}
|
||||
{statut?}
|
||||
{recherche?}
|
||||
{tri #ENV{par,num titre},#GET{defaut_tri}}
|
||||
{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="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="abonnements"><BOUCLE_abonnements(ABONNEMENTS){id_abonnements_offre}/>#TOTAL_BOUCLE<//B_abonnements></td>
|
||||
<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>
|
||||
</tr>
|
||||
</BOUCLE_liste_abonnements_offres>
|
||||
</tbody>
|
||||
</table>
|
||||
[<p class="pagination">(#PAGINATION{prive})</p>]
|
||||
</div>
|
||||
</B_liste_abonnements_offres>[
|
||||
<div class="liste-objets abonnements_offres caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
|
||||
]<//B_liste_abonnements_offres>
|
@ -0,0 +1,45 @@
|
||||
[(#AUTORISER{voir,abonnement,#ID_ABONNEMENT}|sinon_interdire_acces)]
|
||||
<BOUCLE_abonnement(ABONNEMENTS){id_abonnement}{statut==.*}{si #ENV{exec}|=={abonnement}}>
|
||||
[(#BOITE_OUVRIR{[
|
||||
[(#AUTORISER{modifier,abonnement,#ID_ABONNEMENT})
|
||||
[(#ID_ABONNEMENT|afficher_qui_edite{abonnement}|non)
|
||||
[(#URL_ECRIRE{abonnement_edit,id_abonnement=#ID_ABONNEMENT}|icone_verticale{<:abonnement:icone_modifier_abonnement:>,abonnement,edit,right ajax preload})]
|
||||
]
|
||||
[(#ID_ABONNEMENT|afficher_qui_edite{abonnement}|oui)
|
||||
[(#URL_ECRIRE{abonnement_edit,id_abonnement=#ID_ABONNEMENT}|icone_verticale{#ID_ABONNEMENT|afficher_qui_edite{abonnement},warning-24,'',right edition_deja ajax preload})]
|
||||
]
|
||||
]
|
||||
|
||||
<h1>(#INFO_TITRE{auteur,#ID_AUTEUR}|concat{" \(", [(#DATE_DEBUT|affdate_jourcourt)], "\) "})[(#CHEMIN_IMAGE{abonnement-24.png}|balise_img{abonnement,cadre-icone})]</h1>
|
||||
|
||||
],simple fiche_objet})]
|
||||
|
||||
< |