示例#1
0
def signup_request(request):
    try:
        post_data = request.POST
        questions_json = post_data.get(u'data', [])
        questions_json = json.loads(questions_json)

        email = __getFieldValue__(questions_json, u'Email')
        first_name = __getFieldValue__(questions_json, u'First Name')
        last_name = __getFieldValue__(questions_json, u'Last Name')
        if email is None:
            return HttpResponse(status=400)
        exists = Person.objects.filter(user__email__iexact=email).count() > 0
        if exists:
            User.objects.filter(email__iexact=email).update(username=email, email=email, first_name=first_name,
                                                            last_name=last_name)
            user = Person.objects.get(user__email__iexact=email).user
        else:
            user = User.objects.create(username=email, email=email, first_name=first_name,
                                       last_name=last_name)
        random_password = User.objects.make_random_password(length=10)
        user.set_password(random_password)
        if not user.groups.filter(name='VOLUNTEER').count() > 0:
            user.groups.add(Group.objects.get(name='VOLUNTEER'))
        user.save()

        person = user.get_profile()
        send_registration_email(email=email, user=user, hostname=request.get_host(), random_password=random_password)

        answers = dict()
        responses = dict()
        questions = []
        for question in questions_json:
            question_name = question.get(u'label').strip()
            if question_name in ['First Name', 'Last Name', 'Email']:
                continue
            form_question = None
            if FormQuestion.objects.filter(name__iexact=question_name).count() > 0:
                FormQuestion.objects.filter(name__iexact=question_name) \
                    .update(type=question.get(u'inputType'), required=question.get(u'required'))
                form_question = FormQuestion.objects.get(name__iexact=question_name)
            else:
                form_question = FormQuestion(name=question_name,
                                             display_name=question_name,
                                             type=question.get(u'inputType'),
                                             required=question.get(u'required'))
                form_question.save()
                # TODO: adjust possible answers based on input type
            questions.append(form_question)
            answers[form_question.name] = []
            responses[form_question.name] = []
            for answer in question.get(u'values'):
                answers[form_question.name].append(FormAnswer(question=form_question, value=answer.strip()))
            for response in question.get(u'responses'):
                if len(response) == 0:
                    continue
                responses[form_question.name].append(FormResponse(question=form_question, person=person,
                                                                  value=response.strip()))
        existing_questions = FormQuestion.objects.all()
        for existing_question in existing_questions:
            is_present = False
            for question in questions:
                if question.name  == existing_question.name:
                    is_present = True
            if not is_present:
                existing_question.delete()
        __updateQuestionAnswers__(FormQuestion.objects.all(), answers)
        __updateQuestionResponses__(person, FormQuestion.objects.all(), responses)
    except (Exception, RuntimeError) as e:
        raise e

    response = HttpResponse(status=200)
    response['Access-Control-Allow-Origin'] = '*'
    return response
def signup_request(request):
    try:
        post_json = json.loads(request.POST.get(u'data', []))
        questions_json = post_json['questions']
        referring_url = post_json['referringUrl']

        email = __getFieldValue__(questions_json, u'Email')
        first_name = __getFieldValue__(questions_json, u'First Name')
        last_name = __getFieldValue__(questions_json, u'Last Name')
        if email is None:
            return HttpResponse(status=400)
        exists = Person.objects.filter(user__email__iexact=email).count() > 0
        if exists:
            User.objects.filter(email__iexact=email).update(username=email, email=email, first_name=first_name,
                                                            last_name=last_name)
            user = Person.objects.get(user__email__iexact=email).user
        else:
            user = User.objects.create(username=email, email=email, first_name=first_name, last_name=last_name)
        random_password = User.objects.make_random_password(length=10)
        user.set_password(random_password)
        if not user.groups.filter(name='VOLUNTEER').count() > 0:
            user.groups.add(Group.objects.get(name='VOLUNTEER'))
        user.save()

        person = user.get_profile()
        person.referring_url = referring_url

        answers = dict()
        responses = dict()
        questions = []
        for question in questions_json:
            question_name = question.get(u'label').strip()
            if question_name in ['First Name', 'Last Name', 'Email']:
                continue
            form_question = None
            if question.get(u'inputType') == 'file' and len(question.get(u'responses')) != 0 and question.get(u'responses')[0] != '':
                file_url = question.get(u'responses')[0]
                try:
                    filename = str(file_url).split('/')[-1]
                    new_request = urllib2.Request(settings.SC4G_FILES_URL + filename)
                    new_request.add_header('Authorization', 'Basic %s' % settings.SC4G_BASIC_AUTH_TOKEN)
                    new_response = urllib2.urlopen(new_request)

                    new_file_path = generate_random_file_path(filename)
                    with open(MEDIA_ROOT + '/' + new_file_path, "wb") as file:
                        file.write(new_response.read())
                        file.close()
                    host = mark_safe('%s://%s%s' % (request.is_secure() and 'https' or 'http',
                                                     request.get_host(), MEDIA_URL))
                    question.get(u'responses')[0] = host + new_file_path
                except urllib2.HTTPError as e:
                    if e.code == 404:
                        question[u'responses'] = []

            if FormQuestion.objects.filter(display_name__iexact=question_name).count() > 0:
                FormQuestion.objects.filter(display_name__iexact=question_name) \
                    .update(type=question.get(u'inputType'), required=question.get(u'required'))
                form_question = FormQuestion.objects.get(display_name__iexact=question_name)

            elif FormQuestion.objects.filter(name__iexact=question_name).count() > 0:
                FormQuestion.objects.filter(name__iexact=question_name) \
                    .update(type=question.get(u'inputType'), required=question.get(u'required'),
                            display_name=question_name)
                form_question = FormQuestion.objects.get(display_name__iexact=question_name)

            else:
                form_question = FormQuestion(name=question_name,
                                             display_name=question_name,
                                             type=question.get(u'inputType'),
                                             required=question.get(u'required'))
                form_question.save()
            questions.append(form_question)
            answers[form_question.name] = []
            responses[form_question.name] = []
            for answer in question.get(u'values'):
                answers[form_question.name].append(FormAnswer(question=form_question, value=answer.strip()))
            for response in question.get(u'responses'):
                if len(response) == 0:
                    continue
                responses[form_question.name].append(FormResponse(question=form_question, person=person,
                                                                  value=response.strip()))
        existing_questions = FormQuestion.objects.all()
        for existing_question in existing_questions:
            is_present = False
            for question in questions:
                if question.name  == existing_question.name:
                    is_present = True
            if not is_present:
                existing_question.delete()
        __updateQuestionAnswers__(FormQuestion.objects.all(), answers)
        __updateQuestionResponses__(person, FormQuestion.objects.all(), responses)
    except (Exception, RuntimeError) as e:
        raise e

    send_registration_email(email=email, user=user, hostname=request.get_host(), random_password=random_password)
    response = HttpResponse(status=200)
    response['Access-Control-Allow-Origin'] = '*'
    return response