app/soc/views/models/survey.py
changeset 2474 b8e25769880d
parent 2473 5cf0625dfa73
child 2475 dfb9249d91b6
equal deleted inserted replaced
2473:5cf0625dfa73 2474:b8e25769880d
   485       # are we already passed the survey_end?
   485       # are we already passed the survey_end?
   486       context["passed_survey_end"] = True
   486       context["passed_survey_end"] = True
   487 
   487 
   488     return super(View, self).editGet(request, entity, context, params=params)
   488     return super(View, self).editGet(request, entity, context, params=params)
   489 
   489 
   490   def getMenusForScope(self, entity, params):
       
   491     """List featured surveys if after the survey_start date and before survey_end.
       
   492     """
       
   493 
       
   494     # only list surveys for registered users
       
   495     user = user_logic.getForCurrentAccount()
       
   496     if not user:
       
   497       return []
       
   498 
       
   499     filter = {
       
   500         'prefix' : params['url_name'],
       
   501         'scope_path': entity.key().id_or_name(),
       
   502         'is_featured': True,
       
   503         }
       
   504 
       
   505     entities = self._logic.getForFields(filter)
       
   506     submenus = []
       
   507     now = datetime.datetime.now()
       
   508 
       
   509     # cache ACL
       
   510     survey_rights = {}
       
   511 
       
   512     # add a link to all featured documents
       
   513     for entity in entities:
       
   514 
       
   515       # only list those surveys the user can read
       
   516       if entity.read_access not in survey_rights:
       
   517 
       
   518         params = dict(prefix=entity.prefix, scope_path=entity.scope_path,
       
   519                       link_id=entity.link_id, user=user)
       
   520 
       
   521         # TODO(ajaksu) use access.Checker.checkIsSurveyReadable
       
   522         checker = access.rights_logic.Checker(entity.prefix)
       
   523         roles = checker.getMembership(entity.read_access)
       
   524         rights = self._params['rights']
       
   525         can_read = access.Checker.hasMembership(rights, roles, params)
       
   526 
       
   527         # cache ACL for a given entity.read_access
       
   528         survey_rights[entity.read_access] = can_read
       
   529 
       
   530         if not can_read:
       
   531           pass#continue
       
   532 
       
   533       elif not survey_rights[entity.read_access]:
       
   534         pass#continue
       
   535 
       
   536       # omit if either before survey_start or after survey_end
       
   537       if entity.survey_start and entity.survey_start > now:
       
   538         pass#continue
       
   539 
       
   540       if entity.survey_end and entity.survey_end < now:
       
   541         pass#continue
       
   542 
       
   543       taken_status = ""
       
   544       taken_status = "(new)"
       
   545       #TODO only if a document is readable it might be added
       
   546       submenu = (redirects.getPublicRedirect(entity, self._params),
       
   547       'Survey ' +  taken_status + ': ' + entity.short_name,
       
   548       'show')
       
   549 
       
   550       submenus.append(submenu)
       
   551     return submenus
       
   552 
       
   553   def activate(self, request, **kwargs):
   490   def activate(self, request, **kwargs):
   554     """This is a hack to support the 'Enable grades' button.
   491     """This is a hack to support the 'Enable grades' button.
   555     """
   492     """
   556     self.activateGrades(request)
   493     self.activateGrades(request)
   557     redirect_path = request.path.replace('/activate/', '/edit/') + '?activate=1'
   494     redirect_path = request.path.replace('/activate/', '/edit/') + '?activate=1'
   558     return http.HttpResponseRedirect(redirect_path)
   495     return http.HttpResponseRedirect(redirect_path)
   559 
       
   560 
   496 
   561   def activateGrades(self, request, **kwargs):
   497   def activateGrades(self, request, **kwargs):
   562     """Updates SurveyRecord's grades for a given Survey.
   498     """Updates SurveyRecord's grades for a given Survey.
   563     """
   499     """
   564     survey_key_name = survey_logic.getKeyNameFromPath(request.path)
   500     survey_key_name = survey_logic.getKeyNameFromPath(request.path)
   691           error, request, template=params['error_public'], context=context)
   627           error, request, template=params['error_public'], context=context)
   692       return error, None
   628       return error, None
   693 
   629 
   694     return entity, context
   630     return entity, context
   695 
   631 
       
   632   def getMenusForScope(self, entity, params):
       
   633     """List featured surveys if after the survey_start date and before survey_end.
       
   634     """
       
   635 
       
   636     # only list surveys for registered users
       
   637     user = user_logic.getForCurrentAccount()
       
   638     if not user:
       
   639       return []
       
   640 
       
   641     filter = {
       
   642         'prefix' : params['url_name'],
       
   643         'scope_path': entity.key().id_or_name(),
       
   644         'is_featured': True,
       
   645         }
       
   646 
       
   647     entities = self._logic.getForFields(filter)
       
   648     submenus = []
       
   649     now = datetime.datetime.now()
       
   650 
       
   651     # cache ACL
       
   652     survey_rights = {}
       
   653 
       
   654     # add a link to all featured documents
       
   655     for entity in entities:
       
   656 
       
   657       # only list those surveys the user can read
       
   658       if entity.read_access not in survey_rights:
       
   659 
       
   660         params = dict(prefix=entity.prefix, scope_path=entity.scope_path,
       
   661                       link_id=entity.link_id, user=user)
       
   662 
       
   663         # TODO(ajaksu) use access.Checker.checkIsSurveyReadable
       
   664         checker = access.rights_logic.Checker(entity.prefix)
       
   665         roles = checker.getMembership(entity.read_access)
       
   666         rights = self._params['rights']
       
   667         can_read = access.Checker.hasMembership(rights, roles, params)
       
   668 
       
   669         # cache ACL for a given entity.read_access
       
   670         survey_rights[entity.read_access] = can_read
       
   671 
       
   672         if not can_read:
       
   673           pass#continue
       
   674 
       
   675       elif not survey_rights[entity.read_access]:
       
   676         pass#continue
       
   677 
       
   678       # omit if either before survey_start or after survey_end
       
   679       if entity.survey_start and entity.survey_start > now:
       
   680         pass#continue
       
   681 
       
   682       if entity.survey_end and entity.survey_end < now:
       
   683         pass#continue
       
   684 
       
   685       taken_status = ""
       
   686       taken_status = "(new)"
       
   687       #TODO only if a document is readable it might be added
       
   688       submenu = (redirects.getPublicRedirect(entity, self._params),
       
   689       'Survey ' +  taken_status + ': ' + entity.short_name,
       
   690       'show')
       
   691 
       
   692       submenus.append(submenu)
       
   693     return submenus
       
   694 
   696 class HelperForm(object):
   695 class HelperForm(object):
   697   """Thin wrapper for adding values to params['edit_form'].fields.
   696   """Thin wrapper for adding values to params['edit_form'].fields.
   698   """
   697   """
   699 
   698 
   700   def __init__(self, form=None):
   699   def __init__(self, form=None):