472 |
472 |
473 For Args see base.View().public(). |
473 For Args see base.View().public(). |
474 """ |
474 """ |
475 |
475 |
476 survey_logic = params['logic'] |
476 survey_logic = params['logic'] |
477 record_logic = survey_logic.getRecordLogic() |
|
478 |
477 |
479 try: |
478 try: |
480 entity = self._logic.getFromKeyFieldsOr404(kwargs) |
479 entity = survey_logic.getFromKeyFieldsOr404(kwargs) |
481 except out_of_band.Error, error: |
480 except out_of_band.Error, error: |
482 return responses.errorResponse( |
481 return responses.errorResponse( |
483 error, request, template=params['error_public']) |
482 error, request, template=params['error_public']) |
484 |
483 |
485 template = params['take_template'] |
484 template = params['take_template'] |
488 context = responses.getUniversalContext(request) |
487 context = responses.getUniversalContext(request) |
489 responses.useJavaScript(context, params['js_uses_all']) |
488 responses.useJavaScript(context, params['js_uses_all']) |
490 context['page_name'] = "%s titled '%s'" % (page_name, entity.title) |
489 context['page_name'] = "%s titled '%s'" % (page_name, entity.title) |
491 context['entity'] = entity |
490 context['entity'] = entity |
492 |
491 |
493 user_entity = user_logic.getForCurrentAccount() |
|
494 |
|
495 # try to get an existing SurveyRecord for the current user |
492 # try to get an existing SurveyRecord for the current user |
496 filter = {'survey': entity, |
493 survey_record = self._getSurveyRecordFor(entity, request, params) |
497 'user': user_entity} |
|
498 |
|
499 survey_record = record_logic.getForFields(filter, unique=True) |
|
500 |
494 |
501 if request.POST: |
495 if request.POST: |
502 return self.takePost(request, template, context, params, entity, |
496 return self.takePost(request, template, context, params, entity, |
503 survey_record, **kwargs) |
497 survey_record, **kwargs) |
504 else: #request.GET |
498 else: #request.GET |
505 return self.takeGet(request, template, context, params, entity, |
499 return self.takeGet(request, template, context, params, entity, |
506 survey_record, **kwargs) |
500 survey_record, **kwargs) |
|
501 |
|
502 def _getSurveyRecordFor(self, survey, request, params): |
|
503 """Returns the SurveyRecord for the given Survey and request. |
|
504 |
|
505 Args: |
|
506 survey: a Survey entity |
|
507 request: a Django HTTPRequest object |
|
508 params: params for the requesting view |
|
509 |
|
510 Returns: |
|
511 An existing SurveyRecord iff any exists for the given Survey, request |
|
512 and any other conditions that must apply. |
|
513 """ |
|
514 |
|
515 survey_logic = params['logic'] |
|
516 record_logic = survey_logic.getRecordLogic() |
|
517 |
|
518 user_entity = user_logic.getForCurrentAccount() |
|
519 |
|
520 filter = {'survey': survey, |
|
521 'user': user_entity} |
|
522 |
|
523 return record_logic.getForFields(filter, unique=True) |
507 |
524 |
508 def takeGet(self, request, template, context, params, entity, record, |
525 def takeGet(self, request, template, context, params, entity, record, |
509 **kwargs): |
526 **kwargs): |
510 """Handles the GET request for the Survey's take page. |
527 """Handles the GET request for the Survey's take page. |
511 |
528 |