Use django-boxes instead

This commit is contained in:
Patrick Altman 2015-09-13 21:40:28 -05:00
parent 6dd80f9ddb
commit ba0bb84ad7
11 changed files with 0 additions and 196 deletions

View file

@ -23,18 +23,3 @@ specifying:
Page content and title can also be edited directly at the url. The ``cms`` app
uses the `django-reversion <http://django-reversion.readthedocs.org>`_ package,
thus content is version controlled.
Boxes App
---------
The ``boxes`` app allows for sections of a page to be edited like a wiki. To use this in a template
use the ``boxes_tags`` and specify a box section of a page using the ``boxes`` tag:
.. code-block:: django
{% load boxes_tags %}
{% boxes "intro_section" %}
This template will render an editable content box. When a staff user visits the
page, they will see an ``Edit this content`` button. The ``boxes`` app also uses the
``django-reversion`` package.

View file

@ -1,3 +0,0 @@
# @@@ Reconcile differences with django-boxes [1] and remove from Symposion
# [1] http://github.com/eldarion/django-boxes/

View file

@ -1,12 +0,0 @@
from django.contrib import admin
import reversion
from symposion.boxes.models import Box
class BoxAdmin(reversion.VersionAdmin):
pass
admin.site.register(Box, BoxAdmin)

View file

@ -1,20 +0,0 @@
from django.conf import settings
from symposion.boxes.utils import load_path_attr
def default_can_edit(request, *args, **kwargs):
"""
This is meant to be overridden in your project per domain specific
requirements.
"""
return request.user.is_staff or request.user.is_superuser
def load_can_edit():
import_path = getattr(settings, "BOXES_CAN_EDIT_CALLABLE", None)
if import_path is None:
return default_can_edit
return load_path_attr(import_path)

View file

@ -1,10 +0,0 @@
from django import forms
from symposion.boxes.models import Box
class BoxForm(forms.ModelForm):
class Meta:
model = Box
fields = ["content"]

View file

@ -1,28 +0,0 @@
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
import reversion
from markitup.fields import MarkupField
@python_2_unicode_compatible
class Box(models.Model):
label = models.CharField(max_length=100, db_index=True, verbose_name=_("Label"))
content = MarkupField(blank=True)
created_by = models.ForeignKey(User, related_name="boxes", verbose_name=_("Created by"))
last_updated_by = models.ForeignKey(User, related_name="updated_boxes", verbose_name=_("Last updated by"))
def __str__(self):
return self.label
class Meta:
verbose_name = _("Box")
verbose_name_plural = _("Boxes")
reversion.register(Box)

View file

@ -1,36 +0,0 @@
from django import template
from django.core.urlresolvers import reverse
from symposion.boxes.models import Box
from symposion.boxes.forms import BoxForm
from symposion.boxes.authorization import load_can_edit
register = template.Library()
@register.inclusion_tag("boxes/box.html", takes_context=True)
def box(context, label, show_edit=True, *args, **kwargs):
request = context["request"]
can_edit = load_can_edit()(request, *args, **kwargs)
try:
box = Box.objects.get(label=label)
except Box.DoesNotExist:
box = None
if can_edit and show_edit:
form = BoxForm(instance=box, prefix=label)
form_action = reverse("box_edit", args=[label])
else:
form = None
form_action = None
return {
"request": request,
"label": label,
"box": box,
"form": form,
"form_action": form_action,
}

View file

@ -1,7 +0,0 @@
from django.conf.urls import patterns, url
urlpatterns = patterns(
"symposion.boxes.views",
url(r"^([-\w]+)/edit/$", "box_edit", name="box_edit"),
)

View file

@ -1,19 +0,0 @@
from django.core.exceptions import ImproperlyConfigured
try:
from django.utils.importlib import import_module
except ImportError:
from importlib import import_module
def load_path_attr(path):
i = path.rfind(".")
module, attr = path[:i], path[i + 1:]
try:
mod = import_module(module)
except ImportError, e:
raise ImproperlyConfigured("Error importing %s: '%s'" % (module, e))
try:
attr = getattr(mod, attr)
except AttributeError:
raise ImproperlyConfigured("Module '%s' does not define a '%s'" % (module, attr))
return attr

View file

@ -1,46 +0,0 @@
from django.http import HttpResponseForbidden
from django.shortcuts import redirect
from django.views.decorators.http import require_POST
from symposion.boxes.authorization import load_can_edit
from symposion.boxes.forms import BoxForm
from symposion.boxes.models import Box
# @@@ problem with this is that the box_edit.html and box_create.html won't have domain objects in
# context
def get_auth_vars(request):
auth_vars = {}
if request.method == "POST":
keys = [k for k in request.POST.keys() if k.startswith("boxes_auth_")]
for key in keys:
auth_vars[key.replace("boxes_auth_", "")] = request.POST.get(key)
auth_vars["user"] = request.user
return auth_vars
@require_POST
def box_edit(request, label):
if not load_can_edit()(request, **get_auth_vars(request)):
return HttpResponseForbidden()
next = request.GET.get("next")
try:
box = Box.objects.get(label=label)
except Box.DoesNotExist:
box = None
form = BoxForm(request.POST, instance=box, prefix=label)
if form.is_valid():
if box is None:
box = form.save(commit=False)
box.label = label
box.created_by = request.user
box.last_updated_by = request.user
box.save()
else:
form.save()
return redirect(next)