cms_plugins,app_settings: add a setting to overload the profile edit plugin form

This commit is contained in:
Benjamin Dauvergne 2014-01-08 01:17:15 +01:00
parent 8f7485031a
commit 55eb3dbaad
2 changed files with 22 additions and 9 deletions

View File

@ -5,6 +5,7 @@ class AppSettings(object):
'TEMPLATE_VARS': {},
'FAVICON_URL': 'http://www.entrouvert.com/favicon.ico',
'WCSINST_DEFAULT_VARIABLES': {},
'PROFILE_FORM_PLUGIN_FORM_CLASS': 'portail_citoyen.forms.ProfileFormPluginForm',
}
__prefix = 'PORTAIL_CITOYEN_'

View File

@ -7,13 +7,16 @@ from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from . import models, forms, utils
from . import models, utils, app_settings
class FormPluginBase(CMSPluginBase):
form_class = None
no_cancel_button = True
def get_form_class(self, request, context, instance, placeholder):
return self.form_class
def render(self, context, instance, placeholder):
request = context['request']
class_name = self.__class__.__name__.lower()
@ -24,22 +27,22 @@ class FormPluginBase(CMSPluginBase):
context['instance'] = instance
context['no_cancel_button'] = self.no_cancel_button
kwargs = {'prefix': class_name}
import pdb
pdb.set_trace()
if issubclass(self.form_class, ModelForm):
form_class = self.get_form_class(request, context, instance,
placeholder)
if issubclass(form_class, ModelForm):
if not hasattr(self, 'get_object'):
raise ImproperlyConfigured('Your plugin class is missing a get_object method but use a ModelForm')
kwargs['instance'] = context['object'] = self.get_object(request, context, instance, placeholder)
if utils.callable_has_arg(self.form_class.__init__, 'plugin_instance'):
if utils.callable_has_arg(form_class.__init__, 'plugin_instance'):
kwargs['plugin_instance'] = instance
if utils.callable_has_arg(self.form_class.__init__, 'request'):
if utils.callable_has_arg(form_class.__init__, 'request'):
kwargs['request'] = request
if request.method == 'POST' and submit in request.POST:
form = self.form_class(data=request.POST, **kwargs)
form = form_class(data=request.POST, **kwargs)
if form.is_valid():
form.save()
else:
form = self.form_class(**kwargs)
form = form_class(**kwargs)
context['form'] = form
return context
@ -49,7 +52,16 @@ class ProfileFormPlugin(FormPluginBase):
name = _('account form plugin')
render_template = 'portail_citoyen/profile_form_plugin.html'
text_enabled = True
form_class = forms.ProfileFormPluginForm
def get_form_class(self, request, context, instance, placeholder):
try:
import importlib
except ImportError:
from django.utils import importlib
form_class_path = app_settings.PROFILE_FORM_PLUGIN_FORM_CLASS
module_path, class_name = form_class_path.rsplit('.', 1)
module = importlib.import_module(module_path)
return getattr(module, class_name)
def get_object(self, request, context, instance, placeholder):
return request.user