Si on filtre sur un champ spcial, on ne renvoie que les machines qui

possdent ce champ.

darcs-hash:20060311150927-68412-9d6f081e27c1f1c6dcbc43ae48c604dffe3bd083.gz
This commit is contained in:
glondu 2006-03-11 16:09:27 +01:00
parent 119271691a
commit b520059397

View file

@ -244,6 +244,9 @@ class crans_ldap:
'ip': 'ipHostNumber',
'telephone': 'tel'}
# Les différentes classes LDAP de machines
ldap_machines_classes = ['machineFixe', 'machineWifi', 'machineCrans', 'borneWifi']
# Champs de recherche pour la recherche automatique
auto_search_machines_champs = \
['macAddress', 'host', 'ipHostNumber', 'hostAlias']
@ -630,8 +633,12 @@ class crans_ldap:
# Initialisation
filtre = {}
filtre_seul = {}
# filtre_seul[i] est True si la requête porte sur un champ
# qui n'est pas dans toutes les machines, mais dans i
for i in filtres:
filtre[i] = ''
filtre_seul[i] = False
conds = expression.split('&')
@ -659,11 +666,26 @@ class crans_ldap:
if champ in self.auto_search_champs[i] + self.non_auto_search_champs[i]:
filtre[i] += build_filtre(champ, expr, neg)
ok = True
if champ not in self.auto_search_machines_champs \
and champ not in self.non_auto_search_machines_champs:
filtre_seul[i] = True
if not ok:
raise ValueError(u'Champ de recherche inconnu (%s)' % champ)
## Recherche avec chacun des filtres
r = {} # contiendra les réponses par filtre
# On efface les bons filtres si la requête porte sur des
# champs spéciaux
ok = False
for i in self.ldap_machines_classes:
ok = ok or filtre_seul[i]
if ok:
# Il y a au moins un champ spécial
for i in self.ldap_machines_classes:
if not filtre_seul[i]:
filtre[i] = ''
for i in filtres:
if filtre[i] != '':
@ -739,8 +761,9 @@ class crans_ldap:
result[i].append(self.make(r, mode))
# Backward-compatibilité
result['machine'] = result['machineCrans'] + result['borneWifi']
result['machine'] += result['machineFixe'] + result['machineWifi']
result['machine'] = []
for i in self.ldap_machines_classes:
result['machine'] += result[i]
return result