* 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
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 [].
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);
$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;
{
$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
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'),
);
}
- 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 {
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)
// 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']);
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 {
{* *}
{**************************************************************************}
-
-<h1>Télépaiements</h1>
-
{if $smarty.request.op eq "submit" and !$pl_errors}
+<h1>Don à l'association Polytechnique.org</h1>
+
<table class="bicol">
<tr>
<th colspan="2">Paiement via {$meth->text}</th>
</tr>
<tr>
<td><b>Montant</b></td>
- <td>{$montant} €</td>
+ <td>{$amount} €</td>
</tr>
{if $comment}
<tr>
</table>
<p>
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.
</p>
{if $pay->api->text}
{$pay->api->text}
</p>
{/if}
-{if $evtlink}
-<p class="erreur">
-Si tu n'es pas encore inscrit à cet événement, n'oublie pas d'aller t'<a href='http://www.polytechnique.net/{$evtlink.diminutif}/events/sub/{$evtlink.eid}'>inscrire</a>.
-</p>
-{/if}
{else}
-<script type='text/javascript'>
-{literal}
-function payment_submit(form)
-{
- form.op.value = 'select';
- form.montant.value = 0;
- form.action = 'payment/' + form.ref.value;
- form.submit();
-}
-{/literal}
-</script>
+{include wiki=Docs.Dons}
<form method="post" action="{$platal->pl_self()}">
<table class="bicol">
<tr>
- <th colspan="2">Effectuer un télépaiement</th>
- </tr>
- <tr>
- <td>Transaction</td>
- <td>
- {if t($asso)}
- <strong>{$pay->text}</strong><input type="hidden" name="ref" value="{$pay->id}" />
- {else}
- <select name="ref" onchange="payment_submit(this.form)">
- {select_db_table table="payments" valeur=$pay->id
- where="WHERE FIND_IN_SET('old', t.flags) = 0"
- join="LEFT JOIN groups AS g ON (t.asso_id = g.id)" group="g.nom"}
- </select>
- {/if}
- {if $pay->url}
- <br />
- <a href="{$pay->url}">plus d'informations</a>
- {/if}
- </td>
+ <th colspan="2">Effectuer le don</th>
</tr>
<tr>
<td>Méthode</td>
</tr>
<tr>
<td>Montant</td>
- <td><input type="text" name="montant" size="13" class='right' value="{$montant}" /> €</td>
+ <td><input type="text" name="amount" size="13" class='right' value="{$pay->amount_def}" /> €</td>
</tr>
<tr>
<td>Commentaire</td>
<td><textarea name="comment" rows="5" cols="30"></textarea></td>
</tr>
- {if t($donation)}
<tr>
- <td>Afficher ton nom dans la liste des donateurs sur {#globals.core.sitename#}</td>
+ <td>Afficher ton nom dans la liste des donateurs</td>
<td>
<label>Oui<input type="radio" name="display" value="1" checked="checked" /></label>
-
<label><input type="radio" name="display" value="0" />Non</label>
</td>
</tr>
- {/if}
<tr>
<td> </td>
<td>
- {if !t($donation)}<input type="hidden" name="display" value="0" />{/if}
<input type="hidden" name="op" value="submit" />
<input type="submit" value="Continuer" />
</td>
</form>
{if t($transactions)}
-<p class="descr">Tu as déjà effectué des paiements pour cette transaction :</p>
+<p class="descr">Tu as déjà effectué les dons suivants :</p>
<table class="bicol">
<tr><th>Date</th><th>Montant</th></tr>
{iterate from=$transactions item=t}
</table>
{/if}
-{if t($donation)}
-{if !t($donations)}
-<p class="descr">Aucun don n'a encore été recueilli.</p>
-{else}
-<p class="descr">Les dons suivants ont déjà été recueillis (pour un total de {$sum} €) :</p>
+<p class="descr">Les 10 plus gros dons sont les suivants :</p>
<table class="bicol">
<tr>
<th>Nom</th>
<th>Montant</th>
+ <th>Date</th>
</tr>
- {foreach from=$donations item=d}
+ {foreach from=$biggest_donations item=d}
<tr class="{cycle values="pair,impair"}">
<td>{$d.name}</td>
<td class="center">{$d.amount|replace:'.':','} €</td>
+ <td>{$d.ts_confirmed|date_format}</td>
</tr>
{/foreach}
</table>
-{/if}
-{/if}
-{/if}
+<p class="descr">Les dons par période :</p>
+<table class="tinybicol">
+ <tr>
+ <th>Période</th>
+ <th>Montant</th>
+ </tr>
+ {foreach from=$donations item=d}
+ <tr class="{cycle values="pair,impair"}">
+ <td>{if $d.month neq 0}{$d.ts_confirmed|date_format:"%B %Y"}{else}{$d.ts_confirmed|date_format:"%Y"}{/if}</td>
+ <td style="text-align: right">{$d.amount|replace:'.':','} €</td>
+ </tr>
+ {/foreach}
+</table>
+{/if}
{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
<a href="Reference/Convention-AX">Lien avec l'AX</a>
-
<a href="Equipe/APropos">À propos de ce site et ses équipes</a>
+ {if hasPerm('payment')}
+ -
+ <a href="donation">Faire un don</a>
+ {/if}
<br />
<a href="Docs/Ethique">Services et éthique</a>
| <a href="Reference/Charte">Charte</a>
{if hasPerm('user')}
<div class="menu_item"><a href="lists">Listes de diffusion</a></div>
{/if}
-{if hasPerm('payment')}
-<div class="menu_item"><a href="payment">Télépaiements</a></div>
-{/if}
{if hasPerm('mail')}
<div class="menu_item"><a href="emails/antispam/submit">Soumettre un spam</a></div>
{/if}
{$profile->fullName("promo")}{/if}</textarea><br />
{assign var='asso_url' value=$globals->baseurl|cat:'/'|cat:$platal->ns}
Page internet de l'événement : <input size="40" name="site" value="{$paiement_site|default:$asso->site|default:$asso_url}" /><br />
- <label><input type="checkbox" name="donation" {if t($donation)}check="checked"{/if} />Afficher la liste des payeurs ne s'y opposant pas sur {#globals.core.sitename#}</label><br />
Le nouveau paiement sera activé automatiquement après validation par le trésorier de Polytechnique.org,
ce qui sera fait sous peu.
<script type="text/javascript">//<![CDATA[
--- /dev/null
+ALTER TABLE payments MODIFY COLUMN flags SET('unique', 'old') NOT NULL DEFAULT '';
+
+-- vim:set syntax=mysql:
--- /dev/null
+platal.conf:
+[Money]
+mpay_def_id = 386 # donation id
+
+https://www.polytechnique.org/Docs/Dons must be adapted after the release (cf https://dev.m4x.org/~x2004jacob/Docs/Dons).