Commit 439b0fb3 authored by Maël Kervella's avatar Maël Kervella

Match seulement sur les données qui apparaissent dans les résultats

parent d9359aab
......@@ -47,7 +47,26 @@ from search.forms import (
)
from re2o.utils import SortTable
def is_int(variable):
""" Check if the variable can be casted to an integer """
try:
int(variable)
except ValueError:
return False
else:
return True
def get_results(query, request, filters={}):
""" Construct the correct filters to match differents fields of some models
with the given query according to the given filters.
The match field are either CharField or IntegerField that will be displayed
on the results page (else, one might not see why a result has matched the
query). IntegerField are matched against the query only if it can be casted
to an int."""
start = filters.get('s', None)
end = filters.get('e', None)
user_state = filters.get('u', initial_choices(CHOICES_USER))
......@@ -74,27 +93,27 @@ def get_results(query, request, filters={}):
}
users_filter = Q(
user__pseudo__icontains = query
user__pseudo__icontains=query
) | Q(
user__adherent__name__icontains = query
user__adherent__name__icontains=query
) | Q(
user__surname__icontains = query
user__surname__icontains=query
)
if not request.user.has_perms(('cableur',)):
users_filter &= Q(user = request.user)
users_filter &= Q(user=request.user)
# Users
if '0' in aff:
filter_user_list = Q(
adherent__room__name__icontains = query
surname__icontains=query
) | Q(
club__room__name__icontains = query
adherent__name__icontains=query
) | Q(
pseudo__icontains = query
pseudo__icontains=query
) | Q(
adherent__name__icontains = query
club__room__name__icontains=query
) | Q(
surname__icontains = query
adherent__room__name__icontains=query
) & user_state_filter
if not request.user.has_perms(('cableur',)):
filter_user_list &= Q(id=request.user.id)
......@@ -109,19 +128,17 @@ def get_results(query, request, filters={}):
# Machines
if '1' in aff:
filter_machine_list = Q(
user__pseudo__icontains = query
) | Q(
user__adherent__name__icontains = query
name__icontains=query
) | Q(
user__surname__icontains = query
user__pseudo__icontains=query
) | Q(
interface__mac_address__icontains = query
interface__domain__name__icontains=query
) | Q(
interface__ipv4__ipv4__icontains = query
interface__domain__related_domain__name__icontains=query
) | Q(
interface__domain__name__icontains = query
interface__mac_address__icontains=query
) | Q(
interface__domain__related_domain__name__icontains = query
interface__ipv4__ipv4__icontains=query
)
if not request.user.has_perms(('cableur',)):
filter_machine_list &= Q(user__id=request.user.id)
......@@ -135,7 +152,9 @@ def get_results(query, request, filters={}):
# Factures
if '2' in aff:
filter_facture_list = users_filter
filter_facture_list = Q(
user__pseudo__icontains=query
)
if start != None:
filter_facture_list &= Q(date__gte=start)
if end != None:
......@@ -150,7 +169,11 @@ def get_results(query, request, filters={}):
# Bans
if '3' in aff:
date_filter = users_filter
date_filter = Q(
user__pseudo__icontains=query
) | Q(
raison__icontains=query
)
if start != None:
date_filter &= (
Q(date_start__gte=start) & Q(date_end__gte=start)
......@@ -177,7 +200,11 @@ def get_results(query, request, filters={}):
# Whitelists
if '4' in aff:
date_filter = users_filter
date_filter = Q(
user__pseudo__icontains=query
) | Q(
raison__icontains=query
)
if start != None:
date_filter &= (
Q(date_start__gte=start) & Q(date_end__gte=start)
......@@ -222,10 +249,6 @@ def get_results(query, request, filters={}):
# Switch ports
if '6' in aff and request.user.has_perms(('cableur',)):
filter_switch_ports_list = Q(
details__icontains=query
) | Q(
switch__switch_interface__domain__name__icontains=query
) | Q(
room__name__icontains=query
) | Q(
machine_interface__domain__name__icontains=query
......@@ -235,7 +258,13 @@ def get_results(query, request, filters={}):
radius__icontains=query
) | Q(
vlan_force__name__icontains=query
) | Q(
details__icontains=query
)
if is_int(query):
filter_switch_ports_list |= Q(
port=query
)
results['switch_ports_list'] = Port.objects.filter(filter_switch_ports_list)
results['switch_ports_list'] = SortTable.sort(
results['switch_ports_list'],
......@@ -247,8 +276,6 @@ def get_results(query, request, filters={}):
# Switches
if '7' in aff and request.user.has_perms(('cableur',)):
filter_switches = Q(
details__icontains=query
) | Q(
switch_interface__domain__name__icontains=query
) | Q(
switch_interface__ipv4__ipv4__icontains=query
......@@ -260,7 +287,15 @@ def get_results(query, request, filters={}):
model__reference__icontains=query
) | Q(
model__constructor__name__icontains=query
) | Q(
details__icontains=query
)
if is_int(query):
filter_switch_ports_list |= Q(
number=query
) | Q(
stack_member_id=query
)
results['switches_list'] = Switch.objects.filter(filter_switches)
results['switches_list'] = SortTable.sort(
results['switches_list'],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment