forked from 0x2620/pandora
115 lines
2.8 KiB
Python
115 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)
|