Files
@ f4c4009c4db3
Branch filter:
Location: symposion_app/symposion/cms/views.py - annotation
f4c4009c4db3
3.2 KiB
text/x-python
Merge pull request #64 from codersquid/json_placeholders
adds placeholder values for future model changes to ProposalBase
adds placeholder values for future model changes to ProposalBase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb b06daba446a6 4c194ed94cf5 89fb12f72fbb 89fb12f72fbb b06daba446a6 b06daba446a6 4c194ed94cf5 4c194ed94cf5 2665fd575869 4c194ed94cf5 4c194ed94cf5 2665fd575869 2665fd575869 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 2665fd575869 36ab6d599ffc 2665fd575869 2665fd575869 2665fd575869 4c194ed94cf5 36ab6d599ffc 4c194ed94cf5 36ab6d599ffc 4c194ed94cf5 2665fd575869 2665fd575869 2665fd575869 2665fd575869 36ab6d599ffc 2665fd575869 b06daba446a6 2665fd575869 2665fd575869 2665fd575869 2665fd575869 4c194ed94cf5 2665fd575869 36ab6d599ffc 2665fd575869 2665fd575869 2665fd575869 2665fd575869 36ab6d599ffc 4c194ed94cf5 4c194ed94cf5 36ab6d599ffc 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 2665fd575869 36ab6d599ffc 2665fd575869 2665fd575869 2665fd575869 2665fd575869 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 36ab6d599ffc 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb 89fb12f72fbb | from django.conf import settings
from django.db import transaction
from django.http import Http404, HttpResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.views import static
from django.contrib.auth.decorators import login_required
from .models import Page, File
from .forms import PageForm, FileUploadForm
def can_edit(page, user):
if page and page.is_community:
return True
else:
return user.has_perm("cms.change_page")
def can_upload(user):
if user.is_staff or user.is_superuser:
return True
return False
def page(request, path):
try:
page = Page.published.get(path=path)
except Page.DoesNotExist:
page = None
editable = can_edit(page, request.user)
if page is None:
if editable:
return redirect("cms_page_edit", path=path)
else:
raise Http404
return render(request, "cms/page_detail.html", {
"page": page,
"editable": editable,
})
@login_required
def page_edit(request, path):
try:
page = Page.published.get(path=path)
except Page.DoesNotExist:
page = None
if not can_edit(page, request.user):
raise Http404
if request.method == "POST":
form = PageForm(request.POST, instance=page)
if form.is_valid():
page = form.save(commit=False)
page.path = path
page.save()
return redirect(page)
else:
print form.errors
else:
form = PageForm(instance=page, initial={"path": path})
return render(request, "cms/page_edit.html", {
"path": path,
"form": form
})
def file_index(request):
if not can_upload(request.user):
raise Http404
ctx = {
"files": File.objects.all(),
}
return render(request, "cms/file_index.html", ctx)
def file_create(request):
if not can_upload(request.user):
raise Http404
if request.method == "POST":
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
with transaction.commit_on_success():
kwargs = {
"file": form.cleaned_data["file"],
}
File.objects.create(**kwargs)
return redirect("file_index")
else:
form = FileUploadForm()
ctx = {
"form": form,
}
return render(request, "cms/file_create.html", ctx)
def file_download(request, pk, *args):
file = get_object_or_404(File, pk=pk)
if getattr(settings, "USE_X_ACCEL_REDIRECT", False):
response = HttpResponse()
response["X-Accel-Redirect"] = file.file.url
# delete content-type to allow Gondor to determine the filetype and
# we definitely don't want Django's default :-)
del response["content-type"]
else:
response = static.serve(request, file.file.name, document_root=settings.MEDIA_ROOT)
return response
def file_delete(request, pk):
if not can_upload(request.user):
raise Http404
file = get_object_or_404(File, pk=pk)
if request.method == "POST":
file.delete()
# @@@ message
return redirect("file_index")
|