def publicGet(self, request, context, params, entity, **kwargs): """Handles the GET request for the entity's public page. Args: entity: the student proposal entity rest see base.View.public() """ from soc.logic.models.review_follower import logic as review_follower_logic get_dict = request.GET if get_dict.get('subscription') and ( get_dict['subscription'] in ['on', 'off']): subscription = get_dict['subscription'] # get the current user user_entity = user_logic.logic.getForCurrentAccount() # create the fields that should be in the ReviewFollower entity fields = {'link_id': user_entity.link_id, 'scope': entity, 'scope_path': entity.key().id_or_name(), 'user': user_entity } # get the keyname for the ReviewFollower entity key_name = review_follower_logic.getKeyNameFromFields(fields) # determine if we should set subscribed_public to True or False if subscription == 'on': fields['subscribed_public'] = True elif subscription == 'off': fields['subscribed_public'] = False # update the ReviewFollower review_follower_logic.updateOrCreateFromKeyName(fields, key_name) # get some entity specific context self.updatePublicContext(context, entity, params) context['form'] = params['public_review_form']() template = params['public_template'] return responses.respond(request, template, context=context)
def reviewGet(self, request, context, params, entity, form, org_admin, mentor, **kwargs): """Handles the GET request for the proposal review view. Args: entity: the student proposal entity form: the form to use in this view org_admin: org admin entity for the current user/proposal (iff available) mentor: mentor entity for the current user/proposal (iff available) rest: see base.View.public() """ from soc.logic.models.review_follower import logic as review_follower_logic get_dict = request.GET # check if the current user is a mentor and wants # to change his role for this app choice = get_dict.get('mentor') if mentor and choice: self._adjustPossibleMentors(entity, mentor, choice) ineligible = get_dict.get('ineligible') if org_admin: reviewer = org_admin elif mentor: reviewer = mentor if (org_admin or mentor) and (ineligible != None) and ( entity.status not in ['accepted', 'rejected']): ineligible = int(ineligible) if ineligible == 1: # mark the proposal invalid and return to the list properties = {'status': 'invalid'} self._logic.updateEntityProperties(entity, properties) redirect = redirects.getListProposalsRedirect(entity.org, {'url_name': 'org'}) comment = "Marked Student Proposal as Ineligible." self._createReviewFor(entity, reviewer, comment, is_public=False) return http.HttpResponseRedirect(redirect) elif ineligible == 0: # mark the proposal as new and return to the list properties = {'status': 'new'} self._logic.updateEntityProperties(entity, properties) redirect = redirects.getListProposalsRedirect(entity.org, {'url_name': 'org'}) comment = "Marked Student Proposal as Eligible." self._createReviewFor(entity, reviewer, comment, is_public=False) return http.HttpResponseRedirect(redirect) # check if we should change the subscription state for the current user public_subscription = None private_subscription = None if get_dict.get('public_subscription') and ( get_dict['public_subscription'] in ['on', 'off']): public_subscription = get_dict['public_subscription'] == 'on' if get_dict.get('private_subscription') and ( get_dict['private_subscription'] in ['on', 'off']): private_subscription = get_dict['private_subscription'] == 'on' if public_subscription != None or private_subscription != None: # get the current user user_entity = user_logic.logic.getForCurrentAccount() # create the fields that should be in the ReviewFollower entity fields = {'link_id': user_entity.link_id, 'scope': entity, 'scope_path': entity.key().id_or_name(), 'user': user_entity } # get the keyname for the ReviewFollower entity key_name = review_follower_logic.getKeyNameFromFields(fields) # determine which subscription properties we should change if public_subscription != None: fields['subscribed_public'] = public_subscription if private_subscription != None: fields['subscribed_private'] = private_subscription # update the ReviewFollower review_follower_logic.updateOrCreateFromKeyName(fields, key_name) # set the initial score since the default is ignored initial = {'score': 0} if org_admin and entity.mentor: # set the mentor field to the current mentor initial['mentor'] = entity.mentor.link_id context['form'] = form(initial) # create the special form for mentors comment_public = ['public', 'comment'] comment_private = ['score'] comment_admin = ['rank', 'mentor'] class FilterForm(object): """Helper class used for form filtering. """ def __init__(self, form, fields): self.__form = form self.__fields = fields @property def fields(self): """Property that returns all fields as dictionary.""" fields = self.__form.fields.iteritems() return dict([(k, i) for k, i in fields if k in self.__fields]) def __iter__(self): for field in self.__form: if field.name not in self.__fields: continue yield field _marker = [] def __getattr__(self, key, default=_marker): if default is self._marker: return getattr(self.__form, key) else: return getattr(self.__form, key, default) context['form'] = form(initial) context['comment_public'] = FilterForm(context['form'], comment_public) context['comment_private'] = FilterForm(context['form'], comment_private) context['comment_admin'] = FilterForm(context['form'], comment_admin) # get all the extra information that should be in the context review_context = self._getDefaultReviewContext(entity, org_admin, mentor) context = dicts.merge(context, review_context) template = params['review_template'] return responses.respond(request, template, context=context)