Skip to content

Commit

Permalink
Merge branch 'columns-plugin' into stacks_pinp
Browse files Browse the repository at this point in the history
Conflicts:
	cms/test_utils/cli.py
  • Loading branch information
digi604 committed Oct 26, 2012
2 parents 82f180a + 04e9959 commit de3db5d
Show file tree
Hide file tree
Showing 16 changed files with 446 additions and 104 deletions.
69 changes: 35 additions & 34 deletions cms/admin/pageadmin.py
Expand Up @@ -2,20 +2,20 @@
from cms.admin.change_list import CMSChangeList
from cms.admin.dialog.views import get_copy_dialog
from cms.admin.forms import PageForm, PageAddForm
from cms.admin.permissionadmin import (PAGE_ADMIN_INLINES,
from cms.admin.permissionadmin import (PAGE_ADMIN_INLINES,
PagePermissionInlineAdmin, ViewRestrictionInlineAdmin)
from cms.admin.views import revert_plugins
from cms.apphook_pool import apphook_pool
from cms.exceptions import NoPermissionsException
from cms.forms.widgets import PluginEditor
from cms.models import (Page, Title, CMSPlugin, PagePermission,
from cms.models import (Page, Title, CMSPlugin, PagePermission,
PageModeratorState, EmptyTitle, GlobalPagePermission)
from cms.models.managers import PagePermissionsPermissionManager
from cms.models.placeholdermodel import Placeholder
from cms.plugin_pool import plugin_pool
from cms.templatetags.cms_admin import admin_static_url
from cms.utils import (copy_plugins, helpers, moderator, permissions, plugins,
get_template_from_request, get_language_from_request,
from cms.utils import (copy_plugins, helpers, moderator, permissions, plugins,
get_template_from_request, get_language_from_request,
placeholder as placeholder_utils, admin as admin_utils, cms_static_url)
from cms.utils.i18n import get_language_dict, get_language_list, get_language_tuple, get_language_object
from cms.utils.page_resolver import is_valid_url
Expand All @@ -34,11 +34,11 @@
from django.core.urlresolvers import reverse
from django.db import router, transaction, models
from django.forms import CharField
from django.http import (HttpResponseRedirect, HttpResponse, Http404,
from django.http import (HttpResponseRedirect, HttpResponse, Http404,
HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotAllowed, HttpResponseServerError)
from django.shortcuts import render_to_response, get_object_or_404
from django.template.context import RequestContext
from django.template.defaultfilters import (title, escape, force_escape,
from django.template.defaultfilters import (title, escape, force_escape,
escapejs)
from django.utils.encoding import force_unicode
from django.utils.translation import ugettext, ugettext_lazy as _
Expand All @@ -64,7 +64,7 @@
class ModelAdmin(ModelAdmin):
def get_inline_instances(self, request):
return self.inline_instances

def get_prepopulated_fields(self, request):
return self.prepopulated_fields

Expand All @@ -76,7 +76,7 @@ def contribute_fieldsets(cls):
general_fields = ['title']
general_fields += ['slug', ('published', 'in_navigation')]
additional_hidden_fields = []
advanced_fields = ['reverse_id', 'overwrite_url', 'redirect', 'login_required', 'limit_visibility_in_menu']
advanced_fields = ['reverse_id', 'overwrite_url', 'redirect', 'login_required', 'limit_visibility_in_menu']
template_fields = ['template']
hidden_fields = ['site', 'parent']
seo_fields = []
Expand All @@ -87,7 +87,7 @@ def contribute_fieldsets(cls):
elif settings.CMS_SHOW_START_DATE:
general_fields.append('publication_date')
elif settings.CMS_SHOW_END_DATE:
general_fields.append( 'publication_end_date')
general_fields.append('publication_end_date')
if settings.CMS_MODERATOR:
additional_hidden_fields += ['moderator_state', 'moderator_message']
if settings.CMS_SEO_FIELDS:
Expand Down Expand Up @@ -249,7 +249,7 @@ def save_model(self, request, obj, form, change):
obj.pk = pk
obj.save(no_signals=True)
obj.save()

else:
if 'history' in request.path:
old_obj = Page.objects.get(pk=obj.pk)
Expand All @@ -262,14 +262,14 @@ def save_model(self, request, obj, form, change):
moderator.will_require_moderation(target, position)

obj.save(force_with_moderation=force_with_moderation)

if 'recover' in request.path or 'history' in request.path:
obj.pagemoderatorstate_set.all().delete()
if settings.CMS_MODERATOR:
from cms.utils.moderator import page_changed
page_changed(obj, force_moderation_action=PageModeratorState.ACTION_CHANGED)
revert_plugins(request, obj.version.pk, obj)

language = form.cleaned_data['language']

if target is not None and position is not None:
Expand All @@ -291,7 +291,7 @@ def save_model(self, request, obj, form, change):
if settings.CMS_MODERATOR and 'moderator_message' in form.cleaned_data and \
form.cleaned_data['moderator_message']:
moderator.update_moderation_message(obj, form.cleaned_data['moderator_message'])

if obj and "reversion" in settings.INSTALLED_APPS:
helpers.make_revision_with_plugins(obj)

Expand Down Expand Up @@ -337,7 +337,7 @@ def get_fieldsets(self, request, obj=None):
given_fieldsets = deepcopy(self.add_fieldsets)

return given_fieldsets

def get_fieldset_placeholders(self, template):
return plugins.get_placeholders(template)

Expand Down Expand Up @@ -460,7 +460,7 @@ def get_form(self, request, obj=None, **kwargs):
})
form.base_fields[placeholder.slot] = CharField(widget=widget, required=False)
else:
for name in ['slug','title']:
for name in ['slug', 'title']:
form.base_fields[name].initial = u''
form.base_fields['parent'].initial = request.GET.get('target', None)
form.base_fields['site'].initial = request.session.get('cms_admin_site', None)
Expand Down Expand Up @@ -562,7 +562,7 @@ def render_change_form(self, request, context, add=False, change=False, form_url
'filled_languages': [lang for lang in filled_languages if lang in allowed_languages],
})
return super(PageAdmin, self).render_change_form(request, context, add, change, form_url, obj)

def _get_site_languages(self, obj):
site_id = None
if obj:
Expand Down Expand Up @@ -663,12 +663,12 @@ def changelist_view(self, request, extra_context=None):
return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
cl.set_items(request)

site_id = request.GET.get('site__exact', None)
if site_id is None:
site_id = Site.objects.get_current().pk
site_id = int(site_id)

# languages
languages = get_language_list(site_id)

Expand Down Expand Up @@ -743,7 +743,7 @@ def render_revision_form(self, request, obj, version, context, revert=False, rec
obj.parent = None
obj.parent_id = None
version.field_dict['parent'] = None

obj.version = version

return super(PageAdmin, self).render_revision_form(request, obj, version, context, revert, recover)
Expand Down Expand Up @@ -771,7 +771,7 @@ def move_page(self, request, page_id, extra_context=None):

# move page
page.move_page(target, position)

if "reversion" in settings.INSTALLED_APPS:
helpers.make_revision_with_plugins(page)

Expand Down Expand Up @@ -837,7 +837,7 @@ def copy_page(self, request, page_id, extra_context=None):
}
page.copy_page(target, site, position, **kwargs)
return jsonify_request(HttpResponse("ok"))
except ValidationError,e:
except ValidationError, e:
return jsonify_request(HttpResponseBadRequest(e.messages))
context.update(extra_context or {})
return HttpResponseRedirect('../../')
Expand Down Expand Up @@ -877,7 +877,7 @@ def approve_page(self, request, page_id):
path = '../../'
if 'admin' not in referer:
path = '%s?edit-off' % referer.split('?')[0]
return HttpResponseRedirect( path )
return HttpResponseRedirect(path)


@transaction.commit_on_success
Expand All @@ -892,7 +892,7 @@ def publish_page(self, request, page_id):
# TODO: use admin base here!
if 'admin' not in referer:
path = '%s?edit-off' % referer.split('?')[0]
return HttpResponseRedirect( path )
return HttpResponseRedirect(path)


def delete_view(self, request, object_id, *args, **kwargs):
Expand Down Expand Up @@ -950,14 +950,14 @@ def delete_translation(self, request, object_id, extra_context=None):

titleobj = get_object_or_404(Title, page__id=object_id, language=language)
saved_plugins = CMSPlugin.objects.filter(placeholder__page__id=object_id, language=language)

using = router.db_for_read(self.model)
kwargs = {
'admin_site': self.admin_site,
'user': request.user,
'using': using
}
deleted_objects, perms_needed = get_deleted_objects(
deleted_objects, perms_needed = get_deleted_objects(
[titleobj],
titleopts,
**kwargs
Expand All @@ -969,7 +969,7 @@ def delete_translation(self, request, object_id, extra_context=None):
)[:2]

deleted_objects.append(to_delete_plugins)
perms_needed = set( list(perms_needed) + list(perms_needed_plugins) )
perms_needed = set(list(perms_needed) + list(perms_needed_plugins))

if request.method == 'POST':
if perms_needed:
Expand All @@ -988,10 +988,10 @@ def delete_translation(self, request, object_id, extra_context=None):
public = obj.publisher_public
if public:
public.save()

if "reversion" in settings.INSTALLED_APPS:
helpers.make_revision_with_plugins(obj)

if not self.has_change_permission(request, None):
return HttpResponseRedirect("../../../../")
return HttpResponseRedirect("../../")
Expand Down Expand Up @@ -1055,11 +1055,11 @@ def change_status(self, request, page_id):
page = get_object_or_404(Page, pk=page_id)
if page.has_publish_permission(request):
try:
if page.published or is_valid_url(page.get_absolute_url(),page,False):
if page.published or is_valid_url(page.get_absolute_url(), page, False):
page.published = not page.published
page.save()
return jsonify_request(HttpResponse(admin_utils.render_admin_menu_item(request, page).content))
except ValidationError,e:
except ValidationError, e:
return jsonify_request(HttpResponseBadRequest(e.messages))
else:
return HttpResponseForbidden(unicode(_("You do not have permission to publish this page")))
Expand Down Expand Up @@ -1089,7 +1089,7 @@ def descendants(self, request, page_id):
page = get_object_or_404(Page, pk=page_id)
return admin_utils.render_admin_menu_item(request, page,
template="admin/cms/page/lazy_menu.html")

@create_on_success
def add_plugin(self, request):
'''
Expand Down Expand Up @@ -1154,6 +1154,7 @@ def add_plugin(self, request):

if parent:
plugin.parent = parent
plugin.position = CMSPlugin.objects.filter(parent=parent).count()
plugin.save()

if 'reversion' in settings.INSTALLED_APPS and page:
Expand Down Expand Up @@ -1293,10 +1294,10 @@ def edit_plugin(self, request, plugin_id):
# just pass id to plugin_admin
response = plugin_admin.change_view(request, str(plugin_id))
if request.method == "POST" and plugin_admin.object_successfully_changed:

# if reversion is installed, save version of the page plugins
if 'reversion' in settings.INSTALLED_APPS and page:
helpers.make_revision_with_plugins(page)
helpers.make_revision_with_plugins(page)
reversion.revision.user = request.user
plugin_name = unicode(plugin_pool.get_plugin(cms_plugin.plugin_type).name)
reversion.revision.comment = ugettext(u"%(plugin_name)s plugin edited at position %(position)s in %(placeholder)s") % {
Expand Down Expand Up @@ -1450,7 +1451,7 @@ def change_moderation(self, request, page_id):
page_moderator.save()
return admin_utils.render_admin_menu_item(request, page)
raise Http404

def lookup_allowed(self, key, *args, **kwargs):
if key == 'site__exact':
return True
Expand Down
12 changes: 10 additions & 2 deletions cms/middleware/toolbar.py
Expand Up @@ -2,19 +2,27 @@
"""
Edit Toolbar middleware
"""
from cms.plugin_pool import plugin_pool
from cms.cms_toolbar import CMSToolbar
from django.http import HttpResponse
from django.template.loader import render_to_string


def toolbar_plugin_processor(instance, placeholder, rendered_content, original_context):
original_context.push()
child_plugin_classes = []
if instance.get_plugin_class().allow_children:
instance, plugin = instance.get_plugin_instance()
for child_class_name in plugin.get_child_classes(placeholder, original_context.get('request', {}).current_page):
cls = plugin_pool.get_plugin(child_class_name)
child_plugin_classes.append((cls.__name__, unicode(cls.name)))
data = {
'instance': instance,
'rendered_content': rendered_content
'rendered_content': rendered_content,
'child_plugin_classes': child_plugin_classes,
}
original_context.update(data)
output = render_to_string('cms/toolbar/placeholder_wrapper.html', original_context)
output = render_to_string(instance.get_plugin_class().frontend_edit_template, original_context)
original_context.pop()
return output

Expand Down
1 change: 1 addition & 0 deletions cms/models/pluginmodel.py
Expand Up @@ -87,6 +87,7 @@ class CMSPlugin(MPTTModel):
lft = models.PositiveIntegerField(db_index=True, editable=False)
rght = models.PositiveIntegerField(db_index=True, editable=False)
tree_id = models.PositiveIntegerField(db_index=True, editable=False)
child_plugins = None

class Meta:
app_label = 'cms'
Expand Down
19 changes: 18 additions & 1 deletion cms/plugin_base.py
Expand Up @@ -82,15 +82,21 @@ class CMSPluginBase(admin.ModelAdmin):

form = None
change_form_template = "admin/cms/page/plugin_change_form.html"
frontend_edit_template = 'cms/toolbar/placeholder_wrapper.html'
# Should the plugin be rendered in the admin?
admin_preview = False

render_template = None

# Should the plugin be rendered at all, or doesn't it have any output?
render_plugin = True
render_plugin = True

model = CMSPlugin
text_enabled = False
page_only = False

allow_children = False
child_classes = None

opts = {}
module = None #track in which module/application belongs
Expand Down Expand Up @@ -205,6 +211,17 @@ def icon_alt(self, instance):
the plugin object in a text editor.
"""
return "%s - %s" % (unicode(self.name), unicode(instance))

def get_child_classes(self, slot, page):
from cms.plugin_pool import plugin_pool
if self.child_classes:
return self.child_classes
else:
installed_plugins = plugin_pool.get_all_plugins(slot, page)
class_names = []
for cls in installed_plugins:
class_names.append(str(cls.__name__))
return class_names

def __repr__(self):
return smart_str(self.name)
Expand Down

0 comments on commit de3db5d

Please sign in to comment.