コード例 #1
0
 def _value(self):
     return {
         'notify_on_added_to_event': [x.name for x in settings.get(self.event, 'notify_on_added_to_event')],
         'notify_on_assigned_contrib': [x.name for x in settings.get(self.event, 'notify_on_assigned_contrib')],
         'notify_on_paper_submission': [x.name for x in settings.get(self.event, 'notify_on_paper_submission')],
         'notify_judge_on_review': settings.get(self.event, 'notify_judge_on_review'),
         'notify_author_on_judgment': settings.get(self.event, 'notify_author_on_judgment')
     }
コード例 #2
0
def update_team_members(event, managers, judges, content_reviewers=None, layout_reviewers=None):
    updated = {}
    update_object_principals(event, managers, role='paper_manager')
    updated[PaperReviewingRole.judge] = update_object_principals(event, judges, role='paper_judge')
    if content_reviewers is not None:
        updated[PaperReviewingRole.content_reviewer] = update_object_principals(event, content_reviewers,
                                                                                role='paper_content_reviewer')
    if layout_reviewers is not None:
        updated[PaperReviewingRole.layout_reviewer] = update_object_principals(event, layout_reviewers,
                                                                               role='paper_layout_reviewer')
    unassigned_contribs = _unassign_removed(event, updated)
    roles_to_notify = paper_reviewing_settings.get(event, 'notify_on_added_to_event')
    if PaperReviewingRole.judge in roles_to_notify:
        for judge in updated[PaperReviewingRole.judge]['added']:
            notify_added_to_reviewing_team(judge, PaperReviewingRole.judge, event)
        for judge in updated[PaperReviewingRole.judge]['removed']:
            notify_removed_from_reviewing_team(judge, PaperReviewingRole.judge, event)
    if PaperReviewingRole.content_reviewer in roles_to_notify:
        for reviewer in updated[PaperReviewingRole.content_reviewer]['added']:
            notify_added_to_reviewing_team(reviewer, PaperReviewingRole.content_reviewer, event)
        for reviewer in updated[PaperReviewingRole.content_reviewer]['removed']:
            notify_removed_from_reviewing_team(reviewer, PaperReviewingRole.content_reviewer, event)
    if PaperReviewingRole.layout_reviewer in roles_to_notify:
        for reviewer in updated[PaperReviewingRole.layout_reviewer]['added']:
            notify_added_to_reviewing_team(reviewer, PaperReviewingRole.layout_reviewer, event)
        for reviewer in updated[PaperReviewingRole.layout_reviewer]['removed']:
            notify_removed_from_reviewing_team(reviewer, PaperReviewingRole.layout_reviewer, event)
    logger.info("Paper teams of %r updated by %r", event, session.user)
    return unassigned_contribs
コード例 #3
0
def update_reviewing_roles(event, users, contributions, role, assign):
    role_map = {
        PaperReviewingRole.judge: attrgetter('paper_judges'),
        PaperReviewingRole.content_reviewer: attrgetter('paper_content_reviewers'),
        PaperReviewingRole.layout_reviewer: attrgetter('paper_layout_reviewers'),
    }

    for contrib in contributions:
        role_group = role_map[role](contrib)
        for user in users:
            if assign:
                role_group.add(user)
            else:
                role_group.discard(user)

    contrib_ids = ['#{}'.format(c.friendly_id) for c in sorted(contributions, key=attrgetter('friendly_id'))]
    log_data = {'Users': ', '.join(sorted(person.full_name for person in users)),
                'Contributions': ', '.join(contrib_ids)}
    roles_to_notify = paper_reviewing_settings.get(event, 'notify_on_assigned_contrib')
    if role in roles_to_notify:
        for user in users:
            notify_paper_assignment(user, role, contributions, event, assign)
    if assign:
        event.log(EventLogRealm.management, EventLogKind.positive, 'Papers',
                  'Papers assigned ({})'.format(orig_string(role.title)), session.user, data=log_data)
    else:
        event.log(EventLogRealm.management, EventLogKind.negative, 'Papers',
                  'Papers unassigned ({})'.format(orig_string(role.title)), session.user, data=log_data)
    db.session.flush()
    logger.info('Paper reviewing roles in event %r updated by %r', event, session.user)
コード例 #4
0
 def _process(self):
     role = PaperReviewingRole[request.view_args['role']]
     deadline = paper_reviewing_settings.get(
         self.event, '{}_deadline'.format(role.name))
     enforce = paper_reviewing_settings.get(
         self.event, 'enforce_{}_deadline'.format(role.name))
     form = DeadlineForm(obj=FormDefaults(deadline=deadline,
                                          enforce=enforce),
                         event=self.event)
     if form.validate_on_submit():
         set_deadline(self.event, role, form.deadline.data,
                      form.enforce.data)
         messages = {
             PaperReviewingRole.content_reviewer:
             _('Content reviewing deadline has been set.'),
             PaperReviewingRole.layout_reviewer:
             _('Layout reviewing deadline has been set.'),
             PaperReviewingRole.judge:
             _('Judging deadline has been set.')
         }
         flash(messages[role], 'success')
         return jsonify_data(html=_render_paper_dashboard(self.event))
     return jsonify_form(form)
コード例 #5
0
 def rating_range(self):
     return tuple(paper_reviewing_settings.get(self.event, key) for key in ('scale_lower', 'scale_upper'))
コード例 #6
0
 def announcement(self):
     return MarkdownText(paper_reviewing_settings.get(self.event, 'announcement'))