Rewrites xnetevents index page.
authorAnne Limoges <anne.limoges_git@polytechnique.org>
Sat, 8 Mar 2014 14:03:14 +0000 (15:03 +0100)
committerAnne Limoges <anne.limoges_git@polytechnique.org>
Sat, 8 Mar 2014 16:56:45 +0000 (17:56 +0100)
modules/xnetevents.php
modules/xnetevents/xnetevents.inc.php
templates/xnetevents/index.tpl

index a9d4d1c..38e4a28 100644 (file)
@@ -40,6 +40,8 @@ class XnetEventsModule extends PLModule
         global $globals;
 
         $page->changeTpl('xnetevents/index.tpl');
+        $this->load('xnetevents.inc.php');
+
         $action = null;
         $archive = ($archive == 'archive' && may_update());
 
@@ -151,77 +153,49 @@ class XnetEventsModule extends PLModule
                              SET event_order = {?}
                            WHERE id = {?}",
                           $order, $globals->asso('id'));
-        } else {
-            $order = XDB::fetchOneCell("SELECT event_order FROM groups
-                                         WHERE id = {?}",
-                                        $globals->asso('id'));
-        }
-        if ($order == 'desc') {
-            $evenements = XDB::iterator('SELECT  e.*, LEFT(e.debut, 10) AS first_day, LEFT(e.fin, 10) AS last_day,
-                                                 IF(e.deadline_inscription,
-                                                         e.deadline_inscription >= LEFT(NOW(), 10),
-                                                         1) AS inscr_open,
-                                                 e.deadline_inscription,
-                                                 MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid
-                                           FROM  group_events              AS e
-                                      LEFT JOIN  group_event_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
-                                          WHERE  asso_id = {?} AND  archive = {?}
-                                       GROUP BY  e.eid
-                                       ORDER BY  inscr_open DESC, debut DESC',
-                                         S::i('uid'), $globals->asso('id'), $archive ? 1 : 0);
-        } else {
-            $evenements = XDB::iterator('SELECT  e.*, LEFT(e.debut, 10) AS first_day, LEFT(e.fin, 10) AS last_day,
-                                                 IF(e.deadline_inscription,
-                                                         e.deadline_inscription >= LEFT(NOW(), 10),
-                                                         1) AS inscr_open,
-                                                 e.deadline_inscription,
-                                                 MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid
-                                           FROM  group_events              AS e
-                                      LEFT JOIN  group_event_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
-                                          WHERE  asso_id = {?} AND  archive = {?}
-                                       GROUP BY  e.eid
-                                       ORDER BY  inscr_open DESC, debut ASC',
-                                         S::i('uid'), $globals->asso('id'), $archive ? 1 : 0);
         }
+        $order = get_event_order($globals->asso('id'));
+        $evts = get_events($globals->asso('id'), $order);
         $page->assign('order', $order);
 
-        $evts = array();
         $undisplayed_events = 0;
