Commit c1a10731 by Kálmán Viktor

network: filter rules by type

parent e0d836aa
...@@ -8,10 +8,27 @@ ...@@ -8,10 +8,27 @@
{% block content %} {% block content %}
<div class="page-header"> <div class="page-header">
<a href="{% url "network.rule_create" %}" class="btn btn-success pull-right"><i class="fa fa-plus-circle"></i> {% trans "Create a new rule" %}</a> <a href="{% url "network.rule_create" %}" class="btn btn-success pull-right">
<i class="fa fa-plus-circle"></i> {% trans "Create a new rule" %}
</a>
<h1>{% trans "Rules" %} <small>{% trans "list of all rules" %}</small></h1> <h1>{% trans "Rules" %} <small>{% trans "list of all rules" %}</small></h1>
</div> </div>
<ul class="nav nav-pills" style="margin: 5px 0 20px 0;">
<li class="disabled">
<a href="#">{% trans "Filter by types" %}</a>
</li>
<li {% if not request.GET.type %} class="active"{% endif %}>
<a href="{{ request.path }}">{% trans "ALL" %}</a>
</li>
{% for k, v in types.items %}
<li{% if request.GET.type == k %} class="active"{% endif %}>
<a href="?type={{ k }}">{{ v }}</a>
</li>
{% endfor %}
</ul>
<div class="table-responsive"> <div class="table-responsive">
{% render_table table %} {% render_table table %}
</div> </div>
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
# You should have received a copy of the GNU General Public License along # You should have received a copy of the GNU General Public License along
# with CIRCLE. If not, see <http://www.gnu.org/licenses/>. # with CIRCLE. If not, see <http://www.gnu.org/licenses/>.
from collections import OrderedDict
from netaddr import IPNetwork from netaddr import IPNetwork
from django.views.generic import (TemplateView, UpdateView, DeleteView, from django.views.generic import (TemplateView, UpdateView, DeleteView,
CreateView) CreateView)
...@@ -597,11 +599,26 @@ class RuleList(LoginRequiredMixin, SuperuserRequiredMixin, SingleTableView): ...@@ -597,11 +599,26 @@ class RuleList(LoginRequiredMixin, SuperuserRequiredMixin, SingleTableView):
template_name = "network/rule-list.html" template_name = "network/rule-list.html"
table_pagination = False table_pagination = False
def get_context_data(self, **kwargs):
self.types = OrderedDict([
('vlan', _("Vlan")), ('vlangroup', _("Vlan group")),
('host', _("Host")), ('hostgroup', _("Host group")),
('firewall', _("Firewall"))
])
context = super(RuleList, self).get_context_data(**kwargs)
context['types'] = self.types
return context
def get_table_data(self): def get_table_data(self):
return Rule.objects.select_related('host', 'hostgroup', 'vlan', rules = Rule.objects.select_related('host', 'hostgroup', 'vlan',
'vlangroup', 'firewall', 'vlangroup', 'firewall',
'foreign_network', 'owner') 'foreign_network', 'owner')
rule_type = self.request.GET.get("type")
if rule_type and rule_type in self.types.keys():
rules = rules.filter(**{'%s__isnull' % rule_type: False})
return rules
class RuleDetail(LoginRequiredMixin, SuperuserRequiredMixin, class RuleDetail(LoginRequiredMixin, SuperuserRequiredMixin,
SuccessMessageMixin, UpdateView): SuccessMessageMixin, UpdateView):
......
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 sign in to comment