pandora/pandora/home/views.py

116 lines
2.8 KiB
Python
Raw Normal View History

2017-01-24 17:41:24 +00:00
from django.shortcuts import render
import ox
from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json, json_response
2017-02-28 19:05:42 +00:00
2017-01-24 17:41:24 +00:00
from user.decorators import capability_required_json
from oxdjango.api import actions
2017-02-28 19:05:42 +00:00
from changelog.models import add_changelog
2017-01-24 17:41:24 +00:00
from . import models
@capability_required_json('canManageHome')
def addHomeItem(request, data):
'''
add new home item
takes {
type:
...
}
returns {
id:
...
}
'''
item = models.Item()
2017-01-26 16:06:34 +00:00
response = json_response()
2017-02-15 14:08:35 +00:00
if not 'type' in data:
data['type'] = 'custom'
2017-01-24 17:41:24 +00:00
if not item.edit(data):
response = json_response(status=500, text='invalid data')
else:
2017-01-26 16:06:34 +00:00
response['data'] = item.json()
2017-02-28 19:05:42 +00:00
add_changelog(request, data, item.get_id())
2017-01-24 17:41:24 +00:00
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']))
2017-01-26 16:06:34 +00:00
response = json_response()
2017-01-24 17:41:24 +00:00
if not item.edit(data):
response = json_response(status=500, text='failed to edit item')
else:
2017-01-26 16:06:34 +00:00
response['data'] = item.json()
2017-02-28 20:32:13 +00:00
add_changelog(request, data)
2017-01-24 17:41:24 +00:00
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()
2017-02-28 20:32:13 +00:00
add_changelog(request, data)
2017-01-24 17:41:24 +00:00
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()
2017-02-09 02:55:31 +00:00
qs = models.Item.objects.all().order_by('-active', 'index', 'created')
2017-01-24 17:41:24 +00:00
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()]
2017-01-24 17:41:24 +00:00
return render_to_json_response(response)
actions.register(getHomeItems)