Allows payments for non logged users.
authorStéphane Jacob <sj@m4x.org>
Mon, 19 Sep 2011 15:09:50 +0000 (17:09 +0200)
committerStéphane Jacob <sj@m4x.org>
Mon, 19 Sep 2011 15:09:50 +0000 (17:09 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
modules/payment.php
modules/payment/money.inc.php
modules/payment/money/bplccyberplus.inc.php
modules/payment/money/paypal.inc.php
templates/payment/payment.tpl
upgrade/1.1.4/01_payments.sql

index 03d9119..3c94da0 100644 (file)
@@ -105,7 +105,7 @@ class PaymentModule extends PLModule
     function handlers()
     {
         return array(
-            'payment'                      => $this->make_hook('payment',          AUTH_COOKIE, 'user'),
+            'payment'                      => $this->make_hook('payment',          AUTH_PUBLIC, 'user'),
             '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),
             '%grp/paiement'                => $this->make_hook('xnet_payment',     AUTH_PASSWD, 'user'),
@@ -125,15 +125,20 @@ class PaymentModule extends PLModule
 
     function handler_payment($page, $ref = -1)
     {
-        $this->load('money.inc.php');
-
         $page->changeTpl('payment/payment.tpl');
         $page->setTitle('Télépaiement');
+        $this->load('money.inc.php');
 
         $meth = new PayMethod(Env::i('methode', -1));
         $pay  = new Payment($ref);
 
-        if($pay->flags->hasflag('old')){
+        if (!$pay->flags->hasflag('public') && (!S::user() || !S::logged())) {
+            $page->kill("Vous n'avez pas les permissions nécessaires pour accéder à cette page.");
+        } else {
+            $page->assign('public', true);
+        }
+
+        if ($pay->flags->hasflag('old')) {
             $page->kill('La transaction selectionnée est périmée.');
         }
 
@@ -144,9 +149,22 @@ class PaymentModule extends PLModule
         }
 
         if (Post::has('op') && Post::v('op', 'select') == 'submit') {
-            $pay->init($val, $meth);
-            $pay->prepareform($pay);
-        } else {
+            if (S::logged()) {
+                $user = S::user();
+            } else {
+                $user = User::getSilent(Post::t('login'));
+            }
+
+            if (is_null($user)) {
+                $page->trigError("L'identifiant est erroné.");
+                $page->assign('login_error', true);
+                $page->assign('login', Post::t('login'));
+            } else {
+                $pay->init($val, $meth);
+                $pay->prepareform($user);
+                $page->assign('sex', $user->isFemale());
+            }
+        } elseif (S::logged()) {
             $res = XDB::iterator('SELECT  ts_confirmed, amount
                                     FROM  payment_transactions
                                    WHERE  uid = {?} AND ref = {?}
@@ -196,7 +214,6 @@ class PaymentModule extends PLModule
         $page->assign('meth', $meth);
         $page->assign('pay', $pay);
         $page->assign('evtlink', $pay->event());
-        $page->assign('sex', S::user()->isFemale());
     }
 
     function handler_cyber2_return($page, $uid = null)
index f91fb25..ecd49f5 100644 (file)
@@ -67,9 +67,9 @@ class Payment
         $this->api = new $api($val);
     }
 
-    function prepareform()
+    function prepareform(User $user)
     {
-        return $this->api->prepareform($this);
+        return $this->api->prepareform($this, $user);
     }
 
     function event()
index f0b40e4..e82fb8f 100644 (file)
@@ -60,7 +60,7 @@ class BPLCCyberPlus
         return trim(preg_replace('/\s\s+/', ' ', preg_replace('/[^a-zA-Z0-9]/', ' ', $string)));
     }
 
-    function prepareform($pay)
+    function prepareform($pay, $user)
     {
         global $globals, $platal;
         $log = S::v('log');
@@ -79,9 +79,9 @@ class BPLCCyberPlus
             'vads_return_mode' => 'NONE',
             'vads_url_return' => $pay->url ? $pay->url : $globals->baseurl . '/' . $platal->ns);
         $this->infos['client'] = Array(
-            'vads_cust_email' => S::user()->bestEmail(),
+            'vads_cust_email' => $user->bestEmail(),
             'vads_cust_id' => S::v('uid'),
-            'vads_cust_name' => substr(self::replaceNonAlpha(replace_accent(S::user()->shortName())), 0, 127));
+            'vads_cust_name' => substr(self::replaceNonAlpha(replace_accent($user->shortName())), 0, 127));
         $this->infos['commande'] = Array(
             'vads_amount' => $this->val,
             'vads_currency' => '978', # Euro
index 521733a..aba2f9a 100644 (file)
@@ -33,7 +33,7 @@ class PayPal
         $this->val_number = $val;
     }
 
-    function prepareform($pay)
+    function prepareform($pay, $user)
     {
         // Documentation:
         // https://www.paypal.com/developer
@@ -43,7 +43,6 @@ class PayPal
         global $globals, $platal;
 
         $this->urlform = 'https://' . $globals->money->paypal_site . '/cgi-bin/webscr';
-        $user = S::user();
 
         $roboturl = str_replace("https://","http://",$globals->baseurl)
                   . '/' . $platal->ns . "payment/paypal_return/" . S::v('uid')
index cface37..07c849b 100644 (file)
@@ -117,8 +117,14 @@ Si tu n'es pas encore inscrit à cet événement, n'oublie pas d'aller t'<a href
     </tr>
     <tr>
       <td>Montant</td>
-      <td><input type="text" name="amount" size="13" class='right' value="{$pay->amount_def}" /> &euro;</td>
+      <td><input type="text" name="amount" size="13" class="right" value="{$pay->amount_def}" /> &euro;</td>
     </tr>
+    {if t($public)}
+    <tr>
+      <td>Identifiant <small>(prenom.nom.promo)</small></td>
+      <td><input type="text" name="login" size="30" /></td>
+    </tr>
+    {/if}
     <tr>
       <td>Commentaire</td>
       <td><textarea name="comment" rows="5" cols="30"></textarea></td>
index b33d220..49e0c91 100644 (file)
@@ -1,3 +1,4 @@
 ALTER TABLE payments MODIFY COLUMN flags SET('unique', 'old') NOT NULL DEFAULT '';
+ALTER TABLE payments MODIFY COLUMN flags SET('unique', 'old', 'public') NOT NULL DEFAULT '';
 
 -- vim:set syntax=mysql: