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, 'association_name': get_association_name(request) }, context_instance=RequestContext(request))
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_resp(request=request, template_name=template, context=context)
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 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 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_resp(request=request, template_name=template_name, context={'entry':entry, 'form': entry.form, 'form_template': form_template})
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_resp(request=request, template_name=template, context={ 'payment_form': form, 'form': entry.form, 'form_template': form_template, })
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.') if form.custom_payment and not form.recurring_payment: billing_form = BillingForm(request.POST or None) if request.user.is_authenticated: billing_form.initial = { 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'email': request.user.email } else: billing_form = None form_for_form = FormForForm(form, request.user, request.session, request.POST or None, request.FILES or None) if get_setting('site', 'global', 'captcha'): # add captcha if billing_form: # append the captcha to the end of the billing form captcha_field = CustomCatpchaField(label=_('Type the code below')) if 'captcha' in form_for_form.fields: form_for_form.fields.pop('captcha') billing_form.fields['captcha'] = captcha_field 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() and (not billing_form or billing_form.is_valid()): entry = form_for_form.save() entry.entry_path = request.POST.get("entry_path", "") if request.user.is_anonymous: entry.creator = entry.check_and_create_user() 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() is_spam = Email.is_blocked(email_to) if is_spam: # log the spam description = "Email \"{0}\" blocked because it is listed in email_blocks.".format( email_to) EventLog.objects.log(instance=form, description=description) if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) 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=getattr(settings, 'EMAIL_FAIL_SILENTLY', True)) # log an event EventLog.objects.log( instance=form, description='Confirmation email sent to {}'.format( email_to)) # Email copies to admin admin_body = generate_admin_email_body(entry, form_for_form, user=request.user) 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() # reply_to of admin emails goes to submitter email.reply_to = email_to if email_copies or email_recipients: # prepare attachments attachments = [] # Commenting out the attachment block to not add attachments to the email for the reason below: # According to SES message quotas https://docs.aws.amazon.com/ses/latest/DeveloperGuide/quotas.html, # the maximum message size (including attachments) is 10 MB per message (after base64 encoding) # which means the actual size should be less than 7.5 MB or so because text after encoded with the BASE64 # algorithm increases its size by 1/3. But the allowed upload size is much larger than 7.5 MB. # 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())) fail_silently = getattr(settings, 'EMAIL_FAIL_SILENTLY', True) # Send message to the email addresses listed in the copies if email_copies: email.body = admin_body email.recipient = email_copies # if request.user.is_anonymous or not request.user.is_active: # email.content_type = 'text' email.send(fail_silently=fail_silently, 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=fail_silently, 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() if rp.platform == 'authorizenet': 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) update_invoice_for_entry(invoice, billing_form) # log an event for invoice add EventLog.objects.log(instance=form) # redirect to online payment if invoice.balance > 0: 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) # default redirect if form.completion_url: completion_url = form.completion_url.strip().replace( '[entry_id]', str(entry.id)) return HttpResponseRedirect(completion_url) return redirect("form_sent", form.slug) # set form's template to forms/base.html if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "forms/base.html" context = { "form": form, 'billing_form': billing_form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_resp(request=request, template_name=template, context=context)
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) if form.custom_payment and not form.recurring_payment: billing_form = BillingForm(request.POST or None) if request.user.is_authenticated: billing_form.initial = { 'first_name':request.user.first_name, 'last_name':request.user.last_name, 'email':request.user.email} else: billing_form = 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() and (not billing_form or billing_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() is_spam = Email.is_blocked(email_to) if is_spam: # log the spam description = "Email \"{0}\" blocked because it is listed in email_blocks.".format(email_to) EventLog.objects.log(instance=form, description=description) if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) 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() # reply_to of admin emails goes to submitter email.reply_to = email_to 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() if rp.platform == 'authorizenet': 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) update_invoice_for_entry(invoice, billing_form) # log an event for invoice add EventLog.objects.log(instance=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) # default redirect if form.completion_url: return HttpResponseRedirect(form.completion_url.strip()) return redirect("form_sent", form.slug) # set form's template to forms/base.html if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "forms/base.html" context = { "form": form, 'billing_form': billing_form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_resp(request=request, template_name=template, context=context)
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) if form.custom_payment and not form.recurring_payment: billing_form = BillingForm(request.POST or None) if request.user.is_authenticated(): billing_form.initial = { 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'email': request.user.email } else: billing_form = 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() and (not billing_form or billing_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() is_spam = Email.is_blocked(email_to) if is_spam: # log the spam description = "Email \"{0}\" blocked because it is listed in email_blocks.".format( email_to) EventLog.objects.log(instance=form, description=description) if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) 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() # reply_to of admin emails goes to submitter email.reply_to = email_to 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() if rp.platform == 'authorizenet': 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) update_invoice_for_entry(invoice, billing_form) # log an event for invoice add EventLog.objects.log(instance=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) # default redirect form.completion_url = form.completion_url.strip(' ') if form.completion_url: return HttpResponseRedirect(form.completion_url) return redirect("form_sent", form.slug) # set form's template to forms/base.html if no template or template doesn't exist if not form.template or not template_exists(form.template): form.template = "forms/base.html" context = { "form": form, 'billing_form': billing_form, "form_for_form": form_for_form, 'form_template': form.template, } return render_to_response(template, context, RequestContext(request))