-        $this->load('xnetevents.inc.php');
-
-        while ($e = $evenements->next()) {
+        foreach ($evts as $eid => &$e) {
             if (!is_member() && !may_update() && !$e['accept_nonmembre']) {
                 $undisplayed_events ++;
                 continue;
             }
 
             $e['show_participants'] = ($e['show_participants'] && (is_member() || may_update()));
-            $e['moments'] = XDB::fetchAllAssoc('SELECT  titre, details, montant, ei.item_id, nb, ep.paid
-                                                  FROM  group_event_items AS ei
-                                             LEFT JOIN  group_event_participants AS ep
-                                                           ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND ep.uid = {?})
-                                                 WHERE ei.eid = {?}',
-                                                S::i('uid'), $e['eid']);
-
+            $e['items'] = get_event_items($eid);
             $e['topay'] = 0;
             $e['paid']  = 0;
-            foreach ($e['moments'] as $m) {
-                $e['topay'] += $m['nb'] * $m['montant'];
-                $e['paid'] += $m['paid'];
+            $sub = get_event_subscription($eid, S::i('uid'));
+            if (empty($sub)) {
+                $e['inscrit'] = false;
+            } else {
+                $e['inscrit'] = true;
+                foreach ($e['items'] as $item_id => $m) {
+                    if (isset($sub[$item_id])) {
+                        $e['topay'] += $sub[$item_id]['nb'] * $m['montant'];
+                        $e['paid'] += $sub[$item_id]['paid'];
+                    }
+                }
             }
+            $e['sub'] = $sub;
 
-            $montant = XDB::fetchOneCell(
-                "SELECT SUM(amount) as sum_amount
-                   FROM payment_transactions AS t
-                 WHERE ref = {?} AND uid = {?}", $e['paiement_id'], S::v('uid'));
-            $e['paid'] += $montant;
+            $telepaid = get_event_telepaid($eid, S::i('uid'));
+            $e['paid'] += $telepaid;
 
-            make_event_date($e);
+            $e['date'] = make_event_date($e['debut'], $e['fin']);
+            if ($e['deadline_inscription'] == null || strtotime($e['deadline_inscription']) >= time()) {
+                $e['inscr_open'] = true;
+            } else {
+                $e['inscr_open'] = false;
+            }
 
             if (Env::has('updated') && $e['eid'] == Env::i('updated')) {
                 $page->assign('updated', $e);
             }
-            $evts[] = $e;
         }
 
         $page->assign('evenements', $evts);
index 594f0aa..7dd1ae1 100644 (file)
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
+// {{{ function get_event_order()
+/* get the order to paste the events
+ * @param $asso_id: group's id
+ */
+function get_event_order($asso_id)
+{
+    $order = XDB::fetchOneCell('SELECT g.event_order
+                                  FROM groups as g
+                                 WHERE id = {?}',
+                                       $asso_id);
+    return $order;
+}
+// }}}
+
+// {{{ function get_events()
+/* get the events of the given group ordered by the standard order for the group
+ * @param $asso_id: group's id
+ * @param $order: order to paste the events (asc or desc)
+ */
+function get_events($asso_id, $order)
+{
+    if ($order != 'asc' && $order != 'desc') {
+        $order = 'desc';
+    }
+    $evts = XDB::fetchAllAssoc('eid', "SELECT ge.eid, ge.uid, ge.intitule, ge.debut, ge.fin, ge.show_participants, ge.deadline_inscription, ge.accept_nonmembre
+                                         FROM group_events as ge
+                                        WHERE asso_id = {?}
+                                     ORDER BY ge.debut $order",
+                                              $asso_id);
+    return $evts;
+}
+// }}}
+
+// {{{ function get_event() (detail, for subs page only for now)
+/* get event details
+ * @param $eid: event's id
+ */
+function get_event($eid)
+{
+    $evt = XDB::fetchOneAssoc('SELECT ge.uid, ge.intitule, ge.descriptif, ge.debut, ge.fin, ge.deadline_inscription, ge.accept_nonmembre
+                                         FROM group_events as ge
+                                        WHERE eid = {?}',
+                                        $eid);
+    if (!is_null($evt['deadline_inscription']) && strtotime($evt['deadline_inscription']) < time()) {
+        $evt['inscr_open'] = false;
+    } else {
+        $evt['inscr_open'] = true;
+    }
+    $evt['organizer'] = User::getSilent($evt['uid'])->profile();
+    $evt['date'] = make_event_date($evt['debut'], $evt['fin']);
+
+    return $evt;
+}
+// }}}
+
+// {{{ function get_event_items()
+/** get items of the given event
+ *
+ * @param $eid : event's id
+ *
+ */
+function get_event_items($eid)
+{
+    $evt = XDB::fetchAllAssoc('item_id', 'SELECT gei.item_id, gei.titre, gei.details, gei.montant
+        FROM group_event_items as gei
+        WHERE eid = {?}',
+        $eid);
+    return $evt;
+}
+// }}}
+
+// {{{ function get_event_subscription()
+/* get all participations if uid is not specified, only the user's participation if uid specified
+ * @param $eid: event's id
+ * @param $uid: user's id
+ */
+function get_event_subscription($eid, $uid = null)
+{
+    if (!is_null($uid)) {
+        $where = ' and gep.uid = '.$uid;
+    }
+    else {
+        $where = '';
+    }
+   $sub =  XDB::fetchAllAssoc('item_id','SELECT gep.item_id, gep.nb, gep.paid FROM group_event_participants as gep
+                                          WHERE gep.eid = {?}'.$where,
+                                                $eid);
+   return $sub;
+}
+// }}}
+
+// {{{ function get_event_telepaid()
+/* get the total payments made by a user for an event
+ * @param $eid: event's id
+ * @param $uid: user's id
+ */
+function get_event_telepaid($eid, $uid)
+{
+   $telepaid = XDB::fetchOneCell('SELECT SUM(pt.amount)
+                                    FROM payment_transactions AS pt
+                               LEFT JOIN group_events as ge ON (ge.paiement_id = pt.ref)
+                                   WHERE ge.eid = {?} AND pt.uid = {?}', 
+                                         $eid, $uid);
+    return $telepaid;
+}
+// }}}
+
 // {{{ function get_event_detail()
 
 function get_event_detail($eid, $item_id = false, $asso_id = null)
@@ -96,7 +203,7 @@ function get_event_detail($eid, $item_id = false, $asso_id = null)
     $evt['paid'] += $montant;
     $evt['organizer'] = User::getSilent($evt['uid']);
 
-    make_event_date($evt);
+    $evt['date'] = make_event_date($evt['debut'], $evt['fin']);
 
     $evt['show_participants'] = ($evt['show_participants'] && $GLOBALS['IS_XNET_SITE'] && (is_member() || may_update()));
 
@@ -324,13 +431,14 @@ function event_change_shortname($page, $eid, $old, $new)
 // }}}
 
 //  {{{ function make_event_date()
-function make_event_date(&$e)
+function make_event_date($debut, $fin)
 {
-    $start     = strtotime($e['debut']);
-    $end       = strtotime($e['fin']);
-    $first_day = $e['first_day'];
-    $last_day  = $e['last_day'];
-
+    $start     = strtotime($debut);
+    $end       = strtotime($fin);
+//    $first_day = $e['first_day'];
+//    $last_day  = $e['last_day'];
+    $first_day = strftime("%d %B %Y", $start);
+    $last_day = strftime("%d %B %Y", $end);
     $date = "";
     if ($start && $end != $start) {
         if ($first_day == $last_day) {
@@ -343,7 +451,7 @@ function make_event_date(&$e)
     } else {
         $date .= "le " . strftime("%d %B %Y à %H:%M", $start);
     }
-    $e['date'] = $date;
+    return $date;
 }
 // }}}
 
index 833db76..962fdaa 100644 (file)
@@ -47,7 +47,7 @@
   {if $archive}Archives {else}[<a href="{$platal->ns}events/archive">Archives</a>] {/if}
 </h1>
 
-{if $updated}
+{if t($updated) && $updated}
 <p class='error'>
   La modification de l'inscription a été prise en compte&nbsp;!
   {if $updated.topay > $updated.paid}
 {/if}
 {/if}
 
-{foreach from=$evenements item=e}
-
+{foreach from=$evenements key=eid item=e}
 <table class="bicol" cellspacing="0" cellpadding="0">
   <colgroup>
     <col width='25%' />
   </colgroup>
   <tr>
     <th colspan="2"{if !$e.inscr_open} class="grayed"{/if}>
-      <a href="{$platal->ns}events/ical/{$e.short_name|default:$e.eid}/{$e.short_name|default:$e.eid}.ics" style="display: block; float: left;">
+      <a href="{$platal->ns}events/ical/{$eid}/{$eid}.ics" style="display: block; float: left;">
         {icon name=calendar_view_day title="Événement iCal"}
       </a>
       {$e.intitule}
       {/if}
       {if $is_admin}
       <br />
-      [<a href="{$platal->ns}events/edit/{$e.short_name|default:$e.eid}">
+      [<a href="{$platal->ns}events/edit/{$eid}">
         modifier
         {icon name=date_edit title="Édition de l'événement"}</a>]
       &nbsp;
-      [<a href="javascript:$.dynPost('{$platal->pl_self()}?token={xsrf_token}',{if !$archive}'archive'{else}'unarchive'{/if},{$e.eid})">
+      [<a href="javascript:$.dynPost('{$platal->pl_self()}?token={xsrf_token}',{if !$archive}'archive'{else}'unarchive'{/if},{$eid})">
         {if !$archive}
           archiver
           {icon name=package_add title="Archivage"}</a>]
           {icon name=package_delete title="Désarchivage"}</a>]
         {/if}
       &nbsp;
-      [<a href="javascript:$.dynPost('{$platal->ns}events?token={xsrf_token}','del',{$e.eid})"
+      [<a href="javascript:$.dynPost('{$platal->ns}events?token={xsrf_token}','del',{$eid})"
         onclick="return confirm('Supprimer l\'événement effacera la liste des inscrits et des paiements.\n Es-tu sûr de vouloir supprimer l\'événement&nbsp;?')">
         supprimer
       {icon name=delete title='Suppression'}</a>]
     <td class="titre">Informations&nbsp;:</td>
     <td class='actions'>
       {if $is_admin || $e.show_participants}
-      <a href="{$platal->ns}events/admin/{$e.short_name|default:$e.eid}">
+      <a href="{$platal->ns}events/admin/{$eid}">
         consulter la liste des participants
         {icon name=group title="Liste des participants"}
       </a><br />
     <td class="titre">
       État inscription&nbsp;:
       {if $e.inscr_open}
-        <input type="hidden" name="evt_{counter}" value="{$e.eid}" />
+        <input type="hidden" name="evt_{counter}" value="{$eid}" />
       {/if}
     </td>
     <td>
       {if !$e.inscrit}
       <span class='error'>Non inscrit</span><br />
       {else}
-        {foreach from=$e.moments item=m}
-        {if !$m.nb}
+        {foreach from=$e.items key=item_id item=m}
+        {if !t($e.sub.$item_id) || !$e.sub.$item_id.nb}
         Tu ne viendras pas
         {else}
-        Tu as inscrit {$m.nb} personne{if $m.nb > 1}s{/if}
+        Tu as inscrit {$e.sub.$item_id.nb} personne{if $e.sub.$item_id.nb > 1}s{/if}
         {/if} à <em>{$m.titre}</em>.<br />
         {/foreach}
       {/if}
         {else}
         Tu as déjà payé les {$e.paid|replace:'.':','}&nbsp;&euro; de ton inscription.
         {/if}
-        {if $e.paiement_id &&  $e.paid < $e.topay}
+        {if t($e.paiement_id) &&  $e.paid < $e.topay}
         [<a href="{$platal->ns}payment/{$e.paiement_id}?montant={math equation="a-b" a=$e.topay b=$e.paid}">
         Payer en ligne</a>]
         {/if}
   <tr>
     <td colspan='2' class='center'>
       <strong>
-      <a href='{$platal->ns}events/sub/{$e.short_name|default:$e.eid}'>
+      <a href='{$platal->ns}events/sub/{$eid}'>
         Gérer mon inscription et voir les détails de l'événement.
       </a>
       </strong>