+@admin_page
+def edit_page(request, id=None):
+ if id:
+ page = get_object_or_404(Page, id=id)
+ else:
+ page = None
+
+ if request.POST:
+ form = PageForm(page, request.POST)
+
+ if form.is_valid():
+ if form.has_changed():
+ if not page:
+ page = NewPageAction(user=request.user, ip=request.META['REMOTE_ADDR']).save(data=form.cleaned_data
+ ).node
+ else:
+ EditPageAction(user=request.user, node=page, ip=request.META['REMOTE_ADDR']).save(
+ data=form.cleaned_data)
+
+ if ('publish' in request.POST) and (not page.published):
+ PublishAction(user=request.user, node=page, ip=request.META['REMOTE_ADDR']).save()
+ elif ('unpublish' in request.POST) and page.published:
+ page.nstate.published.cancel(ip=request.META['REMOTE_ADDR'])
+
+ return HttpResponseRedirect(reverse('admin_edit_page', kwargs={'id': page.id}))
+
+ else:
+ form = PageForm(page)
+
+ if page:
+ published = page.published
+ else:
+ published = False
+
+ return ('osqaadmin/edit_page.html', {
+ 'page': page,
+ 'form': form,
+ 'published': published
+ })
+
+