# HG changeset patch # User Lennard de Rijk # Date 1246713414 -7200 # Node ID 0b4dbe4b3fb7a21744bd7f92b25bb4bd083fb7ed # Parent 855ee76c16a2bb613316c94c54cf3555e8ca4c96 Fixed showing the correct list of projects for taking a Grading Project Survey. Note that when a user is a mentor for a lot of Organizations the amount of subqueries might exceed the allowed amount. A TODO has been added to fix this issue. However this will hopefully not be a problem that pops up soon. Also some minor docstring addition to Project Survey view. diff -r 855ee76c16a2 -r 0b4dbe4b3fb7 app/soc/views/models/grading_project_survey.py --- a/app/soc/views/models/grading_project_survey.py Sat Jul 04 15:08:28 2009 +0200 +++ b/app/soc/views/models/grading_project_survey.py Sat Jul 04 15:16:54 2009 +0200 @@ -29,6 +29,7 @@ from soc.logic import dicts from soc.logic.models.survey import GRADES from soc.logic.models.survey import grading_logic as grading_survey_logic +from soc.logic.models.user import logic as user_logic from soc.views.helper import access from soc.views.helper import decorators from soc.views.helper import surveys @@ -102,6 +103,37 @@ return survey_form + def _constructFilterForProjectSelection(self, survey, params): + """Returns the filter needed for the Project selection view. + + Constructs a filter that returns all valid projects for which the current + user is the mentor. Only for the projects in the program given by the + survey's scope of course. + + For args see project_survey.View._constructFilterForProjectSelection(). + """ + + from soc.logic.models.mentor import logic as mentor_logic + + survey_logic = params['logic'] + + user_entity = user_logic.getForCurrentAccount() + + # get the mentor entities for the current user and program + fields = {'user': user_entity, + 'program': survey_logic.getScope(survey), + 'status': 'active'} + + mentor_entities = mentor_logic.getForFields(fields) + + # TODO: Ensure that this doesn't break when someone is a mentor for + # a lot of organizations. + + # TODO(ljvderijk) transform StudentProject to handle multiple surveys + fields = {'mentor': mentor_entities, + 'status': 'accepted'} + + return fields class GradeSurveyTakeForm(surveys.SurveyTakeForm): """Extends SurveyTakeForm by adding a grade field. diff -r 855ee76c16a2 -r 0b4dbe4b3fb7 app/soc/views/models/project_survey.py --- a/app/soc/views/models/project_survey.py Sat Jul 04 15:08:28 2009 +0200 +++ b/app/soc/views/models/project_survey.py Sat Jul 04 15:16:54 2009 +0200 @@ -151,6 +151,9 @@ def _constructFilterForProjectSelection(self, survey, params): """Returns the filter needed for the Project selection view. + Returns a filter for all the valid projects for which the current user + is a student. Of course only in the survey's scope. + Args: survey: a Survey entity params: the params dict for the requesting view