app/soc/views/models/survey.py
changeset 2497 996f381d458c
parent 2493 0aabd2d76606
child 2501 d612b48e6e12
equal deleted inserted replaced
2496:03ada4736635 2497:996f381d458c
   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