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