Skip to content

Commit

Permalink
+ Search should include an option to include Deactivated items. Right…
Browse files Browse the repository at this point in the history
… not it is very hard to find and reactivate a membership, for example. (Todd, 9/27/12)
  • Loading branch information
mikhuang committed Jun 1, 2013
1 parent 9ebfcdc commit 4cf83a5
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 13 deletions.
42 changes: 32 additions & 10 deletions deme_django/cms/templates/item/list.html
Expand Up @@ -5,10 +5,10 @@
<div class="well">
<form method="get" name="list_filter_form" class="form-horizontal">
<div class="row">
<label class="col col-lg-2 control-label">
<label class="col col-lg-3 control-label">
Item Type Filter:
</label>
<div class="col col-lg-10 item-type-container">
<div class="col col-lg-9 item-type-container">
{% for item_type in item_types %}
<span>
{% ifequal item_type.item_type accepted_item_type %}
Expand All @@ -21,15 +21,15 @@
</div>
</div>
<div class="row">
<label class="col col-lg-2 control-label" for="collection">
<label class="col col-lg-3 control-label" for="collection">
Filter on:
</label>
<div class="col col-lg-10">
<div class="col col-lg-9">
<select name="collection">
{% if collection %}
<option value=""></option>
<option value="">[None]</option>
{% else %}
<option value="" selected="selected"></option>
<option value="" selected="selected">[None]</option>
{% endif %}
{% for other_collection in all_collections %}
{% ifequal other_collection.pk collection.pk %}
Expand All @@ -42,15 +42,37 @@
</div>
</div>
<div class="row">
<label class="col col-lg-2 control-label" for="q">
<label class="col col-lg-3 control-label" for="q">
Search term:
</label>
<div class="col col-lg-10">
<div class="col col-lg-9">
<input type="text" name="q" value="{{ search_query }}" />
</div>
</div>
<div class="row">
<div class="col col-lg-10 col-offset-2">
<div class="col col-lg-9 col-offset-3">

<div class="accordion" style="margin-bottom:0">
<div class="accordion-group">
<div class="accordion-heading">
<a href="#list-advanced" class="accordion-toggle" data-toggle="collapse"><i class="glyphicon glyphicon-cog"></i> Advanced</a>
</div>
<div id="list-advanced" class="accordion-body collapse {% if inactive %}in{% endif %}">
<div class="accordion-inner">
<label class="radio-inline">
<input type="radio" name="inactive" value="0"{% if not inactive %} checked="checked"{% endif %}> Active Items
</label>
<label class="radio-inline">
<input type="radio" name="inactive" value="1"{% if inactive %} checked="checked"{% endif %}> Deactivated Items
</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col col-lg-9 col-offset-3">
<button type="submit" class="btn btn-default"><i class="glyphicon glyphicon-search"></i> Search</button>
</div>
</div>
Expand All @@ -59,7 +81,7 @@

{% ifagentcanglobal item_create_ability %}
<p>
<a class="btn btn-primary btn-large" href="{% url item_type_url viewer=item_type_lower,action="new" %}"><i class="glyphicon glyphicon-plus-sign"></i> Create a new {{ item_type_name }}</a>
<a class="btn btn-primary" href="{% url item_type_url viewer=item_type_lower,action="new" %}"><i class="glyphicon glyphicon-plus-sign"></i> Create a new {{ item_type_name }}</a>
</p>
{% endifagentcanglobal %}

Expand Down
3 changes: 3 additions & 0 deletions deme_django/cms/templatetags/item_tags.py
Expand Up @@ -1199,6 +1199,7 @@ def render(self, context):
item_type = self.item_type.resolve(context)
filter_string = viewer.request.GET.get('filter', '')
q = viewer.request.GET.get('q', '')
inactive = viewer.request.GET.get('inactive', '0') == '1'
collection = viewer.request.GET.get('collection', '')
fields = []
possible_abilities = all_possible_item_abilities(item_type)
Expand Down Expand Up @@ -1226,6 +1227,8 @@ def render(self, context):
post_data['searchString'] = q
if collection:
post_data['collection'] = collection
if inactive:
post_data['inactive'] = inactive
url = reverse('item_type_url', kwargs={'viewer': item_type.__name__.lower(), 'action': 'grid', 'format': 'json'})
r = []
r.append("""<table id="jqgrid_list"></table>""")
Expand Down
13 changes: 10 additions & 3 deletions deme_django/cms/views.py
Expand Up @@ -41,6 +41,7 @@ def _type_list_helper(self, offset=None, limit=None, q=None):
offset = offset or int(self.request.GET.get('offset', 0))
limit = limit or int(self.request.GET.get('limit', 100))
active = self.request.GET.get('active', '1') == '1'
self.context['active'] = active
self.context['search_query'] = q or self.request.GET.get('q', '')
self.context['item_type_name'] = self.accepted_item_type._meta.verbose_name
self.context['item_type_lower'] = self.accepted_item_type.__name__.lower()
Expand Down Expand Up @@ -141,6 +142,8 @@ def type_list_html(self):
self.context['item_type_lower'] = self.accepted_item_type.__name__.lower()
self.context['item_create_ability'] = "create %s" % (self.accepted_item_type.__name__)
self.context['search_query'] = self.request.GET.get('q', '')
inactive = self.request.GET.get('inactive', '0') == '1'
self.context['inactive'] = inactive
item_types = [{'viewer': x.__name__.lower(), 'name': x._meta.verbose_name, 'name_plural': x._meta.verbose_name_plural, 'item_type': x} for x in all_item_types() if self.accepted_item_type in x.__bases__ + (x,)]
item_types.sort(key=lambda x:x['name'].lower())
self.context['item_types'] = item_types
Expand All @@ -166,6 +169,7 @@ def type_grid_json(self):
field_names = self.request.GET['fields'].split(',')
n_rows = int(self.request.GET['rows'])
page = int(self.request.GET['page'])
inactive = self.request.GET.get('inactive', 'false') == 'true'
search_field = self.request.GET.get('searchField', '')
search_oper = self.request.GET.get('searchOper', '')
search_string = self.request.GET.get('searchString', '')
Expand All @@ -178,6 +182,8 @@ def type_grid_json(self):

offset = (page - 1) * n_rows
active = True
if inactive:
active = False

# Get the basic list of items
items = self.accepted_item_type.objects
Expand Down Expand Up @@ -217,6 +223,7 @@ def type_grid_json(self):
items = items.filter(**{field.name + "__in": foreign_items})
else:
items = items.filter(search_filter)

# Filter by the filter parameter
for filter_string in self.request.GET.getlist('filter'):
if not filter_string: continue
Expand All @@ -239,7 +246,7 @@ def type_grid_json(self):
else:
raise Exception("Cannot filter on field %s.%s (not a related field)" % (cur_item_type.__name__, field.name))

def filter_by_filter(queryset, fields, item_types):
def filter_by_filter(queryset, fields, item_types, active):
if not fields:
return queryset.filter(pk=target_pk)
field = fields[0]
Expand All @@ -264,9 +271,9 @@ def filter_by_filter(queryset, fields, item_types):
else:
assert False
if issubclass(item_type, Item):
result = result.filter(active=True)
result = result.filter(active=active)
return result
items = filter_by_filter(items, fields, item_types)
items = filter_by_filter(items, fields, item_types, inactive)
# Filter by collection
if isinstance(collection, Collection):
if self.cur_agent_can_global('do_anything'):
Expand Down

0 comments on commit 4cf83a5

Please sign in to comment.