pandora/pandora/home/views.py

116 lines
2.8 KiB
Python

from django.shortcuts import render
import ox
from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json, json_response
from user.decorators import capability_required_json
from oxdjango.api import actions
from changelog.models import add_changelog
from . import models
@capability_required_json('canManageHome')
def addHomeItem(request, data):
'''
add new home item
takes {
type:
...
}
returns {
id:
...
}
'''
item = models.Item()
response = json_response()
if not 'type' in data:
data['type'] = 'custom'
if not item.edit(data):
response = json_response(status=500, text='invalid data')
else:
response['data'] = item.json()
add_changelog(request, data, item.get_id())
return render_to_json_response(response)
actions.register(addHomeItem, cache=False)
@capability_required_json('canManageHome')
def editHomeItem(request, data):
'''
edit home item
takes {
id:
...
}
returns {
id:
...
}
'''
item = get_object_or_404_json(models.Item, id=ox.fromAZ(data['id']))
response = json_response()
if not item.edit(data):
response = json_response(status=500, text='failed to edit item')
else:
response['data'] = item.json()
add_changelog(request, data)
return render_to_json_response(response)
actions.register(editHomeItem, cache=False)
@capability_required_json('canManageHome')
def removeHomeItem(request, data):
'''
remove home item
takes {
id:
}
returns {
}
'''
item = get_object_or_404_json(models.Item, id=ox.fromAZ(data['id']))
item.delete()
add_changelog(request, data)
response = json_response()
return render_to_json_response(response)
actions.register(removeHomeItem, cache=False)
@capability_required_json('canManageHome')
def sortHomeItems(request, data):
'''
sort home times
takes {
ids: []
}
returns {
}
'''
response = json_response()
ids = data['ids']
index = 0
for id in ids:
item = get_object_or_404_json(models.Item, id=ox.fromAZ(id))
if item.index != index:
item.index = index
item.save()
index += 1
return render_to_json_response(response)
actions.register(sortHomeItems, cache=False)
def getHomeItems(request, data):
'''
takes {
active: true // if active is set only return active
}
returns {
items: []
}
'''
response = json_response()
qs = models.Item.objects.all().order_by('-active', 'index', 'created')
if 'active' in data:
qs = qs.filter(active=data['active'] is True)
response['data']['items'] = [i.json() for i in qs if i.is_public()]
return render_to_json_response(response)
actions.register(getHomeItems)