Fix payment comment decoder
[platal.git] / include / userset.inc.php
index 7201181..a0f72b1 100644 (file)
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-require_once('plset.php');
 require_once('xorg.misc.inc.php');
 require_once('user.func.inc.php');
 
 global $globals;
 
-$globals->search->result_where_statement = '
+@$globals->search->result_where_statement = '
     LEFT JOIN  applis_ins     AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
     LEFT JOIN  applis_def     AS ad0 ON (ad0.id = ai0.aid)
     LEFT JOIN  applis_ins     AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
@@ -45,10 +44,10 @@ class UserSet extends PlSet
     {
         global $globals;
         parent::__construct('auth_user_md5 AS u',
-                            (!empty($GLOBALS['IS_XNET_SITE']) ? 
-                                'INNER JOIN groupex.membres AS gxm ON (u.user_id = gxm.uid 
+                            (!empty($GLOBALS['IS_XNET_SITE']) ?
+                                'INNER JOIN groupex.membres AS gxm ON (u.user_id = gxm.uid
                                                                        AND gxm.asso_id = ' . $globals->asso('id') . ') ' : '')
-                           . 'LEFT JOIN auth_user_quick AS q USING (user_id) 
+                           . 'LEFT JOIN auth_user_quick AS q USING (user_id)
                               LEFT JOIN aliases         AS a ON (a.id = u.user_id AND type = \'a_vie\')
                               ' . $joins,
                             $where,
@@ -58,10 +57,12 @@ class UserSet extends PlSet
 
 class SearchSet extends UserSet
 {
+    public  $advanced = false;
+    private $score = null;
     private $order = null;
     private $quick = false;
 
-    public function __construct($quick = false, $no_search = false)
+    public function __construct($quick = false, $no_search = false, $join = '', $where = '')
     {
         require_once dirname(__FILE__).'/../modules/search/search.inc.php';
 
@@ -71,13 +72,13 @@ class SearchSet extends UserSet
 
         $this->quick = $quick;
         if ($quick) {
-            $this->getQuick();
+            $this->getQuick($join, $where);
         } else {
-            $this->getAdvanced();
+            $this->getAdvanced($join, $where);
         }
     }
 
-    private function getQuick()
+    private function getQuick($join, $where)
     {
         require_once dirname(__FILE__).'/../modules/search/search.inc.php';
         global $globals;
@@ -89,9 +90,21 @@ class SearchSet extends UserSet
         if ($qSearch->isEmpty()) {
             new ThrowError('Recherche trop générale.');
         }
-        parent::__construct($fields->get_select_statement()  . ' ' . $globals->search->result_where_statement,
-                            $fields->get_where_statement() .
-                            (S::logged() && Env::has('nonins') ? ' AND u.perms="pending" AND u.deces=0' : ''));
+        $this->score = $qSearch->get_score_statement();
+        $pwhere = $fields->get_where_statement();
+        if (trim($pwhere)) {
+            if (trim($where)) {
+                $where .= ' AND ';
+            }
+            $where .= $pwhere;
+        }
+        if (S::logged() && Env::has('nonins')) {
+            if (trim($where)) {
+                $where .= ' AND ';
+            }
+            $where .= 'u.perms="pending" AND u.deces=0';
+        }
+        parent::__construct($join . ' ' . $fields->get_select_statement(), $where);
 
         $this->order = implode(',',array_filter(array($fields->get_order_statement(),
                                                       'u.promo DESC, NomSortKey, prenom')));
@@ -100,15 +113,47 @@ class SearchSet extends UserSet
     private function getAdvanced()
     {
         global $globals;
+        $this->advanced = true;
         $fields = new SFieldGroup(true, advancedSearchFromInput());
         if ($fields->too_large()) {
             new ThrowError('Recherche trop générale.');
         }
-        parent::__construct($fields->get_select_statement() . ' ' . $globals->search->result_where_statement,
-                            $fields->get_where_statement());
+        parent::__construct(@$join . ' ' . $fields->get_select_statement(),
+                            @$where . ' ' . $fields->get_where_statement());
         $this->order = implode(',',array_filter(array($fields->get_order_statement(),
                                                       'promo DESC, NomSortKey, prenom')));
     }
+
+    public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null, $limitfrom = null)
+    {
+        if ($this->score) {
+            $fields .= ', ' . $this->score;
+        }
+        return parent::get($fields, $joins, $where, $groupby, $order, $limitcount, $limitfrom);
+    }
+}
+
+class ArraySet extends UserSet
+{
+    public function __construct(array $users)
+    {
+        $where = $this->getUids($users);
+        if ($where) {
+            $where = "a.alias IN ($where)";
+        } else {
+            $where = " 0 ";
+        }
+        parent::__construct('', $where);
+    }
+
+    private function getUids(array $users)
+    {
+        $users = get_users_forlife_list($users, true, '_silent_user_callback');
+        if (is_null($users)) {
+            return '';
+        }
+        return '\'' . implode('\', \'', $users) . '\'';
+    }
 }
 
 class MinificheView extends MultipageView
@@ -118,7 +163,12 @@ class MinificheView extends MultipageView
         require_once 'applis.func.inc.php';
         global $globals;
         $this->entriesPerPage = $globals->search->per_page;
-        $this->order = explode(',', Env::v('order', 'nom,prenom,promo'));
+        if (@$params['with_score']) {
+            $this->addSortKey('score', array('-score', '-date', '-promo', 'nom', 'prenom'), 'pertinence');
+        }
+        $this->addSortKey('name', array('nom', 'prenom'), 'nom');
+        $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
+        $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
         parent::__construct($set, $data, $params);
     }
 
@@ -141,8 +191,7 @@ class MinificheView extends MultipageView
 
     public function joins()
     {
-        return  ($this->set instanceof SearchSet ? "" :
-                "LEFT JOIN  entreprises    AS e   ON (e.entrid = 0 AND e.uid = u.user_id)
+        return  "LEFT JOIN  entreprises    AS e   ON (e.entrid = 0 AND e.uid = u.user_id".(S::logged() ? "" : " AND e.pub = 'public'").")
                  LEFT JOIN  emploi_secteur AS es  ON (e.secteur = es.id)
                  LEFT JOIN  fonctions_def  AS ef  ON (e.fonction = ef.id)
                  LEFT JOIN  geoloc_pays    AS n   ON (u.nationalite = n.a2)
@@ -151,13 +200,13 @@ class MinificheView extends MultipageView
                  LEFT JOIN  applis_ins     AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
                  LEFT JOIN  applis_def     AS ad1 ON (ad1.id = ai1.aid)
                  LEFT JOIN  adresses       AS adr ON (u.user_id = adr.uid
-                                                      AND FIND_IN_SET('active', adr.statut))
+                                                      AND FIND_IN_SET('active', adr.statut)".(S::logged() ? "" : " AND adr.pub = 'public'").")
                  LEFT JOIN  geoloc_pays    AS gp  ON (adr.country = gp.a2)
                  LEFT JOIN  geoloc_region  AS gr  ON (adr.country = gr.a2 AND adr.region = gr.region)
-                 LEFT JOIN  emails         AS em  ON (em.uid = u.user_id AND em.flags = 'active')
-                ") . (S::logged() ? 
-                        "LEFT JOIN  contacts       AS c   On (c.contact = u.user_id AND c.uid = " . S::v('uid') . ")"
-                        : ""); 
+                 LEFT JOIN  emails         AS em  ON (em.uid = u.user_id AND em.flags = 'active')" .
+                (S::logged() ?
+                 "LEFT JOIN  contacts       AS c   On (c.contact = u.user_id AND c.uid = " . S::v('uid') . ")"
+                 : "");
     }
 
     public function templateName()
@@ -166,12 +215,42 @@ class MinificheView extends MultipageView
     }
 }
 
+class MentorView extends MultipageView
+{
+    public function __construct(PlSet &$set, $data, array $params)
+    {
+        $this->entriesPerPage = 10;
+        $this->addSortKey('rand', array('RAND(' . S::i('uid') . ')'), 'aléatoirement');
+        $this->addSortKey('name', array('nom', 'prenom'), 'nom');
+        $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
+        $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
+        parent::__construct($set, $data, $params);
+    }
+
+    public function fields()
+    {
+        return "m.uid, u.prenom, u.nom, u.promo,
+                a.alias AS bestalias, m.expertise, mp.pid,
+                ms.secteur, ms.ss_secteur";
+    }
+
+    public function templateName()
+    {
+        return 'include/plview.referent.tpl';
+    }
+}
+
 class TrombiView extends MultipageView
 {
     public function __construct(PlSet &$set, $data, array $params)
     {
         $this->entriesPerPage = 24;
         $this->order = explode(',', Env::v('order', 'nom,prenom,promo'));
+        if (@$params['with_score']) {
+            $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'nom', 'prenom'), 'pertinence');
+        }
+        $this->addSortKey('name', array('nom', 'prenom'), 'nom');
+        $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
         parent::__construct($set, $data, $params);
     }
 
@@ -219,19 +298,12 @@ class GeolocView implements PlView
                is_file(dirname(__FILE__) . '/../modules/geoloc/icon.swf');
     }
 
