Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmsplugin_contact_plus/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

class ExtraFieldInline(SortableTabularInline):
model = ExtraField
fields = ('label', 'fieldType', 'initial', 'placeholder', 'required')
fields = ('label', 'fieldType', 'initial', 'placeholder', 'css_classes', 'required')


class ContactFormPlusAdmin(NonSortableParentAdmin):
Expand Down
28 changes: 16 additions & 12 deletions cmsplugin_contact_plus/cms_plugins.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.utils.translation import ugettext_lazy as _
from django.contrib import messages
from django.conf import settings
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
Expand All @@ -7,19 +8,21 @@
from cmsplugin_contact_plus.models import ContactPlus
from cmsplugin_contact_plus.forms import ContactFormPlus

from .exceptions import MakeRedirectException


import time

def handle_uploaded_file(f, ts):
def handle_uploaded_file(f, ts):
destination = open('%s/%s' % (settings.MEDIA_ROOT, ts + '-' + f.name), 'wb+')

for chunk in f.chunks():
destination.write(chunk)
destination.close()


class CMSContactPlusPlugin(CMSPluginBase):
"""
"""
"""
model = ContactPlus
inlines = [ExtraFieldInline, ]
Expand All @@ -35,9 +38,9 @@ def render(self, context, instance, placeholder):
self.render_template = instance.template

if request.method == "POST" and "contact_plus_form_" + str(instance.id) in request.POST.keys():
form = ContactFormPlus(contactFormInstance=instance,
request=request,
data=request.POST,
form = ContactFormPlus(contactFormInstance=instance,
request=request,
data=request.POST,
files=request.FILES)
if form.is_valid():
ts = str(int(time.time()))
Expand All @@ -47,18 +50,19 @@ def render(self, context, instance, placeholder):
handle_uploaded_file(f, ts)

form.send(instance.recipient_email, request, ts, instance, form.is_multipart)
context.update({
'contact': instance,
})
return context
messages.success(request, instance.thanks)
raise MakeRedirectException
else:
context.update({
'contact': instance,
'form': form,
})

else:
form = ContactFormPlus(contactFormInstance=instance, request=request)
form = ContactFormPlus(
contactFormInstance=instance,
request=request,
)
context.update({
'contact': instance,
'form': form,
Expand Down
3 changes: 3 additions & 0 deletions cmsplugin_contact_plus/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

class MakeRedirectException(Exception):
pass
8 changes: 5 additions & 3 deletions cmsplugin_contact_plus/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def __init__(self, contactFormInstance, request, *args, **kwargs):
self.fields[slugify(extraField.label)] = forms.EmailField(label=extraField.label,
initial=extraField.initial,
widget=forms.TextInput(
attrs={'placeholder': extraField.placeholder}
attrs={'placeholder': extraField.placeholder, 'class': extraField.css_classes}
),
required=extraField.required)
elif extraField.fieldType == 'DecimalField':
Expand Down Expand Up @@ -86,7 +86,7 @@ def __init__(self, contactFormInstance, request, *args, **kwargs):
self.fields[slugify(extraField.label)] = forms.CharField(label=extraField.label,
initial=extraField.initial,
widget=forms.Textarea(
attrs={'placeholder': extraField.placeholder}
attrs={'placeholder': extraField.placeholder, 'class': extraField.css_classes}
),
required=extraField.required)
elif extraField.fieldType == 'auto_hidden_input':
Expand All @@ -106,7 +106,9 @@ def __init__(self, contactFormInstance, request, *args, **kwargs):
self.fields[slugify(extraField.label)] = MathCaptchaField(
label=extraField.label,
initial=extraField.initial,
required=True)
required=True,
)
self.fields[slugify(extraField.label)].widget.attrs={'class': extraField.css_classes}
elif extraField.fieldType == 'ReCaptcha':
self.fields[slugify(extraField.label)] = ReCaptchaField(
label=extraField.label,
Expand Down
10 changes: 10 additions & 0 deletions cmsplugin_contact_plus/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.http import HttpResponsePermanentRedirect
from .exceptions import MakeRedirectException


class ContactPlusMiddleware:

def process_exception(self, request, exception):
if isinstance(exception, MakeRedirectException):
redirect_url= request.META['PATH_INFO']
return HttpResponsePermanentRedirect(redirect_url)
20 changes: 20 additions & 0 deletions cmsplugin_contact_plus/migrations/0005_extrafield_css_classes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2017-09-21 19:15
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('cmsplugin_contact_plus', '0004_auto_20170410_1553'),
]

operations = [
migrations.AddField(
model_name='extrafield',
name='css_classes',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='CSS classes'),
),
]
2 changes: 2 additions & 0 deletions cmsplugin_contact_plus/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ class ExtraField(SortableMixin):
_('Inital Value'), max_length=250, blank=True, null=True)
placeholder = models.CharField(
_('Placeholder Value'), max_length=250, blank=True, null=True)
css_classes = models.CharField(
_('CSS classes'), max_length=250, blank=True, null=True)
required = models.BooleanField(
_('Mandatory field'), default=True)
widget = models.CharField(
Expand Down