<?php
/***************************************************************************
- * Copyright (C) 2003-2007 Polytechnique.org *
+ * Copyright (C) 2003-2008 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
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)) {
- new ThrowError('il n\'existe personne correspondant à ces critères dans la base !');
+ new ThrowError('Il n\'existe personne correspondant à ces critères dans la base !');
}
} else {
$page->assign('formulaire',1);
$view = new SearchSet(false, $action == 'geoloc' && substr($subaction, -3) == 'swf');
$view->addMod('minifiche', 'Minifiches', 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) {
$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.');
}
}
}
// default search
- $q = preg_quote($q);
$unique = '`user_id`';
$db = '`auth_user_md5`';
$realid = false;
$beginwith = true;
$field2 = false;
- $qsearch = $q;
+ $qsearch = str_replace(array('%', '_'), '', $q);
switch ($type) {
case 'binetTxt':
break;
case 'firstname':
$field = '`prenom`';
- $q = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'fonctionTxt':
$field = '`fonction_fr`';
$unique = '`uid`';
$realid = '`fonctions_def`.`id`';
- $qsearch = '(^|[ /\\-])'.$q;
$beginwith = false;
break;
case 'groupexTxt':
case 'name':
$field = '`nom`';
$field2 = '`nom_usage`';
- $qsearch = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'nationaliteTxt':
case 'nickname':
$field = '`profile_nick`';
$db = '`auth_user_quick`';
- $qsearch = '(^|[ \\-])'.$q;
$beginwith = false;
break;
case 'poste':
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_t = make_field_test($field, $beginwith);
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',
- $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()) {