X-Git-Url: https://git.openstreetmap.org/osqa.git/blobdiff_plain/01e93f28b2829fd3924a3b6021a201c1b6ed3d72..a60778963b1e3a694c83e6629b001cfc05918ad6:/forum/models/user.py diff --git a/forum/models/user.py b/forum/models/user.py index e8871f4..131ae54 100644 --- a/forum/models/user.py +++ b/forum/models/user.py @@ -4,7 +4,8 @@ from django.conf import settings as django_settings from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import User as DjangoUser, AnonymousUser as DjangoAnonymousUser -from django.db.models import Q +from django.db.models import Q, Manager +from django.core.urlresolvers import get_script_prefix from django.utils.encoding import smart_unicode @@ -110,6 +111,20 @@ def false_if_validation_required_to(item): return decorated return decorator +class UserManager(CachedManager): + def get(self, *args, **kwargs): + if not len(args) and len(kwargs) == 1 and 'username' in kwargs: + matching_users = self.filter(username=kwargs['username']) + + if len(matching_users) == 1: + return matching_users[0] + elif len(matching_users) > 1: + for user in matching_users: + if user.username == kwargs['username']: + return user + return matching_users[0] + return super(UserManager, self).get(*args, **kwargs) + class User(BaseModel, DjangoUser): is_approved = models.BooleanField(default=False) email_isvalid = models.BooleanField(default=False) @@ -131,6 +146,8 @@ class User(BaseModel, DjangoUser): vote_up_count = DenormalizedField("actions", canceled=False, action_type="voteup") vote_down_count = DenormalizedField("actions", canceled=False, action_type="votedown") + objects = UserManager() + def __unicode__(self): return smart_unicode(self.username) @@ -149,8 +166,8 @@ class User(BaseModel, DjangoUser): #todo: temporary thing, for now lets just assume that the site owner will always be the first user of the application return self.id == 1 - @property - def decorated_name(self): + + def _decorated_name(self): username = smart_unicode(self.username) if len(username) > TRUNCATE_USERNAMES_LONGER_THAN and TRUNCATE_LONG_USERNAMES: @@ -165,6 +182,10 @@ class User(BaseModel, DjangoUser): return username + @property + def decorated_name(self): + return self._decorated_name() + @property def last_activity(self): try: @@ -189,15 +210,6 @@ class User(BaseModel, DjangoUser): sub_settings = SubscriptionSettings(user=self) sub_settings.save() - def get_messages(self): - messages = [] - for m in self.message_set.all(): - messages.append(m.message) - return messages - - def delete_messages(self): - self.message_set.all().delete() - @models.permalink def get_profile_url(self): keyword_arguments = { @@ -210,7 +222,9 @@ class User(BaseModel, DjangoUser): return ('user_profile', (), keyword_arguments) def get_absolute_url(self): - return self.get_profile_url() + root_relative_url = self.get_profile_url() + relative_url = root_relative_url[len(get_script_prefix()):] + return '%s/%s' % (django_settings.APP_URL, relative_url) @models.permalink def get_asked_url(self):