From: x2000bedo Date: Sun, 10 Oct 2004 23:51:19 +0000 (+0000) Subject: Limitations of advanced requests and recuperation of failures X-Git-Tag: xorg/old~1334 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=9408d6a999cd180131211c661c3a2e297ff22193;p=platal.git Limitations of advanced requests and recuperation of failures --- diff --git a/htdocs/advanced_search.php b/htdocs/advanced_search.php index 6a93288..fc1819e 100644 --- a/htdocs/advanced_search.php +++ b/htdocs/advanced_search.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: advanced_search.php,v 1.9 2004-10-09 18:18:58 x2000habouzit Exp $ + $Id: advanced_search.php,v 1.10 2004-10-10 23:51:19 x2000bedo Exp $ ***************************************************************************/ require("auto.prepend.inc.php"); @@ -29,7 +29,36 @@ $page->assign('public_directory',0); require_once("applis.func.inc.php"); require_once("geoloc.inc.php"); -if (array_key_exists('rechercher', $_REQUEST)) { +function form_prepare() { + global $page,$globals; + $page->assign('formulaire',1); + $sql = 'SELECT id,text FROM nationalites ORDER BY text'; + $page->mysql_assign($sql,'choix_nationalites'); + $sql = 'SELECT id,text FROM binets_def ORDER BY text'; + $page->mysql_assign($sql,'choix_binets'); + $sql = 'SELECT id,text FROM groupesx_def ORDER BY text'; + $page->mysql_assign($sql,'choix_groupesx'); + $sql = 'SELECT id,text FROM sections ORDER BY text'; + $page->mysql_assign($sql,'choix_sections'); + $sql = 'SELECT id,text FROM applis_def ORDER BY text'; + $page->mysql_assign($sql,'choix_schools'); + if (isset($_REQUEST['school'])) { + $sql = 'SELECT type FROM applis_def WHERE id='.$_REQUEST['school']; + $result = $globals->db->query($sql); + list($types) = mysql_fetch_row($result); + $page->assign('choix_diplomas',explode(',',$types)); + } + $sql = 'SELECT id,label FROM emploi_secteur ORDER BY label'; + $page->mysql_assign($sql,'choix_secteurs'); + $sql = 'SELECT id,fonction_fr FROM fonctions_def ORDER BY fonction_fr'; + $page->mysql_assign($sql,'choix_postes'); +} + + +if (!array_key_exists('rechercher', $_REQUEST)) { + form_prepare(); +} +else { $page->assign('formulaire',0); $with_soundex = ((isset($_REQUEST['with_soundex']) && $_REQUEST['with_soundex']==1)); @@ -67,6 +96,11 @@ if (array_key_exists('rechercher', $_REQUEST)) { $entrepriseField,$posteField,$secteurField,$cvField, $nationaliteField,$binetField,$groupexField,$sectionField,$schoolField,$diplomaField)); + if ($fields->too_large()) + { + form_prepare(); + new ThrowError('Recherche trop générale.'); + } $offset = new NumericSField('offset'); $where = $fields->get_where_statement(); @@ -106,28 +140,6 @@ if (array_key_exists('rechercher', $_REQUEST)) { $page->assign('perpage',$globals->search_results_per_page); $page->assign('is_admin',has_perms()); } -else { - $page->assign('formulaire',1); - $sql = 'SELECT id,text FROM nationalites ORDER BY text'; - $page->mysql_assign($sql,'choix_nationalites'); - $sql = 'SELECT id,text FROM binets_def ORDER BY text'; - $page->mysql_assign($sql,'choix_binets'); - $sql = 'SELECT id,text FROM groupesx_def ORDER BY text'; - $page->mysql_assign($sql,'choix_groupesx'); - $sql = 'SELECT id,text FROM sections ORDER BY text'; - $page->mysql_assign($sql,'choix_sections'); - $sql = 'SELECT id,text FROM applis_def ORDER BY text'; - $page->mysql_assign($sql,'choix_schools'); - if (isset($_REQUEST['school'])) { - $sql = 'SELECT type FROM applis_def WHERE id='.$_REQUEST['school']; - $result = $globals->db->query($sql); - list($types) = mysql_fetch_row($result); - $page->assign('choix_diplomas',explode(',',$types)); - } - $sql = 'SELECT id,label FROM emploi_secteur ORDER BY label'; - $page->mysql_assign($sql,'choix_secteurs'); - $sql = 'SELECT id,fonction_fr FROM fonctions_def ORDER BY fonction_fr'; - $page->mysql_assign($sql,'choix_postes'); -} + $page->run(); ?> diff --git a/include/search.classes.inc.php b/include/search.classes.inc.php index 62e265b..2dd0e3a 100644 --- a/include/search.classes.inc.php +++ b/include/search.classes.inc.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: search.classes.inc.php,v 1.12 2004-08-31 11:16:48 x2000habouzit Exp $ + $Id: search.classes.inc.php,v 1.13 2004-10-10 23:51:21 x2000bedo Exp $ ***************************************************************************/ require_once("xorg.misc.inc.php"); @@ -141,6 +141,10 @@ class RefSField extends SField { $this->value=''; } + function too_large() { + return ($this->value==''); + } + function compare() { if ($this->exact) return "='".$this->value."'"; @@ -196,6 +200,10 @@ class StringSField extends SField { strlen($this->value)-strlen(ereg_replace('[a-z'.$lc_accent.$uc_accent.']','',strtolower($this->value))); } + function too_large() { + return ($this->length()<2); + } + /** clause WHERE correspondant à un champ de la bdd et à ce champ de formulaire * @param field nom de champ de la bdd concerné par la clause */ function get_single_where_statement($field) { @@ -257,6 +265,10 @@ class PromoSField extends SField { return ($this->compareField->value=='=' && $this->value!=''); } + function too_large() { + return (!$this->is_a_single_promo()); + } + /** clause WHERE correspondant à ce champ */ function get_single_where_statement($field) { return $field.$this->compareField->value.$this->value; @@ -285,6 +297,13 @@ class SFieldGroup { $this->and = $_and; } + function too_large() { + $b = true; + for ($i=0;$ifields);$i++) + $b = $b && $this->fields[$i]->too_large(); + return $b; + } + function field_get_select($f) { return $f->get_select_statement(); }