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('xorg.misc.inc.php');
23 require_once('user.func.inc.php');
27 @$globals->search
->result_where_statement
= '
28 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
29 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
30 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
31 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
32 LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id)
33 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
34 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
35 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
36 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid AND FIND_IN_SET(\'active\',adr.statut))
37 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
38 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
39 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = \'active\')';
41 class UserSet
extends PlSet
43 public function __construct($joins = '', $where = '')
46 parent
::__construct('auth_user_md5 AS u',
47 (!empty($GLOBALS['IS_XNET_SITE']) ?
48 'INNER JOIN groupex.membres AS gxm ON (u.user_id = gxm.uid
49 AND gxm.asso_id = ' . $globals->asso('id') . ') ' : '')
50 . 'LEFT JOIN auth_user_quick AS q USING (user_id)
51 LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = \'a_vie\')
58 class SearchSet
extends UserSet
60 public $advanced = false
;
61 private $score = null
;
62 private $order = null
;
63 private $quick = false
;
65 public function __construct($quick = false
, $no_search = false
, $join = '', $where = '')
67 require_once dirname(__FILE__
).'/../modules/search/search.inc.php';
73 $this->quick
= $quick;
75 $this->getQuick($join, $where);
77 $this->getAdvanced($join, $where);
81 private function getQuick($join, $where)
83 require_once dirname(__FILE__
).'/../modules/search/search.inc.php';
86 Env
::kill('with_soundex');
88 $qSearch = new QuickSearch('quick');
89 $fields = new SFieldGroup(true
, array($qSearch));
90 if ($qSearch->isEmpty()) {
91 new ThrowError('Aucun critère de recherche n\'est spécifié.');
93 $this->score
= $qSearch->get_score_statement();
94 $pwhere = $fields->get_where_statement();
101 if (S
::logged() && Env
::has('nonins')) {
105 $where .= 'u.perms="pending" AND u.deces=0';
107 parent
::__construct($join . ' ' . $fields->get_select_statement(), $where);
109 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
110 'u.promo DESC, NomSortKey, prenom')));
113 private function getAdvanced($join, $where)
116 $this->advanced
= true
;
117 $fields = new SFieldGroup(true
, advancedSearchFromInput());
118 if ($fields->too_large()) {
119 new ThrowError('Recherche trop générale.');
121 parent
::__construct(@$join . ' ' . $fields->get_select_statement(),
122 @$where . ' ' . $fields->get_where_statement());
123 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
124 'promo DESC, NomSortKey, prenom')));
127 public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null
, $limitfrom = null
)
130 $fields .= ', ' . $this->score
;
132 return parent
::get($fields, $joins, $where, $groupby, $order, $limitcount, $limitfrom);
136 class ArraySet
extends UserSet
138 public function __construct(array $users)
140 $where = $this->getUids($users);
142 $where = "a.alias IN ($where)";
146 parent
::__construct('', $where);
149 private function getUids(array $users)
151 $users = get_users_forlife_list($users, true
, '_silent_user_callback');
152 if (is_null($users)) {
155 return '\'' . implode('\', \'', $users) . '\'';
159 class MinificheView
extends MultipageView
161 public function __construct(PlSet
&$set, $data, array $params)
163 require_once 'applis.func.inc.php';
165 $this->entriesPerPage
= $globals->search
->per_page
;
166 if (@$params['with_score']) {
167 $this->addSortKey('score', array('-score', '-date', '-promo', 'name_sort'), 'pertinence');
169 $this->addSortKey('name', array('name_sort'), 'nom');
170 $this->addSortKey('promo', array('-promo', 'name_sort'), 'promotion');
171 $this->addSortKey('date_mod', array('-date', '-promo', 'name_sort'), 'dernière modification');
172 parent
::__construct($set, $data, $params);
175 public function fields()
177 return "u.user_id AS id,
178 u.*, a.alias AS forlife,
179 u.perms != 'pending' AS inscrit,
180 u.perms != 'pending' AS wasinscrit,
181 u.deces != 0 AS dcd, u.deces, u.matricule_ax,
182 FIND_IN_SET('femme', u.flags) AS sexe,
183 e.entreprise, es.label AS secteur, ef.fonction_fr AS fonction,
184 IF(n.nat='',n.pays,n.nat) AS nat, n.a2 AS iso3166,
185 ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
186 ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
187 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
188 (COUNT(em.email) > 0 OR FIND_IN_SET('googleapps', u.mail_storage) > 0) AS actif,
189 nd.display AS name_display, nd.tooltip AS name_tooltip, nd.sort AS name_sort" .
190 (S
::logged() ?
", c.contact AS contact" : '');
193 public function joins()
195 return "LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id".(S
::logged() ?
"" : " AND e.pub = 'public'").")
196 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
197 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
198 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
199 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
200 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
201 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
202 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
203 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid
204 AND FIND_IN_SET('active', adr.statut)".(S
::logged() ?
"" : " AND adr.pub = 'public'").")
205 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
206 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
207 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = 'active')
208 INNER JOIN profile_names_display AS nd ON (nd.user_id = u.user_id)" .
210 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
214 public function templateName()
216 return 'include/plview.minifiche.tpl';
220 class MentorView
extends MultipageView
222 public function __construct(PlSet
&$set, $data, array $params)
224 $this->entriesPerPage
= 10;
225 $this->addSortKey('rand', array('RAND(' . S
::i('uid') . ')'), 'aléatoirement');
226 $this->addSortKey('name', array('name_sort'), 'nom');
227 $this->addSortKey('promo', array('-promo', 'name_sort'), 'promotion');
228 $this->addSortKey('date_mod', array('-date', '-promo', 'name_sort'), 'dernière modification');
229 parent
::__construct($set, $data, $params);
232 public function fields()
234 return "m.uid, u.promo,
235 a.alias AS bestalias, m.expertise, mp.pid,
236 ms.secteur, ms.ss_secteur,
237 nd.display AS name_display, nd.tooltip AS name_tooltip, nd.sort AS name_sort";
240 public function joins()
242 return "INNER JOIN profile_names_display AS nd ON (nd.user_id = u.user_id)";
245 public function templateName()
247 return 'include/plview.referent.tpl';
251 class TrombiView
extends MultipageView
253 public function __construct(PlSet
&$set, $data, array $params)
255 $this->entriesPerPage
= 24;
256 $this->order
= explode(',', Env
::v('order', 'name_sort'));
257 if (@$params['with_score']) {
258 $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'name_sort'), 'pertinence');
260 $this->addSortKey('name', array('name_sort'), 'nom');
261 $this->addSortKey('promo', array('-promo', 'name_sort'), 'promotion');
262 parent
::__construct($set, $data, $params);
265 public function fields()
267 return "u.user_id, nd.display AS name_display, nd.tooltip AS name_tooltip, nd.sort AS name_sort, u.promo, a.alias AS forlife ";
270 public function joins()
272 return "INNER JOIN photo AS p ON (p.uid = u.user_id)
273 INNER JOIN profile_names_display AS nd ON (nd.user_id = u.user_id)";
276 public function templateName()
278 return 'include/plview.trombi.tpl';
281 public function apply(PlatalPage
&$page)
283 if (!empty($GLOBALS['IS_XNET_SITE'])) {
285 $page->assign('mainsiteurl', 'https://' . $globals->core
->secure_domain
. '/');
287 return parent
::apply($page);
291 class GeolocView
implements PlView
297 public function __construct(PlSet
&$set, $data, array $params)
299 $this->params
= $params;
304 private function use_map()
306 return is_file(dirname(__FILE__
) . '/../modules/geoloc/dynamap.swf') &&
307 is_file(dirname(__FILE__
) . '/../modules/geoloc/icon.swf');
310 public function args()
312 $args = $this->set
->args();
313 unset($args['initfile']);
314 unset($args['mapid']);
318 public function apply(PlatalPage
&$page)
320 require_once 'geoloc.inc.php';
321 require_once '../modules/search/search.inc.php';
323 switch ($this->type
) {
325 header("Content-type: application/x-shockwave-flash");
327 readfile(dirname(__FILE__
).'/../modules/geoloc/icon.swf');
331 header("Content-type: application/x-shockwave-flash");
333 readfile(dirname(__FILE__
).'/../modules/geoloc/dynamap.swf');
337 $page->changeTpl('geoloc/init.tpl', NO_SKIN
);
338 header('Content-Type: text/xml');
340 if (!empty($GLOBALS['IS_XNET_SITE'])) {
341 $page->assign('background', 0xF2E9D0);
346 $page->changeTpl('geoloc/city.tpl', NO_SKIN
);
347 header('Content-Type: text/xml');
349 $only_current = Env
::v('only_current', false
)?
' AND FIND_IN_SET(\'active\', adrf.statut)' : '';
350 $it =& $this->set
->get('u.user_id AS id, u.prenom, u.nom, u.promo, al.alias',
351 "INNER JOIN adresses AS adrf ON (adrf.uid = u.user_id $only_current)
352 LEFT JOIN aliases AS al ON (u.user_id = al.id
353 AND FIND_IN_SET('bestalias', al.flags))
354 INNER JOIN adresses AS avg ON (" . getadr_join('avg') . ")",
355 'adrf.cityid = ' . Env
::i('cityid'), null
, null
, 11);
356 $page->assign('users', $it);
360 if (Env
::has('debug')) {
361 $page->changeTpl('geoloc/country.tpl', SIMPLE
);
363 $page->changeTpl('geoloc/country.tpl', NO_SKIN
);
364 header('Content-Type: text/xml');
367 $mapid = Env
::has('mapid') ? Env
::i('mapid', -2) : false
;
368 list($countries, $cities) = geoloc_getData_subcountries($mapid, $this->set
, 10);
369 $page->assign('countries', $countries);
370 $page->assign('cities', $cities);
375 if (!$this->use_map()) {
376 $page->assign('request_geodesix', true
);
378 $page->assign('annu', @$this->params
['with_annu']);
379 $page->assign('protocole', @$_SERVER['HTTPS'] ?
'https' : 'http');
380 $this->set
->get('u.user_id', null
, "u.perms != 'pending' AND u.deces = 0", "u.user_id", null
);
381 return 'include/plview.geoloc.tpl';
386 class GadgetView
implements PlView
388 public function __construct(PlSet
&$set, $data, array $params)
393 public function fields()
395 return "u.user_id AS id,
396 u.*, a.alias AS forlife," .
397 "u.perms != 'pending' AS inscrit,
398 u.perms != 'pending' AS wasinscrit,
399 u.deces != 0 AS dcd, u.deces,
400 FIND_IN_SET('femme', u.flags) AS sexe,
401 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region" .
402 (S
::logged() ?
", c.contact AS contact" : '');
405 public function joins()
407 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'").")
408 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
409 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)" .
411 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
415 public function apply(PlatalPage
&$page)
417 $page->assign_by_ref('set',
418 $this->set
->get($this->fields(), $this->joins(), null
, null
, null
, 5, 0));
421 public function args()
427 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: