Added basic interface to add to the blacklist from inside auth

This commit is contained in:
2011-11-27 22:26:20 +00:00
parent 7b34027b54
commit 362c4c31cd
5 changed files with 140 additions and 2 deletions

View File

@@ -0,0 +1,17 @@
{% extends "base.html" %}
{% block title %}Add Blacklist Entry{% endblock %}
{% block content %}
<h1>Add Blacklist Entry</h1>
<form action="{% url hr-blacklist-add %}" method="post">
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
<input type="submit" value="Blacklist" />
</form>
{% endblock %}

View File

@@ -0,0 +1,43 @@
{% extends "base.html" %}
{% load naturaltimediff %}
{% block title %}Blacklist{% endblock %}
{% block content %}
<h1>Blacklist</h1>
{% if object_list %}
<form method="get" action="{% url hr-blacklist-list %}">
<label for="query">Search:</label>
<input type="text" name="q" id="query" value="{% if query %}{{ query }}{% endif %}"/>
</form>
<table>
<thead>
<th>ID</th><th>Type</th><th>Value</th><th>Level</th><th>Reason</th><th>Expiry</th>
</thead>
<tbody>
{% for obj in object_list %}
<tr><td>{{ obj.id }}</td><td>{{ obj.get_type_display }}</td><td>{{ obj.value }}</td><td>{{ obj.get_level_display }}</td><td>{{ obj.reason }}</td><td>{{ obj.expiry_date }}</td></tr>
{% endfor %}
</tbody>
</table>
{% if is_paginated %}
<div class="pagination">
<ul>
<li class="prev{% if not page_obj.has_previous %} disabled{% endif %}"><a href="{% if page_obj.has_previous %}?page={{ page_obj.previous_page_number }}{% endif %}">Previous</a></li>
{% for i in paginator.page_range %}
<li{% if i == page.number %} class="active"{% endif %}><a href="?page={{ i }}">{{ i }}</a></li>
{% endfor %}
<li class="next{% if not page_obj.has_next %} disabled{% endif %}"><a href="{% if page_obj.has_next %}?page={{page_obj.next_page_number }}{% endif %}">Next</a>
</ul>
</div>
{% endif %}
{% else %}
<p>No blacklist entries {% if query %}containing "{{ query }}" {% endif %}were found.</p>
{% endif %}
{% if perms.hr.add_blacklist %}
<p><a href="{% url hr-blacklist-add %}">Add a blacklist entry</a></p>
{% endif %}
{% endblock %}

View File

@@ -24,4 +24,13 @@
</p> </p>
{% endif %} {% endif %}
{% if perms.add_blacklist %}
<h3>Blacklist Management</h3>
<p>
<ul>
<li><a href="{% url hr-blacklist-list %}">View/Search Blacklist</a></li>
<li><a href="{% url hr-blacklist-add %}">Add Blacklist Entry</a></li>
</p>
{% endif %}
{% endblock %} {% endblock %}

View File

@@ -19,5 +19,7 @@ urlpatterns = patterns('',
url(r'^recommendation/$', login_required(views.HrViewRecommendations.as_view()), name='hr-viewrecommendations'), url(r'^recommendation/$', login_required(views.HrViewRecommendations.as_view()), name='hr-viewrecommendations'),
url(r'^recommendation/add/$', login_required(views.HrAddRecommendation.as_view()), name='hr-addrecommendation'), url(r'^recommendation/add/$', login_required(views.HrAddRecommendation.as_view()), name='hr-addrecommendation'),
url(r'^blacklist/user/(?P<userid>\d+)/$', login_required(views.HrBlacklistUser.as_view()), name='hr-blacklistuser'), url(r'^blacklist/$', login_required(views.HrBlacklistList.as_view()), name='hr-blacklist-list'),
url(r'^blacklist/add/$', login_required(views.HrAddBlacklist.as_view()), name='hr-blacklist-add'),
url(r'^blacklist/add/user/(?P<userid>\d+)/$', login_required(views.HrBlacklistUser.as_view()), name='hr-blacklistuser'),
) )

View File

@@ -1,11 +1,15 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.conf import settings
from django.db.models import Q
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseNotFound, HttpResponseForbidden, Http404
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.forms import ModelForm
from django.forms.extras.widgets import SelectDateWidget
from django.views.generic import TemplateView, DetailView, FormView, CreateView, ListView from django.views.generic import TemplateView, DetailView, FormView, CreateView, ListView
from django.views.generic.detail import BaseDetailView from django.views.generic.detail import BaseDetailView
from django.conf import settings from django.conf import settings
@@ -375,3 +379,66 @@ class HrBlacklistUser(FormView):
update_user_access.delay(user=self.blacklist_user.id) update_user_access.delay(user=self.blacklist_user.id)
return HttpResponseRedirect(reverse('sso.views.user_view', args=[self.blacklist_user.username])) return HttpResponseRedirect(reverse('sso.views.user_view', args=[self.blacklist_user.username]))
class HrBlacklistList(ListView):
model = Blacklist
allow_empty = True
def get_queryset(self):
obj_list = self.model.objects.all()
self.query = self.request.GET.get('q', None)
self.order = self.request.GET.get('o', 'id')
# Filter by the query string
if self.query:
obj_list = obj_list.filter(Q(value__icontains=self.query) | Q(reason__icontains=self.query))
# If a invalid order as been passed, correct it
if not self.order in ['id', 'type', 'value', 'reason', 'expiry_date']:
self.order = 'id'
return obj_list.order_by(self.order)
def get_context_data(self, **kwargs):
context = super(HrBlacklistList, self).get_context_data(**kwargs)
context['query'] = self.query
context['order'] = self.order
return context
class HrAddBlacklist(CreateView):
model = Blacklist
template_name = 'hr/blacklist_add.html'
def dispatch(self, request, *args, **kwargs):
if not request.user.has_perm('hr.add_blacklist'):
return HttpResponseForbidden()
return super(HrAddBlacklist, self).dispatch(request, *args, **kwargs)
def get_form_class(self):
class AddBlacklistForm(ModelForm):
class Meta:
model = Blacklist
exclude = ('source', 'created_by')
widgets = {'expiry_date': SelectDateWidget()}
return AddBlacklistForm
def form_valid(self, form):
obj = form.save(commit=False)
obj.user = self.request.user
obj.source, created = BlacklistSource.objects.get_or_create(id=getattr(settings, 'BLACKLIST_DEFAULT_SOURCE', 1))
obj.save()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('hr-blacklist-list')