item/user groups

This commit is contained in:
j 2012-01-13 15:17:18 +05:30
parent bf518ae603
commit 4e6c2250c9
6 changed files with 52 additions and 14 deletions

View file

@ -209,10 +209,13 @@ class Item(models.Model):
del data['id']
if 'groups' 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)
if isinstance(groups, list):
groups = filter(lambda g: g.strip(), groups)
self.groups.exclude(name__in=groups).delete()
current_groups = [g.name for g in self.groups.all()]
for g in filter(lambda g: g not in current_groups, groups):
group, created = Group.objects.get_or_create(name=g)
self.groups.add(group)
for key in data:
self.data[key] = data[key]
return self.save()

View file

@ -404,6 +404,7 @@ def get(request):
if not data['keys'] or 'notes' in data['keys'] \
and request.user.get_profile().capability('canEditMetadata'):
info['notes'] = item.notes
info['groups'] = [g.name for g in item.groups.all()]
response['data'] = info
else:
response = json_response(status=403, text='permission denied')

View file

@ -3,7 +3,7 @@
import copy
from datetime import datetime
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from django.db import models
from django.db.models import Max
from django.conf import settings
@ -149,6 +149,7 @@ class SessionData(models.Model):
p = self.user.get_profile()
j['disabled'] = not self.user.is_active
j['email'] = self.user.email
j['groups'] = [g.name for g in self.user.groups.all()]
j['level'] = p.get_level()
j['newsletter'] = p.newsletter
j['notes'] = p.notes

View file

@ -334,6 +334,15 @@ def editUser(request):
profile.notes = data['notes']
if 'newsletter' in data:
profile.newsletter = data['newsletter']
if 'groups' in data:
groups = data['groups']
if isinstance(groups, list):
groups = filter(lambda g: g.strip(), groups)
user.groups.exclude(name__in=groups).delete()
current_groups = [g.name for g in user.groups.all()]
for g in filter(lambda g: g not in current_groups, groups):
group, created = models.Group.objects.get_or_create(name=g)
user.groups.add(group)
if 'username' in data:
if models.User.objects.filter(
username__iexact=data['username']).exclude(id=user.id).count()>0:

View file

@ -264,7 +264,7 @@ pandora.ui.infoView = function(data) {
)
.appendTo($text);
var list_keys = ['language', 'topic', 'director', 'cinematographer', 'features'];
var list_keys = ['language', 'topic', 'director', 'cinematographer', 'features', 'groups'];
$('<div>').html('<br>').appendTo($text);
[
'date',
@ -284,7 +284,6 @@ pandora.ui.infoView = function(data) {
.html(
formatKey({
categorty: 'categories',
user: 'contributor'
}[key] || key).replace('</span>', '&nbsp;</span>')
)
.appendTo($div);
@ -352,6 +351,22 @@ pandora.ui.infoView = function(data) {
// Notes -------------------------------------------------------------------
if (canEdit) {
$('<div>')
.css({marginBottom: '4px'})
.append(formatKey('Groups', true))
.append(
Ox.Editable({
placeholder: formatLight('No Groups'),
tooltip: 'Doubleclick to edit',
value: data.groups.join(', '),
})
.bindEvent({
submit: function(event) {
editMetadata('groups', event.value);
}
})
)
.appendTo($statistics);
$('<div>')
.css({marginBottom: '4px'})
@ -367,12 +382,7 @@ pandora.ui.infoView = function(data) {
})
.bindEvent({
submit: function(event) {
pandora.api.edit({
id: data.id,
notes: event.value
}, function(result) {
// ...
});
editMetadata('notes', event.value);
}
})
)

View file

@ -240,7 +240,7 @@ pandora.ui.usersDialog = function() {
columnsRemovable: true,
columnsVisible: true,
items: pandora.api.findUsers,
keys: ['notes'],
keys: ['notes', 'groups'],
max: -1,
scrollbarVisible: true,
sort: [{key: 'lastseen', operator: '-'}]
@ -490,6 +490,18 @@ pandora.ui.usersDialog = function() {
.bindEvent({
submit: function(data) {
}
}),
Ox.Input({
id: 'groups',
label: 'Groups',
labelWidth: 80,
value: user.groups.join(', '),
width: formWidth - 16
})
.bindEvent({
submit: function(data) {
}
}),
Ox.Select({
@ -542,6 +554,8 @@ pandora.ui.usersDialog = function() {
data.level = event.data.value;
} else if (event.id == 'newsletter') {
data.newsletter = event.data.value;
} else if (event.id == 'groups') {
data.groups = event.data.value.split(', ');
} else {
data[event.id] = event.data.value;
}