This commit is contained in:
j 2011-01-21 15:01:49 +05:30
commit 5a844b0a14
6 changed files with 37 additions and 23 deletions

View file

@ -240,9 +240,12 @@ class ItemManager(Manager):
conditions = parseConditions(data['query'].get('conditions', []),
data['query'].get('operator', '&'))
qs = qs.filter(conditions)
#FIXME: lists are part of query now
# filter list, works for own or public lists
l = data.get('list', 'all')
qs = self.filter_list(qs, l, user)
#anonymous can only see public items
if user.is_anonymous():
qs = qs.filter(public=True)
#users can see public items, there own items and items of there groups
elif not user.is_staff:
qs = qs.filter(Q(public=True)|Q(user=user)|Q(groups__in=user.groups.all()))
#admins can see all available items
return qs

View file

@ -12,6 +12,7 @@ from django.db import models
from django.core.files.base import ContentFile
from django.utils import simplejson as json
from django.conf import settings
from django.contrib.auth.models import User, Group
import ox
from ox.django import fields
@ -89,9 +90,14 @@ class Item(models.Model):
modified = models.DateTimeField(auto_now=True)
published = models.DateTimeField(default=datetime.now, editable=False)
user = models.ForeignKey(User, related_name='items')
groups = models.ManyToManyField(Group, related_name='items')
#only items that have data from files are available,
#this is indicated by setting available to True
available = models.BooleanField(default=False, db_index=True)
public = models.BooleanField(default=False, db_index=True)
itemId = models.CharField(max_length=128, unique=True, blank=True)
oxdbId = models.CharField(max_length=42, unique=True, blank=True)
external_data = fields.DictField(default={}, editable=False)
@ -118,15 +124,27 @@ class Item(models.Model):
return default
def editable(self, user):
#FIXME: make permissions work
if user.is_staff or \
self.user == user or \
self.groups.filter(id__in=user.groups.all()).count() > 0:
return True
return False
def edit(self, data):
#FIXME: how to map the keys to the right place to write them to?
if 'id' in data:
#FIXME: check if id is valid and exists and move/merge items accordingly
del data['id']
if 'id' in data:
groups = data.pop('groups')
self.groups.exclude(name__in=groups).delete()
for g in groups:
group, created = Group.objects.get_or_create(name=g)
self.groups.add(group)
for key in data:
if key != 'id':
setattr(self.data, key, data[key])
self.oxdb.save()
self.data.save()
self.save()
def reviews(self):

View file

@ -62,7 +62,7 @@ def _parse_query(data, user):
query = {}
query['range'] = [0, 100]
query['sort'] = [{'key':'title', 'operator':'+'}]
for key in ('sort', 'keys', 'group', 'list', 'range', 'ids'):
for key in ('sort', 'keys', 'group', 'range', 'ids'):
if key in data:
query[key] = data[key]
query['qs'] = models.Item.objects.find(data, user)