From 289f591eac47f5632c413b073af336ebedb3c453 Mon Sep 17 00:00:00 2001
From: Andrew Williams
Date: Wed, 7 Dec 2011 19:29:40 +0000
Subject: [PATCH] Added the ability to add notes to user's accounts
---
app/sso/forms.py | 17 +++++++++-
app/sso/templates/sso/add_usernote.html | 24 ++++++++++++++
app/sso/templates/sso/lookup/user.html | 19 +++++++++++
app/sso/urls.py | 4 ++-
app/sso/views.py | 43 +++++++++++++++++++++++--
5 files changed, 103 insertions(+), 4 deletions(-)
create mode 100644 app/sso/templates/sso/add_usernote.html
diff --git a/app/sso/forms.py b/app/sso/forms.py
index c53025b..4b23901 100644
--- a/app/sso/forms.py
+++ b/app/sso/forms.py
@@ -9,7 +9,7 @@ from gargoyle import gargoyle
from utils import installed
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
@@ -139,3 +139,18 @@ class PrimaryCharacterForm(forms.Form):
if self.user:
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
diff --git a/app/sso/templates/sso/add_usernote.html b/app/sso/templates/sso/add_usernote.html
new file mode 100644
index 0000000..2bce91c
--- /dev/null
+++ b/app/sso/templates/sso/add_usernote.html
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+
+{% block title %}Add User Note{% endblock %}
+
+{% block content %}
+
+
+
+This will add a note to {{ user.username }}'s account that'll be visible to everyone able to view user profiles
+
+
+
+{% endblock %}
+
diff --git a/app/sso/templates/sso/lookup/user.html b/app/sso/templates/sso/lookup/user.html
index 7c9a435..ab58d0f 100644
--- a/app/sso/templates/sso/lookup/user.html
+++ b/app/sso/templates/sso/lookup/user.html
@@ -28,8 +28,27 @@
Blacklist User
{% endif %}
{% endif %}
+{% if perms.sso.add_ssousernote %}
+Add Note
+{% endif %}
+{% if user.notes.count %}
+User Notes
+
+
+
+ | Note | Date | Added By |
+
+
+ {% for note in user.notes.all %}
+ | {{ note.note|linebreaks }} | {{ note.date_created|date:"Y/m/d H:i:s" }} | {{ note.created_by }} |
+ {% endfor %}
+
+
+{% endif %}
+
+
{% if services %}
Service Accounts
diff --git a/app/sso/urls.py b/app/sso/urls.py
index 4fad51c..69e8144 100644
--- a/app/sso/urls.py
+++ b/app/sso/urls.py
@@ -1,6 +1,7 @@
from django.conf.urls.defaults import *
from django.core.urlresolvers import reverse
from django.contrib.auth.views import password_change, password_change_done
+from django.contrib.auth.decorators import login_required
from sso import views
@@ -19,8 +20,9 @@ urlpatterns = patterns('',
(r'^profile/change/email/$', views.email_change),
(r'^profile/change/primary/$', views.primarychar_change),
(r'^profile/change/reddittag/$', views.toggle_reddit_tagging),
- (r'^users/(?P.*)/$', views.user_view),
(r'^users/$', views.user_lookup),
+ url(r'^users/(?P.*)/addnote/$', login_required(views.AddUserNote.as_view()), name='sso-addusernote'),
+ url(r'^users/(?P.*)/$', views.user_view, name='sso-viewuser'),
)
urlpatterns += patterns('django.views.generic.simple',
diff --git a/app/sso/views.py b/app/sso/views.py
index 6b1b8ca..870a13e 100644
--- a/app/sso/views.py
+++ b/app/sso/views.py
@@ -4,7 +4,7 @@ import re
import unicodedata
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.core.urlresolvers import reverse
from django.contrib import messages
@@ -13,6 +13,7 @@ from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.core import serializers
from django.conf import settings
+from django.views.generic import FormView
from gargoyle import gargoyle
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 reddit.tasks import update_user_flair
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
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!")
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)