-    private function make_qs($urlencode = true)
+    public function args()
     {
-        $qs = "";
-        foreach ($_GET as $v=>$a) {
-            if ($v != 'initfile' && $v != 'n' && $v != 'mapid') {
-                if (!$urlencode) {
-                    $qs .= $v . '=' . $a . '&';
-                } else { 
-                    $qs .= urlencode($v) . '=' . urlencode($a) . '&';
-                }
-            }
-        }
-        return $qs;
+        $args = $this->set->args();
+        unset($args['initfile']);
+        unset($args['mapid']);
+        return $args;
     }
 
     public function apply(PlatalPage &$page)
@@ -259,18 +331,18 @@ class GeolocView implements PlView
             if (!empty($GLOBALS['IS_XNET_SITE'])) {
                 $page->assign('background', 0xF2E9D0);
             }
-            $page->assign('querystring', $this->make_qs()); 
             break;
 
           case 'city':
             $page->changeTpl('geoloc/city.tpl', NO_SKIN);
             header('Content-Type: text/xml');
             header('Pragma:');
+            $only_current = Env::v('only_current', false)? ' AND FIND_IN_SET(\'active\', adrf.statut)' : '';
             $it =& $this->set->get('u.user_id AS id, u.prenom, u.nom, u.promo, al.alias',
-                                   "INNER JOIN  adresses AS adrf  ON (adrf.uid = u.user_id)
+                                   "INNER JOIN  adresses AS adrf  ON (adrf.uid = u.user_id $only_current)
                                      LEFT JOIN  aliases  AS al   ON (u.user_id = al.id
-                                                                   AND FIND_IN_SET(al.flags, 'bestalias'))
-                                    INNER JOIN  adresses AS av ON (" . getadr_join('av') . ")",
+                                                                   AND FIND_IN_SET('bestalias', al.flags))
+                                    INNER JOIN  adresses AS avg ON (" . getadr_join('avg') . ")",
                                    'adrf.cityid = ' . Env::i('cityid'), null, null, 11);
             $page->assign('users', $it);
             break;
@@ -283,8 +355,6 @@ class GeolocView implements PlView
                 header('Content-Type: text/xml');
                 header('Pragma:');
             }
-            $querystring = $this->make_qs();
-            $page->assign('searchvars', $querystring);
             $mapid = Env::has('mapid') ? Env::i('mapid', -2) : false;
             list($countries, $cities) = geoloc_getData_subcountries($mapid, $this->set, 10);
             $page->assign('countries', $countries);
@@ -296,14 +366,9 @@ class GeolocView implements PlView
             if (!$this->use_map()) {
                 $page->assign('request_geodesix', true);
             }
-            if (!empty($GLOBALS['IS_XNET_SITE'])) {
-                $page->assign('no_annu', true);
-            }
+            $page->assign('annu', @$this->params['with_annu']);
             $page->assign('protocole', @$_SERVER['HTTPS'] ? 'https' : 'http');
             $this->set->get('u.user_id', null, "u.perms != 'pending' AND u.deces = 0", "u.user_id", null);
-            $url = '?' . $this->make_qs(false);
-            $page->assign('search_nourlencode', $url);
-            $page->assign('search', urlencode($url));
             return 'include/plview.geoloc.tpl';
         }
     }