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 require_once dirname(__FILE__
).'/../modules/search/search.inc.php';
72 $this->quick
= $quick;
74 $this->getQuick($join, $where);
76 $this->getAdvanced($join, $where);
80 private function getQuick($join, $where)
82 require_once dirname(__FILE__
).'/../modules/search/search.inc.php';
85 Env
::kill('with_soundex');
87 $qSearch = new QuickSearch('quick');
88 $fields = new SFieldGroup(true
, array($qSearch));
89 if ($qSearch->isEmpty()) {
90 new ThrowError('Aucun critère de recherche n\'est spécifié.');
92 $this->score
= $qSearch->get_score_statement();
93 $pwhere = $fields->get_where_statement();
100 if (S
::logged() && Env
::has('nonins')) {
104 $where .= 'u.perms="pending" AND u.deces=0';
106 parent
::__construct($join . ' ' . $fields->get_select_statement(), $where);
108 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
109 'u.promo DESC, NomSortKey, prenom')));
112 private function getAdvanced($join, $where)
115 $this->advanced
= true
;
116 $fields = new SFieldGroup(true
, advancedSearchFromInput());
117 if ($fields->too_large()) {
118 new ThrowError('Recherche trop générale.');
120 parent
::__construct(@$join . ' ' . $fields->get_select_statement(),
121 @$where . ' ' . $fields->get_where_statement());
122 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
123 'promo DESC, NomSortKey, prenom')));
126 public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null
, $limitfrom = null
)
129 $fields .= ', ' . $this->score
;
131 return parent
::get($fields, $joins, $where, $groupby, $order, $limitcount, $limitfrom);
135 class ArraySet
extends UserSet
137 public function __construct(array $users)
139 $where = $this->getUids($users);
141 $where = "a.alias IN ($where)";
145 parent
::__construct('', $where);
148 private function getUids(array $users)
150 $users = get_users_forlife_list($users, true
, '_silent_user_callback');
151 if (is_null($users)) {
154 return '\'' . implode('\', \'', $users) . '\'';
158 class MinificheView
extends MultipageView
160 public function __construct(PlSet
&$set, $data, array $params)
162 require_once 'applis.func.inc.php';
164 $this->entriesPerPage
= $globals->search
->per_page
;
165 if (@$params['with_score']) {
166 $this->addSortKey('score', array('-score', '-date', '-promo', 'nom', 'prenom'), 'pertinence');
168 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
169 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
170 $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
171 parent
::__construct($set, $data, $params);
174 public function fields()
176 return "u.user_id AS id,
177 u.*, a.alias AS forlife,
178 u.perms != 'pending' AS inscrit,
179 u.perms != 'pending' AS wasinscrit,
180 u.deces != 0 AS dcd, u.deces, u.matricule_ax,
181 FIND_IN_SET('femme', u.flags) AS sexe,
182 e.entreprise, es.label AS secteur, ef.fonction_fr AS fonction,
183 IF(n.nat='',n.pays,n.nat) AS nat, n.a2 AS iso3166,
184 ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
185 ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
186 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
187 IF(u.nom_usage<>'',u.nom_usage,u.nom) AS sortkey,
188 (COUNT(em.email) > 0 OR FIND_IN_SET('googleapps', u.mail_storage) > 0) AS actif" .
189 (S
::logged() ?
", c.contact AS contact" : '');
192 public function joins()
194 return "LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id".(S
::logged() ?
"" : " AND e.pub = 'public'").")
195 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
196 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
197 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
198 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
199 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
200 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
201 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
202 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid
203 AND FIND_IN_SET('active', adr.statut)".(S
::logged() ?
"" : " AND adr.pub = 'public'").")
204 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
205 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
206 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = 'active')" .
208 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
212 public function bounds()
214 $order = Env
::v('order', $this->defaultkey
);
216 if (($order == "name") ||
($order == "-name")) {
217 $this->bound_field
= "nom";
219 } elseif (($order == "promo") ||
($order == "-promo")) {
220 $this->bound_field
= "promo";
223 if ($order{0} == '-') {
224 $show_bounds = -$show_bounds;
229 public function templateName()
231 return 'include/plview.minifiche.tpl';
235 class MentorView
extends MultipageView
237 public function __construct(PlSet
&$set, $data, array $params)
239 $this->entriesPerPage
= 10;
240 $this->addSortKey('rand', array('RAND(' . S
::i('uid') . ')'), 'aléatoirement');
241 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
242 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
243 $this->addSortKey('date_mod', array('-date', '-promo', 'nom', 'prenom'), 'dernière modification');
244 parent
::__construct($set, $data, $params);
247 public function fields()
249 return "m.uid, u.prenom, u.nom, u.promo,
250 a.alias AS forlife, m.expertise, mp.pid,
251 ms.secteur, ms.ss_secteur";
254 public function bounds()
256 $order = Env
::v('order', $this->defaultkey
);
258 if (($order == "name") ||
($order == "-name")) {
259 $this->bound_field
= "nom";
261 } elseif (($order == "promo") ||
($order == "-promo")) {
262 $this->bound_field
= "promo";
265 if ($order{0} == '-') {
266 $show_bounds = -$show_bounds;
271 public function templateName()
273 return 'include/plview.referent.tpl';
277 class TrombiView
extends MultipageView
279 public function __construct(PlSet
&$set, $data, array $params)
281 $this->entriesPerPage
= 24;
282 $this->order
= explode(',', Env
::v('order', 'nom,prenom,promo'));
283 if (@$params['with_score']) {
284 $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'nom', 'prenom'), 'pertinence');
286 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
287 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
288 parent
::__construct($set, $data, $params);
291 public function fields()
293 return "u.user_id, IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, u.prenom, u.promo, a.alias AS forlife ";
296 public function joins()
298 return "INNER JOIN photo AS p ON (p.uid = u.user_id) ";
301 public function bounds()
303 $order = Env
::v('order', $this->defaultkey
);
305 if (($order == "name") ||
($order == "-name")) {
306 $this->bound_field
= "nom";
308 } elseif (($order == "promo") ||
($order == "-promo")) {
309 $this->bound_field
= "promo";
312 if ($order{0} == '-') {
313 $show_bounds = -$show_bounds;
318 public function templateName()
320 return 'include/plview.trombi.tpl';
323 public function apply(PlPage
&$page)
325 if (!empty($GLOBALS['IS_XNET_SITE'])) {
327 $page->assign('mainsiteurl', 'https://' . $globals->core
->secure_domain
. '/');
329 return parent
::apply($page);
333 class GeolocView
implements PlView
339 public function __construct(PlSet
&$set, $data, array $params)
341 $this->params
= $params;
346 private function use_map()
348 return is_file(dirname(__FILE__
) . '/../modules/geoloc/dynamap.swf') &&
349 is_file(dirname(__FILE__
) . '/../modules/geoloc/icon.swf');
352 public function args()
354 $args = $this->set
->args();
355 unset($args['initfile']);
356 unset($args['mapid']);
360 public function apply(PlPage
&$page)
362 require_once 'geoloc.inc.php';
363 require_once '../modules/search/search.inc.php';
365 switch ($this->type
) {
367 header("Content-type: application/x-shockwave-flash");
369 readfile(dirname(__FILE__
).'/../modules/geoloc/icon.swf');
373 header("Content-type: application/x-shockwave-flash");
375 readfile(dirname(__FILE__
).'/../modules/geoloc/dynamap.swf');
379 $page->changeTpl('geoloc/init.tpl', NO_SKIN
);
380 header('Content-Type: text/xml');
382 if (!empty($GLOBALS['IS_XNET_SITE'])) {
383 $page->assign('background', 0xF2E9D0);
388 $page->changeTpl('geoloc/city.tpl', NO_SKIN
);
389 header('Content-Type: text/xml');
391 $only_current = Env
::v('only_current', false
)?
' AND FIND_IN_SET(\'active\', adrf.statut)' : '';
392 $it =& $this->set
->get('u.user_id AS id, u.prenom, u.nom, u.promo, al.alias',
393 "INNER JOIN adresses AS adrf ON (adrf.uid = u.user_id $only_current)
394 LEFT JOIN aliases AS al ON (u.user_id = al.id
395 AND FIND_IN_SET('bestalias', al.flags))
396 INNER JOIN adresses AS avg ON (" . getadr_join('avg') . ")",
397 'adrf.cityid = ' . Env
::i('cityid'), null
, null
, 11);
398 $page->assign('users', $it);
402 if (Env
::has('debug')) {
403 $page->changeTpl('geoloc/country.tpl', SIMPLE
);
405 $page->changeTpl('geoloc/country.tpl', NO_SKIN
);
406 header('Content-Type: text/xml');
409 $mapid = Env
::has('mapid') ? Env
::i('mapid', -2) : false
;
410 list($countries, $cities) = geoloc_getData_subcountries($mapid, $this->set
, 10);
411 $page->assign('countries', $countries);
412 $page->assign('cities', $cities);
417 if (!$this->use_map()) {
418 $page->assign('request_geodesix', true
);
420 $page->assign('annu', @$this->params
['with_annu']);
421 $page->assign('protocole', @$_SERVER['HTTPS'] ?
'https' : 'http');
422 $this->set
->get('u.user_id', null
, "u.perms != 'pending' AND u.deces = 0", "u.user_id", null
);
423 return 'include/plview.geoloc.tpl';
428 class GadgetView
implements PlView
430 public function __construct(PlSet
&$set, $data, array $params)
435 public function fields()
437 return "u.user_id AS id,
438 u.*, a.alias AS forlife," .
439 (S
::logged() ?
"q.profile_mobile AS mobile, " : "IF(q.profile_mobile_pub = 'public', q.profile_mobile, NULL) as mobile, ") .
440 "u.perms != 'pending' AS inscrit,
441 u.perms != 'pending' AS wasinscrit,
442 u.deces != 0 AS dcd, u.deces,
443 FIND_IN_SET('femme', u.flags) AS sexe,
444 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region" .
445 (S
::logged() ?
", c.contact AS contact" : '');
448 public function joins()
450 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'").")
451 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
452 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)" .
454 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
458 public function apply(PlPage
&$page)
460 $page->assign_by_ref('set',
461 $this->set
->get($this->fields(), $this->joins(), null
, null
, null
, 5, 0));
464 public function args()
470 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: