From 75d4576e39af9175f9912cc4635524f5a73e1872 Mon Sep 17 00:00:00 2001
From: =?utf8?q?St=C3=A9phane=20Jacob?=
Date: Tue, 13 Sep 2011 17:38:24 +0200
Subject: [PATCH] Replaces payments page on main site by a donation page
(Closes #1537).
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Jacob
---
ChangeLog | 3 +
include/validations/paiements.inc.php | 11 ++-
modules/payment.php | 99 ++++++++++++---------------
modules/xnetevents.php | 2 +-
templates/payment/{index.tpl => donation.tpl} | 82 ++++++++--------------
templates/skin/common.footer.tpl | 4 ++
templates/skin/common.menu.tpl | 3 -
templates/xnetevents/edit.tpl | 1 -
upgrade/1.1.4/01_payments.sql | 3 +
upgrade/1.1.4/README | 5 ++
10 files changed, 90 insertions(+), 123 deletions(-)
rename templates/payment/{index.tpl => donation.tpl} (71%)
create mode 100644 upgrade/1.1.4/01_payments.sql
create mode 100644 upgrade/1.1.4/README
diff --git a/ChangeLog b/ChangeLog
index 61e1ab5..99763d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,9 @@ Bug/Wish:
* Core:
- #1523: Rename AUTH_MDP to AUTH_PASSWD -JAC
+ * Payments:
+ - #1537: Replaces payments page on main site by a donation page -JAC
+
================================================================================
VERSION 1.1.3 10 09 2011
diff --git a/include/validations/paiements.inc.php b/include/validations/paiements.inc.php
index 2509806..448167e 100644
--- a/include/validations/paiements.inc.php
+++ b/include/validations/paiements.inc.php
@@ -37,7 +37,6 @@ class PayReq extends Validate
public $asso;
public $evt;
public $evt_intitule;
- public $donation;
public $rules = "Vérifier que les balises <salutation>, <prenom>, <nom>, <montant> et <comment> n'ont pas été modifiées.
Vérifier que le demandeur n'a pas laissé les crochets [].
@@ -47,7 +46,7 @@ Si le télépaiement n'est pas lié à un groupe ou supérieur à 51 euros, lais
public function __construct(User $_user, $_intitule, $_site, $_montant, $_msg,
$_montantmin=0, $_montantmax=999, $_asso_id = 0,
- $_evt = 0, $_donation = false, $_stamp=0)
+ $_evt = 0, $_stamp=0)
{
parent::__construct($_user, false, 'paiements', $_stamp);
@@ -56,7 +55,6 @@ Si le télépaiement n'est pas lié à un groupe ou supérieur à 51 euros, lais
$this->msg_reponse = $_msg;
$this->asso_id = (string)$_asso_id;
$this->evt = (string)$_evt;
- $this->donation = $_donation;
$this->montant = $_montant;
$this->montant_min = $_montantmin;
$this->montant_max = $_montantmax;
@@ -169,10 +167,9 @@ Si le télépaiement n'est pas lié à un groupe ou supérieur à 51 euros, lais
{
$res = XDB::query("SELECT MAX(id) FROM payments");
$id = $res->fetchOneCell()+1;
- $flags = ($this->donation ? 'donation' : '');
- $ret = XDB::execute('INSERT INTO payments (id, text, url, flags, amount_def, amount_min, amount_max, mail, confirmation, asso_id)
- VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
- $id, $this->titre, $this->site, $flags, $this->montant, $this->montant_min,
+ $ret = XDB::execute('INSERT INTO payments (id, text, url, amount_def, amount_min, amount_max, mail, confirmation, asso_id)
+ VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+ $id, $this->titre, $this->site, $this->montant, $this->montant_min,
$this->montant_max, $this->user->bestEmail(), $this->msg_reponse, $this->asso_id);
if ($this->asso_id && $this->evt) {
XDB::execute("UPDATE group_events
diff --git a/modules/payment.php b/modules/payment.php
index 2641b42..863ce41 100644
--- a/modules/payment.php
+++ b/modules/payment.php
@@ -105,9 +105,9 @@ class PaymentModule extends PLModule
function handlers()
{
return array(
- 'payment' => $this->make_hook('payment', AUTH_PASSWD, 'payment'),
- 'payment/cyber2_return' => $this->make_hook('cyber2_return', AUTH_PUBLIC, 'user', NO_HTTPS),
- 'payment/paypal_return' => $this->make_hook('paypal_return', AUTH_PUBLIC, 'user', NO_HTTPS),
+ 'donation' => $this->make_hook('donation', AUTH_COOKIE, 'user'),
+ 'donation/cyber2_return' => $this->make_hook('cyber2_return', AUTH_PUBLIC, 'user', NO_HTTPS),
+ 'donation/paypal_return' => $this->make_hook('paypal_return', AUTH_PUBLIC, 'user', NO_HTTPS),
'%grp/paiement' => $this->make_hook('xnet_payment', AUTH_PASSWD, 'user'),
'%grp/payment' => $this->make_hook('xnet_payment', AUTH_PASSWD, 'user'),
'%grp/payment/csv' => $this->make_hook('payment_csv', AUTH_PASSWD, 'groupadmin'),
@@ -123,43 +123,25 @@ class PaymentModule extends PLModule
);
}
- function handler_payment($page, $ref = -1)
+ function handler_donation($page)
{
global $globals;
$this->load('money.inc.php');
- if (!empty($GLOBALS['IS_XNET_SITE'])) {
- if (!$globals->asso('id')) {
- return PL_NOT_FOUND;
- }
- $res = XDB::query('SELECT asso_id
- FROM payments
- WHERE asso_id = {?} AND id = {?}',
- $globals->asso('id'), $ref);
- if (!$res->numRows()) {
- return PL_FORBIDDEN;
- }
- }
- $page->changeTpl('payment/index.tpl');
- $page->setTitle('Télépaiements');
+ $page->changeTpl('payment/donation.tpl');
+ $page->setTitle("Don à l'association Polytechnique.org");
- // initialisation
- $op = Env::v('op', 'select');
$meth = new PayMethod(Env::i('methode', -1));
- $pay = new Payment($ref);
+ $pay = new Payment();
- if($pay->flags->hasflag('old')){
- $page->trigError("La transaction selectionnée est périmée.");
- $pay = new Payment();
- }
- $val = Env::v('montant') != 0 ? Env::v('montant') : $pay->amount_def;
+ $val = (Post::v('amount') != 0) ? Post::v('amount') : $pay->amount_def;
- if (($e = $pay->check($val)) !== true) {
- $page->trigError($e);
+ if (($error = $pay->check($val)) !== true) {
+ $page->trigError($error);
}
- if ($op == 'submit') {
+ if (Post::has('op') && Post::v('op', 'select') == 'submit') {
$pay->init($val, $meth);
$pay->prepareform($pay);
} else {
@@ -167,42 +149,47 @@ class PaymentModule extends PLModule
FROM payment_transactions
WHERE uid = {?} AND ref = {?}
ORDER BY ts_confirmed DESC',
- S::v('uid', -1), $ref);
+ S::v('uid', -1), $pay->id);
if ($res->total()) {
$page->assign('transactions', $res);
}
- if ($pay->flags->hasflag('donation')) {
- $donations = XDB::fetchAllAssoc('SELECT IF(p.display,
- IF(ap.pid IS NOT NULL, CONCAT(a.full_name, \' (\', pd.promo, \')\'), a.full_name),
- \'XXXX\') AS name, p.amount
- FROM payment_transactions AS p
- INNER JOIN accounts AS a ON (a.uid = p.uid)
- LEFT JOIN account_profiles AS ap ON (a.uid = ap.uid AND FIND_IN_SET(\'owner\', ap.perms))
- LEFT JOIN profile_display AS pd ON (ap.pid = pd.pid)
- WHERE p.ref = {?}
- ORDER BY LENGTH(p.amount) DESC, p.amount DESC, name',
- $ref);
- $sum = 0;
- foreach ($donations as $d) {
- $sum += $d['amount'];
- }
-
- $page->assign('donations', $donations);
- $page->assign('sum', strtr($sum, '.', ','));
- }
- }
-
- $val = floor($val*100)/100;
- $page->assign('montant', $val);
+ $biggest_donations = XDB::fetchAllAssoc('SELECT IF(p.display,
+ IF(ap.pid IS NOT NULL, CONCAT(a.full_name, \' (\', pd.promo, \')\'), a.full_name),
+ \'XXXX\') AS name, p.amount, p.ts_confirmed
+ FROM payment_transactions AS p
+ INNER JOIN accounts AS a ON (a.uid = p.uid)
+ LEFT JOIN account_profiles AS ap ON (a.uid = ap.uid AND FIND_IN_SET(\'owner\', ap.perms))
+ LEFT JOIN profile_display AS pd ON (ap.pid = pd.pid)
+ WHERE p.ref = {?}
+ ORDER BY LENGTH(p.amount) DESC, p.amount DESC, name
+ LIMIT 10',
+ $pay->id);
+
+ $donations = XDB::fetchAllAssoc('(SELECT SUM(amount) AS amount, YEAR(ts_confirmed) AS year, MONTH(ts_confirmed) AS month, ts_confirmed
+ FROM payment_transactions
+ WHERE ref = {?} AND YEAR(ts_confirmed) = YEAR(CURDATE())
+ GROUP BY month)
+ UNION
+ (SELECT SUM(amount) AS amount, YEAR(ts_confirmed) AS year, 0 AS month, ts_confirmed
+ FROM payment_transactions
+ WHERE ref = {?} AND YEAR(ts_confirmed) < YEAR(CURDATE())
+ GROUP BY year)
+ ORDER BY year DESC, month DESC',
+ $pay->id, $pay->id);
+
+ $page->assign('biggest_donations', $biggest_donations);
+ $page->assign('donations', $donations);
+ }
+
+ $val = floor($val * 100) / 100;
+ $page->assign('amount', $val);
$page->assign('comment', Env::v('comment'));
$page->assign('meth', $meth);
$page->assign('pay', $pay);
- $page->assign('evtlink', $pay->event());
$page->assign('sex', S::user()->isFemale());
- $page->assign('donation', $pay->flags->hasflag('donation'));
}
function handler_cyber2_return($page, $uid = null)
@@ -925,7 +912,7 @@ class PaymentLogsImporter extends CSVImporter {
// convert date
$a['date'] = preg_replace('/([0-9]{2})\/([0-9]{2})\/([0-9]{4}).*/', '\3-\2-\1', $a['date']);
$a['date'] = preg_replace('/T.*/','', $a['date']);
-
+
// convert money
$a['amount'] = str_replace(',', '.', $a['amount']);
$a['commission'] = str_replace(',', '.', $a['commission']);
diff --git a/modules/xnetevents.php b/modules/xnetevents.php
index ba0a815..e2c4027 100644
--- a/modules/xnetevents.php
+++ b/modules/xnetevents.php
@@ -463,7 +463,7 @@ class XnetEventsModule extends PLModule
Post::v('intitule')." - ".$globals->asso('nom'),
Post::v('site'), $money_defaut,
Post::v('confirmation'), 0, 999,
- $globals->asso('id'), $eid, Post::b('donation'));
+ $globals->asso('id'), $eid);
if ($p->accept()) {
$p->submit();
} else {
diff --git a/templates/payment/index.tpl b/templates/payment/donation.tpl
similarity index 71%
rename from templates/payment/index.tpl
rename to templates/payment/donation.tpl
index 69b0bc7..30ce85e 100644
--- a/templates/payment/index.tpl
+++ b/templates/payment/donation.tpl
@@ -20,11 +20,10 @@
{* *}
{**************************************************************************}
-
-Télépaiements
-
{if $smarty.request.op eq "submit" and !$pl_errors}
+Don à l'association Polytechnique.org
+
Paiement via {$meth->text} |
@@ -35,7 +34,7 @@
Montant |
- {$montant} € |
+ {$amount} € |
{if $comment}
@@ -73,7 +72,7 @@
En cliquant sur "Valider", tu seras redirigé{if $sex}e{/if} vers le site de {$pay->api->nomsite}, où il te
-sera demandé de saisir ton numéro de carte bancaire. Lorsque le paiement aura été effectué, tu
+sera demandé de saisir ton numéro de carte bancaire. Lorsque le paiement aura été effectué, tu
recevras une confirmation par email.
{if $pay->api->text}
@@ -81,48 +80,15 @@ recevras une confirmation par email.
{$pay->api->text}
{/if}
-{if $evtlink}
-
-Si tu n'es pas encore inscrit à cet événement, n'oublie pas d'aller t'inscrire.
-
-{/if}
{else}
-
+{include wiki=Docs.Dons}