+
+ function handler_xnet_payment(&$page, $pid = null)
+ {
+ global $globals;
+
+ $perms = S::v('perms');
+ if (!$perms->hasFlag('groupmember')) {
+ if (is_null($pid)) {
+ return PL_FORBIDDEN;
+ }
+ $res = XDB::query("SELECT 1
+ FROM groupex.evenements AS e
+ INNER JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND uid = {?})
+ WHERE e.paiement_id = {?} AND e.asso_id = {?}",
+ S::i('uid'), $pid, $globals->asso('id'));
+ if ($res->numRows() == 0) {
+ return PL_FORBIDDEN;
+ }
+ }
+
+ if (!is_null($pid)) {
+ return $this->handler_payment($page, $pid);
+ }
+ $page->changeTpl('payment/xnet.tpl');
+
+ $res = XDB::query(
+ "SELECT id, text, url
+ FROM {$globals->money->mpay_tprefix}paiements
+ WHERE asso_id = {?} AND NOT FIND_IN_SET('old', flags)
+ ORDER BY id DESC", $globals->asso('id'));
+ $tit = $res->fetchAllAssoc();
+ $page->assign('titres', $tit);
+
+ $order = Env::v('order', 'timestamp');
+ $orders = array('timestamp', 'nom', 'promo', 'montant', 'comment');
+ if (!in_array($order, $orders)) {
+ $order = 'timestamp';
+ } elseif ($order == 'comment') {
+ $order = 't.comment';
+ }
+ $inv_order = Env::v('order_inv', 0);
+ $page->assign('order', $order);
+ $page->assign('order_inv', !$inv_order);
+
+ if ($order == 'timestamp') {
+ $inv_order = !$inv_order;
+ }
+
+ if ($inv_order) {
+ $inv_order = ' DESC';
+ } else {
+ $inv_order = '';
+ }
+ if ($order == 'montant') {
+ $order = 'LENGTH(montant) '.$inv_order.', montant';
+ }
+
+ $orderby = 'ORDER BY '.$order.$inv_order;
+ if ($order != 'nom') {
+ $orderby .= ', nom'; $inv_order = '';
+ }
+ $orderby .= ', prenom'.$inv_order;
+ if ($order != 'timestamp') {
+ $orderby .= ', timestamp DESC';
+ }
+
+ $trans = array();
+ $event = array();
+ foreach($tit as $foo) {
+ $pid = $foo['id'];
+ if (may_update()) {
+ $res = XDB::query("SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom,
+ u.prenom, u.promo, a.alias, timestamp AS `date`, t.comment, montant
+ FROM {$globals->money->mpay_tprefix}transactions AS t
+ INNER JOIN auth_user_md5 AS u ON ( t.uid = u.user_id )
+ INNER JOIN aliases AS a ON ( t.uid = a.id AND a.type='a_vie' )
+ WHERE ref = {?} ".$orderby, $pid);
+ $trans[$pid] = $res->fetchAllAssoc();
+ $sum = 0;
+ foreach ($trans[$pid] as $i => $t) {
+ $sum += strtr(substr($t['montant'], 0, strpos($t['montant'], 'EUR')), ',', '.');
+ $trans[$pid][$i]['montant'] = str_replace('EUR', '€', $t['montant']);
+ }
+ $trans[$pid][] = array('nom' => 'somme totale',
+ 'montant' => strtr($sum, '.', ',').' €');
+ }
+ $res = XDB::iterRow("SELECT e.eid, e.short_name, e.intitule, ep.nb, ei.montant, ep.paid
+ FROM groupex.evenements AS e
+ LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND uid = {?})
+ INNER JOIN groupex.evenements_items AS ei ON (ep.eid = ei.eid AND ep.item_id = ei.item_id)
+ WHERE e.paiement_id = {?}",
+ S::v('uid'), $pid);
+ $event[$pid] = array();
+ $event[$pid]['paid'] = 0;
+ if ($res->total()) {
+ $event[$pid]['topay'] = 0;
+ while(list($eid, $shortname, $title, $nb, $montant, $paid) = $res->next()) {
+ $event[$pid]['topay'] += ($nb * $montant);
+ $event[$pid]['eid'] = $eid;
+ $event[$pid]['shortname'] = $shortname;
+ $event[$pid]['title'] = $title;
+ $event[$pid]['ins'] = !is_null($nb);
+ $event[$pid]['paid'] = $paid;
+ }
+ }
+ $res = XDB::query("SELECT montant
+ FROM {$globals->money->mpay_tprefix}transactions AS t
+ WHERE ref = {?} AND uid = {?}", $pid, S::v('uid'));
+ $montants = $res->fetchColumn();
+
+ foreach ($montants as $m) {
+ $p = strtr(substr($m, 0, strpos($m, 'EUR')), ',', '.');
+ $event[$pid]['paid'] += trim($p);
+ }
+ }
+ $page->register_modifier('decode_comment', 'decode_comment');
+ $page->assign('trans', $trans);
+ $page->assign('event', $event);
+ }
+