diff --git a/pandora/item/views.py b/pandora/item/views.py index a845832c7..84c2953ac 100644 --- a/pandora/item/views.py +++ b/pandora/item/views.py @@ -324,7 +324,7 @@ def autocomplete(request): qs = qs.order_by(order_by, nulls_last=True) qs = qs[data['range'][0]:data['range'][1]] response = json_response({}) - response['data']['items'] = [i.get(data['key']) for i in qs] + response['data']['items'] = list(set([i.get(data['key']) for i in qs])) else: qs = models.Facet.objects.filter(key=data['key']) if data['value']: diff --git a/pandora/user/models.py b/pandora/user/models.py index 7b580ca1a..903710580 100644 --- a/pandora/user/models.py +++ b/pandora/user/models.py @@ -4,7 +4,6 @@ import copy from datetime import datetime from django.contrib.auth.models import User -from django.contrib.sessions.models import Session from django.db import models from django.db.models import Max from django.conf import settings @@ -21,7 +20,7 @@ class SessionData(models.Model): session_key = models.CharField(max_length=40, primary_key=True) user = models.ForeignKey(User, unique=True, null=True, blank=True, related_name='data') firstseen = models.DateTimeField(auto_now_add=True, db_index=True) - lastseen = models.DateTimeField(auto_now=True, db_index=True) + lastseen = models.DateTimeField(default=datetime.now, db_index=True) username = models.CharField(max_length=255, null=True, db_index=True) level = models.IntegerField(default=0) @@ -67,16 +66,20 @@ class SessionData(models.Model): if not data.timesseen: data.timesseen = 0 data.timesseen += 1 + data.lastseen = datetime.now() data.save() return data + def get_id(self): + return self.user and ox.to26(self.user.id) or self.session_key + def json(self, keys=None, user=None): j = { 'disabled': False, 'email': '', 'firstseen': self.firstseen, 'ip': self.ip, - 'id': self.user and ox.to26(self.user.id) or self.session_key, + 'id': self.get_id(), 'lastseen': self.lastseen, 'level': 'guest', 'notes': '', @@ -126,9 +129,15 @@ class UserProfile(models.Model): def user_post_save(sender, instance, **kwargs): profile, new = UserProfile.objects.get_or_create(user=instance) - + SessionData.objects.filter(user=instance).update(level=profile.level, + username=instance.username) models.signals.post_save.connect(user_post_save, sender=User) +def profile_post_save(sender, instance, **kwargs): + SessionData.objects.filter(user=instance.user).update(level=instance.level, + username=instance.user.username) +models.signals.post_save.connect(profile_post_save, sender=UserProfile) + def get_ui(user_ui, user=None): ui = {} config = copy.deepcopy(settings.CONFIG) @@ -201,7 +210,6 @@ def init_user(user, request=None): result['volumes'] = [v.json() for v in user.volumes.all()] return result - def user_json(user, keys=None): p = user.get_profile() j = { diff --git a/pandora/user/views.py b/pandora/user/views.py index a560c90a7..8e2d58a02 100644 --- a/pandora/user/views.py +++ b/pandora/user/views.py @@ -161,7 +161,7 @@ def signup(request): user.save() #create default user lists: for l in settings.CONFIG['personalLists']: - list = models.List(name=l['name'], user=user) + list = models.List(name=l['id'], user=user) for key in ('query', 'public', 'featured'): if key in l: setattr(list, key, l[key]) @@ -170,7 +170,7 @@ def signup(request): user = authenticate(username=data['username'], password=data['password']) login(request, user) - user_json = models.init_user(user) + user_json = models.init_user(user, request) response = json_response({ 'user': user_json }, text='account created') @@ -219,7 +219,7 @@ def resetPassword(request): user = authenticate(username=user.username, password=data['password']) login(request, user) - user_json = models.init_user(user) + user_json = models.init_user(user, request) response = json_response({ 'user': user_json }, text='password reset') @@ -515,7 +515,7 @@ Positions if qs.count() > 0: response['data']['position'] = utils.get_positions(ids, [qs[0].itemId])[0] elif 'positions' in data: - ids = [ox.to26(i.id) for i in qs] + ids = [i.get_id() for i in qs] response['data']['positions'] = utils.get_positions(ids, data['positions']) else: response['data']['items'] = qs.count()