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): |