def form_sent(request, slug, template="forms/form_sent.html"): """ Show the response message. """ published = Form.objects.published(for_user=request.user) form = get_object_or_404(published, slug=slug) # set form's template to default if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "default.html" context = {"form": form, "form_template": form.template} return render_to_response(template, context, RequestContext(request))
def index(request, slug=None, id=None, hash=None, template_name="pages/view.html"): """ Return page object, either as an archive, active, or version. """ if not slug and not id and not hash: return HttpResponseRedirect(reverse('page.search')) if hash: version = get_object_or_404(Version, hash=hash) current_page = get_object_or_404(Page, pk=version.object_id) page = version.get_version_object() msg_string = 'You are viewing a previous version of this article. View the ' + \ '<a href="%s">Current Version</a>.' % current_page.get_absolute_url() messages.add_message(request, messages.WARNING, _(msg_string)) elif id: page = get_object_or_404(Page, pk=id) if page.status_detail != 'active': if not request.user.is_authenticated(): pages = Page.objects.filter( slug=page.slug, status_detail='active').order_by('-pk') if not pages: pages = Page.objects.filter(slug=slug).order_by('-pk') if not pages: raise Http404 return HttpResponseRedirect(reverse('page', args=[page.slug])) else: try: page = get_object_or_404(Page, slug=slug) except Page.MultipleObjectsReturned: pages = Page.objects.filter(slug=slug, status_detail='active').order_by('-pk') if not pages: pages = Page.objects.filter(slug=slug).order_by('-pk') if not pages: raise Http404 page = pages[0] if not has_view_perm(request.user, 'pages.view_page', page): raise Http403 if not page.template or not template_exists(page.template): page.template = "pages/base.html" EventLog.objects.log(instance=page) return render_to_response(template_name, {'page': page}, context_instance=RequestContext(request))
def index(request, slug=None, id=None, hash=None, template_name="pages/view.html"): """ Return page object, either as an archive, active, or version. """ if not slug and not id and not hash: return HttpResponseRedirect(reverse('page.search')) if hash: version = get_object_or_404(Version, hash=hash) current_page = get_object_or_404(Page, pk=version.object_id) page = version.get_version_object() messages.add_message(request, messages.WARNING, 'You are viewing a previous version of this article. View the ' + \ '<a href="%s">Current Version</a>.' % current_page.get_absolute_url()) elif id: page = get_object_or_404(Page, pk=id) if page.status_detail != 'active': if not request.user.is_authenticated(): pages = Page.objects.filter( slug=page.slug, status_detail='active' ).order_by('-pk') if not pages: pages = Page.objects.filter(slug=slug).order_by('-pk') if not pages: raise Http404 return HttpResponseRedirect(reverse('page', args=[page.slug])) else: try: page = get_object_or_404(Page, slug=slug) except Page.MultipleObjectsReturned: pages = Page.objects.filter( slug=slug, status_detail='active' ).order_by('-pk') if not pages: pages = Page.objects.filter(slug=slug).order_by('-pk') if not pages: raise Http404 page = pages[0] if not has_view_perm(request.user, 'pages.view_page', page): raise Http403 if not page.template or not template_exists(page.template): page.template = "pages/base.html" EventLog.objects.log(instance=page) return render_to_response(template_name, {'page': page}, context_instance=RequestContext(request))
def entry_detail(request, id, template_name="forms/entry_detail.html"): entry = get_object_or_404(FormEntry, pk=id) # check permission if not has_perm(request.user,'forms.change_form',entry.form): raise Http403 form_template = entry.form.template if not form_template or not template_exists(form_template): form_template = "forms/base.html" return render_to_response(template_name, {'entry':entry, 'form_template': form_template}, context_instance=RequestContext(request))
def entry_detail(request, id, template_name="forms/entry_detail.html"): entry = get_object_or_404(FormEntry, pk=id) # check permission if not has_perm(request.user, 'forms.change_form', entry.form): raise Http403 form_template = entry.form.template if not form_template or not template_exists(form_template): form_template = "forms/base.html" return render_to_response(template_name, { 'entry': entry, 'form_template': form_template }, context_instance=RequestContext(request))
def form_entry_payment(request, invoice_id, invoice_guid, form_class=BillingForm, template="forms/form_payment.html"): """ Show billing form, update the invoice then proceed to external payment. """ invoice = get_object_or_404(Invoice, pk=invoice_id) if not invoice.allow_view_by(request.user, invoice_guid): raise Http403 entry = FormEntry.objects.get(id=invoice.object_id) if request.method == "POST": form = form_class(request.POST) if form.is_valid(): update_invoice_for_entry(invoice, form) # redirect to online payment if (entry.payment_method.machine_name).lower() == 'credit-card': return redirect('payment.pay_online', invoice.id, invoice.guid) # redirect to invoice page return redirect('invoice.view', invoice.id, invoice.guid) else: if request.user.is_authenticated(): form = form_class( initial={ 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'email': request.user.email }) else: form = form_class() # set form's template to default if no template or template doesn't exist form_template = entry.form.template if not form_template or not template_exists(form_template): form_template = "default.html" EventLog.objects.log(instance=entry) return render_to_response(template, { 'payment_form': form, 'form': entry.form, 'form_template': form_template, }, context_instance=RequestContext(request))
def form_entry_payment(request, invoice_id, invoice_guid, form_class=BillingForm, template="forms/form_payment.html"): """ Show billing form, update the invoice then proceed to external payment. """ invoice = get_object_or_404(Invoice, pk=invoice_id) if not invoice.allow_view_by(request.user, invoice_guid): raise Http403 entry = FormEntry.objects.get(id=invoice.object_id) if request.method == "POST": form = form_class(request.POST) if form.is_valid(): update_invoice_for_entry(invoice, form) # redirect to online payment if (entry.payment_method.machine_name).lower() == "credit-card": return redirect("payment.pay_online", invoice.id, invoice.guid) # redirect to invoice page return redirect("invoice.view", invoice.id, invoice.guid) else: if request.user.is_authenticated(): form = form_class( initial={ "first_name": request.user.first_name, "last_name": request.user.last_name, "email": request.user.email, } ) else: form = form_class() # set form's template to default if no template or template doesn't exist form_template = entry.form.template if not form_template or not template_exists(form_template): form_template = "default.html" EventLog.objects.log(instance=entry) return render_to_response( template, {"payment_form": form, "form": entry.form, "form_template": form_template}, context_instance=RequestContext(request), )
def form_detail(request, slug, template="forms/form_detail.html"): """ Display a built form and handle submission. """ published = Form.objects.published(for_user=request.user) form = get_object_or_404(published, slug=slug) if not has_view_perm(request.user,'forms.view_form',form): raise Http403 # If form has a recurring payment, make sure the user is logged in if form.recurring_payment: [email_field] = form.fields.filter(field_type__iexact='EmailVerificationField')[:1] or [None] if request.user.is_anonymous() and not email_field: # anonymous user - if we don't have the email field, redirect to login response = redirect('auth_login') response['Location'] += '?next=%s' % form.get_absolute_url() return response if request.user.is_superuser and not email_field: messages.add_message(request, messages.WARNING, 'Please edit the form to include an email field ' + \ 'as it is required for setting up a recurring ' + \ 'payment for anonymous users.') form_for_form = FormForForm(form, request.user, request.POST or None, request.FILES or None) for field in form_for_form.fields: field_default = request.GET.get(field, None) if field_default: form_for_form.fields[field].initial = field_default if request.method == "POST": if form_for_form.is_valid(): entry = form_for_form.save() entry.entry_path = request.POST.get("entry_path", "") if request.user.is_anonymous(): if entry.get_email_address(): emailfield = entry.get_email_address() firstnamefield = entry.get_first_name() lastnamefield = entry.get_last_name() phonefield = entry.get_phone_number() password = '' for i in range(0, 10): password += random.choice(string.ascii_lowercase + string.ascii_uppercase) user_list = User.objects.filter(email=emailfield).order_by('-last_login') if user_list: anonymous_creator = user_list[0] else: anonymous_creator = User(username=emailfield[:30], email=emailfield, first_name=firstnamefield, last_name=lastnamefield) anonymous_creator.set_password(password) anonymous_creator.is_active = False anonymous_creator.save() anonymous_profile = Profile(user=anonymous_creator, owner=anonymous_creator, creator=anonymous_creator, phone=phonefield) anonymous_profile.save() entry.creator = anonymous_creator else: entry.creator = request.user entry.save() entry.set_group_subscribers() # Email subject = generate_email_subject(form, entry) email_headers = {} # content type specified below if form.email_from: email_headers.update({'Reply-To':form.email_from}) # Email to submitter # fields aren't included in submitter body to prevent spam submitter_body = generate_submitter_email_body(entry, form_for_form) email_from = form.email_from or settings.DEFAULT_FROM_EMAIL email_to = form_for_form.email_to() email = Email() email.subject = subject email.reply_to = form.email_from if email_to and form.send_email and form.email_text: # Send message to the person who submitted the form. email.recipient = email_to email.body = submitter_body email.send(fail_silently=True) # Email copies to admin admin_body = generate_admin_email_body(entry, form_for_form) email_from = email_to or email_from # Send from the email entered. email_headers = {} # Reset the email_headers email_headers.update({'Reply-To':email_from}) email_copies = [e.strip() for e in form.email_copies.split(',') if e.strip()] subject = subject.encode(errors='ignore') email_recipients = entry.get_function_email_recipients() if email_copies or email_recipients: # prepare attachments attachments = [] try: for f in form_for_form.files.values(): f.seek(0) attachments.append((f.name, f.read())) except ValueError: attachments = [] for field_entry in entry.fields.all(): if field_entry.field.field_type == 'FileField': try: f = default_storage.open(field_entry.value) except IOError: pass else: f.seek(0) attachments.append((f.name.split('/')[-1], f.read())) # Send message to the email addresses listed in the copies if email_copies: email.body = admin_body email.recipient = email_copies email.send(fail_silently=True, attachments=attachments) # Email copies to recipient list indicated in the form if email_recipients: email.body = admin_body email.recipient = email_recipients email.send(fail_silently=True, attachments=attachments) # payment redirect if (form.custom_payment or form.recurring_payment) and entry.pricing: # get the pricing's price, custom or otherwise price = entry.pricing.price or form_for_form.cleaned_data.get('custom_price') if form.recurring_payment: if request.user.is_anonymous(): rp_user = entry.creator else: rp_user = request.user billing_start_dt = datetime.datetime.now() trial_period_start_dt = None trial_period_end_dt = None if entry.pricing.has_trial_period: trial_period_start_dt = datetime.datetime.now() trial_period_end_dt = trial_period_start_dt + datetime.timedelta(1) billing_start_dt = trial_period_end_dt # Create recurring payment rp = RecurringPayment( user=rp_user, description=form.title, billing_period=entry.pricing.billing_period, billing_start_dt=billing_start_dt, num_days=entry.pricing.num_days, due_sore=entry.pricing.due_sore, payment_amount=price, taxable=entry.pricing.taxable, tax_rate=entry.pricing.tax_rate, has_trial_period=entry.pricing.has_trial_period, trial_period_start_dt=trial_period_start_dt, trial_period_end_dt=trial_period_end_dt, trial_amount=entry.pricing.trial_amount, creator=rp_user, creator_username=rp_user.username, owner=rp_user, owner_username=rp_user.username, ) rp.save() rp.add_customer_profile() # redirect to recurring payments messages.add_message(request, messages.SUCCESS, 'Successful transaction.') return redirect('recurring_payment.view_account', rp.id, rp.guid) else: # create the invoice invoice = make_invoice_for_entry(entry, custom_price=price) # log an event for invoice add EventLog.objects.log(instance=form) # redirect to billing form return redirect('form_entry_payment', invoice.id, invoice.guid) # default redirect if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) # set form's template to default if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "default.html" context = { "form": form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_response(template, context, RequestContext(request))
def form_detail(request, slug, template="forms/form_detail.html"): """ Display a built form and handle submission. """ published = Form.objects.published(for_user=request.user) form = get_object_or_404(published, slug=slug) if not has_view_perm(request.user,'forms.view_form',form): raise Http403 # If form has a recurring payment, make sure the user is logged in if form.recurring_payment and request.user.is_anonymous(): response = redirect('auth_login') response['Location'] += '?next=%s' % form.get_absolute_url() return response form_for_form = FormForForm(form, request.user, request.POST or None, request.FILES or None) for field in form_for_form.fields: field_default = request.GET.get(field, None) if field_default: form_for_form.fields[field].initial = field_default if request.method == "POST": if form_for_form.is_valid(): entry = form_for_form.save() entry.entry_path = request.POST.get("entry_path", "") if request.user.is_anonymous(): if entry.get_email_address(): emailfield = entry.get_email_address() firstnamefield = entry.get_first_name() lastnamefield = entry.get_last_name() phonefield = entry.get_phone_number() password = '' for i in range(0, 10): password += random.choice(string.ascii_lowercase + string.ascii_uppercase) user_list = User.objects.filter(email=emailfield).order_by('-last_login') if user_list: anonymous_creator = user_list[0] else: anonymous_creator = User(username=emailfield[:30], email=emailfield, first_name=firstnamefield, last_name=lastnamefield) anonymous_creator.set_password(password) anonymous_creator.is_active = False anonymous_creator.save() anonymous_profile = Profile(user=anonymous_creator, owner=anonymous_creator, creator=anonymous_creator, phone=phonefield) anonymous_profile.save() entry.creator = anonymous_creator else: entry.creator = request.user entry.save() # Email subject = generate_email_subject(form, entry) email_headers = {} # content type specified below if form.email_from: email_headers.update({'Reply-To':form.email_from}) # Email to submitter # fields aren't included in submitter body to prevent spam submitter_body = generate_submitter_email_body(entry, form_for_form) email_from = form.email_from or settings.DEFAULT_FROM_EMAIL sender = get_setting('site', 'global', 'siteemailnoreplyaddress') email_to = form_for_form.email_to() if email_to and form.send_email and form.email_text: # Send message to the person who submitted the form. msg = EmailMessage(subject, submitter_body, sender, [email_to], headers=email_headers) msg.content_subtype = 'html' try: msg.send(fail_silently=True) except: pass # Email copies to admin admin_body = generate_admin_email_body(entry, form_for_form) email_from = email_to or email_from # Send from the email entered. email_headers = {} # Reset the email_headers email_headers.update({'Reply-To':email_from}) email_copies = [e.strip() for e in form.email_copies.split(",") if e.strip()] if email_copies: # Send message to the email addresses listed in the copies. msg = EmailMessage(subject, admin_body, sender, email_copies, headers=email_headers) msg.content_subtype = 'html' for f in form_for_form.files.values(): try: f.open() f.seek(0) msg.attach(f.name, f.read()) f.close() except Exception: pass try: msg.send(fail_silently=True) except: pass # Email copies to recipient list indicated in the form email_recipients = entry.get_function_email_recipients() if email_recipients: # Send message to the email addresses selected in the form. msg = EmailMessage(subject, admin_body, sender, email_recipients, headers=email_headers) msg.content_subtype = 'html' for f in form_for_form.files.values(): f.seek(0) msg.attach(f.name, f.read()) msg.send() # payment redirect if (form.custom_payment or form.recurring_payment) and entry.pricing: # get the pricing's price, custom or otherwise price = entry.pricing.price or form_for_form.cleaned_data.get('custom_price') if form.recurring_payment: billing_start_dt = datetime.datetime.now() trial_period_start_dt = None trial_period_end_dt = None if entry.pricing.has_trial_period: trial_period_start_dt = datetime.datetime.now() trial_period_end_dt = trial_period_start_dt + datetime.timedelta(1) billing_start_dt = trial_period_end_dt # Create recurring payment rp = RecurringPayment( user=request.user, description=entry.pricing.label, billing_period=entry.pricing.billing_period, billing_start_dt=billing_start_dt, num_days=entry.pricing.num_days, due_sore=entry.pricing.due_sore, payment_amount=price, taxable=entry.pricing.taxable, tax_rate=entry.pricing.tax_rate, has_trial_period=entry.pricing.has_trial_period, trial_period_start_dt=trial_period_start_dt, trial_period_end_dt=trial_period_end_dt, trial_amount=entry.pricing.trial_amount, creator=request.user, creator_username=request.user.username, owner=request.user, owner_username=request.user.username, ) rp.save() rp.add_customer_profile() # redirect to recurring payments messages.add_message(request, messages.SUCCESS, 'Successful transaction.') return redirect('recurring_payment.my_accounts') else: # create the invoice invoice = make_invoice_for_entry(entry, custom_price=price) # log an event for invoice add EventLog.objects.log(instance=form) # redirect to billing form return redirect('form_entry_payment', invoice.id, invoice.guid) # default redirect if form.completion_url: return redirect(form.completion_url) return redirect("form_sent", form.slug) # set form's template to default if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "default.html" context = { "form": form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_response(template, context, RequestContext(request))
def form_detail(request, slug, template="forms/form_detail.html"): """ Display a built form and handle submission. """ published = Form.objects.published(for_user=request.user) form = get_object_or_404(published, slug=slug) if not has_view_perm(request.user, 'forms.view_form', form): raise Http403 # If form has a recurring payment, make sure the user is logged in if form.recurring_payment: [email_field] = form.fields.filter( field_type__iexact='EmailVerificationField')[:1] or [None] if request.user.is_anonymous() and not email_field: # anonymous user - if we don't have the email field, redirect to login response = redirect('auth_login') response['Location'] += '?next=%s' % form.get_absolute_url() return response if request.user.is_superuser and not email_field: messages.add_message(request, messages.WARNING, 'Please edit the form to include an email field ' + \ 'as it is required for setting up a recurring ' + \ 'payment for anonymous users.') form_for_form = FormForForm(form, request.user, request.POST or None, request.FILES or None) for field in form_for_form.fields: field_default = request.GET.get(field, None) if field_default: form_for_form.fields[field].initial = field_default if request.method == "POST": if form_for_form.is_valid(): entry = form_for_form.save() entry.entry_path = request.POST.get("entry_path", "") if request.user.is_anonymous(): if entry.get_email_address(): emailfield = entry.get_email_address() firstnamefield = entry.get_first_name() lastnamefield = entry.get_last_name() phonefield = entry.get_phone_number() password = '' for i in range(0, 10): password += random.choice(string.ascii_lowercase + string.ascii_uppercase) user_list = User.objects.filter( email=emailfield).order_by('-last_login') if user_list: anonymous_creator = user_list[0] else: anonymous_creator = User(username=emailfield[:30], email=emailfield, first_name=firstnamefield, last_name=lastnamefield) anonymous_creator.set_password(password) anonymous_creator.is_active = False anonymous_creator.save() anonymous_profile = Profile(user=anonymous_creator, owner=anonymous_creator, creator=anonymous_creator, phone=phonefield) anonymous_profile.save() entry.creator = anonymous_creator else: entry.creator = request.user entry.save() entry.set_group_subscribers() # Email subject = generate_email_subject(form, entry) email_headers = {} # content type specified below if form.email_from: email_headers.update({'Reply-To': form.email_from}) # Email to submitter # fields aren't included in submitter body to prevent spam submitter_body = generate_submitter_email_body( entry, form_for_form) email_from = form.email_from or settings.DEFAULT_FROM_EMAIL email_to = form_for_form.email_to() email = Email() email.subject = subject email.reply_to = form.email_from if email_to and form.send_email and form.email_text: # Send message to the person who submitted the form. email.recipient = email_to email.body = submitter_body email.send(fail_silently=True) # Email copies to admin admin_body = generate_admin_email_body(entry, form_for_form) email_from = email_to or email_from # Send from the email entered. email_headers = {} # Reset the email_headers email_headers.update({'Reply-To': email_from}) email_copies = [ e.strip() for e in form.email_copies.split(',') if e.strip() ] subject = subject.encode(errors='ignore') email_recipients = entry.get_function_email_recipients() if email_copies or email_recipients: # prepare attachments attachments = [] try: for f in form_for_form.files.values(): f.seek(0) attachments.append((f.name, f.read())) except ValueError: attachments = [] for field_entry in entry.fields.all(): if field_entry.field.field_type == 'FileField': try: f = default_storage.open(field_entry.value) except IOError: pass else: f.seek(0) attachments.append( (f.name.split('/')[-1], f.read())) # Send message to the email addresses listed in the copies if email_copies: email.body = admin_body email.recipient = email_copies email.send(fail_silently=True, attachments=attachments) # Email copies to recipient list indicated in the form if email_recipients: email.body = admin_body email.recipient = email_recipients email.send(fail_silently=True, attachments=attachments) # payment redirect if (form.custom_payment or form.recurring_payment) and entry.pricing: # get the pricing's price, custom or otherwise price = entry.pricing.price or form_for_form.cleaned_data.get( 'custom_price') if form.recurring_payment: if request.user.is_anonymous(): rp_user = entry.creator else: rp_user = request.user billing_start_dt = datetime.datetime.now() trial_period_start_dt = None trial_period_end_dt = None if entry.pricing.has_trial_period: trial_period_start_dt = datetime.datetime.now() trial_period_end_dt = trial_period_start_dt + datetime.timedelta( 1) billing_start_dt = trial_period_end_dt # Create recurring payment rp = RecurringPayment( user=rp_user, description=form.title, billing_period=entry.pricing.billing_period, billing_start_dt=billing_start_dt, num_days=entry.pricing.num_days, due_sore=entry.pricing.due_sore, payment_amount=price, taxable=entry.pricing.taxable, tax_rate=entry.pricing.tax_rate, has_trial_period=entry.pricing.has_trial_period, trial_period_start_dt=trial_period_start_dt, trial_period_end_dt=trial_period_end_dt, trial_amount=entry.pricing.trial_amount, creator=rp_user, creator_username=rp_user.username, owner=rp_user, owner_username=rp_user.username, ) rp.save() rp.add_customer_profile() # redirect to recurring payments messages.add_message(request, messages.SUCCESS, 'Successful transaction.') return redirect('recurring_payment.view_account', rp.id, rp.guid) else: # create the invoice invoice = make_invoice_for_entry(entry, custom_price=price) # log an event for invoice add EventLog.objects.log(instance=form) # redirect to billing form return redirect('form_entry_payment', invoice.id, invoice.guid) # default redirect if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) # set form's template to default if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "default.html" context = { "form": form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_response(template, context, RequestContext(request))
def form_detail(request, slug, template="forms/form_detail.html"): """ Display a built form and handle submission. """ published = Form.objects.published(for_user=request.user) form = get_object_or_404(published, slug=slug) if not has_view_perm(request.user,'forms.view_form',form): raise Http403 # If form has a recurring payment, make sure the user is logged in if form.recurring_payment and request.user.is_anonymous(): response = redirect('auth_login') response['Location'] += '?next=%s' % form.get_absolute_url() return response form_for_form = FormForForm(form, request.user, request.POST or None, request.FILES or None) for field in form_for_form.fields: field_default = request.GET.get(field, None) if field_default: form_for_form.fields[field].initial = field_default if request.method == "POST": if form_for_form.is_valid(): entry = form_for_form.save() entry.entry_path = request.POST.get("entry_path", "") if request.user.is_anonymous(): if entry.get_email_address(): emailfield = entry.get_email_address() firstnamefield = entry.get_first_name() lastnamefield = entry.get_last_name() phonefield = entry.get_phone_number() password = '' for i in range(0, 10): password += random.choice(string.ascii_lowercase + string.ascii_uppercase) user_list = User.objects.filter(email=emailfield).order_by('-last_login') if user_list: anonymous_creator = user_list[0] else: anonymous_creator = User(username=emailfield[:30], email=emailfield, first_name=firstnamefield, last_name=lastnamefield) anonymous_creator.set_password(password) anonymous_creator.is_active = False anonymous_creator.save() anonymous_profile = Profile(user=anonymous_creator, owner=anonymous_creator, creator=anonymous_creator, phone=phonefield) anonymous_profile.save() entry.creator = anonymous_creator else: entry.creator = request.user entry.save() # Email subject = generate_email_subject(form, entry) email_headers = {} # content type specified below if form.email_from: email_headers.update({'Reply-To':form.email_from}) # Email to submitter # fields aren't included in submitter body to prevent spam submitter_body = generate_submitter_email_body(entry, form_for_form) email_from = form.email_from or settings.DEFAULT_FROM_EMAIL sender = get_setting('site', 'global', 'siteemailnoreplyaddress') email_to = form_for_form.email_to() if email_to and form.send_email and form.email_text: # Send message to the person who submitted the form. msg = EmailMessage(subject, submitter_body, sender, [email_to], headers=email_headers) msg.content_subtype = 'html' msg.send() # Email copies to admin admin_body = generate_admin_email_body(entry, form_for_form) email_from = email_to or email_from # Send from the email entered. email_headers.update({'Reply-To':email_from}) email_copies = [e.strip() for e in form.email_copies.split(",") if e.strip()] if email_copies: # Send message to the email addresses listed in the copies. msg = EmailMessage(subject, admin_body, sender, email_copies, headers=email_headers) msg.content_subtype = 'html' for f in form_for_form.files.values(): f.seek(0) msg.attach(f.name, f.read()) msg.send() # payment redirect if (form.custom_payment or form.recurring_payment) and entry.pricing: # get the pricing's price, custom or otherwise price = entry.pricing.price or form_for_form.cleaned_data.get('custom_price') if form.recurring_payment: billing_start_dt = datetime.datetime.now() trial_period_start_dt = None trial_period_end_dt = None if entry.pricing.has_trial_period: trial_period_start_dt = datetime.datetime.now() trial_period_end_dt = trial_period_start_dt + datetime.timedelta(1) billing_start_dt = trial_period_end_dt # Create recurring payment rp = RecurringPayment( user=request.user, description=entry.pricing.label, billing_period=entry.pricing.billing_period, billing_start_dt=billing_start_dt, num_days=entry.pricing.num_days, due_sore=entry.pricing.due_sore, payment_amount=price, taxable=entry.pricing.taxable, tax_rate=entry.pricing.tax_rate, has_trial_period=entry.pricing.has_trial_period, trial_period_start_dt=trial_period_start_dt, trial_period_end_dt=trial_period_end_dt, trial_amount=entry.pricing.trial_amount, creator=request.user, creator_username=request.user.username, owner=request.user, owner_username=request.user.username, ) rp.save() rp.add_customer_profile() # redirect to recurring payments messages.add_message(request, messages.SUCCESS, 'Successful transaction.') return redirect('recurring_payment.my_accounts') else: # create the invoice invoice = make_invoice_for_entry(entry, custom_price=price) # log an event for invoice add EventLog.objects.log(instance=form) # redirect to billing form return redirect('form_entry_payment', invoice.id, invoice.guid) # default redirect if form.completion_url: return redirect(form.completion_url) return redirect("form_sent", form.slug) # set form's template to default if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "default.html" context = { "form": form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_response(template, context, RequestContext(request))