projects
/
platal.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Adds labels around checkbox and radio inputs.
[platal.git]
/
modules
/
search.php
diff --git
a/modules/search.php
b/modules/search.php
index
ee08963
..
c9ca317
100644
(file)
--- a/
modules/search.php
+++ b/
modules/search.php
@@
-1,6
+1,6
@@
<?php
/***************************************************************************
<?php
/***************************************************************************
- * Copyright (C) 2003-200
7
Polytechnique.org *
+ * Copyright (C) 2003-200
8
Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
@@
-38,18
+38,9
@@
class SearchModule extends PLModule
exit;
}
exit;
}
- function on_subscribe($forlife, $uid, $promo, $pass)
- {
- require_once 'user.func.inc.php';
- user_reindex($uid);
- }
-
-
function form_prepare()
{
function form_prepare()
{
- global $page;
-
- $page->assign('formulaire',1);
+ Platal::page()->assign('formulaire',1);
}
function get_diplomas($school = null)
}
function get_diplomas($school = null)
@@
-72,8
+63,7
@@
class SearchModule extends PLModule
$types = explode('(',$row[1]);
$types = str_replace("'","",substr($types[1],0,-1));
}
$types = explode('(',$row[1]);
$types = str_replace("'","",substr($types[1],0,-1));
}
- global $page;
- $page->assign('choix_diplomas', explode(',',$types));
+ Platal::page()->assign('choix_diplomas', explode(',',$types));
}
function handler_quick(&$page, $action = null, $subaction = null)
}
function handler_quick(&$page, $action = null, $subaction = null)
@@
-89,11
+79,14
@@
class SearchModule extends PLModule
if (Env::has('quick') || $action == 'geoloc') {
$quick = trim(Env::v('quick'));
if (Env::has('quick') || $action == 'geoloc') {
$quick = trim(Env::v('quick'));
+ if (S::logged() && !Env::has('page')) {
+ S::logger()->log('search', 'quick=' . $quick);
+ }
$list = 'profile|prf|fiche|fic|referent|ref|mentor';
if (S::has_perms()) {
$list .= '|admin|adm|ax';
}
$list = 'profile|prf|fiche|fic|referent|ref|mentor';
if (S::has_perms()) {
$list .= '|admin|adm|ax';
}
- if (preg_match('/^(' . $list . '):([-a-z]+(\.[-a-z]+(\.\d{2,4})?)?)$/',
$quick
, $matches)) {
+ if (preg_match('/^(' . $list . '):([-a-z]+(\.[-a-z]+(\.\d{2,4})?)?)$/',
replace_accent($quick)
, $matches)) {
$forlife = $matches[2];
switch($matches[1]) {
case 'admin': case 'adm':
$forlife = $matches[2];
switch($matches[1]) {
case 'admin': case 'adm':
@@
-109,11
+102,18
@@
class SearchModule extends PLModule
$base = 'referent/';
break;
}
$base = 'referent/';
break;
}
- pl_redirect($base . $forlife);
+
+ require_once 'user.func.inc.php';
+ $login = get_user_forlife($forlife, '_silent_user_callback');
+ if ($login) {
+ pl_redirect($base . $login);
+ }
+ $_REQUEST['quick'] = $forlife;
+ $_GET['quick'] = $forlife;
} elseif (strpos($quick, 'doc:') === 0) {
$url = 'Docs/Recherche?';
$url .= 'action=search&q=' . urlencode(substr($quick, 4));
} elseif (strpos($quick, 'doc:') === 0) {
$url = 'Docs/Recherche?';
$url .= 'action=search&q=' . urlencode(substr($quick, 4));
- $url .= '&group=' . urlencode('-Equipe,-Main,-PmWiki,-Site');
+ $url .= '&group=' . urlencode('-Equipe,-Main,-PmWiki,-Site
,-Review
');
pl_redirect($url);
}
pl_redirect($url);
}
@@
-121,7
+121,7
@@
class SearchModule extends PLModule
require_once 'userset.inc.php';
$view = new SearchSet(true, $action == 'geoloc' && substr($subaction, -3) == 'swf');
require_once 'userset.inc.php';
$view = new SearchSet(true, $action == 'geoloc' && substr($subaction, -3) == 'swf');
- $view->addMod('minifiche', 'Minifiches', true, array('with_score' => true));
+ $view->addMod('minifiche', 'Mini
-
fiches', true, array('with_score' => true));
if (S::logged() && !Env::i('nonins')) {
$view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true, 'with_score' => true));
$view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
if (S::logged() && !Env::i('nonins')) {
$view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true, 'with_score' => true));
$view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
@@
-136,26
+136,27
@@
class SearchModule extends PLModule
if (!S::logged() && $nb_tot > $globals->search->public_max) {
new ThrowError('Votre recherche a généré trop de résultats pour un affichage public.');
} elseif ($nb_tot > $globals->search->private_max) {
if (!S::logged() && $nb_tot > $globals->search->public_max) {
new ThrowError('Votre recherche a généré trop de résultats pour un affichage public.');
} elseif ($nb_tot > $globals->search->private_max) {
- new ThrowError('Recherche trop générale');
+ new ThrowError('Recherche trop générale
. Une <a href="search/adv">recherche avancée</a> permet de préciser la recherche.
');
} elseif (empty($nb_tot)) {
} elseif (empty($nb_tot)) {
- new ThrowError('
i
l n\'existe personne correspondant à ces critères dans la base !');
+ new ThrowError('
I
l n\'existe personne correspondant à ces critères dans la base !');
}
} else {
$page->assign('formulaire',1);
$page->addJsLink('ajax.js');
}
}
} else {
$page->assign('formulaire',1);
$page->addJsLink('ajax.js');
}
-
require_once dirname(__FILE__) . '/search/search.inc.php'
;
+
$this->load('search.inc.php')
;
$page->changeTpl('search/index.tpl');
$page->changeTpl('search/index.tpl');
- $page->
assign('xorg_title','Polytechnique.org -
Annuaire');
+ $page->
setTitle('
Annuaire');
}
function handler_advanced(&$page, $action = null, $subaction = null)
{
global $globals;
require_once 'geoloc.inc.php';
}
function handler_advanced(&$page, $action = null, $subaction = null)
{
global $globals;
require_once 'geoloc.inc.php';
-
require_once dirname(__FILE__) . '/search/search.inc.php'
;
+
$this->load('search.inc.php')
;
$page->assign('advanced',1);
$page->assign('advanced',1);
+ $page->addJsLink('jquery.autocomplete.js');
if (!Env::has('rechercher') && $action != 'geoloc') {
$this->form_prepare();
if (!Env::has('rechercher') && $action != 'geoloc') {
$this->form_prepare();
@@
-170,8
+171,12
@@
class SearchModule extends PLModule
'text' => "(a.cat = 'GroupesX' OR a.cat = 'Institutions') AND pub = 'public' AND nom",
'exact' => false),
'section' => array('field' => 'id', 'table' => 'sections', 'text' => 'text', 'exact' => false),
'text' => "(a.cat = 'GroupesX' OR a.cat = 'Institutions') AND pub = 'public' AND nom",
'exact' => false),
'section' => array('field' => 'id', 'table' => 'sections', 'text' => 'text', 'exact' => false),
- 'school' => array('field' => 'id', 'table' => 'applis_def', 'text' => 'text', 'exact' => false)
+ 'school' => array('field' => 'id', 'table' => 'applis_def', 'text' => 'text', 'exact' => false),
+ 'city' => array('table' => 'geoloc_city', 'text' => 'name', 'exact' => false)
);
);
+ if (!Env::has('page')) {
+ S::logger()->log('search', 'adv=' . var_export($_GET, true));
+ }
foreach ($textFields as $field=>&$query) {
if (!Env::v($field) && Env::v($field . 'Txt')) {
$res = XDB::query("SELECT {$query['field']}
foreach ($textFields as $field=>&$query) {
if (!Env::v($field) && Env::v($field . 'Txt')) {
$res = XDB::query("SELECT {$query['field']}
@@
-185,9
+190,9
@@
class SearchModule extends PLModule
require_once 'userset.inc.php';
$view = new SearchSet(false, $action == 'geoloc' && substr($subaction, -3) == 'swf');
require_once 'userset.inc.php';
$view = new SearchSet(false, $action == 'geoloc' && substr($subaction, -3) == 'swf');
- $view->addMod('minifiche', 'Minifiches', true);
+ $view->addMod('minifiche', 'Mini
-
fiches', true);
$view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true));
$view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true));
- $view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
+
//
$view->addMod('geoloc', 'Planisphère', false, array('with_annu' => 'search/adv'));
$view->apply('search/adv', $page, $action, $subaction);
if ($subaction) {
$view->apply('search/adv', $page, $action, $subaction);
if ($subaction) {
@@
-196,7
+201,7
@@
class SearchModule extends PLModule
$nb_tot = $view->count();
if ($nb_tot > $globals->search->private_max) {
$this->form_prepare();
$nb_tot = $view->count();
if ($nb_tot > $globals->search->private_max) {
$this->form_prepare();
- new ThrowError('Recherche trop générale');
+ new ThrowError('Recherche trop générale
.
');
}
}
}
}
@@
-236,13
+241,12
@@
class SearchModule extends PLModule
}
// default search
}
// default search
- $q = preg_quote($q);
$unique = '`user_id`';
$db = '`auth_user_md5`';
$realid = false;
$beginwith = true;
$field2 = false;
$unique = '`user_id`';
$db = '`auth_user_md5`';
$realid = false;
$beginwith = true;
$field2 = false;
- $qsearch =
$q
;
+ $qsearch =
str_replace(array('%', '_'), '', $q)
;
switch ($type) {
case 'binetTxt':
switch ($type) {
case 'binetTxt':
@@
-274,7
+278,6
@@
class SearchModule extends PLModule
break;
case 'firstname':
$field = '`prenom`';
break;
case 'firstname':
$field = '`prenom`';
- $q = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'fonctionTxt':
$beginwith = false;
break;
case 'fonctionTxt':
@@
-283,7
+286,6
@@
class SearchModule extends PLModule
$field = '`fonction_fr`';
$unique = '`uid`';
$realid = '`fonctions_def`.`id`';
$field = '`fonction_fr`';
$unique = '`uid`';
$realid = '`fonctions_def`.`id`';
- $qsearch = '(^|[ /\\-])'.$q;
$beginwith = false;
break;
case 'groupexTxt':
$beginwith = false;
break;
case 'groupexTxt':
@@
-301,7
+303,6
@@
class SearchModule extends PLModule
case 'name':
$field = '`nom`';
$field2 = '`nom_usage`';
case 'name':
$field = '`nom`';
$field2 = '`nom_usage`';
- $qsearch = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'nationaliteTxt':
$beginwith = false;
break;
case 'nationaliteTxt':
@@
-315,7
+316,6
@@
class SearchModule extends PLModule
case 'nickname':
$field = '`profile_nick`';
$db = '`auth_user_quick`';
case 'nickname':
$field = '`profile_nick`';
$db = '`auth_user_quick`';
- $qsearch = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'poste':
$beginwith = false;
break;
case 'poste':
@@
-350,30
+350,38
@@
class SearchModule extends PLModule
default: exit();
}
default: exit();
}
+ function make_field_test($fields, $beginwith) {
+ $tests = array();
+ $tests[] = $fields . ' LIKE CONCAT({?}, \'%\')';
+ if (!$beginwith) {
+ $tests[] = $fields . ' LIKE CONCAT(\'% \', {?}, \'%\')';
+ $tests[] = $fields . ' LIKE CONCAT(\'%-\', {?}, \'%\')';
+ }
+ return '(' . implode(' OR ', $tests) . ')';
+ }
$field_select = $field;
$field_select = $field;
+ $field_t = make_field_test($field, $beginwith);
if ($field2) {
if ($field2) {
- $field_select = 'IF('.$field.' REGEXP {?}, '.$field.', '.$field2.')';
- }
-
- if ($beginwith) {
- $qsearch = '^'.$qsearch;
+ $field2_t = make_field_test($field2, $beginwith);
+ $field_select = 'IF(' . $field_t . ', ' . $field . ', ' . $field2. ')';
}
}
- $list = XDB::iterator('SELECT '
.$field_select.
' AS field,
- COUNT(DISTINCT '
.$unique.
') AS nb
- '
.($realid?(', '.$realid.' AS id'):'').
'
- FROM '
.$db.
'
- WHERE '
.$field.' REGEXP {?}'
.
- ($field2
?(' OR '.$field2.' REGEXP {?}'):'').
'
- GROUP BY '
.$field_select.
'
+ $list = XDB::iterator('SELECT '
. $field_select .
' AS field,
+ COUNT(DISTINCT '
. $unique .
') AS nb
+ '
. ($realid ? (', ' . $realid . ' AS id') : '') .
'
+ FROM '
. $db .
'
+ WHERE '
. $field_t
.
+ ($field2
? (' OR ' . $field2_t) : '') .
'
+ GROUP BY '
. $field_select .
'
ORDER BY nb DESC
LIMIT 11',
ORDER BY nb DESC
LIMIT 11',
- $qsearch, $qsearch, $qsearch, $qsearch);
+ $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch,
+ $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch);
$nbResults = 0;
$res = "";
while ($result = $list->next()) {
$nbResults++;
if ($nbResults == 11) {
$nbResults = 0;
$res = "";
while ($result = $list->next()) {
$nbResults++;
if ($nbResults == 11) {
- $res .=
'...|1'."
\n";
+ $res .=
$q."|-1
\n";
} else {
$res .= $result['field'].'|';
$res .= $result['nb'];
} else {
$res .= $result['field'].'|';
$res .= $result['nb'];
@@
-462,6
+470,8
@@
class SearchModule extends PLModule
FROM '.$db.$where.'
GROUP BY '.$field.'
ORDER BY '.$field));
FROM '.$db.$where.'
GROUP BY '.$field.'
ORDER BY '.$field));
+ $page->assign('with_text_value', true);
+ $page->assign('onchange', "document.forms.recherche.{$type}Txt.value = this.options[this.selectedIndex].text");
}
}
}
}