11import hashlib
22
33from django import forms
4+ from django .apps import apps
45from django .core .exceptions import ImproperlyConfigured
5- from django .core .mail import mail_admins , send_mail
66from django .core .validators import EmailValidator
77from django .template import TemplateDoesNotExist
88from django .template .loader import render_to_string
99from django .utils .html import strip_tags
1010from django .utils .translation import gettext_lazy as _
11+ from djangocms_text_ckeditor .fields import HTMLFormField
1112from entangled .forms import EntangledModelFormMixin
1213
1314from . import models
@@ -125,7 +126,7 @@ def execute(self, form, request):
125126 keys = {}
126127 defaults = {
127128 "form_name" : get_option (form , "form_name" ),
128- "form_user" : form_user ,
129+ "form_user" : None if request . user . is_anonymous else request . user
129130 }
130131 defaults .update (
131132 {
@@ -190,14 +191,16 @@ class Meta:
190191 )
191192
192193 def execute (self , form , request ):
193- recipients = (self .get_parameter (form , "sendemail_recipients" ) or []).split ()
194+ from django .core .mail import mail_admins , send_mail
195+
196+ recipients = self .get_parameter (form , "sendemail_recipients" ) or ""
194197 template_set = self .get_parameter (form , "sendemail_template" ) or "default"
195198 context = dict (
196199 cleaned_data = form .cleaned_data ,
197200 form_name = getattr (form .Meta , "verbose_name" , "" ),
198201 user = request .user ,
199- user_agent = request .headers ["User-Agent" ],
200- referer = request .headers ["Referer" ],
202+ user_agent = request .headers ["User-Agent" ] if "User-Agent" in request . headers else "" ,
203+ referer = request .headers ["Referer" ] if "Referer" in request . headers else "" ,
201204 )
202205
203206 html_message = render_to_string (f"djangocms_form_builder/mails/{ template_set } /mail_html.html" , context )
@@ -209,19 +212,73 @@ def execute(self, form, request):
209212 subject = render_to_string (f"djangocms_form_builder/mails/{ template_set } /subject.txt" , context )
210213 except TemplateDoesNotExist :
211214 subject = self .subject % dict (form_name = context ["form_name" ])
215+
212216 if not recipients :
213- mail_admins (
217+ return mail_admins (
214218 subject ,
215219 message ,
216220 fail_silently = True ,
217221 html_message = html_message ,
218222 )
219223 else :
220- send_mail (
224+ return send_mail (
221225 subject ,
222226 message ,
223- recipients ,
224227 self .from_mail ,
228+ recipients .split (),
225229 fail_silently = True ,
226230 html_message = html_message ,
227231 )
232+
233+
234+ @register
235+ class SuccessMessageAction (FormAction ):
236+ verbose_name = _ ("Success message" )
237+
238+ class Meta :
239+ entangled_fields = {
240+ "action_parameters" : [
241+ "submitmessage_message" ,
242+ ]
243+ }
244+
245+ submitmessage_message = HTMLFormField (
246+ label = _ ("Message" ),
247+ required = True ,
248+ initial = _ ("<p>Thank you for your submission.</p>" ),
249+ )
250+
251+ def execute (self , form , request ):
252+ from .cms_plugins .ajax_plugins import SAME_PAGE_REDIRECT
253+
254+ message = self .get_parameter (form , "submitmessage_message" )
255+ # Overwrite the success context and render template
256+ form .get_success_context = lambda * args , ** kwargs : {"message" : message }
257+ form .Meta .options ["render_success" ] = "djangocms_form_builder/actions/submit_message.html"
258+ # Overwrite the default redirect to same page
259+ if form .Meta .options .get ("redirect" ) == SAME_PAGE_REDIRECT :
260+ form .Meta .options ["redirect" ] = None
261+
262+
263+ if apps .is_installed ("djangocms_link" ):
264+ from djangocms_link .fields import LinkFormField
265+ from djangocms_link .helpers import get_link
266+
267+ @register
268+ class RedirectAction (FormAction ):
269+ verbose_name = _ ("Redirect after submission" )
270+
271+ class Meta :
272+ entangled_fields = {
273+ "action_parameters" : [
274+ "redirect_link" ,
275+ ]
276+ }
277+
278+ redirect_link = LinkFormField (
279+ label = _ ("Link" ),
280+ required = True ,
281+ )
282+
283+ def execute (self , form , request ):
284+ form .Meta .options ["redirect" ] = get_link (self .get_parameter (form , "redirect_link" ))
0 commit comments