@ -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;
}