aba0254f54ffaca2d037d814916bb5d3cef59a02
2 /***************************************************************************
3 * Copyright (C) 2003-2007 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 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
)
67 require_once dirname(__FILE__
).'/../modules/search/search.inc.php';
73 $this->quick
= $quick;
81 private function getQuick()
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('Recherche trop générale.');
93 $this->score
= $qSearch->get_score_statement();
94 parent
::__construct("{$fields->get_select_statement()}",
95 $fields->get_where_statement() .
96 (S
::logged() && Env
::has('nonins') ?
' AND u.perms="pending" AND u.deces=0' : ''));
98 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
99 'u.promo DESC, NomSortKey, prenom')));
102 private function getAdvanced()
105 $this->advanced
= true
;
106 $fields = new SFieldGroup(true
, advancedSearchFromInput());
107 if ($fields->too_large()) {
108 new ThrowError('Recherche trop générale.');
110 parent
::__construct($fields->get_select_statement(),
111 $fields->get_where_statement());
112 $this->order
= implode(',',array_filter(array($fields->get_order_statement(),
113 'promo DESC, NomSortKey, prenom')));
116 public function &get($fields, $joins, $where, $groupby, $order, $limitcount = null
, $limitfrom = null
)
119 $fields .= ', ' . $this->score
;
121 return parent
::get($fields, $joins, $where, $groupby, $order, $limitcount, $limitfrom);
125 class ArraySet
extends UserSet
127 public function __construct(array $users)
129 $where = $this->getUids($users);
131 $where = "a.alias IN ($where)";
135 parent
::__construct('', $where);
138 private function getUids(array $users)
140 $users = get_users_forlife_list($users, true
, '_silent_user_callback');
141 if (is_null($users)) {
144 return '\'' . implode('\', \'', $users) . '\'';
148 class MinificheView
extends MultipageView
150 public function __construct(PlSet
&$set, $data, array $params)
152 require_once 'applis.func.inc.php';
154 $this->entriesPerPage
= $globals->search
->per_page
;
155 if (@$params['with_score']) {
156 $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'nom', 'prenom'), 'pertinence');
158 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
159 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
160 $this->addSortKey('date', array('-watch_last', '-promo', 'nom', 'prenom'), 'dernière modification');
161 parent
::__construct($set, $data, $params);
164 public function fields()
166 return "u.user_id AS id,
167 u.*, a.alias AS forlife,
168 u.perms != 'pending' AS inscrit,
169 u.perms != 'pending' AS wasinscrit,
170 u.deces != 0 AS dcd, u.deces, u.matricule_ax,
171 FIND_IN_SET('femme', u.flags) AS sexe,
172 e.entreprise, es.label AS secteur, ef.fonction_fr AS fonction,
173 IF(n.nat='',n.pays,n.nat) AS nat, n.a2 AS iso3166,
174 ad0.text AS app0text, ad0.url AS app0url, ai0.type AS app0type,
175 ad1.text AS app1text, ad1.url AS app1url, ai1.type AS app1type,
176 adr.city, gp.a2, gp.pays AS countrytxt, gr.name AS region,
177 IF(u.nom_usage<>'',u.nom_usage,u.nom) AS sortkey,
178 COUNT(em.email) > 0 AS actif" . (S
::logged() ?
", c.contact AS contact" : '');
181 public function joins()
183 return "LEFT JOIN entreprises AS e ON (e.entrid = 0 AND e.uid = u.user_id)
184 LEFT JOIN emploi_secteur AS es ON (e.secteur = es.id)
185 LEFT JOIN fonctions_def AS ef ON (e.fonction = ef.id)
186 LEFT JOIN geoloc_pays AS n ON (u.nationalite = n.a2)
187 LEFT JOIN applis_ins AS ai0 ON (u.user_id = ai0.uid AND ai0.ordre = 0)
188 LEFT JOIN applis_def AS ad0 ON (ad0.id = ai0.aid)
189 LEFT JOIN applis_ins AS ai1 ON (u.user_id = ai1.uid AND ai1.ordre = 1)
190 LEFT JOIN applis_def AS ad1 ON (ad1.id = ai1.aid)
191 LEFT JOIN adresses AS adr ON (u.user_id = adr.uid
192 AND FIND_IN_SET('active', adr.statut))
193 LEFT JOIN geoloc_pays AS gp ON (adr.country = gp.a2)
194 LEFT JOIN geoloc_region AS gr ON (adr.country = gr.a2 AND adr.region = gr.region)
195 LEFT JOIN emails AS em ON (em.uid = u.user_id AND em.flags = 'active')" .
197 "LEFT JOIN contacts AS c On (c.contact = u.user_id AND c.uid = " . S
::v('uid') . ")"
201 public function templateName()
203 return 'include/plview.minifiche.tpl';
207 class MentorView
extends MultipageView
209 public function __construct(PlSet
&$set, $data, array $params)
211 $this->entriesPerPage
= 10;
212 $this->addSortKey('rand', array('RAND(' . S
::i('uid') . ')'), 'aléatoirement');
213 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
214 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
215 $this->addSortKey('date', array('-watch_last', '-promo', 'nom', 'prenom'), 'dernière modification');
216 parent
::__construct($set, $data, $params);
219 public function fields()
221 return "m.uid, u.prenom, u.nom, u.promo,
222 a.alias AS bestalias, m.expertise, mp.pid,
223 ms.secteur, ms.ss_secteur";
226 public function templateName()
228 return 'include/plview.referent.tpl';
232 class TrombiView
extends MultipageView
234 public function __construct(PlSet
&$set, $data, array $params)
236 $this->entriesPerPage
= 24;
237 $this->order
= explode(',', Env
::v('order', 'nom,prenom,promo'));
238 if (@$params['with_score']) {
239 $this->addSortKey('score', array('-score', '-watch_last', '-promo', 'nom', 'prenom'), 'pertinence');
241 $this->addSortKey('name', array('nom', 'prenom'), 'nom');
242 $this->addSortKey('promo', array('-promo', 'nom', 'prenom'), 'promotion');
243 parent
::__construct($set, $data, $params);
246 public function fields()
248 return "u.user_id, IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom, u.prenom, u.promo, a.alias AS forlife ";
251 public function joins()
253 return "INNER JOIN photo AS p ON (p.uid = u.user_id) ";
256 public function templateName()
258 return 'include/plview.trombi.tpl';
261 public function apply(PlatalPage
&$page)
263 if (!empty($GLOBALS['IS_XNET_SITE'])) {
265 $page->assign('mainsiteurl', 'https://' . $globals->core
->secure_domain
. '/');
267 return parent
::apply($page);
271 class GeolocView
implements PlView
277 public function __construct(PlSet
&$set, $data, array $params)
279 $this->params
= $params;
284 private function use_map()
286 return is_file(dirname(__FILE__
) . '/../modules/geoloc/dynamap.swf') &&
287 is_file(dirname(__FILE__
) . '/../modules/geoloc/icon.swf');
290 public function args()
292 $args = $this->set
->args();
293 unset($args['initfile']);
294 unset($args['mapid']);
298 public function apply(PlatalPage
&$page)
300 require_once 'geoloc.inc.php';
301 require_once '../modules/search/search.inc.php';
303 switch ($this->type
) {
305 header("Content-type: application/x-shockwave-flash");
307 readfile(dirname(__FILE__
).'/../modules/geoloc/icon.swf');
311 header("Content-type: application/x-shockwave-flash");
313 readfile(dirname(__FILE__
).'/../modules/geoloc/dynamap.swf');
317 $page->changeTpl('geoloc/init.tpl', NO_SKIN
);
318 header('Content-Type: text/xml');
320 if (!empty($GLOBALS['IS_XNET_SITE'])) {
321 $page->assign('background', 0xF2E9D0);
326 $page->changeTpl('geoloc/city.tpl', NO_SKIN
);
327 header('Content-Type: text/xml');
329 $it =& $this->set
->get('u.user_id AS id, u.prenom, u.nom, u.promo, al.alias',
330 "INNER JOIN adresses AS adrf ON (adrf.uid = u.user_id)
331 LEFT JOIN aliases AS al ON (u.user_id = al.id
332 AND FIND_IN_SET('bestalias', al.flags))
333 INNER JOIN adresses AS av ON (" . getadr_join('av') . ")",
334 'adrf.cityid = ' . Env
::i('cityid'), null
, null
, 11);
335 $page->assign('users', $it);
339 if (Env
::has('debug')) {
340 $page->changeTpl('geoloc/country.tpl', SIMPLE
);
342 $page->changeTpl('geoloc/country.tpl', NO_SKIN
);
343 header('Content-Type: text/xml');
346 $mapid = Env
::has('mapid') ? Env
::i('mapid', -2) : false
;
347 list($countries, $cities) = geoloc_getData_subcountries($mapid, $this->set
, 10);
348 $page->assign('countries', $countries);
349 $page->assign('cities', $cities);
354 if (!$this->use_map()) {
355 $page->assign('request_geodesix', true
);
357 if (!empty($GLOBALS['IS_XNET_SITE'])) {
358 $page->assign('no_annu', true
);
360 $page->assign('protocole', @$_SERVER['HTTPS'] ?
'https' : 'http');
361 $this->set
->get('u.user_id', null
, "u.perms != 'pending' AND u.deces = 0", "u.user_id", null
);
362 return 'include/plview.geoloc.tpl';
367 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: