Added the ability to add notes to user's accounts

This commit is contained in:
2011-12-07 19:29:40 +00:00
parent 5adc4001f8
commit 289f591eac
5 changed files with 103 additions and 4 deletions

View File

@@ -9,7 +9,7 @@ from gargoyle import gargoyle
from utils import installed from utils import installed
from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation from eve_api.models import EVEAccount, EVEPlayerCharacter, EVEPlayerCorporation
from sso.models import ServiceAccount, Service from sso.models import ServiceAccount, Service, SSOUserNote
from registration.forms import RegistrationForm from registration.forms import RegistrationForm
@@ -139,3 +139,18 @@ class PrimaryCharacterForm(forms.Form):
if self.user: if self.user:
self.fields['character'].queryset = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).distinct() self.fields['character'].queryset = EVEPlayerCharacter.objects.filter(eveaccount__user=self.user).distinct()
class UserNoteForm(forms.ModelForm):
class Meta:
model = SSOUserNote
exclude = ('created_by', 'created_date')
widgets = {
'user': forms.HiddenInput(),
'note': forms.Textarea(),
}
def clean_note(self):
data = self.cleaned_data['note']
# Clean dodgy text?
return data

View File

@@ -0,0 +1,24 @@
{% extends "base.html" %}
{% block title %}Add User Note{% endblock %}
{% block content %}
<div class="page-header">
<h1>Add User Note</h1>
</div>
<p>This will add a note to {{ user.username }}'s account that'll be visible to everyone able to view user profiles</p>
<form action="{% url sso-addusernote user.username %}" method="post">
<fieldset>
{% include "formtools/formerror.html" %}
{% include "formtools/formfield.html" with field=form.user %}
{% include "formtools/formfield.html" with field=form.note class="xxlarge" %}
{% csrf_token %}
<input type="submit" value="Add Note" class="btn primary" />
</fieldset>
</form>
{% endblock %}

View File

@@ -28,8 +28,27 @@
<a href="{% url hr-blacklistuser user.id %}" class="btn error">Blacklist User</a> <a href="{% url hr-blacklistuser user.id %}" class="btn error">Blacklist User</a>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if perms.sso.add_ssousernote %}
<a href="{% url sso-addusernote user %}" class="btn">Add Note</a>
{% endif %}
</p> </p>
{% if user.notes.count %}
<h2>User Notes</h2>
<table class="zebra-striped">
<thead>
<tr><th width="600px">Note</th><th>Date</th><th>Added By</th></tr>
</thead>
<tbody>
{% for note in user.notes.all %}
<tr><td>{{ note.note|linebreaks }}</td><td>{{ note.date_created|date:"Y/m/d H:i:s" }}</td><td><a href="{% url sso-viewuser note.created_by %}">{{ note.created_by }}</a></td></tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% if services %} {% if services %}
<section id="services"> <section id="services">
<h2>Service Accounts</h2> <h2>Service Accounts</h2>

View File

@@ -1,6 +1,7 @@
from django.conf.urls.defaults import * from django.conf.urls.defaults import *
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth.views import password_change, password_change_done from django.contrib.auth.views import password_change, password_change_done
from django.contrib.auth.decorators import login_required
from sso import views from sso import views
@@ -19,8 +20,9 @@ urlpatterns = patterns('',
(r'^profile/change/email/$', views.email_change), (r'^profile/change/email/$', views.email_change),
(r'^profile/change/primary/$', views.primarychar_change), (r'^profile/change/primary/$', views.primarychar_change),
(r'^profile/change/reddittag/$', views.toggle_reddit_tagging), (r'^profile/change/reddittag/$', views.toggle_reddit_tagging),
(r'^users/(?P<username>.*)/$', views.user_view),
(r'^users/$', views.user_lookup), (r'^users/$', views.user_lookup),
url(r'^users/(?P<username>.*)/addnote/$', login_required(views.AddUserNote.as_view()), name='sso-addusernote'),
url(r'^users/(?P<username>.*)/$', views.user_view, name='sso-viewuser'),
) )
urlpatterns += patterns('django.views.generic.simple', urlpatterns += patterns('django.views.generic.simple',

View File

@@ -4,7 +4,7 @@ import re
import unicodedata import unicodedata
import celery import celery
from django.http import HttpResponse from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.shortcuts import render_to_response, get_object_or_404, redirect from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib import messages from django.contrib import messages
@@ -13,6 +13,7 @@ from django.contrib.auth.decorators import login_required
from django.template import RequestContext from django.template import RequestContext
from django.core import serializers from django.core import serializers
from django.conf import settings from django.conf import settings
from django.views.generic import FormView
from gargoyle import gargoyle from gargoyle import gargoyle
from gargoyle.decorators import switch_is_active from gargoyle.decorators import switch_is_active
@@ -23,7 +24,7 @@ from eve_api.tasks import import_apikey, import_apikey_result, update_user_acces
from eve_proxy.models import ApiAccessLog from eve_proxy.models import ApiAccessLog
from reddit.tasks import update_user_flair from reddit.tasks import update_user_flair
from sso.models import ServiceAccount, Service, SSOUser, ExistingUser, ServiceError from sso.models import ServiceAccount, Service, SSOUser, ExistingUser, ServiceError
from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm, EmailChangeForm, PrimaryCharacterForm from sso.forms import UserServiceAccountForm, ServiceAccountResetForm, UserLookupForm, APIPasswordForm, EmailChangeForm, PrimaryCharacterForm, UserNoteForm
@login_required @login_required
def profile(request): def profile(request):
@@ -315,3 +316,41 @@ def toggle_reddit_tagging(request):
messages.add_message(request, messages.ERROR, "You need to set a primary character before using this feature!") messages.add_message(request, messages.ERROR, "You need to set a primary character before using this feature!")
return redirect('sso.views.profile') return redirect('sso.views.profile')
class AddUserNote(FormView):
template_name = 'sso/add_usernote.html'
form_class = UserNoteForm
def dispatch(self, request, *args, **kwargs):
if not request.user.has_perm('add_ssousernote'):
return HttpResponseForbidden()
return super(AddUserNote, self).dispatch(request, *args, **kwargs)
def get_user(self):
if not hasattr(self, 'user'):
userid = self.kwargs.get('username', None)
self.user = User.objects.get(username=userid)
return self.user
def get_context_data(self, **kwargs):
ctx = super(AddUserNote, self).get_context_data(**kwargs)
ctx['user'] = self.get_user()
return ctx
def get_initial(self):
initial = super(AddUserNote, self).get_initial()
initial['user'] = self.get_user()
return initial
def get_success_url(self):
return reverse('sso-viewuser', args=[self.get_user()])
def form_valid(self, form):
obj = form.save(commit=False)
obj.created_by = self.request.user
obj.save()
return super(AddUserNote, self).form_valid(form)