Table editor fills the new entry form with the default values of the fields
[platal.git] / modules / xnetgrp.php
index c5e2dc1..af4f6ea 100644 (file)
@@ -34,12 +34,19 @@ function get_infos($email)
     }
 
     $res = XDB::query(
-            "SELECT  uid, nom, prenom, email, email AS email2, perms='admin', origine
+            "SELECT  uid, nom, prenom, email, email AS email2, perms='admin', origine, sexe
                FROM  groupex.membres
               WHERE  $field = {?} AND asso_id = {?}", $email, $globals->asso('id'));
 
     if ($res->numRows()) {
-        return $res->fetchOneAssoc();
+        $user = $res->fetchOneAssoc();
+        if ($user['origine'] == 'X') {
+            $res = XDB::query("SELECT nom, prenom, promo, FIND_IN_SET(flags, 'femme') AS sexe
+                                 FROM auth_user_md5
+                                WHERE user_id = {?}", $user['uid']);
+            $user = array_merge($user, $res->fetchOneAssoc());
+        }
+        return $user;                        
     } elseif ($dom == 'polytechnique.org' || $dom == 'm4x.org') {
         $res = XDB::query(
                 "SELECT  user_id AS uid, u.promo,
@@ -47,7 +54,8 @@ function get_infos($email)
                          u.prenom, b.alias,
                          CONCAT(b.alias, '@m4x.org') AS email,
                          CONCAT(b.alias, '@polytechnique.org') AS email2,
-                         m.perms='admin' AS perms, m.origine
+                         m.perms='admin' AS perms, m.origine,
+                         FIND_IN_SET(u.flags, 'femme') AS sexe
                    FROM  auth_user_md5   AS u
              INNER JOIN  aliases         AS a ON ( u.user_id = a.id AND a.type != 'homonyme' )
              INNER JOIN  aliases         AS b ON ( u.user_id = b.id AND b.type = 'a_vie' )
@@ -72,8 +80,8 @@ class XnetGrpModule extends PLModule
             '%grp/mail'           => $this->make_hook('mail',      AUTH_MDP),
             '%grp/annuaire'       => $this->make_hook('annuaire',  AUTH_MDP),
             '%grp/annuaire/vcard' => $this->make_hook('vcard',     AUTH_MDP),
+            '%grp/trombi'         => $this->make_hook('trombi',    AUTH_MDP),
             '%grp/subscribe'      => $this->make_hook('subscribe', AUTH_MDP),
-            '%grp/paiement'       => $this->make_hook('paiement',  AUTH_MDP),
 
             '%grp/admin/annuaire'
                  => $this->make_hook('admin_annuaire', AUTH_MDP),
@@ -82,6 +90,8 @@ class XnetGrpModule extends PLModule
                  => $this->make_hook('admin_member', AUTH_MDP),
             '%grp/member/new'
                  => $this->make_hook('admin_member_new', AUTH_MDP),
+            '%grp/member/new/ajax'
+                 => $this->make_hook('admin_member_new_ajax', AUTH_MDP, '', NO_AUTH),         
             '%grp/member/del'
                  => $this->make_hook('admin_member_del', AUTH_MDP),
 
@@ -100,11 +110,7 @@ class XnetGrpModule extends PLModule
             return PL_NOT_FOUND;
         }
 
-        $page->changeTpl('xnet/groupe/asso.tpl');
-        $page->setType($globals->asso('cat'));
-        $page->assign('is_admin', may_update());
-        $page->assign('is_member', is_member());
-        $page->assign('logged', S::logged());
+        new_group_open_page('xnet/groupe/asso.tpl');
 
         if (S::logged()) {
             if (Env::has('read')) {
@@ -285,16 +291,7 @@ class XnetGrpModule extends PLModule
     function handler_annuaire(&$page)
     {
         global $globals;
-
-        define('NB_PER_PAGE', 25);
-
-        if ($globals->asso('pub') == 'public') {
-            new_group_page('xnet/groupe/annuaire.tpl');
-        } else {
-            new_groupadmin_page('xnet/groupe/annuaire.tpl');
-        }
-
-        $page->assign('admin', may_update());
+        new_annu_page('xnet/groupe/annuaire.tpl');
 
         $sort = Env::v('order');
         switch (Env::v('order')) {
@@ -308,7 +305,7 @@ class XnetGrpModule extends PLModule
         if ($group == 'initiale')
             $res = XDB::iterRow(
                         'SELECT  UPPER(SUBSTRING(
-                                     IF(m.origine="X", IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom),
+                                    IF(m.origine="X", IF(u.nom_usage<>"", u.nom_usage, u.nom),m.nom),
                                      1, 1)) as letter, COUNT(*)
                            FROM  groupex.membres AS m
                       LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
@@ -336,6 +333,7 @@ class XnetGrpModule extends PLModule
         }
         $page->assign('group', $group);
         $page->assign('request_group', Env::v($group));
+        $page->assign('only_admin', Env::has('admin'));
         $page->assign('alphabet', $alphabet);
         $page->assign('nb_tot',   $nb_tot);
 
@@ -364,6 +362,8 @@ class XnetGrpModule extends PLModule
         } elseif (Env::has('promo')) {
             $ini = 'AND IF(m.origine="X", u.promo, "extérieur") = "'
                  .addslashes(Env::v('promo')).'"';
+        } elseif (Env::has('admin')) {
+            $ini = 'AND m.perms = "admin"';
         }
 
         $ann = XDB::iterator(
@@ -371,22 +371,59 @@ class XnetGrpModule extends PLModule
                            IF(m.origine='X',u.prenom,m.prenom) AS prenom,
                            IF(m.origine='X',u.promo,'extérieur') AS promo,
                            IF(m.origine='X',u.promo,'') AS promo_o,
-                           IF(m.origine='X',a.alias,m.email) AS email,
+                           IF(m.origine='X' AND u.perms != 'pending',a.alias,m.email) AS email,
                            IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme,
                            m.perms='admin' AS admin,
                            m.origine='X' AS x,
+                           u.perms!='pending' AS inscrit,
                            m.uid
                      FROM  groupex.membres AS m
                 LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
                 LEFT JOIN  aliases         AS a ON ( a.id = m.uid AND a.type='a_vie' )
                     WHERE  m.asso_id = {?} $ini
-                           AND (m.origine = 'ext' OR u.perms != 'pending')
+                           AND (m.origine = 'ext' OR u.perms != 'pending' OR m.email IS NOT NULL)
                  ORDER BY  $tri
                     LIMIT  {?},{?}", $globals->asso('id'), $ofs*NB_PER_PAGE, NB_PER_PAGE);
-
         $page->assign('ann', $ann);
     }
 
+    function handler_trombi(&$page, $num = 1)
+    {
+        global $globals;
+        new_annu_page('xnet/groupe/trombi.tpl');
+        
+        $page->assign('urlmainsite', "https://www.polytechnique.org/");
+        $trombi = new Trombi(array($this, '_trombi_getlist'));
+        $trombi->hidePromo();
+        $trombi->setAdmin();
+        $page->assign_by_ref('trombi', $trombi);
+    }
+
+    function _trombi_getlist($offset, $limit)
+    {
+        global $globals;
+        $where  = "WHERE m.asso_id= '".addslashes($globals->asso('id'))."'";
+
+        $res = XDB::query(
+                "SELECT  COUNT(*)
+                   FROM  auth_user_md5 AS u
+             RIGHT JOIN  photo         AS p ON u.user_id=p.uid
+             INNER JOIN  groupex.membres AS m ON (m.uid = u.user_id)
+             $where");
+        $pnb = $res->fetchOneCell();
+        
+        $res = XDB::query("SELECT  promo, user_id, a.alias AS forlife,
+                         IF (nom_usage='', u.nom, nom_usage) AS nom, u.prenom
+                   FROM  photo         AS p
+             INNER JOIN  auth_user_md5 AS u ON u.user_id=p.uid
+             INNER JOIN  aliases       AS a ON ( u.user_id=a.id AND a.type='a_vie' )
+             INNER JOIN  groupex.membres AS m ON (m.uid = u.user_id)
+                  $where
+               ORDER BY  promo, u.nom, u.prenom LIMIT {?}, {?}", $offset*$limit, $limit);
+        
+        return array($pnb, $res->fetchAllAssoc());
+    }
+    
     function handler_vcard(&$page, $photos = null)
     {
         global $globals;
@@ -407,11 +444,7 @@ class XnetGrpModule extends PLModule
     {
         global $globals;
 
-        $page->changeTpl('xnet/groupe/inscrire.tpl');
-
-        $page->setType($globals->asso('cat'));
-        $page->assign('asso', $globals->asso());
-        $page->assign('admin', may_update());
+        new_group_open_page('xnet/groupe/inscrire.tpl');
 
         if (!$globals->asso('inscriptible'))
                 $page->kill("Il n'est pas possible de s'inscire en ligne à ce "
@@ -532,74 +565,6 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_paiement(&$page)
-    {
-        global $globals;
-
-        new_group_page('xnet/groupe/telepaiement.tpl');
-
-        $res = XDB::query(
-                "SELECT id, text
-                  FROM {$globals->money->mpay_tprefix}paiements
-                 WHERE asso_id = {?} AND NOT FIND_IN_SET(flags, 'old')
-              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');
-        if (!in_array($order, $orders)) {
-            $order = 'timestamp';
-        }
-        $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';
-        }
-
-        if (may_update()) {
-            $trans = array();
-            foreach($tit as $foo) {
-                $pid = $foo['id'];
-                $res = XDB::query(
-                        "SELECT  IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom,
-                                 u.prenom, u.promo, a.alias, timestamp AS `date`, 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][] = array('nom' => 'somme totale',
-                                       'montant' => strtr($sum, '.', ',').' EUR');
-            }
-            $page->assign('trans', $trans);
-        }
-    }
-
     function handler_admin_annuaire(&$page)
     {
         global $globals;
@@ -652,6 +617,7 @@ class XnetGrpModule extends PLModule
         global $globals;
 
         new_groupadmin_page('xnet/groupe/membres-add.tpl');
+        $page->addJsLink('ajax.js');
 
         if (is_null($email)) {
             return;
@@ -677,18 +643,70 @@ class XnetGrpModule extends PLModule
             }
         } else {
             if (isvalid_email($email)) {
-                $res = XDB::query('SELECT MAX(uid)+1 FROM groupex.membres');
-                $uid = max(intval($res->fetchOneCell()), 50001);
-                XDB::execute('INSERT INTO  groupex.membres (uid,asso_id,origine,email)
-                                        VALUES({?},{?},"ext",{?})', $uid,
-                                        $globals->asso('id'), $email);
-                pl_redirect("member/$email");
+                if (Env::v('x') && Env::has('userid') && Env::i('userid')) {
+                    $uid = Env::i('userid');
+                    $res = XDB::query("SELECT *
+                                         FROM auth_user_md5
+                                         WHERE user_id = {?} AND perms = 'pending'", $uid);
+                    if ($res->numRows() == 1) {
+                        XDB::execute('INSERT INTO groupex.membres (uid, asso_id, origine, email)
+                                           VALUES ({?}, {?}, "X", {?})',
+                                               $uid, $globals->asso('id'), $email);
+                        if (Env::v('market')) {
+                            $res   = XDB::query('SELECT COUNT(*)
+                                                   FROM register_marketing
+                                                  WHERE uid={?} AND email={?}', $uid, $email);
+                            if (!$res->fetchOneCell()) {
+                                XDB::execute("INSERT INTO  register_marketing (uid,sender,email,date,last,nb,type,hash)
+                                                   VALUES  ({?}, {?}, {?}, NOW(), 0, 0, {?}, '')",
+                                             $uid, S::v('uid'), $email, Env::v('market_from')); 
+                                require_once('validations.inc.php');
+                                $req = new MarkReq(S::v('uid'), $uid, $email, Env::v('market_from') == 'user');
+                                $req->submit();
+                            }            
+                        }
+                        pl_redirect("member/$email");
+                    }
+                    $page->trig("Utilisateur invalide");
+                } else {
+                    $res = XDB::query('SELECT MAX(uid)+1 FROM groupex.membres');
+                    $uid = max(intval($res->fetchOneCell()), 50001);
+                    XDB::execute('INSERT INTO  groupex.membres (uid,asso_id,origine,email)
+                                            VALUES({?},{?},"ext",{?})', $uid,
+                                            $globals->asso('id'), $email);
+                    pl_redirect("member/$email");
+                }
             } else {
                 $page->trig("« <strong>$email</strong> » n'est pas une adresse mail valide");
             }
         }
     }
 
+    function handler_admin_member_new_ajax(&$page)
+    {
+        header('Content-Type: text/html; charset="iso-8859-15"');
+        $page->changeTpl('xnet/groupe/membres-new-search.tpl', NO_SKIN);
+        list($nom, $prenom) = str_replace(array('-', ' ', "'"), '%', array(Env::v('nom'), Env::v('prenom')));
+        $where = "perms = 'pending'";
+        if (!empty($nom)) {
+            $where .= " AND nom LIKE '%$nom%'";
+        }
+        if (!empty($prenom)) {
+            $where .= " AND prenom LIKE '%$prenom%'";
+        }
+        if (preg_match('/^[0-9]{4}$/', Env::v('promo'))) {
+            $where .= " AND promo = " . Env::i('promo');
+        } elseif (Env::has('promo')) {
+            return;
+        }
+        $res = XDB::iterator("SELECT user_id, nom, prenom, promo
+                                FROM auth_user_md5
+                               WHERE $where");
+        if ($res->total() < 30) {
+            $page->assign("choix", $res);
+        }
+    }
+
     function handler_admin_member_del(&$page, $user = null)
     {
         global $globals;
@@ -756,7 +774,7 @@ class XnetGrpModule extends PLModule
                              $globals->asso('mail_domain'));
 
         if (Post::has('change')) {
-            $email_changed = ($user['origine'] != 'X' && $user['email'] != Post::v('email'));
+            $email_changed = ($user['origine'] != 'X' && strtolower($user['email']) != strtolower(Post::v('email')));
             $from_email = $user['email'];
             if ($user['origine'] != 'X') {
                 XDB::query('UPDATE groupex.membres
@@ -813,15 +831,15 @@ class XnetGrpModule extends PLModule
                 if($state == $ask) continue;
                 if($ask) {
                     XDB::query("INSERT INTO  virtual_redirect (vid,redirect)
-                                               SELECT  vid,{?} FROM virtual WHERE alias={?}",
-                                         $user['email'], $ml);
+                                     SELECT  vid,{?} FROM virtual WHERE alias={?}",
+                               $user['email'], $ml);
                     $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml");
                 } else {
                     XDB::query("DELETE FROM  virtual_redirect
-                                                USING  virtual_redirect
-                                           INNER JOIN  virtual USING(vid)
-                                                WHERE  redirect={?} AND alias={?}",
-                                         $user['email'], $ml);
+                                      USING  virtual_redirect
+                                 INNER JOIN  virtual USING(vid)
+                                      WHERE  redirect={?} AND alias={?}",
+                               $user['email'], $ml);
                     $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml");
                 }
             }
@@ -855,13 +873,15 @@ class XnetGrpModule extends PLModule
                              INNER JOIN groupex.announces AS a ON ( (a.promo_min = 0 OR a.promo_min <= u.promo)
                                                                   AND (a.promo_max = 0 OR a.promo_max <= u.promo))
                              INNER JOIN auth_user_md5 AS u2 ON (u2.user_id = a.user_id)
-                                  WHERE u.user_id = {?} AND peremption >= NOW()", $uid);
+                             WHERE u.user_id = {?} AND peremption >= NOW() AND a.asso_id = {?}",
+                                   $uid, $globals->asso('id'));
         } else {
             $rss = XDB::iterator("SELECT a.id, a.titre, a.texte, a.create_date,
                                          IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, u.prenom, u.promo
                                     FROM groupex.announces AS a
                              INNER JOIN auth_user_md5 AS u USING(user_id)
-                                   WHERE FIND_IN_SET(a.flags, 'public') AND peremption >= NOW()");
+                             WHERE FIND_IN_SET(a.flags, 'public') AND peremption >= NOW() AND a.asso_id = {?}",
+                                  $globals->asso('id'));
         }
         $page->assign('asso', $globals->asso());
         $page->assign('rss', $rss);
@@ -894,8 +914,8 @@ class XnetGrpModule extends PLModule
             $art['event']      = Post::v('event');
 
             $art['contact_html'] = $art['contacts'];
-            if (@$art['event']) {
-                 $art['contact_html'] .= "\n{$globals->baseurl}/{$platal->ns}events/sub/{$art['event']}";
+            if ($art['event']) {
+                $art['contact_html'] .= "\n{$globals->baseurl}/{$platal->ns}events/sub/{$art['event']}";
             }
 
             if (!$art['public'] &&
@@ -918,12 +938,12 @@ class XnetGrpModule extends PLModule
                             VALUES ({?}, {?}, NOW(), {?}, {?}, {?}, {?}, {?}, {?}, {?})",
                            S::i('uid'), $globals->asso('id'), $art['titre'], $art['texte'], $art['contact_html'],
                            $art['peremption'], $promo_min, $promo_max, $art['public'] ? 'public' : '');
-                $aid = mysql_insert_id();
+                $aid = XDB::insertId();
                 if ($art['xorg']) {
                     require_once('validations.inc.php');
                     require_once('url_catcher.inc.php');
                     $article = new EvtReq("[{$globals->asso('nom')}] " . $art['titre'],
-                                    url_catcher($art['texte'] . (!empty($art['contacts']) ? "\n\nContacts :\n" . $art['contacts'] : "")),
+                                    url_catcher($art['texte'] . (!empty($art['contact_html']) ? "\n\nContacts :\n" . $art['contact_html'] : "")),
                                     $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'));
                     $article->submit();
                     $page->trig("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation");