Browse Source

PSR des fichiers racine

pull/2/head
Matthieu Marcillaud 1 year ago
parent
commit
ba3bb5b723
  1. 243
      souscription_administrations.php
  2. 50
      souscription_autorisations.php
  3. 244
      souscription_fonctions.php
  4. 441
      souscription_pipelines.php

243
souscription_administrations.php

@ -1,4 +1,5 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin Souscription
*
@ -9,7 +10,8 @@
* @package SPIP\Souscription\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) { return;
}
/**
@ -21,183 +23,186 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
* 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 = array();
$maj['create'] = array(
array('maj_tables', array('spip_souscriptions','spip_souscriptions_liens','spip_souscription_campagnes'))
);
$maj['0.1.0'] = array(
array('sql_alter', "TABLE spip_souscriptions ADD informer_comite_local varchar(3) NOT NULL DEFAULT ''")
);
$maj['0.2.0'] = array(
array('sql_alter', "TABLE spip_souscriptions ADD pays text NOT NULL DEFAULT ''")
);
$maj['0.3.0'] = array(
array('sql_alter', "TABLE spip_souscriptions ADD telephone text NOT NULL DEFAULT ''")
);
$maj['0.4.0'] = array(
array('sql_alter', "TABLE spip_souscription_campagnes ADD objectif_limiter varchar(3) NOT NULL DEFAULT ''")
);
$maj['0.5.0'] = array(
array('sql_alter', "TABLE spip_souscription_campagnes ADD configuration_specifique varchar(3) NOT NULL DEFAULT ''"),
array('sql_alter', "TABLE spip_souscription_campagnes ADD type_saisie varchar(255) NOT NULL DEFAULT ''"),
array('sql_alter', "TABLE spip_souscription_campagnes ADD montants text NOT NULL DEFAULT ''")
);
$maj['0.6.0'] = array(array('maj_configuration_montants'));
$maj['0.7.0'] = array(
array('sql_alter', "TABLE spip_souscription_campagnes ADD abo_type_saisie varchar(255) NOT NULL DEFAULT ''"),
array('sql_alter', "TABLE spip_souscription_campagnes ADD abo_montants text NOT NULL DEFAULT ''")
);
$maj['0.7.1'] = array(
array('maj_tables', array('spip_souscriptions_liens')),
array('sql_alter', "TABLE spip_souscriptions CHANGE id_transaction id_transaction_echeance bigint(21) NOT NULL DEFAULT 0"),
array('souscription_maj_liens_transactions'),
);
$maj['0.7.2'] = array(
array('maj_tables', array('spip_souscriptions')),
array('sql_update','spip_souscriptions',array('date_echeance'=>'date_souscription','date_fin'=>'date_souscription')),
array('souscription_maj_montants_date'),
);
$maj['0.8.3'] = array(
array('maj_tables', array('spip_souscriptions')),
);
$maj['0.8.4'] = array(
array('souscription_maj_statut'),
);
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(){
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')
'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",array('statut'=>'ok'),"statut=".sql_quote('prepa')." AND ".sql_in('id_souscription',$ids));
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){
$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'])
'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 = array(
$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)
];
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){
$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']),
'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);
$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)));
$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");
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");
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 = array(
$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");
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)
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",array('montant'=>$row['montant']),'id_souscription='.intval($row['id_souscription']));
if (time()>_TIME_OUT)
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(){
function souscription_maj_liens_transactions() {
$done = sql_allfetsel("DISTINCT id_souscription","spip_souscriptions_liens");
$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 = array(
'id_souscription'=>$row['id_souscription'],
'id_objet'=>$row['id_transaction_echeance'],
'objet'=>'transaction',
);
sql_insertq("spip_souscriptions_liens",$ins);
if (time()>_TIME_OUT)
$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 (array('adhesion_montants', 'don_montants') as $cfg){
function maj_configuration_montants() {
foreach (['adhesion_montants', 'don_montants'] as $cfg) {
$cle_cfg = "souscription/${cfg}";
if (!function_exists("lire_config"))
include_spip("inc/config");
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";
$montants = '';
foreach ($montants_orig as $prix => $description) {
$montants .= $prix . '|' . $description . "\n";
}
ecrire_config($cle_cfg, $montants);
@ -211,17 +216,15 @@ function maj_configuration_montants(){
* 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){
function souscription_vider_tables($nom_meta_base_version) {
sql_drop_table("spip_souscriptions");
sql_drop_table("spip_souscription_campagnes");
sql_drop_table('spip_souscriptions');
sql_drop_table('spip_souscription_campagnes');
/* Nettoyer les versionnages et forums */
sql_delete("spip_versions", sql_in("objet", array('souscription')));
sql_delete("spip_versions_fragments", sql_in("objet", array('souscription')));
sql_delete("spip_forum", sql_in("objet", array('souscription')));
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);
}
?>

50
souscription_autorisations.php

