Builds appropriate contact form based on options
    set in the contact_form controller.

def build_contact(request, slug=""):
    """
    Builds appropriate contact form based on options
    set in the contact_form controller.
    """
    controller = get_object_or_404(ContactFormController, slug=slug)
    site = Site.objects.get_current()
    UserModel = get_user_model()
    user = request.user
    form = ContactForm(request.POST or None, request.FILES or None, controller=controller)

    # if we know, fill in the user name and email
    if user.is_authenticated:
        # first, resolve username for tango and non-tango sites
        try:
            name = user.display_name
        except AttributeError:
            name = user.username
        form.fields['sender_name'].widget.attrs['readonly'] = 'true'
        form.fields['sender_name'].initial = name
        form.fields['sender_email'].widget.attrs['readonly'] = 'true'
        form.fields['sender_email'].initial = user.email

    if form.is_valid():
        if controller.store_in_db:
            # To do: sanitize submission.
            new_msg = Contact(**form.cleaned_data)
            new_msg.controller = controller
            new_msg.site = site
            if controller.override_subject:  # we're overriding the subject
                new_msg.subject = controller.override_subject
            new_msg.save()

        if controller.send_emails:
            form_data = form.cleaned_data
            if controller.override_subject:
                subject = controller.override_subject
            elif 'subject' in form_data:
                subject = form_data['subject']
            else:
                subject = "{} message from {}".format(controller.name, form_data['sender_name'])

            body = "{} \n\n {}".format(form_data['body'], form_data['sender_name'])
            if controller.request_contact_info:
                body += "\nAddress: {} \nCity: {} \nState: {} \nPhone: {}".format(
                    form_data['contact_address'],
                    form_data['contact_city'],
                    form_data['contact_state'],
                    form_data['contact_phone']
                )

            if controller.email_options == '2':  # Create selectable list from recipients
                try:
                    to = [UserModel.objects.get(username=form.cleaned_data['to']).email]
                except Exception:
                    to = [form.cleaned_data['to']]

            if controller.email_options == '1':
                to = [r.email for r in controller.recipients.all()]
                for r in controller.other_recipients.all():
                    to.append(r.email)

            if 'send_a_copy' in form.cleaned_data:
                to.append(form.cleaned_data['sender_email'])

            mail = EmailMessage(
                subject=subject,
                body=body,
                from_email=form.cleaned_data['sender_email'],
                to=to
            )
            if 'photo' in request.FILES:
                photo = request.FILES['photo']
                mail.attach(photo.name, photo.read(), photo.content_type)
            mail.send()
        return render(request, 'success_url', {'controller': controller})

    return render(request, 'contact/form.html', {
        'form': form,
        'site': site,
        'controller': controller
    })