This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
djangocms-text-ckeditor/djangocms_text_ckeditor/cms_plugins.py

85 lines
3.2 KiB
Python

from django.conf import settings
from django.forms.fields import CharField
from django.utils.translation import ugettext_lazy as _
from cms import __version__ as cms_version
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from djangocms_text_ckeditor.widgets import TextEditorWidget
from djangocms_text_ckeditor.models import Text
from djangocms_text_ckeditor.utils import plugin_tags_to_user_html
from djangocms_text_ckeditor.forms import TextForm
class TextPlugin(CMSPluginBase):
model = Text
name = _("Text")
form = TextForm
render_template = "cms/plugins/text.html"
change_form_template = "cms/plugins/text_plugin_change_form.html"
def get_editor_widget(self, request, plugins, pk, placeholder, language):
"""
Returns the Django form Widget to be used for
the text area
"""
return TextEditorWidget(installed_plugins=plugins, pk=pk, placeholder=placeholder, plugin_language=language)
def get_form_class(self, request, plugins, pk, placeholder, language):
"""
Returns a subclass of Form to be used by this plugin
"""
# We avoid mutating the Form declared above by subclassing
class TextPluginForm(self.form):
pass
widget = self.get_editor_widget(request, plugins, pk, placeholder, language)
TextPluginForm.declared_fields["body"] = CharField(
widget=widget, required=False
)
return TextPluginForm
def get_form(self, request, obj=None, **kwargs):
plugins = plugin_pool.get_text_enabled_plugins(
self.placeholder,
self.page
)
pk = self.cms_plugin_instance.pk
form = self.get_form_class(request, plugins, pk, self.cms_plugin_instance.placeholder,
self.cms_plugin_instance.language)
kwargs['form'] = form # override standard form
return super(TextPlugin, self).get_form(request, obj, **kwargs)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
"""
We override the change form template path
to provide backwards compatibility with CMS 2.x
"""
ckeditor_basepath = '{0}/ckeditor/'.format(settings.STATIC_URL)
if ckeditor_basepath.startswith('//'):
protocol = 'https' if request.is_secure else 'http'
ckeditor_basepath = '{0}:{1}'.format(protocol, ckeditor_basepath)
context.update({'CKEDITOR_BASEPATH': ckeditor_basepath})
if cms_version.startswith('2'):
context['change_form_template'] = "admin/cms/page/plugin_change_form.html"
return super(TextPlugin, self).render_change_form(request, context, add, change, form_url, obj)
def render(self, context, instance, placeholder):
context.update({
'body': plugin_tags_to_user_html(
instance.body,
context,
placeholder
),
'placeholder': placeholder,
'object': instance
})
return context
def save_model(self, request, obj, form, change):
obj.clean_plugins()
super(TextPlugin, self).save_model(request, obj, form, change)
plugin_pool.register_plugin(TextPlugin)