@ -1,4 +1,5 @@
<?php
/**
* Définit les autorisations du plugin Souscription
*
@ -9,13 +10,16 @@
* @package SPIP\Souscription\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function souscription_autoriser(){}
function souscription_autoriser() {
}
// -----------------
@ -25,15 +29,15 @@ function souscription_autoriser(){}
/**
* Autorisation de voir un élément de menu (souscriptions)
**/
function autoriser_souscription_menu_dist($faire, $type, $id, $qui, $opt){
return autoriser('webmestre');
function autoriser_souscription_menu_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre');
}
/**
* Autorisation de voir le bouton d'accès rapide de création (souscription)
**/
function autoriser_souscriptioncreer_menu_dist($faire, $type, $id, $qui, $opt){
return false;
function autoriser_souscriptioncreer_menu_dist($faire, $type, $id, $qui, $opt) {
return false;
}
/**
@ -41,7 +45,7 @@ function autoriser_souscriptioncreer_menu_dist($faire, $type, $id, $qui, $opt){
* à faire un don.
**/
function autoriser_souscription_creer_dist($faire, $type, $id, $qui, $opt) {
return true;
return true;
}
/**
@ -49,16 +53,18 @@ function autoriser_souscription_creer_dist($faire, $type, $id, $qui, $opt) {
* un don.
**/
function autoriser_souscription_voir_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', '', '', $qui);
return autoriser('webmestre', '', '', $qui);
}
function autoriser_souscriptioncampagne_creer_dist($faire, $type, $id, $qui, $opt) {
if (!function_exists("lire_config"))
include_spip("inc/config");
if (lire_config("souscription/adhesion_activer","off")=="off" AND lire_config("souscription/don_activer","off")=="off")
if (!function_exists('lire_config')) {
include_spip('inc/config');
}
if (lire_config('souscription/adhesion_activer', 'off') == 'off' and lire_config('souscription/don_activer', 'off') == 'off') {
return false;
return autoriser("defaut","",$id,$qui,$opt);
}
return autoriser('defaut', '', $id, $qui, $opt);
}
/**
@ -66,7 +72,7 @@ function autoriser_souscriptioncampagne_creer_dist($faire, $type, $id, $qui, $op
* faire.
**/
function autoriser_souscription_modifier_dist($faire, $type, $id, $qui, $opt) {
return false;
return false;
}
/**
@ -74,20 +80,20 @@ function autoriser_souscription_modifier_dist($faire, $type, $id, $qui, $opt) {
* faire.
**/
function autoriser_souscription_supprimer_dist($faire, $type, $id, $qui, $opt) {
return false;
return false;
}
/*
* Autorisation d'exporter un don.
*/
* Autorisation d'exporter un don.
*/
function autoriser_souscription_exporter_dist($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', '', '', $qui);
return autoriser('webmestre', '', '', $qui);
}
function autoriser_souscription_configurer_dist($faire, $mode='', $id=0, $qui = null, $opt = null){
return autoriser('webmestre');
function autoriser_souscription_configurer_dist($faire, $mode = '', $id = 0, $qui = null, $opt = null) {
return autoriser('webmestre');
}
function autoriser_souscriptioncampagne_dist($faire, $mode='', $id=0, $qui = null, $opt = null){
return autoriser('webmestre');
}
function autoriser_souscriptioncampagne_dist($faire, $mode = '', $id = 0, $qui = null, $opt = null) {
return autoriser('webmestre');
}

244
souscription_fonctions.php

@ -1,4 +1,5 @@
<?php
/**
* filtres et balises specifiques
*
@ -9,11 +10,13 @@
* @package SPIP\Souscription\Fonctions
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function souscription_liste_transactions($id_souscription){
function souscription_liste_transactions($id_souscription) {
$ids = sql_allfetsel("id_objet","spip_souscriptions_liens","id_souscription=".sql_quote($id_souscription)." AND objet=".sql_quote('transaction'));
$ids = sql_allfetsel('id_objet', 'spip_souscriptions_liens', 'id_souscription=' . sql_quote($id_souscription) . ' AND objet=' . sql_quote('transaction'));
$ids = array_column($ids, 'id_objet');
if (!count($ids)) {
$ids = [0];
@ -24,34 +27,34 @@ function souscription_liste_transactions($id_souscription){
function calcul_avancement_campagne($id_campagne, $type_objectif, $objectif_initial) {
// les paiements uniques
$row_unique = sql_fetsel(
array("COUNT(S.id_souscription) as nombre","SUM(S.montant) AS somme"),
"spip_souscriptions AS S",
array("S.id_souscription_campagne=".sql_quote($id_campagne),"S.statut=".sql_quote('ok'),"S.abo_statut=".sql_quote('non'))
);
$row_unique = sql_fetsel(
['COUNT(S.id_souscription) as nombre', 'SUM(S.montant) AS somme'],
'spip_souscriptions AS S',
['S.id_souscription_campagne=' . sql_quote($id_campagne), 'S.statut=' . sql_quote('ok'), 'S.abo_statut=' . sql_quote('non')]
);
// les paiements recurents
// comptes pour 1 (don|adhesion) et pour le comul de la somme versee
$row_abos = sql_fetsel(
array("COUNT(S.id_souscription) as nombre","SUM(S.montant_cumul) AS somme"),
"spip_souscriptions AS S",
array("S.id_souscription_campagne=".sql_quote($id_campagne),sql_in("S.abo_statut",array('ok','resilie')))
);
['COUNT(S.id_souscription) as nombre', 'SUM(S.montant_cumul) AS somme'],
'spip_souscriptions AS S',
['S.id_souscription_campagne=' . sql_quote($id_campagne), sql_in('S.abo_statut', ['ok', 'resilie'])]
);
return ($type_objectif == "don" ? $row_unique['somme']+$row_abos['somme'] : $row_unique['nombre']+$row_abos['nombre']) + $objectif_initial;
return ($type_objectif == 'don' ? $row_unique['somme'] + $row_abos['somme'] : $row_unique['nombre'] + $row_abos['nombre']) + $objectif_initial;
}
function souscription_campagne_historique_encaissements($id_campagne){
function souscription_campagne_historique_encaissements($id_campagne) {
$rows = sql_allfetsel(
"sum(T.montant_ht) as montant_mensuel_ht,sum(T.montant) as montant_mensuel,T.date_paiement",
'sum(T.montant_ht) as montant_mensuel_ht,sum(T.montant) as montant_mensuel,T.date_paiement',
"spip_transactions AS T
JOIN spip_souscriptions_liens AS L ON (L.objet='transaction' AND L.id_objet=T.id_transaction)
JOIN spip_souscriptions AS S ON S.id_souscription=L.id_souscription",
"T.statut='ok' AND S.id_souscription_campagne=".intval($id_campagne),
JOIN spip_souscriptions_liens AS L ON (L.objet='transaction' AND L.id_objet=T.id_transaction)
JOIN spip_souscriptions AS S ON S.id_souscription=L.id_souscription",
"T.statut='ok' AND S.id_souscription_campagne=" . intval($id_campagne),
"DATE_FORMAT(T.date_paiement,'%Y-%m')",
"T.date_paiement DESC"
'T.date_paiement DESC'
);
$out = "";
foreach($rows as $row){
$out = '';
foreach ($rows as $row) {
$mois = affdate_mois_annee($row['date_paiement']);
$montant = affiche_monnaie($row['montant_mensuel']);
$montant_ht = affiche_monnaie($row['montant_mensuel_ht']);
@ -66,110 +69,119 @@ function souscription_campagne_historique_encaissements($id_campagne){
}
/*
* Balise #AVANCEMENT_CAMPAGNE permettant de faire les calculs
* d'avancement de la campagne (nombre des adhésions pourl es
* campagnes de type adhésion ; somme des montants pour les campagnes
* de dons).
*
* Cette balise ne peut être utilisée que dans une boucle de type
* SOUSCRIPTION_CAMPAGNE
*/
* Balise #AVANCEMENT_CAMPAGNE permettant de faire les calculs
* d'avancement de la campagne (nombre des adhésions pourl es
* campagnes de type adhésion ; somme des montants pour les campagnes
* de dons).
*
* Cette balise ne peut être utilisée que dans une boucle de type
* SOUSCRIPTION_CAMPAGNE
*/
function balise_AVANCEMENT_CAMPAGNE_dist($p) {
if($p->type_requete != "souscription_campagnes") {
$msg = array('zbug_champ_hors_boucle',
array('champ' => '#AVANCEMENT_CAMPAGNE')
);
erreur_squelette($msg, $p);
}
else {
$_campagne = champ_sql('id_souscription_campagne', $p);
$_type_objectif = champ_sql('type_objectif', $p);
$_objectif_initial = champ_sql('objectif_initial', $p);
$p->code = "calcul_avancement_campagne($_campagne, $_type_objectif, $_objectif_initial)";
$p->interdire_scripts = false;
}
return $p;
if ($p->type_requete != 'souscription_campagnes') {
$msg = [
'zbug_champ_hors_boucle',
['champ' => '#AVANCEMENT_CAMPAGNE']
];
erreur_squelette($msg, $p);
} else {
$_campagne = champ_sql('id_souscription_campagne', $p);
$_type_objectif = champ_sql('type_objectif', $p);
$_objectif_initial = champ_sql('objectif_initial', $p);
$p->code = "calcul_avancement_campagne($_campagne, $_type_objectif, $_objectif_initial)";
$p->interdire_scripts = false;
}
return $p;
}
function montants_str2array($str,$abo="") {
include_spip('inc/saisies');
include_spip('inc/texte');
function montants_str2array($str, $abo = '') {
include_spip('inc/saisies');
include_spip('inc/texte');
/* Vérification du format de la chaine. Elle doit être sous la forme
* « [montant] | [label] », par exemple « 10 | 10 € ». */
foreach(explode("\n", trim($str)) as $l) {
if(!preg_match('/^[0-9]+\|.*/', $l)) {
return false;
}
}
/* Vérification du format de la chaine. Elle doit être sous la forme
* « [montant] | [label] », par exemple « 10 | 10 € ». */
foreach (explode("\n", trim($str)) as $l) {
if (!preg_match('/^[0-9]+\|.*/', $l)) {
return false;
}
}
if ($abo){
$str = $abo . trim(str_replace("\n","\n$abo",$str));
if ($abo) {
$str = $abo . trim(str_replace("\n", "\n$abo", $str));
}
$res = saisies_chaine2tableau(saisies_aplatir_chaine($str));
$res = array_map('typo',$res);
$res = saisies_chaine2tableau(saisies_aplatir_chaine($str));
$res = array_map('typo', $res);
return $res;
}
function campagne_afficher_objectif($nombre,$type_objectif){
return $nombre.($type_objectif == "don" ? " EUR" : "");
function campagne_afficher_objectif($nombre, $type_objectif) {
return $nombre . ($type_objectif == 'don' ? ' EUR' : '');
}
function souscription_derniere_echeance($date_echeance,$date_fin){
function souscription_derniere_echeance($date_echeance, $date_fin) {
$next = $date_echeance;
if (!intval($date_fin)){
$date_fin = "2020-12-31 00:00:00";
if (!intval($date_fin)) {
$date_fin = '2020-12-31 00:00:00';
}
while (intval($date_fin) AND $date_echeance>$date_fin)
$date_echeance = date('Y-m-d H:i:s',strtotime('-1 month',strtotime($date_echeance)));
while (($next=date('Y-m-d H:i:s',strtotime('+1 month',strtotime($date_echeance))))<=$date_fin)
while (intval($date_fin) and $date_echeance > $date_fin) {
$date_echeance = date('Y-m-d H:i:s', strtotime('-1 month', strtotime($date_echeance)));
}
while (($next = date('Y-m-d H:i:s', strtotime('+1 month', strtotime($date_echeance)))) <= $date_fin) {
$date_echeance = $next;
}
return $date_echeance;
}
function souscription_rappel_duree($date_echeance){
$fin = strtotime('+1 month',strtotime($date_echeance));
function souscription_rappel_duree($date_echeance) {
$fin = strtotime('+1 month', strtotime($date_echeance));
$now = time();
if ($now>$fin) return "end";
foreach(array(15,30,45,60,90) as $d){
$jalon = strtotime("-$d day",$fin);
if ($now>$jalon) return $d;
if ($now > $fin) {
return 'end';
}
foreach ([15, 30, 45, 60, 90] as $d) {
$jalon = strtotime("-$d day", $fin);
if ($now > $jalon) {
return $d;
}
}
return $d;
}
function souscription_montant_recu($id_souscription,$annee){
$souscription = sql_fetsel('*','spip_souscriptions','id_souscription='.intval($id_souscription));
if ($souscription['statut']!=='ok') return 0;
function souscription_montant_recu($id_souscription, $annee) {
$souscription = sql_fetsel('*', 'spip_souscriptions', 'id_souscription=' . intval($id_souscription));
if ($souscription['statut'] !== 'ok') {
return 0;
}
// c'est un don ponctuel : facile il suffit de verifier l'annee de souscription
if ($souscription['abo_statut']=='non'){
if (intval(date('Y',strtotime($souscription['date_souscription']))==$annee))
if ($souscription['abo_statut'] == 'non') {
if (intval(date('Y', strtotime($souscription['date_souscription'])) == $annee)) {
return $souscription['montant'];
else
} else {
return 0;
}
}
// c'est un don mensuel : ressortir toutes les transactions de la bonne annee associees a cette souscription
// et faire la somme
$montant = sql_getfetsel("sum(montant)","spip_transactions","statut=".sql_quote('ok')." AND ".sql_in('id_transaction',souscription_transactions($id_souscription,$annee)));
$montant = sql_getfetsel('sum(montant)', 'spip_transactions', 'statut=' . sql_quote('ok') . ' AND ' . sql_in('id_transaction', souscription_transactions($id_souscription, $annee)));
return $montant;
}
function souscription_transactions($id_souscription,$annee){
$start = mktime(0,0,0,1,1,$annee);
$end = mktime(0,0,0,1,1,$annee+1);
$start = date('Y-m-d H:i:s',$start);
$end = date('Y-m-d H:i:s',$end);
function souscription_transactions($id_souscription, $annee) {
$start = mktime(0, 0, 0, 1, 1, $annee);
$end = mktime(0, 0, 0, 1, 1, $annee + 1);
$start = date('Y-m-d H:i:s', $start);
$end = date('Y-m-d H:i:s', $end);
$trans = sql_allfetsel("T.id_transaction",
"spip_souscriptions_liens as L JOIN spip_transactions as T on (L.objet=".sql_quote('transaction')." AND L.id_objet=T.id_transaction)",
"L.id_souscription=".intval($id_souscription)." AND date_transaction>=".sql_quote($start)." AND date_transaction<".sql_quote($end)
$trans = sql_allfetsel(
'T.id_transaction',
'spip_souscriptions_liens as L JOIN spip_transactions as T on (L.objet=' . sql_quote('transaction') . ' AND L.id_objet=T.id_transaction)',
'L.id_souscription=' . intval($id_souscription) . ' AND date_transaction>=' . sql_quote($start) . ' AND date_transaction<' . sql_quote($end)
);
$trans = array_map("reset",$trans);
$trans = array_map('reset', $trans);
return $trans;
}
@ -179,12 +191,12 @@ function souscription_transactions($id_souscription,$annee){
* @param $annee
* @return string
*/
function souscription_hash_lowsec($id_souscription,$annee){
$souscription = sql_fetsel('id_souscription,montant,courriel,date_souscription,nom,prenom,adresse,code_postal,ville','spip_souscriptions','id_souscription='.intval($id_souscription));
function souscription_hash_lowsec($id_souscription, $annee) {
$souscription = sql_fetsel('id_souscription,montant,courriel,date_souscription,nom,prenom,adresse,code_postal,ville', 'spip_souscriptions', 'id_souscription=' . intval($id_souscription));
$souscription = serialize($souscription);
$hash = md5("$souscription-hashlowsec-$annee");
$hash = substr($hash,0,10);
$hash = substr($hash, 0, 10);
return $hash;
}
@ -194,7 +206,7 @@ function souscription_hash_lowsec($id_souscription,$annee){
* @param int $annee
* @return string
*/
function souscription_numero_recu($id_souscription,$annee){
function souscription_numero_recu($id_souscription, $annee) {
return "R-$annee-$id_souscription";
}
@ -205,28 +217,28 @@ function souscription_numero_recu($id_souscription,$annee){
* @param $id_souscription
* @return array
*/
function souscription_lister_recus($id_souscription){
$annees = array();
$souscription = sql_fetsel('id_souscription,date_souscription,date_fin,date_echeance,statut,abo_statut','spip_souscriptions','id_souscription='.intval($id_souscription));
function souscription_lister_recus($id_souscription) {
$annees = [];
$souscription = sql_fetsel('id_souscription,date_souscription,date_fin,date_echeance,statut,abo_statut', 'spip_souscriptions', 'id_souscription=' . intval($id_souscription));
if ($souscription['statut']!=='ok')
if ($souscription['statut'] !== 'ok') {
return $annees;
if ($souscription['abo_statut']=='non'){
$annees[] = date('Y',strtotime($souscription['date_souscription']));
}
else {
$annee = date('Y',strtotime($souscription['date_souscription']));
$annee_fin = max($annee,date('Y',strtotime($souscription['date_fin'])),date('Y',strtotime($souscription['date_echeance'])));
$annee_fiscalenmoins1 = date('Y')-1;
while ($annee<=$annee_fin AND $annee<=$annee_fiscalenmoins1) {
if ($souscription['abo_statut'] == 'non') {
$annees[] = date('Y', strtotime($souscription['date_souscription']));
} else {
$annee = date('Y', strtotime($souscription['date_souscription']));
$annee_fin = max($annee, date('Y', strtotime($souscription['date_fin'])), date('Y', strtotime($souscription['date_echeance'])));
$annee_fiscalenmoins1 = date('Y') - 1;
while ($annee <= $annee_fin and $annee <= $annee_fiscalenmoins1) {
$annees[] = $annee;
$annee++;
}
// si resilie ou fini, on peut ajouter l'annee de fin si pas prise en compte
if ($souscription['abo_statut']!=='ok'){
if ($annee_fin>$annee_fiscalenmoins1){
if ($souscription['abo_statut'] !== 'ok') {
if ($annee_fin > $annee_fiscalenmoins1) {
$annees[] = $annee_fin;
}
}
@ -240,13 +252,13 @@ function souscription_lister_recus($id_souscription){
* @param int $id_auteur
* @return array
*/
function souscription_lister_recus_auteur($id_auteur){
$sous = sql_allfetsel("id_souscription","spip_souscriptions","id_auteur=".intval($id_auteur));
$recus = array();
foreach($sous as $sou){
function souscription_lister_recus_auteur($id_auteur) {
$sous = sql_allfetsel('id_souscription', 'spip_souscriptions', 'id_auteur=' . intval($id_auteur));
$recus = [];
foreach ($sous as $sou) {
$annees = souscription_lister_recus($sou['id_souscription']);
foreach($annees as $annee){
$recus["$annee-".$sou['id_souscription']] = array('id_souscription'=>$sou['id_souscription'],'annee'=>$annee);
foreach ($annees as $annee) {
$recus["$annee-" . $sou['id_souscription']] = ['id_souscription' => $sou['id_souscription'], 'annee' => $annee];
}
}
ksort($recus);
@ -259,6 +271,6 @@ function souscription_lister_recus_auteur($id_auteur){
* @param int $annee
* @return string
*/
function souscription_generer_url_recu($id_souscription,$annee){
return generer_url_action("generer_recu_souscription","id_souscription=$id_souscription&annee=$annee&hash=".souscription_hash_lowsec($id_souscription,$annee));
}
function souscription_generer_url_recu($id_souscription, $annee) {
return generer_url_action('generer_recu_souscription', "id_souscription=$id_souscription&annee=$annee&hash=" . souscription_hash_lowsec($id_souscription, $annee));
}

441
souscription_pipelines.php

@ -1,4 +1,5 @@
<?php
/**
* Utilisations de pipelines par Souscription
*
@ -9,17 +10,19 @@
* @package SPIP\Souscription\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* ieconfig
* http://contrib.spip.net/Importeur-Exporteur-de-configurations-documentation#reply460680
*/
function souscription_ieconfig_metas($table){
$table['souscription']['titre'] = _T('souscription:titre_configurer_souscriptions');
$table['souscription']['icone'] = 'prive/themes/spip/images/souscription-16.png';
$table['souscription']['metas_serialize'] = 'souscription';
return $table;
*/
function souscription_ieconfig_metas($table) {
$table['souscription']['titre'] = _T('souscription:titre_configurer_souscriptions');
$table['souscription']['icone'] = 'prive/themes/spip/images/souscription-16.png';
$table['souscription']['metas_serialize'] = 'souscription';
return $table;
}
/**
@ -31,11 +34,9 @@ function souscription_ieconfig_metas($table){
*/
function souscription_affiche_auteurs_interventions($flux) {
if ($id_auteur = intval($flux['args']['id_auteur'])) {
$flux['data'] .= recuperer_fond('prive/objets/liste/souscriptions', array(
$flux['data'] .= recuperer_fond('prive/objets/liste/souscriptions', [
'id_auteur' => $id_auteur,
), array('ajax' => true));
], ['ajax' => true]);
}
return $flux;
}
@ -49,10 +50,10 @@ function souscription_affiche_auteurs_interventions($flux) {
* @param array $flux Données du pipeline
* @return array Données du pipeline
*/
function souscription_optimiser_base_disparus($flux){
function souscription_optimiser_base_disparus($flux) {
include_spip('action/editer_liens');
$flux['data'] += objet_optimiser_liens(array('souscription'=>'*'), '*');
$flux['data'] += objet_optimiser_liens(['souscription' => '*'], '*');
return $flux;
}
@ -63,9 +64,10 @@ function souscription_optimiser_base_disparus($flux){
*/
function souscription_bank_dsp2_renseigner_facturation($flux) {
if ($id_transaction = $flux['args']['id_transaction']
AND $sous = sql_fetsel("*","spip_souscriptions","id_transaction_echeance=".intval($id_transaction)) ){
if (
$id_transaction = $flux['args']['id_transaction']
and $sous = sql_fetsel('*', 'spip_souscriptions', 'id_transaction_echeance=' . intval($id_transaction))
) {
$flux['data']['nom'] = $sous['nom'];
$flux['data']['prenom'] = $sous['prenom'];
$flux['data']['email'] = $sous['courriel'];
@ -73,7 +75,6 @@ function souscription_bank_dsp2_renseigner_facturation($flux) {
$flux['data']['code_postal'] = $sous['code_postal'];
$flux['data']['ville'] = $sous['ville'];
$flux['data']['pays'] = $sous['pays'];
}
return $flux;
@ -88,34 +89,41 @@ function souscription_bank_dsp2_renseigner_facturation($flux) {
* @return array Données du pipeline
*/
function souscription_trig_bank_notifier_reglement($flux) {
$souscription = sql_fetsel(array('courriel', 'id_souscription_campagne','abo_statut','id_souscription'),
'spip_souscriptions LEFT JOIN spip_souscriptions_liens USING (id_souscription)',
array('id_objet='.intval($flux['args']['id_transaction']),
"objet=".sql_quote('transaction')));
$souscription = sql_fetsel(
['courriel', 'id_souscription_campagne', 'abo_statut', 'id_souscription'],
'spip_souscriptions LEFT JOIN spip_souscriptions_liens USING (id_souscription)',
[
'id_objet=' . intval($flux['args']['id_transaction']),
'objet=' . sql_quote('transaction')
]
);
// on ne notifie pas les N echeances d'un don mensuel mais seulement la premiere
$n_echeance = 1;
if ($souscription['abo_statut']=='ok'){
$n_echeance = sql_countsel("spip_souscriptions_liens","id_souscription=".intval($souscription['id_souscription'])." AND objet=".sql_quote('transaction'));
if ($souscription['abo_statut'] == 'ok') {
$n_echeance = sql_countsel('spip_souscriptions_liens', 'id_souscription=' . intval($souscription['id_souscription']) . ' AND objet=' . sql_quote('transaction'));
}
if ($n_echeance<=1){
if ($n_echeance <= 1) {
$email = $souscription['courriel'];
$campagne = $souscription['id_souscription_campagne'];
if ($flux['args']['succes']) {
$message = recuperer_fond(_trouver_modele_courriel_reglement("succes", $campagne),
array('id_transaction' => $flux['args']['id_transaction']));
}
else {
$message = recuperer_fond(_trouver_modele_courriel_reglement("echec", $campagne),
array('id_transaction' => $flux['args']['id_transaction']));
$message = recuperer_fond(
_trouver_modele_courriel_reglement('succes', $campagne),
['id_transaction' => $flux['args']['id_transaction']]
);
} else {
$message = recuperer_fond(
_trouver_modele_courriel_reglement('echec', $campagne),
['id_transaction' => $flux['args']['id_transaction']]
);
}
spip_log("Envoi de notification de confirmation de paiement a [$email] pour la souscription #".$flux['args']['id_transaction'],"souscription");
spip_log("Envoi de notification de confirmation de paiement a [$email] pour la souscription #" . $flux['args']['id_transaction'], 'souscription');
include_spip("inc/notifications");
notifications_envoyer_mails($email, $message, "", $GLOBALS['meta']['email_webmaster']);
include_spip('inc/notifications');
notifications_envoyer_mails($email, $message, '', $GLOBALS['meta']['email_webmaster']);
}
return $flux;
@ -124,38 +132,36 @@ function souscription_trig_bank_notifier_reglement($flux) {
function _trouver_modele_courriel_reglement($type, $id_souscription_campagne) {
$modele = "modeles/mail-souscription-${type}";
if(trouver_fond("${modele}-${id_souscription_campagne}"))
if (trouver_fond("${modele}-${id_souscription_campagne}")) {
$modele = "${modele}-${id_souscription_campagne}";
}
return $modele;
}
function souscription_bank_traiter_reglement($flux){
function souscription_bank_traiter_reglement($flux) {
// on peut marquer cette souscription comme effective
// et mettre a jour le montant cumul si besoin
if ($id_transaction = $flux['args']['id_transaction']
AND $r = sql_fetsel("statut,montant,abo_uid","spip_transactions","id_transaction=".intval($id_transaction))
AND (
$sous = sql_fetsel("*","spip_souscriptions","id_transaction_echeance=".intval($id_transaction))
OR $sous = sql_fetsel("*","spip_souscriptions","abonne_uid=".sql_quote($r['abo_uid'])." AND abo_statut=".sql_quote('ok'))
)
){
$set = array(
if (
$id_transaction = $flux['args']['id_transaction']
and $r = sql_fetsel('statut,montant,abo_uid', 'spip_transactions', 'id_transaction=' . intval($id_transaction))
and ($sous = sql_fetsel('*', 'spip_souscriptions', 'id_transaction_echeance=' . intval($id_transaction))
or $sous = sql_fetsel('*', 'spip_souscriptions', 'abonne_uid=' . sql_quote($r['abo_uid']) . ' AND abo_statut=' . sql_quote('ok')))
) {
$set = [
'statut' => 'ok',
);
if ($sous['abo_statut']==="ok"){
$set['montant_cumul'] = round(floatval($sous['montant_cumul']) + floatval($r['montant']),2);
];
if ($sous['abo_statut'] === 'ok') {
$set['montant_cumul'] = round(floatval($sous['montant_cumul']) + floatval($r['montant']), 2);
$set['id_transaction_echeance'] = 0;
}
elseif($sous['abo_statut']==='non'){
} elseif ($sous['abo_statut'] === 'non') {
$set['id_transaction_echeance'] = 0;
}
sql_updateq("spip_souscriptions",$set,'id_souscription='.intval($sous['id_souscription']));
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($sous['id_souscription']));
$flux['data'].=" <br />Vous allez recevoir un email de confirmation.";
$flux['data'] .= ' <br />Vous allez recevoir un email de confirmation.';
}
return $flux;
@ -164,38 +170,39 @@ function souscription_bank_traiter_reglement($flux){
function souscription_trig_bank_reglement_en_attente($flux) {
if ($id_transaction = $flux['args']['id_transaction']
AND $r = sql_fetsel("statut,montant","spip_transactions","id_transaction=".intval($id_transaction))
AND $sous = sql_fetsel("id_souscription","spip_souscriptions_liens", array("objet=".sql_quote('transaction'), "id_objet=".intval($id_transaction)))){
$set = array(
if (
$id_transaction = $flux['args']['id_transaction']
and $r = sql_fetsel('statut,montant', 'spip_transactions', 'id_transaction=' . intval($id_transaction))
and $sous = sql_fetsel('id_souscription', 'spip_souscriptions_liens', ['objet=' . sql_quote('transaction'), 'id_objet=' . intval($id_transaction)])
) {
$set = [
'statut' => 'attente',
);
sql_updateq("spip_souscriptions",$set,'id_souscription='.intval($sous['id_souscription']));
];
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($sous['id_souscription']));
}
return $flux;
}
function souscription_bank_traiter_remboursement($flux){
function souscription_bank_traiter_remboursement($flux) {
// on marque cette souscription comme remboursee
// et mettre a jour le montant cumul si besoin
if ($id_transaction = $flux['args']['id_transaction']
AND $r = sql_fetsel("statut,montant","spip_transactions","id_transaction=".intval($id_transaction))
AND $sous = sql_fetsel("id_souscription","spip_souscriptions_liens", array("objet=".sql_quote('transaction'), "id_objet=".intval($id_transaction)))){
$set = array(
if (
$id_transaction = $flux['args']['id_transaction']
and $r = sql_fetsel('statut,montant', 'spip_transactions', 'id_transaction=' . intval($id_transaction))
and $sous = sql_fetsel('id_souscription', 'spip_souscriptions_liens', ['objet=' . sql_quote('transaction'), 'id_objet=' . intval($id_transaction)])
) {
$set = [
'statut' => 'rembourse'
);
];
#if ($sous['abo_statut']=="ok"){
# $set['montant_cumul'] = round(floatval($sous['montant_cumul']) + floatval($r['montant']),2);
#}
sql_updateq("spip_souscriptions",$set,'id_souscription='.intval($sous['id_souscription']));
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($sous['id_souscription']));
}
$flux['data'].=" <br />Souscription #".$sous['id_souscription']." associée remboursée";
$flux['data'] .= ' <br />Souscription #' . $sous['id_souscription'] . ' associée remboursée';
return $flux;
}
@ -205,82 +212,86 @@ function souscription_bank_traiter_remboursement($flux){
* @param $flux
* @return mixed
*/
function souscription_bank_abos_activer_abonnement($flux){
if (!$flux['data']){
function souscription_bank_abos_activer_abonnement($flux) {
if (!$flux['data']) {
$abo_uid = $flux['args']['abo_uid'];
$set = array(
"abonne_uid"=>sql_quote($abo_uid),
"abo_statut"=>sql_quote('ok'),
);
if ($id_transaction = $flux['args']['id_transaction']){
if (!$row = sql_fetsel("*","spip_souscriptions","id_transaction_echeance=".intval($id_transaction))
OR !$id_souscription = $row['id_souscription']){
spip_log("Pas de souscription recurente a activer pour la transaction $id_transaction",'souscriptions_abos'._LOG_ERREUR);
$set = [
'abonne_uid' => sql_quote($abo_uid),
'abo_statut' => sql_quote('ok'),
];
if ($id_transaction = $flux['args']['id_transaction']) {
if (
!$row = sql_fetsel('*', 'spip_souscriptions', 'id_transaction_echeance=' . intval($id_transaction))
or !$id_souscription = $row['id_souscription']
) {
spip_log("Pas de souscription recurente a activer pour la transaction $id_transaction", 'souscriptions_abos' . _LOG_ERREUR);
return $flux;
}
if (!$r = sql_fetsel("statut,montant","spip_transactions","id_transaction=".intval($id_transaction))){
spip_log("transaction $id_transaction inconnue (abo $abo_uid)",'souscriptions_abos'._LOG_ERREUR);
if (!$r = sql_fetsel('statut,montant', 'spip_transactions', 'id_transaction=' . intval($id_transaction))) {
spip_log("transaction $id_transaction inconnue (abo $abo_uid)", 'souscriptions_abos' . _LOG_ERREUR);
return $flux;
}
if ($r['statut']!=='ok'){
spip_log("La transaction $id_transaction n'a pas ete reglee (abo $abo_uid)",'souscriptions_abos'._LOG_ERREUR);
if ($r['statut'] !== 'ok') {
spip_log("La transaction $id_transaction n'a pas ete reglee (abo $abo_uid)", 'souscriptions_abos' . _LOG_ERREUR);
return $flux;
}
// fixer le montant cumul des dons
$set['montant_cumul'] = sql_quote($r['montant']);
}
elseif (
} elseif (
!$abo_uid
OR !($row = sql_fetsel("*","spip_souscriptions","abonne_uid=".sql_quote($abo_uid)))
){
spip_log("Impossible de retrouver l'abo_uid $abo_uid",'souscriptions_abos'._LOG_ERREUR);
or !($row = sql_fetsel('*', 'spip_souscriptions', 'abonne_uid=' . sql_quote($abo_uid)))
) {
spip_log("Impossible de retrouver l'abo_uid $abo_uid", 'souscriptions_abos' . _LOG_ERREUR);
return $flux;
}
if ($row['abo_statut']==='non'){
if ($row['abo_statut'] === 'non') {
// cela ne nous concerne pas : ce n'est pas une souscription recurrente
spip_log("activer_abonnement sur souscription #".$row['id_souscription']." non recurente",'souscriptions_abos');
spip_log('activer_abonnement sur souscription #' . $row['id_souscription'] . ' non recurente', 'souscriptions_abos');
return $flux;
}
// ici on ne traite que le premier appel, a la premiere transaction payee
// et pas les autres appels sur paiements reccurentes (bank v3.0+)
if ($row['abo_statut']==='ok'
AND $row['abonne_uid']===$abo_uid
AND (!isset($set['montant_cumul']) OR floatval($row['montant_cumul'])>=0.01)){
if (
$row['abo_statut'] === 'ok'
and $row['abonne_uid'] === $abo_uid
and (!isset($set['montant_cumul']) or floatval($row['montant_cumul']) >= 0.01)
) {
// c'est un double appel, on retourne sans rien faire
spip_log("activer_abonnement sur souscription #".$row['id_souscription']." abo_statut=ok (double appel)",'souscriptions_abos');
spip_log('activer_abonnement sur souscription #' . $row['id_souscription'] . ' abo_statut=ok (double appel)', 'souscriptions_abos');
return $flux;
}
if ($id_transaction
AND ($id_transaction==$row['id_transaction_echeance']) ){
$prochaine_echeance = date('Y-m-d H:i:s',strtotime("+1 month",strtotime($row["date_souscription"])));
if ($flux['args']['validite']==='echeance'){
$set["date_echeance"] = sql_quote($prochaine_echeance);
$set["date_fin"] = $set["date_echeance"];
}
else {
if ($prochaine_echeance<$flux['args']['validite']
OR $flux['args']['validite']<$row["date_souscription"]){
$set["date_echeance"] = sql_quote($prochaine_echeance);
}
else {
$set["date_echeance"] = sql_quote($row["date_souscription"]);
if (
$id_transaction
and ($id_transaction == $row['id_transaction_echeance'])
) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime('+1 month', strtotime($row['date_souscription'])));
if ($flux['args']['validite'] === 'echeance') {
$set['date_echeance'] = sql_quote($prochaine_echeance);
$set['date_fin'] = $set['date_echeance'];
} else {
if (
$prochaine_echeance < $flux['args']['validite']
or $flux['args']['validite'] < $row['date_souscription']
) {
$set['date_echeance'] = sql_quote($prochaine_echeance);
} else {
$set['date_echeance'] = sql_quote($row['date_souscription']);
}
$set["date_fin"] = sql_quote($flux['args']['validite']);
$set['date_fin'] = sql_quote($flux['args']['validite']);
}
$set['id_transaction_echeance'] = 0;
}
if ($row['id_souscription'] AND count($set)){
sql_update("spip_souscriptions",$set,"id_souscription=".intval($row['id_souscription']));
if ($row['id_souscription'] and count($set)) {
sql_update('spip_souscriptions', $set, 'id_souscription=' . intval($row['id_souscription']));
}
if ($row['id_souscription']){
if ($row['id_souscription']) {
$flux['data'] = $row['id_souscription'];
}
}
@ -293,9 +304,11 @@ function souscription_bank_abos_activer_abonnement($flux){
* @param array $flux
* @return array
*/
function souscription_bank_abos_decrire_echeance($flux){
if ($id_transaction = $flux['args']['id_transaction']
AND $row = sql_fetsel("*","spip_souscriptions","id_transaction_echeance=".intval($id_transaction))){
function souscription_bank_abos_decrire_echeance($flux) {
if (
$id_transaction = $flux['args']['id_transaction']
and $row = sql_fetsel('*', 'spip_souscriptions', 'id_transaction_echeance=' . intval($id_transaction))
) {
$flux['data']['montant'] = $row['montant'];
$flux['data']['montant_ht'] = $row['montant'];
}
@ -309,132 +322,134 @@ function souscription_bank_abos_decrire_echeance($flux){
* @param array
* @return array
*/
function souscription_bank_abos_renouveler($flux){
if (!$flux['data']){
function souscription_bank_abos_renouveler($flux) {
if (!$flux['data']) {
$id = $flux['args']['id'];
if (strncmp($id,"uid:",4)==0){
$where = "abonne_uid=".sql_quote(substr($id,4));
if (strncmp($id, 'uid:', 4) == 0) {
$where = 'abonne_uid=' . sql_quote(substr($id, 4));
// retrouver la souscription via la transaction si jamais on a pas cet abonne_uid
// resilience
if (!sql_countsel("spip_souscriptions",$where)
AND $id_transaction = sql_getfetsel("id_transaction","spip_transactions","statut=".sql_quote('ok')." AND abo_uid=".sql_quote(substr($id,4)))
AND $id_souscription = sql_getfetsel("id_souscription","spip_souscriptions_liens","objet=".sql_quote('transaction')." AND id_objet=".intval($id_transaction))){
$where="id_souscription=".intval($id_souscription);
if (
!sql_countsel('spip_souscriptions', $where)
and $id_transaction = sql_getfetsel('id_transaction', 'spip_transactions', 'statut=' . sql_quote('ok') . ' AND abo_uid=' . sql_quote(substr($id, 4)))
and $id_souscription = sql_getfetsel('id_souscription', 'spip_souscriptions_liens', 'objet=' . sql_quote('transaction') . ' AND id_objet=' . intval($id_transaction))
) {
$where = 'id_souscription=' . intval($id_souscription);
// mettre a jour l'abonne_uid si il est reste vide
if (!sql_getfetsel('abonne_uid','spip_souscriptions',$where)){
sql_updateq('spip_souscriptions',array('abonne_uid'=>substr($id,4)),$where);
if (!sql_getfetsel('abonne_uid', 'spip_souscriptions', $where)) {
sql_updateq('spip_souscriptions', ['abonne_uid' => substr($id, 4)], $where);
}
}
} else {
$where = 'id_souscription=' . intval($id);
}
else {
$where = "id_souscription=".intval($id);
}
if ($row = sql_fetsel("*","spip_souscriptions",$where,'','date_souscription DESC')){
$options = array(
if ($row = sql_fetsel('*', 'spip_souscriptions', $where, '', 'date_souscription DESC')) {
$options = [
'auteur' => $row['courriel'],
'parrain' => 'souscription',
'tracking_id' => $row['id_souscription'],
'id_auteur' => $row['id_auteur'],
'champs' => array(
'date_transaction' => date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']),
)
);
$inserer_transaction = charger_fonction("inserer_transaction","bank");
include_spip("action/editer_liens");
'champs' => [
'date_transaction' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']),
]
];
$inserer_transaction = charger_fonction('inserer_transaction', 'bank');
include_spip('action/editer_liens');
// verifier que c'est bien l'echeance attendue
// et sinon generer des transactions offline de rattrapage
if (!intval($row["date_echeance"])){
spip_log("souscription #".$row['id_souscription']." date echeance vide ".$row["date_echeance"],'souscriptions_abos');
$row["date_echeance"] = $row["date_souscription"];
if (!intval($row['date_echeance'])) {
spip_log('souscription #' . $row['id_souscription'] . ' date echeance vide ' . $row['date_echeance'], 'souscriptions_abos');
$row['date_echeance'] = $row['date_souscription'];
}
$date_echeance = $row['date_echeance'];
$datem45 = date('Y-m-d H:i:s',strtotime("-45 day",$_SERVER['REQUEST_TIME']));
while ($date_echeance<$datem45){
$datem45 = date('Y-m-d H:i:s', strtotime('-45 day', $_SERVER['REQUEST_TIME']));
while ($date_echeance < $datem45) {
$o = $options;
$o['champs']['date_transaction'] = $date_echeance;
$o['champs']['mode'] = 'offline';
$prochaine_echeance = date('Y-m-d H:i:s',strtotime("+1 month",strtotime($date_echeance)));
if ($id_transaction = $inserer_transaction($row['montant'],$o)){
$prochaine_echeance = date('Y-m-d H:i:s', strtotime('+1 month', strtotime($date_echeance)));
if ($id_transaction = $inserer_transaction($row['montant'], $o)) {
// regler la transacton offline
$regler_transaction = charger_fonction('regler_transaction','bank');
$regler_transaction = charger_fonction('regler_transaction', 'bank');
$regler_transaction($id_transaction);
// mettre a jour la souscription
$set = array(
$set = [
'statut' => 'ok',
'abo_statut' => 'ok',
'montant_cumul' => round(floatval($row['montant_cumul']) + floatval($row['montant']),2),
'montant_cumul' => round(floatval($row['montant_cumul']) + floatval($row['montant']), 2),
'date_echeance' => $prochaine_echeance,
'abo_fin_raison' => '', // effacer la trace d'un rappel de paiement manquant
);
sql_updateq('spip_souscriptions',$set,"id_souscription=".intval($row['id_souscription']));
$row = sql_fetsel("*","spip_souscriptions","id_souscription=".intval($row['id_souscription']));
objet_associer(array("souscription"=>$row['id_souscription']),array("transaction"=>$id_transaction));
spip_log("transaction offline $id_transaction sur souscription #".$row['id_souscription']." / prochaine echeance $prochaine_echeance",'souscriptions_abos');
];
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($row['id_souscription']));
$row = sql_fetsel('*', 'spip_souscriptions', 'id_souscription=' . intval($row['id_souscription']));
objet_associer(['souscription' => $row['id_souscription']], ['transaction' => $id_transaction]);
spip_log("transaction offline $id_transaction sur souscription #" . $row['id_souscription'] . " / prochaine echeance $prochaine_echeance", 'souscriptions_abos');
}
$date_echeance = $prochaine_echeance;
}
// si il y a deja eu une transaction echeance il y a moins de 15j sur cette souscription
// c'est un double appel, renvoyer l'id_transaction concerne
$datem15 = date('Y-m-d H:i:s',strtotime("-15 day",$_SERVER['REQUEST_TIME']));
if ($id_transaction = sql_getfetsel(
"id_transaction",
"spip_transactions",
"statut<>".sql_quote('commande')
." AND date_transaction>".sql_quote($datem15)
." AND parrain=".sql_quote('souscription')
." AND tracking_id=".intval($row['id_souscription'])
." AND id_auteur=".intval($row['id_auteur']),
"",
"date_transaction"
)){
$datem15 = date('Y-m-d H:i:s', strtotime('-15 day', $_SERVER['REQUEST_TIME']));
if (
$id_transaction = sql_getfetsel(
'id_transaction',
'spip_transactions',
'statut<>' . sql_quote('commande')
. ' AND date_transaction>' . sql_quote($datem15)
. ' AND parrain=' . sql_quote('souscription')
. ' AND tracking_id=' . intval($row['id_souscription'])
. ' AND id_auteur=' . intval($row['id_auteur']),
'',
'date_transaction'
)
) {
$flux['data'] = $id_transaction;
}
// ouvrir la transaction
elseif ($id_transaction = $inserer_transaction($row['montant'],$options)){
elseif ($id_transaction = $inserer_transaction($row['montant'], $options)) {
$prochaine_echeance = $row['date_echeance'];
$datep15 = date('Y-m-d H:i:s',strtotime("+15 day",$_SERVER['REQUEST_TIME']));
spip_log("souscription #".$row['id_souscription']." $prochaine_echeance vs $datep15","souscriptions_abos"._LOG_DEBUG);
$datep15 = date('Y-m-d H:i:s', strtotime('+15 day', $_SERVER['REQUEST_TIME']));
spip_log('souscription #' . $row['id_souscription'] . " $prochaine_echeance vs $datep15", 'souscriptions_abos' . _LOG_DEBUG);
// recaler la prochaine echeance si trop en avance (double appel anterieur ou erreur de calcul)
while($prochaine_echeance>$datep15){
$prochaine_echeance = date('Y-m-d H:i:s',strtotime("-1 month",strtotime($prochaine_echeance)));
spip_log("souscription #".$row['id_souscription']." echeance=echeance-1 month : $prochaine_echeance vs $datep15","souscriptions_abos"._LOG_DEBUG);
while ($prochaine_echeance > $datep15) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime('-1 month', strtotime($prochaine_echeance)));
spip_log('souscription #' . $row['id_souscription'] . " echeance=echeance-1 month : $prochaine_echeance vs $datep15", 'souscriptions_abos' . _LOG_DEBUG);
}
// 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 #".$row['id_souscription']." echeance=echeance+1 month : $prochaine_echeance vs $datep15","souscriptions_abos"._LOG_DEBUG);
while ($prochaine_echeance < $datep15) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime('+1 month', strtotime($prochaine_echeance)));
spip_log('souscription #' . $row['id_souscription'] . " echeance=echeance+1 month : $prochaine_echeance vs $datep15", 'souscriptions_abos' . _LOG_DEBUG);
}
// a ce stade on ne sait pas encore si la transaction est reussie ou en echec
// on ne peut donc pas incrementer le montant cumul, mais seulement mettre a jour les echeances etc
// si echec => declenchera une resiliation
// si succes => declenchera un traitement reglement ou l'on mettra a jour le cumul
$set = array(
$set = [
'id_transaction_echeance' => $id_transaction,
'statut' => 'ok',
'abo_statut' => 'ok',
'date_echeance' => $prochaine_echeance,
'abo_fin_raison' => '', // effacer la trace d'un rappel de paiement manquant
);
sql_updateq('spip_souscriptions',$set,"id_souscription=".intval($row['id_souscription']));
$row = sql_fetsel("*","spip_souscriptions","id_souscription=".intval($row['id_souscription']));
objet_associer(array("souscription"=>$row['id_souscription']),array("transaction"=>$id_transaction));
];
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($row['id_souscription']));
$row = sql_fetsel('*', 'spip_souscriptions', 'id_souscription=' . intval($row['id_souscription']));
objet_associer(['souscription' => $row['id_souscription']], ['transaction' => $id_transaction]);
$flux['data'] = $id_transaction;
// verifier si ce n'est pas la derniere transaction, auquel cas on notifie
if ($row['date_echeance']>$row['date_fin']
AND $row['date_fin']>$row['date_souscription']){
if (
$row['date_echeance'] > $row['date_fin']
and $row['date_fin'] > $row['date_souscription']
) {
// Notifications
if ($notifications = charger_fonction('notifications', 'inc', true)) {
$notifications('informersouscriptionterminee', $row['id_souscription']);
}
}
}
}
@ -449,57 +464,55 @@ function souscription_bank_abos_renouveler($flux){
* @param array $flux
* @return array
*/
function souscription_bank_abos_resilier($flux){
function souscription_bank_abos_resilier($flux) {
spip_log("souscription_bank_abos_resilier id=".$flux['args']['id'],"souscriptions_abos");
spip_log('souscription_bank_abos_resilier id=' . $flux['args']['id'], 'souscriptions_abos');
$id = $flux['args']['id'];
if (strncmp($id,"uid:",4)==0){
$where = "abonne_uid=".sql_quote(substr($id,4));
}
else {
$where = "id_souscription=".intval($id);
if (strncmp($id, 'uid:', 4) == 0) {
$where = 'abonne_uid=' . sql_quote(substr($id, 4));
} else {
$where = 'id_souscription=' . intval($id);
}
if ($row = sql_fetsel("*","spip_souscriptions",$where,'','date_souscription DESC')){
$set = array(
if ($row = sql_fetsel('*', 'spip_souscriptions', $where, '', 'date_souscription DESC')) {
$set = [
'abo_statut' => 'resilie',
'abo_fin_raison' => $flux['args']['message'],
);
if ($flux['args']['date_fin']=='date_echeance'){
$set['date_fin'] = date('Y-m-d 00:00:00',strtotime($row['date_echeance']));
if (!function_exists('souscription_derniere_echeance')){
include_spip("public/parametrer");
];
if ($flux['args']['date_fin'] == 'date_echeance') {
$set['date_fin'] = date('Y-m-d 00:00:00', strtotime($row['date_echeance']));
if (!function_exists('souscription_derniere_echeance')) {
include_spip('public/parametrer');
}
$set['date_echeance'] = souscription_derniere_echeance($row['date_echeance'],$set['date_fin']);
}
else {
$set['date_echeance'] = souscription_derniere_echeance($row['date_echeance'], $set['date_fin']);
} else {
$set['date_fin'] = $flux['args']['date_fin'];
}
$ok = true;
if ($flux['args']['notify_bank']
AND $mode_paiement = sql_getfetsel("mode","spip_transactions","abo_uid=".sql_quote($row['abonne_uid'],'','text'),"","id_transaction DESC")){
$ok = abos_resilier_notify_bank($row['abonne_uid'],$mode_paiement);
if (
$flux['args']['notify_bank']
and $mode_paiement = sql_getfetsel('mode', 'spip_transactions', 'abo_uid=' . sql_quote($row['abonne_uid'], '', 'text'), '', 'id_transaction DESC')
) {
$ok = abos_resilier_notify_bank($row['abonne_uid'], $mode_paiement);
}
if ($ok){
sql_updateq("spip_souscriptions",$set,"id_souscription=".intval($row['id_souscription']));
if ($ok) {
sql_updateq('spip_souscriptions', $set, 'id_souscription=' . intval($row['id_souscription']));
}
// si c'est une resiliation suite a refus de paiement, notifier
if (strncmp($flux['args']['message'],'[bank]',6)==0){
if (strncmp($flux['args']['message'], '[bank]', 6) == 0) {
// Notifications
if ($notifications = charger_fonction('notifications', 'inc', true)) {
$id_transaction = 0;
if (preg_match(",\b#(\d+)\b,",$flux['args']['message'],$m)){
if (preg_match(",\b#(\d+)\b,", $flux['args']['message'], $m)) {
$id_transaction = intval($m[1]);
}
$notifications('informersouscriptioninterrompue', $row['id_souscription'], array('id_transaction'=>$id_transaction,'message'=>$flux['args']['message']));
$notifications('informersouscriptioninterrompue', $row['id_souscription'], ['id_transaction' => $id_transaction, 'message' => $flux['args']['message']]);
}
}
}
else {
spip_log("Pas de souscription WHERE $where","souscriptions_abos"._LOG_ERREUR);
} else {
spip_log("Pas de souscription WHERE $where", 'souscriptions_abos' . _LOG_ERREUR);
}
return $flux;
@ -510,7 +523,7 @@ function souscription_bank_abos_resilier($flux){
* @param $taches_generales
* @return mixed
*/
function souscription_taches_generales_cron($taches_generales){
$taches_generales['surveiller_paiement_souscriptions'] = 2*3600; // 2h
function souscription_taches_generales_cron($taches_generales) {
$taches_generales['surveiller_paiement_souscriptions'] = 2 * 3600; // 2h
return $taches_generales;
}

Loading…
Cancel
Save