From a9385e235cadbb9aa0e7962903b504e429a2d2cb Mon Sep 17 00:00:00 2001 From: x2000bedo Date: Wed, 4 Aug 2004 01:19:51 +0000 Subject: [PATCH] =?utf8?q?Quelques=20am=E9liorations?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- htdocs/search.php | 48 ++++++++++++++++++++++++++------- include/search.classes.inc.php | 61 ++++++++++++++++++++++++++++++++++++++++++ templates/search.tpl | 32 +++++++++++++++++++--- 3 files changed, 127 insertions(+), 14 deletions(-) diff --git a/htdocs/search.php b/htdocs/search.php index 76e37c1..eedca67 100644 --- a/htdocs/search.php +++ b/htdocs/search.php @@ -1,31 +1,59 @@ assign('public_directory',$public_directory); +if (array_key_exists('rechercher', $_REQUEST)) { $page->assign('formulaire',0); - $nameField = new StringSField('name',array('u.nom','u.epouse')); - $firstnameField = new StringSField('firstname',array('u.prenom')); - $promoField = new PromoSField('promo','egal','u.promo'); + $nameField = new StringSField('name',array('nom','epouse')); + $firstnameField = new StringSField('firstname',array('prenom')); + $promoField = new PromoSField('promo','egal','promo'); $fields = new SFieldGroup(true,array($nameField,$firstnameField,$promoField)); $nameField = new StringSField('name',array('i.nom')); $firstnameField = new StringSField('firstname',array('i.prenom')); $promoField = new PromoSField('promo','egal','i.promo'); $fields2 = new SFieldGroup(true,array($nameField,$firstnameField,$promoField)); - $sql = '(SELECT u.nom,u.prenom,u.promo - FROM auth_user_md5 AS u - WHERE '.$fields->get_where_statement().') + $offset = new NumericSField('offset'); + $sqli = '(SELECT matricule + FROM auth_user_md5 + WHERE '.$fields->get_where_statement().')'; + $result = mysql_query($sqli); + while ($row = mysql_fetch_row($result)) + list($matricules[]) = $row; + $sqln = '(SELECT matricule + FROM auth_user_md5 + WHERE matricule IN ('.implode(',',$matricules).')) UNION - (SELECT i.nom,i.prenom,i.promo + (SELECT i.matricule FROM identification AS i - WHERE '.$fields2->get_where_statement().') - ORDER BY promo DESC,nom,prenom'; + WHERE i.matricule NOT IN ('.implode(',',$matricules).') + AND '.$fields2->get_where_statement().')'; + $result = mysql_query($sqln); + $page->assign('nb_resultats_total',mysql_num_rows($result)); + $sql = '(SELECT 1 AS inscrit,u.nom,u.epouse,u.prenom,u.promo,i.deces!=0 AS decede,u.username, + c.uid AS contact + FROM auth_user_md5 AS u + INNER JOIN identification AS i ON (i.matricule=u.matricule) + LEFT JOIN contacts AS c ON (c.uid = '.$_SESSION['uid'].' AND c.contact=u.user_id) + WHERE u.matricule IN ('.implode(',',$matricules).')) + UNION + (SELECT 0 AS inscrit,i.nom,"",i.prenom,i.promo,i.deces!=0 AS decede,"","" AS contact + FROM identification AS i + WHERE i.matricule NOT IN ('.implode(',',$matricules).') + AND '.$fields2->get_where_statement().') + ORDER BY '.implode(',',array_filter(array($fields->get_order_statement(), + 'promo DESC,nom,prenom'))).' + LIMIT '.$offset->value.','.$perpage; $page->mysql_assign($sql, 'resultats', 'nb_resultats'); + $page->assign('url_args',$fields->get_url()); + $page->assign('offset',$offset->value); + $page->assign('perpage',$perpage); } else $page->assign('formulaire',1); diff --git a/include/search.classes.inc.php b/include/search.classes.inc.php index 0a9f549..1b2da99 100644 --- a/include/search.classes.inc.php +++ b/include/search.classes.inc.php @@ -24,6 +24,32 @@ class SField { function get_where_statement() { return ($this->value!=''); } + + function get_order_statement() { + return false; + } + + function get_url() { + if ($this->value=='') + return false; + else + return $this->fieldFormName.'='.urlencode($this->value); + } +} + +class NumericSField extends SField { + function NumericSField($_fieldFormName) { + $this->fieldFormName = $_fieldFormName; + $this->get_request(); + } + + function get_request() { + parent::get_request(); + if ($this->value=='') + $this->value = 0; + if (!preg_match("/^[0-9]+$/", $this->value)) + $this->error('Un champ numérique contient des caractères alphanumériques.
'); + } } class StringSField extends SField { @@ -52,6 +78,17 @@ class StringSField extends SField { return false; return '('.implode(' OR ',array_map(array($this,'get_like'),$this->fieldDbName)).')'; } + + function get_different($field) { + return $field.'!="'.$this->value.'"'; + } + + function get_order_statement() { + if ($this->value!='') + return implode(',',array_map(array($this,'get_different'),$this->fieldDbName)); + else + return false; + } } class PromoSField extends SField { @@ -77,6 +114,12 @@ class PromoSField extends SField { return false; return $this->fieldDbName.$this->compareField->value.$this->value; } + + function get_url() { + if (!($u=parent::get_url())) + return false; + return $u.'&'.$this->compareField->get_url(); + } } class SFieldGroup { @@ -92,9 +135,27 @@ class SFieldGroup { return $f->get_where_statement(); } + function field_get_order($f) { + return $f->get_order_statement(); + } + + function field_get_url($f) { + return $f->get_url(); + } + function get_where_statement() { $joinText=($this->and)?' AND ':' OR '; return '('.implode($joinText,array_filter(array_map(array($this,'field_get_where'),$this->fields))).')'; } + + function get_order_statement() { + $order = array_filter(array_map(array($this,'field_get_order'),$this->fields)); + return (count($order)>0)?implode(',',$order):false; + } + + function get_url() { + $url = array_filter(array_map(array($this,'field_get_url'),$this->fields)); + return (count($url)>0)?implode('&',$url):false; + } } ?> diff --git a/templates/search.tpl b/templates/search.tpl index 2dae2a0..7e82678 100644 --- a/templates/search.tpl +++ b/templates/search.tpl @@ -4,26 +4,50 @@ Résultats

- {if $nb_resultats==0}Aucune{else}{$nb_resultats}{/if} réponse{if $nb_resultats>1}s{/if}. + {if $nb_resultats_total==0}Aucune{else}{$nb_resultats_total}{/if} réponse{if $nb_resultats_total>1}s{/if}.

{section name=resultat loop=$resultats} - + {/section}
- {$resultats[resultat].nom} {$resultats[resultat].prenom} + {$resultats[resultat].nom} {$resultats[resultat].prenom} + {if $resultats[resultat].epouse neq ""} +
({$resultats[resultat].epouse} {$resultats[resultat].prenom})
+ {/if} + {if $resultats[resultat].decede == 1} +
(décédé)
+ {/if}
- (X {$resultats[resultat].promo}) + (X {$resultats[resultat].promo}) + {if $resultats[resultat].inscrit==1} + + Afficher les détails + + Afficher la carte de visite + + {if $resultats[resultat].contact!= + {/if}
+ {if $perpage<$nb_resultats_total} + {if $offset!=0} + Précédent + {/if} + {if $offset<$nb_resultats_total-$perpage} + Suivant + {/if} + {/if} {else}
Recherche
+ -- 2.1.4
Nom