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

View file

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

View file

@ -3,7 +3,7 @@
import copy import copy
from datetime import datetime 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 import models
from django.db.models import Max from django.db.models import Max
from django.conf import settings from django.conf import settings
@ -149,6 +149,7 @@ class SessionData(models.Model):
p = self.user.get_profile() p = self.user.get_profile()
j['disabled'] = not self.user.is_active j['disabled'] = not self.user.is_active
j['email'] = self.user.email j['email'] = self.user.email
j['groups'] = [g.name for g in self.user.groups.all()]
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

View file

@ -334,6 +334,15 @@ def editUser(request):
profile.notes = data['notes'] profile.notes = data['notes']
if 'newsletter' in data: if 'newsletter' in data:
profile.newsletter = data['newsletter'] 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 'username' in data:
if models.User.objects.filter( if models.User.objects.filter(
username__iexact=data['username']).exclude(id=user.id).count()>0: username__iexact=data['username']).exclude(id=user.id).count()>0:

View file

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

View file

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