forked from 0x2620/pandora
item/user groups
This commit is contained in:
parent
bf518ae603
commit
4e6c2250c9
6 changed files with 52 additions and 14 deletions
|
@ -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()
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>', ' </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);
|
||||
}
|
||||
})
|
||||
)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue