diff options
Diffstat (limited to 'hyperkitty')
-rw-r--r-- | hyperkitty/middleware.py | 20 | ||||
-rw-r--r-- | hyperkitty/migrations/0006_auto__add_field_userprofile_timezone.py | 98 | ||||
-rw-r--r-- | hyperkitty/models.py | 4 | ||||
-rw-r--r-- | hyperkitty/views/accounts.py | 10 | ||||
-rw-r--r-- | hyperkitty/views/forms.py | 3 |
5 files changed, 131 insertions, 4 deletions
diff --git a/hyperkitty/middleware.py b/hyperkitty/middleware.py index a52aba2..e026fb1 100644 --- a/hyperkitty/middleware.py +++ b/hyperkitty/middleware.py @@ -69,3 +69,23 @@ class SSLRedirect(object): """Django can't perform a SSL redirect while maintaining POST data. Please structure your views so that redirects only occur during GETs.""" return HttpResponsePermanentRedirect(newurl) + + + +# https://docs.djangoproject.com/en/dev/topics/i18n/timezones/ + +from django.utils import timezone +from django.core.exceptions import ObjectDoesNotExist +from hyperkitty.models import UserProfile + +class TimezoneMiddleware(object): + + def process_request(self, request): + if not request.user.is_authenticated(): + return + try: + user_profile = request.user.get_profile() + except ObjectDoesNotExist: + return + if user_profile.timezone: + timezone.activate(user_profile.timezone) diff --git a/hyperkitty/migrations/0006_auto__add_field_userprofile_timezone.py b/hyperkitty/migrations/0006_auto__add_field_userprofile_timezone.py new file mode 100644 index 0000000..dd9c9d8 --- /dev/null +++ b/hyperkitty/migrations/0006_auto__add_field_userprofile_timezone.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'UserProfile.timezone' + db.add_column(u'hyperkitty_userprofile', 'timezone', + self.gf('django.db.models.fields.CharField')(default=u'', max_length=100), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'UserProfile.timezone' + db.delete_column(u'hyperkitty_userprofile', 'timezone') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'hyperkitty.favorite': { + 'Meta': {'object_name': 'Favorite'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list_address': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'threadid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + u'hyperkitty.lastview': { + 'Meta': {'object_name': 'LastView'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list_address': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'threadid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'view_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'hyperkitty.rating': { + 'Meta': {'object_name': 'Rating'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list_address': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'messageid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'vote': ('django.db.models.fields.SmallIntegerField', [], {}) + }, + u'hyperkitty.tag': { + 'Meta': {'object_name': 'Tag'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'list_address': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'threadid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}) + }, + u'hyperkitty.userprofile': { + 'Meta': {'object_name': 'UserProfile'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'karma': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'timezone': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '100'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}) + } + } + + complete_apps = ['hyperkitty']
\ No newline at end of file diff --git a/hyperkitty/models.py b/hyperkitty/models.py index 317cb7a..8b2e514 100644 --- a/hyperkitty/models.py +++ b/hyperkitty/models.py @@ -23,6 +23,8 @@ from django.db import models from django.contrib.auth.models import User from django.contrib import admin +import pytz + class Rating(models.Model): @@ -53,6 +55,8 @@ class UserProfile(models.Model): user = models.OneToOneField(User) karma = models.IntegerField(default=1) + TIMEZONES = [ (tz, tz) for tz in pytz.common_timezones ] + timezone = models.CharField(max_length=100, choices=TIMEZONES, default=u"") def __unicode__(self): """Unicode representation""" diff --git a/hyperkitty/views/accounts.py b/hyperkitty/views/accounts.py index 43ee5c6..5901a17 100644 --- a/hyperkitty/views/accounts.py +++ b/hyperkitty/views/accounts.py @@ -23,7 +23,7 @@ import logging from django.conf import settings from django.core.urlresolvers import reverse -from django.core.exceptions import SuspiciousOperation +from django.core.exceptions import SuspiciousOperation, ObjectDoesNotExist from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.contrib.auth import authenticate, login, get_backends from django.contrib.auth.decorators import login_required @@ -31,7 +31,7 @@ from django.contrib.auth.models import User from django.contrib.auth.views import login as django_login_view from django.shortcuts import render, redirect from django.utils.http import is_safe_url -from django.utils.timezone import utc +from django.utils.timezone import utc, get_current_timezone #from django.utils.translation import gettext as _ from social_auth.backends import SocialAuthBackend @@ -67,8 +67,7 @@ def user_profile(request, user_email=None): # try to render the user profile. try: user_profile = request.user.get_profile() - # @TODO: Include the error name e.g, ProfileDoesNotExist? - except: + except ObjectDoesNotExist: user_profile = UserProfile.objects.create(user=request.user) if request.method == 'POST': @@ -76,7 +75,9 @@ def user_profile(request, user_email=None): if form.is_valid(): request.user.first_name = form.cleaned_data["first_name"] request.user.last_name = form.cleaned_data["last_name"] + user_profile.timezone = form.cleaned_data["timezone"] request.user.save() + user_profile.save() redirect_url = reverse('user_profile') redirect_url += "?msg=updated-ok" return redirect(redirect_url) @@ -84,6 +85,7 @@ def user_profile(request, user_email=None): form = UserProfileForm(initial={ "first_name": request.user.first_name, "last_name": request.user.last_name, + "timezone": get_current_timezone(), }) # Votes diff --git a/hyperkitty/views/forms.py b/hyperkitty/views/forms.py index 9cacad8..6f6c294 100644 --- a/hyperkitty/views/forms.py +++ b/hyperkitty/views/forms.py @@ -24,6 +24,7 @@ from django.core import validators from django.contrib.auth.models import User from django.utils.safestring import mark_safe +from hyperkitty.models import UserProfile def isValidUsername(username): @@ -61,6 +62,8 @@ class RegistrationForm(forms.Form): class UserProfileForm(forms.Form): first_name = forms.CharField() last_name = forms.CharField() + timezone = forms.ChoiceField(label="Time zone", + choices=UserProfile.TIMEZONES) |