Collecte de dons et adhésions. Permet de gérer également des campagnes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

230 lines
8.3 KiB

<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Souscription
*
* @plugin Souscription
* @copyright 2013
* @author Olivier Tétard
* @licence GNU/GPL
* @package SPIP\Souscription\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) { return;
}
/**
* Fonction d'installation et de mise à jour du plugin Souscription.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
* @return void
**/
function souscription_upgrade($nom_meta_base_version, $version_cible) {
$maj = [];
$maj['create'] = [
['maj_tables', ['spip_souscriptions','spip_souscriptions_liens','spip_souscription_campagnes']]
];
$maj['0.1.0'] = [
['sql_alter', "TABLE spip_souscriptions ADD informer_comite_local varchar(3) NOT NULL DEFAULT ''"]
];
$maj['0.2.0'] = [
['sql_alter', "TABLE spip_souscriptions ADD pays text NOT NULL DEFAULT ''"]
];
$maj['0.3.0'] = [
['sql_alter', "TABLE spip_souscriptions ADD telephone text NOT NULL DEFAULT ''"]
];
$maj['0.4.0'] = [
['sql_alter', "TABLE spip_souscription_campagnes ADD objectif_limiter varchar(3) NOT NULL DEFAULT ''"]
];
$maj['0.5.0'] = [
['sql_alter', "TABLE spip_souscription_campagnes ADD configuration_specifique varchar(3) NOT NULL DEFAULT ''"],
['sql_alter', "TABLE spip_souscription_campagnes ADD type_saisie varchar(255) NOT NULL DEFAULT ''"],
['sql_alter', "TABLE spip_souscription_campagnes ADD montants text NOT NULL DEFAULT ''"]
];
$maj['0.6.0'] = [['maj_configuration_montants']];
$maj['0.7.0'] = [
['sql_alter', "TABLE spip_souscription_campagnes ADD abo_type_saisie varchar(255) NOT NULL DEFAULT ''"],
['sql_alter', "TABLE spip_souscription_campagnes ADD abo_montants text NOT NULL DEFAULT ''"]
];
$maj['0.7.1'] = [
['maj_tables', ['spip_souscriptions_liens']],
['sql_alter', 'TABLE spip_souscriptions CHANGE id_transaction id_transaction_echeance bigint(21) NOT NULL DEFAULT 0'],
['souscription_maj_liens_transactions'],
];
$maj['0.7.2'] = [
['maj_tables', ['spip_souscriptions']],
['sql_update','spip_souscriptions',['date_echeance' => 'date_souscription','date_fin' => 'date_souscription']],
['souscription_maj_montants_date'],
];
$maj['0.8.3'] = [
['maj_tables', ['spip_souscriptions']],
];
$maj['0.8.4'] = [
['souscription_maj_statut'],
];
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function souscription_maj_statut() {
// toutes les transactions ok liees a une souscription
$ids = sql_allfetsel(
'L.id_souscription',
'spip_souscriptions_liens AS L JOIN spip_transactions AS T ON (L.objet=' . sql_quote('transaction') . ' AND L.id_objet=T.id_transaction)',
'T.statut=' . sql_quote('ok')
);
#var_dump($ids);
$ids = array_column($ids, 'id_souscription');
sql_updateq('spip_souscriptions', ['statut' => 'ok'], 'statut=' . sql_quote('prepa') . ' AND ' . sql_in('id_souscription', $ids));
// toutes les souscriptions ok mais dont abo_statut='commande'
// recalculer le montant_cumul
$souscriptions = sql_allfetsel('*', 'spip_souscriptions', 'statut=' . sql_quote('ok') . ' AND abo_statut=' . sql_quote('commande'));
if ($souscriptions) {
foreach ($souscriptions as $souscription) {
$montants = sql_allfetsel(
'T.montant',
'spip_souscriptions_liens AS L JOIN spip_transactions AS T ON (L.objet=' . sql_quote('transaction') . ' AND L.id_objet=T.id_transaction)',
'T.statut=' . sql_quote('ok') . ' AND L.id_souscription=' . intval($souscription['id_souscription'])
);
$montants = array_column($montants, 'montant');
$montants = array_map('floatval', $montants);
$cumul = round(array_sum($montants), 2);
$set = [
'abo_statut' => 'ok',
'montant_cumul' => $cumul,
];
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($souscription['id_souscription']));
spip_log('Corriger montant_cumul/abo_statut sur souscription ' . $souscription['id_souscription'], 'maj');
if (time() > _TIME_OUT) {
return;
}
}
}
// toutes les souscriptions dont date_echeance=date_souscription
$souscriptions = sql_allfetsel('*', 'spip_souscriptions', 'abo_statut=' . sql_quote('ok') . ' AND date_echeance=date_souscription');
if ($souscriptions) {
foreach ($souscriptions as $souscription) {
$trans = sql_allfetsel(
'T.montant,T.date_transaction',
'spip_souscriptions_liens AS L JOIN spip_transactions AS T ON (L.objet=' . sql_quote('transaction') . ' AND L.id_objet=T.id_transaction)',
'T.statut=' . sql_quote('ok') . ' AND L.id_souscription=' . intval($souscription['id_souscription']),
'',
'date_transaction DESC'
);
$montants = array_column($trans, 'montant');
$montants = array_map('floatval', $montants);
$cumul = round(array_sum($montants), 2);
$last = reset($trans);
$last = $last['date_transaction'];
$datep15 = date('Y-m-d H:i:s', strtotime('+15 day', strtotime($last)));
$prochaine_echeance = $souscription['date_echeance'];
spip_log('souscription #' . $souscription['id_souscription'] . " $prochaine_echeance vs $datep15", 'souscriptions_abos');
// l'incrementer pour atteindre celle du mois prochain
while ($prochaine_echeance < $datep15) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime('+1 month', strtotime($prochaine_echeance)));
spip_log('souscription #' . $souscription['id_souscription'] . " echeance=echeance+1 month : $prochaine_echeance vs $datep15", 'souscriptions_abos');
}
$set = [
'abo_statut' => 'ok',
'montant_cumul' => $cumul,
'date_echeance' => $prochaine_echeance,
];
#var_dump($souscription);
#var_dump($set);
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($souscription['id_souscription']));
spip_log('Corriger montant_cumul/abo_statut/date_echeance sur souscription ' . $souscription['id_souscription'], 'maj');
if (time() > _TIME_OUT) {
return;
}
}
}
}
function souscription_maj_montants_date() {
$res = sql_select('S.id_souscription,T.montant', 'spip_souscriptions AS S JOIN spip_transactions as T ON (T.id_transaction=S.id_transaction_echeance)', 'S.montant=' . sql_quote(''));
while ($row = sql_fetch($res)) {
sql_updateq('spip_souscriptions', ['montant' => $row['montant']], 'id_souscription=' . intval($row['id_souscription']));
if (time() > _TIME_OUT) {
return;
}
}
}
function souscription_maj_liens_transactions() {
$done = sql_allfetsel('DISTINCT id_souscription', 'spip_souscriptions_liens');
$done = array_column($done, 'id_souscription');
$res = sql_select('id_souscription,id_transaction_echeance', 'spip_souscriptions', sql_in('id_souscription', $done, 'NOT'));
while ($row = sql_fetch($res)) {
$ins = [
'id_souscription' => $row['id_souscription'],
'id_objet' => $row['id_transaction_echeance'],
'objet' => 'transaction',
];
sql_insertq('spip_souscriptions_liens', $ins);
if (time() > _TIME_OUT) {
return;
}
}
}
/* Fonction permettant de changer le format des montants globaux pour
* le plugin souscription. Les montants étaient stockés sous la forme
* d'un array() sérialisés. Il sont désormais stockés dans leur format
* chaine de caractères. */
function maj_configuration_montants() {
foreach (['adhesion_montants', 'don_montants'] as $cfg) {
$cle_cfg = "souscription/${cfg}";
if (!function_exists('lire_config')) {
include_spip('inc/config');
}
$montants_orig = lire_config($cle_cfg);
$montants = '';
foreach ($montants_orig as $prix => $description) {
$montants .= $prix . '|' . $description . "\n";
}
ecrire_config($cle_cfg, $montants);
}
}
/**
* Fonction de désinstallation du plugin Souscription.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @return void
**/
function souscription_vider_tables($nom_meta_base_version) {
sql_drop_table('spip_souscriptions');
sql_drop_table('spip_souscription_campagnes');
/* Nettoyer les versionnages et forums */
sql_delete('spip_versions', sql_in('objet', ['souscription']));
sql_delete('spip_versions_fragments', sql_in('objet', ['souscription']));
sql_delete('spip_forum', sql_in('objet', ['souscription']));
effacer_meta($nom_meta_base_version);
}