forked from 0x2620/pandora
save numberoflists in session table, fixes #687
This commit is contained in:
parent
37117407b0
commit
b55e1db153
4 changed files with 18 additions and 5 deletions
|
@ -20,6 +20,7 @@ import models
|
||||||
from ox.django.api import actions
|
from ox.django.api import actions
|
||||||
from item import utils
|
from item import utils
|
||||||
from item.models import Item
|
from item.models import Item
|
||||||
|
from user.tasks import update_numberoflists
|
||||||
|
|
||||||
def get_list_or_404_json(id):
|
def get_list_or_404_json(id):
|
||||||
id = id.split(':')
|
id = id.split(':')
|
||||||
|
@ -251,6 +252,7 @@ def addList(request):
|
||||||
list.poster_frames = tuple(data['posterFrames'])
|
list.poster_frames = tuple(data['posterFrames'])
|
||||||
|
|
||||||
list.save()
|
list.save()
|
||||||
|
update_numberoflists.delay(request.user.username)
|
||||||
|
|
||||||
if 'items' in data:
|
if 'items' in data:
|
||||||
for item in Item.objects.filter(itemId__in=data['items']):
|
for item in Item.objects.filter(itemId__in=data['items']):
|
||||||
|
@ -401,6 +403,7 @@ def removeList(request):
|
||||||
response = json_response()
|
response = json_response()
|
||||||
if list.editable(request.user):
|
if list.editable(request.user):
|
||||||
list.delete()
|
list.delete()
|
||||||
|
update_numberoflists.delay(request.user.username)
|
||||||
else:
|
else:
|
||||||
response = json_response(status=403, text='not allowed')
|
response = json_response(status=403, text='not allowed')
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
|
|
|
@ -37,6 +37,8 @@ class SessionData(models.Model):
|
||||||
system = models.CharField(default='', max_length=255)
|
system = models.CharField(default='', max_length=255)
|
||||||
browser = models.CharField(default='', max_length=255)
|
browser = models.CharField(default='', max_length=255)
|
||||||
|
|
||||||
|
numberoflists = models.IntegerField(default=0)
|
||||||
|
|
||||||
objects = managers.SessionDataManager()
|
objects = managers.SessionDataManager()
|
||||||
|
|
||||||
groupssort = models.CharField(default=None,blank=True,null=True, max_length=255)
|
groupssort = models.CharField(default=None,blank=True,null=True, max_length=255)
|
||||||
|
@ -101,6 +103,7 @@ class SessionData(models.Model):
|
||||||
self.level = self.user.get_profile().level
|
self.level = self.user.get_profile().level
|
||||||
self.firstseen = self.user.date_joined
|
self.firstseen = self.user.date_joined
|
||||||
self.groupssort = ''.join([g.name for g in self.user.groups.all()])
|
self.groupssort = ''.join([g.name for g in self.user.groups.all()])
|
||||||
|
self.numberoflists = self.user.lists.count()
|
||||||
else:
|
else:
|
||||||
self.level = 0
|
self.level = 0
|
||||||
self.groupssort = None
|
self.groupssort = None
|
||||||
|
@ -163,7 +166,7 @@ class SessionData(models.Model):
|
||||||
j['level'] = p.get_level()
|
j['level'] = p.get_level()
|
||||||
j['newsletter'] = p.newsletter
|
j['newsletter'] = p.newsletter
|
||||||
j['notes'] = p.notes
|
j['notes'] = p.notes
|
||||||
j['numberoflists'] = self.user.lists.count()
|
j['numberoflists'] = p.numberoflists
|
||||||
if keys:
|
if keys:
|
||||||
for key in j.keys():
|
for key in j.keys():
|
||||||
if key not in keys:
|
if key not in keys:
|
||||||
|
@ -294,7 +297,7 @@ def user_json(user, keys=None):
|
||||||
'level': p.get_level(),
|
'level': p.get_level(),
|
||||||
'newsletter': p.newsletter,
|
'newsletter': p.newsletter,
|
||||||
'notes': p.notes,
|
'notes': p.notes,
|
||||||
'numberoflists': user.lists.count(),
|
'numberoflists': p.numberoflists,
|
||||||
'username': user.username,
|
'username': user.username,
|
||||||
}
|
}
|
||||||
if keys:
|
if keys:
|
||||||
|
|
|
@ -16,3 +16,12 @@ def parse_data(key):
|
||||||
session_data = models.SessionData.objects.get(session_key=key)
|
session_data = models.SessionData.objects.get(session_key=key)
|
||||||
session_data.parse_data()
|
session_data.parse_data()
|
||||||
session_data.save()
|
session_data.save()
|
||||||
|
|
||||||
|
@task(ignore_resulsts=True, queue='default')
|
||||||
|
def update_numberoflists(username):
|
||||||
|
user = models.User.objects.get(username=username)
|
||||||
|
models.SessionData.objects.filter(
|
||||||
|
user=user
|
||||||
|
).update(
|
||||||
|
numberoflists=user.lists.count()
|
||||||
|
)
|
||||||
|
|
|
@ -442,11 +442,9 @@ def order_query(qs, sort):
|
||||||
'timesseen': 'timesseen',
|
'timesseen': 'timesseen',
|
||||||
'useragent': 'useragent',
|
'useragent': 'useragent',
|
||||||
'username': 'username',
|
'username': 'username',
|
||||||
|
'numberoflists': 'numberoflists',
|
||||||
'windowsize': 'windowsize',
|
'windowsize': 'windowsize',
|
||||||
}.get(e['key'], 'user__profile__%s'%e['key'])
|
}.get(e['key'], 'user__profile__%s'%e['key'])
|
||||||
if key == 'user__profile__numberoflists':
|
|
||||||
qs = qs.annotate(numberoflists=Sum('user__lists'))
|
|
||||||
key = 'numberoflists'
|
|
||||||
order = '%s%s' % (operator, key)
|
order = '%s%s' % (operator, key)
|
||||||
order_by.append(order)
|
order_by.append(order)
|
||||||
if order_by:
|
if order_by:
|
||||||
|
|
Loading…
Reference in a new issue