mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-23 20:03:11 +00:00
Match seulement sur les données qui apparaissent dans les résultats
This commit is contained in:
parent
d9359aab9e
commit
439b0fb30c
1 changed files with 61 additions and 26 deletions
|
@ -47,7 +47,26 @@ from search.forms import (
|
||||||
)
|
)
|
||||||
from re2o.utils import SortTable
|
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={}):
|
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)
|
start = filters.get('s', None)
|
||||||
end = filters.get('e', None)
|
end = filters.get('e', None)
|
||||||
user_state = filters.get('u', initial_choices(CHOICES_USER))
|
user_state = filters.get('u', initial_choices(CHOICES_USER))
|
||||||
|
@ -74,27 +93,27 @@ def get_results(query, request, filters={}):
|
||||||
}
|
}
|
||||||
|
|
||||||
users_filter = Q(
|
users_filter = Q(
|
||||||
user__pseudo__icontains = query
|
user__pseudo__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
user__adherent__name__icontains = query
|
user__adherent__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
user__surname__icontains = query
|
user__surname__icontains=query
|
||||||
)
|
)
|
||||||
if not request.user.has_perms(('cableur',)):
|
if not request.user.has_perms(('cableur',)):
|
||||||
users_filter &= Q(user = request.user)
|
users_filter &= Q(user=request.user)
|
||||||
|
|
||||||
# Users
|
# Users
|
||||||
if '0' in aff:
|
if '0' in aff:
|
||||||
filter_user_list = Q(
|
filter_user_list = Q(
|
||||||
adherent__room__name__icontains = query
|
surname__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
club__room__name__icontains = query
|
adherent__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
pseudo__icontains = query
|
pseudo__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
adherent__name__icontains = query
|
club__room__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
surname__icontains = query
|
adherent__room__name__icontains=query
|
||||||
) & user_state_filter
|
) & user_state_filter
|
||||||
if not request.user.has_perms(('cableur',)):
|
if not request.user.has_perms(('cableur',)):
|
||||||
filter_user_list &= Q(id=request.user.id)
|
filter_user_list &= Q(id=request.user.id)
|
||||||
|
@ -109,19 +128,17 @@ def get_results(query, request, filters={}):
|
||||||
# Machines
|
# Machines
|
||||||
if '1' in aff:
|
if '1' in aff:
|
||||||
filter_machine_list = Q(
|
filter_machine_list = Q(
|
||||||
user__pseudo__icontains = query
|
name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
user__adherent__name__icontains = query
|
user__pseudo__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
user__surname__icontains = query
|
interface__domain__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
interface__mac_address__icontains = query
|
interface__domain__related_domain__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
interface__ipv4__ipv4__icontains = query
|
interface__mac_address__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
interface__domain__name__icontains = query
|
interface__ipv4__ipv4__icontains=query
|
||||||
) | Q(
|
|
||||||
interface__domain__related_domain__name__icontains = query
|
|
||||||
)
|
)
|
||||||
if not request.user.has_perms(('cableur',)):
|
if not request.user.has_perms(('cableur',)):
|
||||||
filter_machine_list &= Q(user__id=request.user.id)
|
filter_machine_list &= Q(user__id=request.user.id)
|
||||||
|
@ -135,7 +152,9 @@ def get_results(query, request, filters={}):
|
||||||
|
|
||||||
# Factures
|
# Factures
|
||||||
if '2' in aff:
|
if '2' in aff:
|
||||||
filter_facture_list = users_filter
|
filter_facture_list = Q(
|
||||||
|
user__pseudo__icontains=query
|
||||||
|
)
|
||||||
if start != None:
|
if start != None:
|
||||||
filter_facture_list &= Q(date__gte=start)
|
filter_facture_list &= Q(date__gte=start)
|
||||||
if end != None:
|
if end != None:
|
||||||
|
@ -150,7 +169,11 @@ def get_results(query, request, filters={}):
|
||||||
|
|
||||||
# Bans
|
# Bans
|
||||||
if '3' in aff:
|
if '3' in aff:
|
||||||
date_filter = users_filter
|
date_filter = Q(
|
||||||
|
user__pseudo__icontains=query
|
||||||
|
) | Q(
|
||||||
|
raison__icontains=query
|
||||||
|
)
|
||||||
if start != None:
|
if start != None:
|
||||||
date_filter &= (
|
date_filter &= (
|
||||||
Q(date_start__gte=start) & Q(date_end__gte=start)
|
Q(date_start__gte=start) & Q(date_end__gte=start)
|
||||||
|
@ -177,7 +200,11 @@ def get_results(query, request, filters={}):
|
||||||
|
|
||||||
# Whitelists
|
# Whitelists
|
||||||
if '4' in aff:
|
if '4' in aff:
|
||||||
date_filter = users_filter
|
date_filter = Q(
|
||||||
|
user__pseudo__icontains=query
|
||||||
|
) | Q(
|
||||||
|
raison__icontains=query
|
||||||
|
)
|
||||||
if start != None:
|
if start != None:
|
||||||
date_filter &= (
|
date_filter &= (
|
||||||
Q(date_start__gte=start) & Q(date_end__gte=start)
|
Q(date_start__gte=start) & Q(date_end__gte=start)
|
||||||
|
@ -222,10 +249,6 @@ def get_results(query, request, filters={}):
|
||||||
# Switch ports
|
# Switch ports
|
||||||
if '6' in aff and request.user.has_perms(('cableur',)):
|
if '6' in aff and request.user.has_perms(('cableur',)):
|
||||||
filter_switch_ports_list = Q(
|
filter_switch_ports_list = Q(
|
||||||
details__icontains=query
|
|
||||||
) | Q(
|
|
||||||
switch__switch_interface__domain__name__icontains=query
|
|
||||||
) | Q(
|
|
||||||
room__name__icontains=query
|
room__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
machine_interface__domain__name__icontains=query
|
machine_interface__domain__name__icontains=query
|
||||||
|
@ -235,7 +258,13 @@ def get_results(query, request, filters={}):
|
||||||
radius__icontains=query
|
radius__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
vlan_force__name__icontains=query
|
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'] = Port.objects.filter(filter_switch_ports_list)
|
||||||
results['switch_ports_list'] = SortTable.sort(
|
results['switch_ports_list'] = SortTable.sort(
|
||||||
results['switch_ports_list'],
|
results['switch_ports_list'],
|
||||||
|
@ -247,8 +276,6 @@ def get_results(query, request, filters={}):
|
||||||
# Switches
|
# Switches
|
||||||
if '7' in aff and request.user.has_perms(('cableur',)):
|
if '7' in aff and request.user.has_perms(('cableur',)):
|
||||||
filter_switches = Q(
|
filter_switches = Q(
|
||||||
details__icontains=query
|
|
||||||
) | Q(
|
|
||||||
switch_interface__domain__name__icontains=query
|
switch_interface__domain__name__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
switch_interface__ipv4__ipv4__icontains=query
|
switch_interface__ipv4__ipv4__icontains=query
|
||||||
|
@ -260,7 +287,15 @@ def get_results(query, request, filters={}):
|
||||||
model__reference__icontains=query
|
model__reference__icontains=query
|
||||||
) | Q(
|
) | Q(
|
||||||
model__constructor__name__icontains=query
|
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'] = Switch.objects.filter(filter_switches)
|
||||||
results['switches_list'] = SortTable.sort(
|
results['switches_list'] = SortTable.sort(
|
||||||
results['switches_list'],
|
results['switches_list'],
|
||||||
|
|
Loading…
Reference in a new issue