2 /***************************************************************************
3 * Copyright (C) 2003-2008 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
22 require_once('user.func.inc.php');
26 @$globals->search
->result_where_statement
= '
27 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
28 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
29 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
30 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
31 LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id)
32 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
33 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
34 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
35 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid AND FIND_IN_SET(\'active\',adr.statut))
36 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
37 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
38 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = \'active\')';
40 class UserSet
extends PlSet
42 public function __construct($joins = '', $where = '')
45 parent
::__construct('auth_user_md5 AS u',
46 (!empty($GLOBALS['IS_XNET_SITE']) ?
47 'INNER JOIN groupex.membres AS gxm ON (u.user_id = gxm.uid
48 AND gxm.asso_id = ' . $globals->asso('id') . ') ' : '')
49 . 'LEFT JOIN auth_user_quick AS q USING (user_id)
50 LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = \'a_vie\')
57 class SearchSet
extends UserSet
59 public $advanced = false
;
60 private $score = null
;
61 private $order = null
;
62 private $quick = false
;
64 public function __construct($quick = false
, $no_search = false
, $join = '', $where = '')
66 Platal
::load('search', 'search.inc.php');
71 $this->quick
= $quick;
73 $this->getQuick($join, $where);
75 $this->getAdvanced($join, $where);
79 private function getQuick($join, $where)
81 Platal
::load('search', 'search.inc.php');
84 Env
::kill('with_soundex');
86 $qSearch = new QuickSearch('quick');
87 $fields = new SFieldGroup(true
, array($qSearch));
88 if ($qSearch->isEmpty()) {
89 new ThrowError('Aucun critère de recherche n\'est spécifié.');
91 $this->score
= $qSearch->get_score_statement();
92 $pwhere = $fields->get_where_statement();
99 if (S
::logged() && Env
::has('nonins')) {
103 $where .= 'u.perms="pending" AND u.deces=0';
105 parent
::__construct($join . ' ' . $fields->get_select_statement(), $where);
107 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
108 'u.promo DESC, NomSortKey, prenom')));
111 private function getAdvanced($join, $where)
114 $this->advanced
= true
;
115 $fields = new SFieldGroup(true
, advancedSearchFromInput());
116 if ($fields->too_large()) {
117 new ThrowError('Recherche trop générale.');
119 parent
::__construct(@$join . ' ' . $fields->get_select_statement(),
120 @$where . ' ' . $fields->get_where_statement());
121 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
122 'promo DESC, NomSortKey, prenom')));
125 public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null
, $limitfrom = null
)
128 $fields .= ', ' . $this->score
;
130 return parent
::get($fields, $joins, $where, $groupby, $order, $limitcount, $limitfrom);
134 class ArraySet
extends UserSet
136 public function __construct(array $users)
138 $where = $this->getUids($users);
140 $where = "a.alias IN ($where)";
144 parent
::__construct('', $where);
147 private function getUids(array $users)
149 $users = get_users_forlife_list($users, true
, '_silent_user_callback');
150 if (is_null($users)) {
153 return '\'' . implode('\', \'', $users) . '\'';
157 class MinificheView
extends MultipageView
159 public function __construct(PlSet
&$set, $data, array $params)
161 require_once 'applis.func.inc.php';
163 $this->entriesPerPage
= $globals->search
->per_page
;
164 if (@$params['with_score']) {
165 $this->addSortKey('score', array('-score', '-date', '-promo', 'nom', 'prenom'), 'pertinence');
167 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
168 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
169 $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
170 parent
::__construct($set, $data, $params);
173 public function fields()
175 return "u.user_id AS id,
176 u.*, a.alias AS forlife,
177 u.perms != 'pending' AS inscrit,
178 u.perms != 'pending' AS wasinscrit,
179 u.deces != 0 AS dcd, u.deces, u.matricule_ax,
180 FIND_IN_SET('femme', u.flags) AS sexe,
181 e.entreprise, e.web AS job_web, es.label AS secteur, ef.fonction_fr AS fonction,
182 IF(n.nat='',n.pays,n.nat) AS nat, n.a2 AS iso3166,
183 ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
184 ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
185 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
186 IF(u.nom_usage<>'',u.nom_usage,u.nom) AS sortkey,
187 (COUNT(em.email) > 0 OR FIND_IN_SET('googleapps', u.mail_storage) > 0) AS actif" .
188 (S
::logged() ?
", c.contact AS contact" : '');
191 public function joins()
193 return "LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id".(S
::logged() ?
"" : " AND e.pub = 'public'").")
194 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
195 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
196 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
197 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
198 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
199 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
200 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
201 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid
202 AND FIND_IN_SET('active', adr.statut)".(S
::logged() ?
"" : " AND adr.pub = 'public'").")
203 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
204 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
205 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = 'active')" .
207 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
211 public function bounds()
213 $order = Env
::v('order', $this->defaultkey
);
215 if (($order == "name") ||
($order == "-name")) {
216 $this->bound_field
= "nom";
218 } elseif (($order == "promo") ||
($order == "-promo")) {
219 $this->bound_field
= "promo";
222 if ($order{0} == '-') {
223 $show_bounds = -$show_bounds;
228 public function templateName()
230 return 'include/plview.minifiche.tpl';
234 class MentorView
extends MultipageView
236 public function __construct(PlSet
&$set, $data, array $params)
238 $this->entriesPerPage
= 10;
239 $this->addSortKey('rand', array('RAND(' . S
::i('uid') . ')'), 'aléatoirement');
240 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
241 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
242 $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
243 parent
::__construct($set, $data, $params);
246 public function fields()
248 return "m.uid, u.prenom, u.nom, u.promo,
249 a.alias AS forlife, m.expertise, mp.pid,
250 ms.secteur, ms.ss_secteur";
253 public function bounds()
255 $order = Env
::v('order', $this->defaultkey
);
257 if (($order == "name") ||
($order == "-name")) {
258 $this->bound_field
= "nom";
260 } elseif (($order == "promo") ||
($order == "-promo")) {
261 $this->bound_field
= "promo";
264 if ($order{0} == '-') {
265 $show_bounds = -$show_bounds;
270 public function templateName()
272 return 'include/plview.referent.tpl';
276 class TrombiView
extends MultipageView
278 public function __construct(PlSet
&$set, $data, array $params)
280 $this->entriesPerPage
= 24;
281 $this->order
= explode(',', Env
::v('order', 'nom,prenom,promo'));
282 if (@$params['with_score']) {
283 $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'nom', 'prenom'), 'pertinence');
285 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
286 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
287 parent
::__construct($set, $data, $params);
290 public function fields()
292 return "u.user_id, IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, u.prenom, u.promo, a.alias AS forlife ";
295 public function joins()
297 return "INNER JOIN photo AS p ON (p.uid = u.user_id) ";
300 public function bounds()
302 $order = Env
::v('order', $this->defaultkey
);
304 if (($order == "name") ||
($order == "-name")) {
305 $this->bound_field
= "nom";
307 } elseif (($order == "promo") ||
($order == "-promo")) {
308 $this->bound_field
= "promo";
311 if ($order{0} == '-') {
312 $show_bounds = -$show_bounds;
317 public function templateName()
319 return 'include/plview.trombi.tpl';
322 public function apply(PlPage
&$page)
324 if (!empty($GLOBALS['IS_XNET_SITE'])) {
326 $page->assign('mainsiteurl', 'https://' . $globals->core
->secure_domain
. '/');
328 return parent
::apply($page);
332 class GeolocView
implements PlView
338 public function __construct(PlSet
&$set, $data, array $params)
340 $this->params
= $params;
345 private function use_map()
347 return is_file(dirname(__FILE__
) . '/../modules/geoloc/dynamap.swf') &&
348 is_file(dirname(__FILE__
) . '/../modules/geoloc/icon.swf');
351 public function args()
353 $args = $this->set
->args();
354 unset($args['initfile']);
355 unset($args['mapid']);
359 public function apply(PlPage
&$page)
361 require_once 'geoloc.inc.php';
362 require_once '../modules/search/search.inc.php';
364 switch ($this->type
) {
366 header("Content-type: application/x-shockwave-flash");
368 readfile(dirname(__FILE__
).'/../modules/geoloc/icon.swf');
372 header("Content-type: application/x-shockwave-flash");
374 readfile(dirname(__FILE__
).'/../modules/geoloc/dynamap.swf');
378 $page->changeTpl('geoloc/init.tpl', NO_SKIN
);
379 header('Content-Type: text/xml');
381 if (!empty($GLOBALS['IS_XNET_SITE'])) {
382 $page->assign('background', 0xF2E9D0);
387 $page->changeTpl('geoloc/city.tpl', NO_SKIN
);
388 header('Content-Type: text/xml');
390 $only_current = Env
::v('only_current', false
)?
' AND FIND_IN_SET(\'active\', adrf.statut)' : '';
391 $it =& $this->set
->get('u.user_id AS id, u.prenom, u.nom, u.promo, al.alias',
392 "INNER JOIN adresses AS adrf ON (adrf.uid = u.user_id $only_current)
393 LEFT JOIN aliases AS al ON (u.user_id = al.id
394 AND FIND_IN_SET('bestalias', al.flags))
395 INNER JOIN adresses AS avg ON (" . getadr_join('avg') . ")",
396 'adrf.cityid = ' . Env
::i('cityid'), null
, null
, 11);
397 $page->assign('users', $it);
401 if (Env
::has('debug')) {
402 $page->changeTpl('geoloc/country.tpl', SIMPLE
);
404 $page->changeTpl('geoloc/country.tpl', NO_SKIN
);
405 header('Content-Type: text/xml');
408 $mapid = Env
::has('mapid') ? Env
::i('mapid', -2) : false
;
409 list($countries, $cities) = geoloc_getData_subcountries($mapid, $this->set
, 10);
410 $page->assign('countries', $countries);
411 $page->assign('cities', $cities);
416 if (!$this->use_map()) {
417 $page->assign('request_geodesix', true
);
419 $page->assign('annu', @$this->params
['with_annu']);
420 $page->assign('protocole', @$_SERVER['HTTPS'] ?
'https' : 'http');
421 $this->set
->get('u.user_id', null
, "u.perms != 'pending' AND u.deces = 0", "u.user_id", null
);
422 return 'include/plview.geoloc.tpl';
427 class GadgetView
implements PlView
429 public function __construct(PlSet
&$set, $data, array $params)
434 public function fields()
436 return "u.user_id AS id,
437 u.*, a.alias AS forlife," .
438 (S
::logged() ?
"q.profile_mobile AS mobile, " : "IF(q.profile_mobile_pub = 'public', q.profile_mobile, NULL) as mobile, ") .
439 "u.perms != 'pending' AS inscrit,
440 u.perms != 'pending' AS wasinscrit,
441 u.deces != 0 AS dcd, u.deces,
442 FIND_IN_SET('femme', u.flags) AS sexe,
443 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region" .
444 (S
::logged() ?
", c.contact AS contact" : '');
447 public function joins()
449 return "LEFT JOIN adresses AS adr ON (u.user_id = adr.uid AND FIND_IN_SET('active', adr.statut)".(S
::logged() ?
"" : " AND adr.pub = 'public'").")
450 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
451 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)" .
453 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
457 public function apply(PlPage
&$page)
459 $page->assign_by_ref('set',
460 $this->set
->get($this->fields(), $this->joins(), null
, null
, null
, 5, 0));
463 public function args()
469 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: