Replaces payments page on main site by a donation page (Closes #1537).
authorStéphane Jacob <sj@m4x.org>
Tue, 13 Sep 2011 15:38:24 +0000 (17:38 +0200)
committerStéphane Jacob <sj@m4x.org>
Tue, 13 Sep 2011 15:38:24 +0000 (17:38 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
ChangeLog
include/validations/paiements.inc.php
modules/payment.php
modules/xnetevents.php
templates/payment/donation.tpl [moved from templates/payment/index.tpl with 71% similarity]
templates/skin/common.footer.tpl
templates/skin/common.menu.tpl
templates/xnetevents/edit.tpl
upgrade/1.1.4/01_payments.sql [new file with mode: 0644]
upgrade/1.1.4/README [new file with mode: 0644]

index 61e1ab5..99763d5 100644 (file)
--- 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
 
index 2509806..448167e 100644 (file)
@@ -37,7 +37,6 @@ class PayReq extends Validate
     public $asso;
     public $evt;
     public $evt_intitule;
-    public $donation;
 
     public $rules = "Vérifier que les balises &lt;salutation&gt;, &lt;prenom&gt;, &lt;nom&gt;,  &lt;montant&gt; et &lt;comment&gt; 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
index 2641b42..863ce41 100644 (file)
@@ -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']);
index ba0a815..e2c4027 100644 (file)
@@ -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 {
similarity index 71%
rename from templates/payment/index.tpl
rename to templates/payment/donation.tpl
index 69b0bc7..30ce85e 100644 (file)
 {*                                                                        *}
 {**************************************************************************}
 
-
-<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>
@@ -35,7 +34,7 @@
   </tr>
   <tr>
     <td><b>Montant</b></td>
-    <td>{$montant} &euro;</td>
+    <td>{$amount} &euro;</td>
   </tr>
 {if $comment}
   <tr>
@@ -73,7 +72,7 @@
 </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}
@@ -81,48 +80,15 @@ recevras une confirmation par email.
 {$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>
@@ -134,26 +100,23 @@ function payment_submit(form)
     </tr>
     <tr>
       <td>Montant</td>
-      <td><input type="text" name="montant" size="13" class='right' value="{$montant}" /> &euro;</td>
+      <td><input type="text" name="amount" size="13" class='right' value="{$pay->amount_def}" /> &euro;</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>
         &nbsp;-&nbsp;
         <label><input type="radio" name="display" value="0" />Non</label>
       </td>
     </tr>
-    {/if}
     <tr>
       <td>&nbsp;</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>
@@ -162,7 +125,7 @@ function payment_submit(form)
 </form>
 
 {if t($transactions)}
-<p class="descr">Tu as déjà effectué des paiements pour cette transaction&nbsp;:</p>
+<p class="descr">Tu as déjà effectué les dons suivants&nbsp;:</p>
 <table class="bicol">
 <tr><th>Date</th><th>Montant</th></tr>
 {iterate from=$transactions item=t}
@@ -174,27 +137,36 @@ function payment_submit(form)
 </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} &euro;)&nbsp;:</p>
+<p class="descr">Les 10 plus gros dons sont les suivants&nbsp;:</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:'.':','} &euro;</td>
+    <td>{$d.ts_confirmed|date_format}</td>
   </tr>
   {/foreach}
 </table>
-{/if}
-{/if}
 
-{/if}
+<p class="descr">Les dons par période&nbsp;:</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:'.':','} &euro;</td>
+  </tr>
+  {/foreach}
+</table>
 
+{/if}
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 8b7eeba..8590893 100644 (file)
   <a href="Reference/Convention-AX">Lien avec l'AX</a>
   &nbsp;-&nbsp;
   <a href="Equipe/APropos">À propos de ce site et ses équipes</a>
+  {if hasPerm('payment')}
+  &nbsp;-&nbsp;
+  <a href="donation">Faire un don</a>
+  {/if}
 <br />
   <a href="Docs/Ethique">Services et éthique</a>
   | <a href="Reference/Charte">Charte</a>
index c883869..a50c9f4 100644 (file)
@@ -71,9 +71,6 @@
 {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}
index 09053af..99292bc 100644 (file)
@@ -201,7 +201,6 @@ Ton inscription à [METS LE NOM DE L'ÉVÉNEMENT ICI] a bien été enregistrée
 {$profile->fullName("promo")}{/if}</textarea><br />
         {assign var='asso_url' value=$globals->baseurl|cat:'/'|cat:$platal->ns}
         Page internet de l'événement&nbsp;: <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[
diff --git a/upgrade/1.1.4/01_payments.sql b/upgrade/1.1.4/01_payments.sql
new file mode 100644 (file)
index 0000000..b33d220
--- /dev/null
@@ -0,0 +1,3 @@
+ALTER TABLE payments MODIFY COLUMN flags SET('unique', 'old') NOT NULL DEFAULT '';
+
+-- vim:set syntax=mysql:
diff --git a/upgrade/1.1.4/README b/upgrade/1.1.4/README
new file mode 100644 (file)
index 0000000..ecbf37f
--- /dev/null
@@ -0,0 +1,5 @@
+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).