def submit_answer(request): form = AnswerForm(request.POST, instance=Answer(user=request.user)) if not form.is_valid(): return ajax_response(False, extract_all_errors(form)) answer = form.save() action_factory.question_answer(answer) return ajax_response(True, html=render_to_string('main/answer.html', {'answer':answer}, RequestContext(request)))
def submit_question(request): form = QuestionForm(request.POST, instance=Question(user=request.user)) if not form.is_valid(): return ajax_response(False, extract_all_errors(form)) question = form.save() action_factory.question_ask(question) return ajax_response(True, html=render_to_string('main/question.html', {'question':question}, RequestContext(request)))
def change_password(request): 'Change the password of the given user.' user = request.user # reuse d.c.auth's form for validation. form = PasswordChangeForm(user, request.POST) if form.is_valid(): form.save(); # notify. action_factory.user_change_password(user) return JsonResponse({'success':True, 'message':'Successfully changed password.'}) return JsonResponse({'success':False, 'errors':extract_all_errors(form, True, PASSWORD_FIELD_TO_LABEL)})
def get_rankings(request): # returns the list of UWPostings. parameters = get_rankings_Parameters(request.GET) if parameters.is_valid(): employer_id, sort_by, search_term, order = extract_cd(parameters, 'employer_id', 'sort_by', 'search_term', 'order') qs = UserPostings.objects.get_filtered_queryset( Employer(id=employer_id), sort_by, search_term) if order == 'desc': qs = qs.reverse() average = employer_ranking_average(average_rankings(qs)) result = [employer_ranking_row(x) for x in process_rankings(qs)] return JsonResponse(dict(success=True, result=result, average=average, filter_message=parameters.human_readable_query, )) else: return JsonResponse(dict(success=False, errors=extract_all_errors(parameters)))
def get_uwpostings(request): # returns the list of UWPostings. # get_uwpostings and get_rankings are too familiar... we can maybe refactor them out. parameters = get_uwpostings_Parameters(request.GET) if parameters.is_valid(): employer_id, page_number, sort_by, search_term, order = extract_cd(parameters, 'employer_id', 'page_number', 'sort_by', 'search_term', 'order') qs = UWPostings.objects.get_uwpostings_queryset(Employer(id=employer_id), sort_by, search_term, order) paginator = Paginator(qs, UWPOSTINGS_PAGE_SIZE) uw_postings = paginator.page(page_number) # render. result = [uw_posting_row(x) for x in uw_postings.object_list] return JsonResponse(dict(success=True, result=result, uw_postings_count=paginator.count, filter_message=parameters.human_readable_query, paging=render_to_string('main/employer_paging_control.html', dict(uw_postings=uw_postings)) )) else: return JsonResponse(dict(success=False, errors=extract_all_errors(parameters)))
def submit_iworkedhere(request): user = request.user form_classes = [ EmployerRankingBasic, EmployerRankingNumeric, EmployerRankingComments, EmployerRankingSettings] # f**k... i don't know how to handle this correctly posting_id = request.REQUEST.get('posting_id', None) if posting_id: postings = UserPostings.objects.get(id=posting_id) else: postings = UserPostings() def inst_form(Class): if isinstance(Class, ModelFormMetaclass): return Class(request.POST, instance=postings) else: return Class(request.POST) # dictionary of form class -> instance. forms = dict((Class, inst_form(Class)) for Class in form_classes) # ern = forms[EmployerRankingNumeric] # import ipdb;ipdb.set_trace() if all(x.is_valid() for x in forms.values()): # the form is all valid, perform the submit. try: _submit_iworkedhere(forms, postings, user) except Exception: logger.critical("Unknown error while submitting form.", exc_info=True) return JsonResponse(dict(success=False, errors=[['Server error.', 'Unknown error. Please try again later.']])) return JsonResponse(dict(success=True)) else: list_of_errors = map(lambda x: extract_all_errors(x, True), forms.values()) errors = list(chain(*list_of_errors)) return JsonResponse(dict(success=False, errors=errors))