forked from 0x2620/pandora
move buld item metadata edits to tasks too
This commit is contained in:
parent
945ac98dad
commit
d00cf08638
3 changed files with 35 additions and 14 deletions
|
@ -5,6 +5,7 @@ from urllib.parse import quote
|
||||||
import gzip
|
import gzip
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
|
import logging
|
||||||
|
|
||||||
from celery.task import task, periodic_task
|
from celery.task import task, periodic_task
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -16,6 +17,9 @@ from app.utils import limit_rate
|
||||||
from taskqueue.models import Task
|
from taskqueue.models import Task
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@periodic_task(run_every=timedelta(days=1), queue='encoding')
|
@periodic_task(run_every=timedelta(days=1), queue='encoding')
|
||||||
def cronjob(**kwargs):
|
def cronjob(**kwargs):
|
||||||
if limit_rate('item.tasks.cronjob', 8 * 60 * 60):
|
if limit_rate('item.tasks.cronjob', 8 * 60 * 60):
|
||||||
|
@ -350,3 +354,18 @@ def update_sitemap(base_url):
|
||||||
f.write(data)
|
f.write(data)
|
||||||
with gzip.open(sitemap, 'wb') as f:
|
with gzip.open(sitemap, 'wb') as f:
|
||||||
f.write(data)
|
f.write(data)
|
||||||
|
|
||||||
|
|
||||||
|
@task(queue='default')
|
||||||
|
def bulk_edit(data, username):
|
||||||
|
from django.db import transaction
|
||||||
|
from . import models
|
||||||
|
from .views import edit_item
|
||||||
|
user = models.User.objects.get(username=username)
|
||||||
|
items = models.Item.objects.filter(public_id__in=data['id'])
|
||||||
|
for item in items:
|
||||||
|
if item.editable(user):
|
||||||
|
with transaction.atomic():
|
||||||
|
item.refresh_from_db()
|
||||||
|
response = edit_item(user, item, data)
|
||||||
|
return {}
|
||||||
|
|
|
@ -533,17 +533,18 @@ def get(request, data):
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
actions.register(get)
|
actions.register(get)
|
||||||
|
|
||||||
def edit_item(request, item, data):
|
def edit_item(user, item, data):
|
||||||
|
data = data.copy()
|
||||||
update_clips = False
|
update_clips = False
|
||||||
response = json_response(status=200, text='ok')
|
response = json_response(status=200, text='ok')
|
||||||
if 'rightslevel' in data:
|
if 'rightslevel' in data:
|
||||||
if request.user.profile.capability('canEditRightsLevel'):
|
if user.profile.capability('canEditRightsLevel'):
|
||||||
item.level = int(data['rightslevel'])
|
item.level = int(data['rightslevel'])
|
||||||
else:
|
else:
|
||||||
response = json_response(status=403, text='permission denied')
|
response = json_response(status=403, text='permission denied')
|
||||||
del data['rightslevel']
|
del data['rightslevel']
|
||||||
if 'user' in data:
|
if 'user' in data:
|
||||||
if request.user.profile.get_level() in ('admin', 'staff') and \
|
if user.profile.get_level() in ('admin', 'staff') and \
|
||||||
models.User.objects.filter(username=data['user']).exists():
|
models.User.objects.filter(username=data['user']).exists():
|
||||||
new_user = models.User.objects.get(username=data['user'])
|
new_user = models.User.objects.get(username=data['user'])
|
||||||
if new_user != item.user:
|
if new_user != item.user:
|
||||||
|
@ -551,10 +552,10 @@ def edit_item(request, item, data):
|
||||||
update_clips = True
|
update_clips = True
|
||||||
del data['user']
|
del data['user']
|
||||||
if 'groups' in data:
|
if 'groups' in data:
|
||||||
if not request.user.profile.capability('canManageUsers'):
|
if not user.profile.capability('canManageUsers'):
|
||||||
# Users wihtout canManageUsers can only add/remove groups they are not in
|
# Users wihtout canManageUsers can only add/remove groups they are not in
|
||||||
groups = set([g.name for g in item.groups.all()])
|
groups = set([g.name for g in item.groups.all()])
|
||||||
user_groups = set([g.name for g in request.user.groups.all()])
|
user_groups = set([g.name for g in user.groups.all()])
|
||||||
other_groups = list(groups - user_groups)
|
other_groups = list(groups - user_groups)
|
||||||
data['groups'] = [g for g in data['groups'] if g in user_groups] + other_groups
|
data['groups'] = [g for g in data['groups'] if g in user_groups] + other_groups
|
||||||
r = item.edit(data)
|
r = item.edit(data)
|
||||||
|
@ -597,7 +598,7 @@ def add(request, data):
|
||||||
i.make_poster()
|
i.make_poster()
|
||||||
del data['title']
|
del data['title']
|
||||||
if data:
|
if data:
|
||||||
response = edit_item(request, item, data)
|
response = edit_item(request.user, item, data)
|
||||||
response['data'] = item.json()
|
response['data'] = item.json()
|
||||||
add_changelog(request, request_data, item.public_id)
|
add_changelog(request, request_data, item.public_id)
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
|
@ -619,16 +620,16 @@ def edit(request, data):
|
||||||
see: add, find, get, lookup, remove, upload
|
see: add, find, get, lookup, remove, upload
|
||||||
'''
|
'''
|
||||||
if isinstance(data['id'], list):
|
if isinstance(data['id'], list):
|
||||||
items = models.Item.objects.filter(public_id__in=data['id'])
|
add_changelog(request, data)
|
||||||
|
t = tasks.bulk_edit.delay(data, request.user.username)
|
||||||
|
response = json_response(status=200, text='ok')
|
||||||
|
response['data']['taskId'] = t.task_id
|
||||||
else:
|
else:
|
||||||
items = [get_object_or_404_json(models.Item, public_id=data['id'])]
|
item = get_object_or_404_json(models.Item, public_id=data['id'])
|
||||||
for item in items:
|
|
||||||
if item.editable(request.user):
|
if item.editable(request.user):
|
||||||
request_data = data.copy()
|
add_changelog(request, data)
|
||||||
response = edit_item(request, item, data)
|
response = edit_item(request.user, item, data)
|
||||||
response['data'] = item.json()
|
response['data'] = item.json()
|
||||||
if item == items[0]:
|
|
||||||
add_changelog(request, request_data)
|
|
||||||
else:
|
else:
|
||||||
response = json_response(status=403, text='permission denied')
|
response = json_response(status=403, text='permission denied')
|
||||||
return render_to_json_response(response)
|
return render_to_json_response(response)
|
||||||
|
|
|
@ -15,7 +15,8 @@ pandora.cleanupDate = function(value) {
|
||||||
};
|
};
|
||||||
|
|
||||||
pandora.renderRightsLevel = function(that, $rightsLevel, data, isMixed, isMultiple, canEdit) {
|
pandora.renderRightsLevel = function(that, $rightsLevel, data, isMixed, isMultiple, canEdit) {
|
||||||
var rightsLevels = pandora.site.rightsLevels.map(function(rightsLevel) {
|
var ui = pandora.user.ui,
|
||||||
|
rightsLevels = pandora.site.rightsLevels.map(function(rightsLevel) {
|
||||||
return rightsLevel.name;
|
return rightsLevel.name;
|
||||||
}).concat(isMultiple ? ['Mixed'] : []),
|
}).concat(isMultiple ? ['Mixed'] : []),
|
||||||
rightsLevel = isMixed.rightslevel ? rightsLevels.length - 1 : data.rightslevel,
|
rightsLevel = isMixed.rightslevel ? rightsLevels.length - 1 : data.rightslevel,
|
||||||
|
|
Loading…
Reference in a new issue