def _process(self): defaults = FormDefaults( content_review_questions=self.event.cfp.content_review_questions, layout_review_questions=self.event.cfp.layout_review_questions, **paper_reviewing_settings.get_all(self.event)) form = PaperReviewingSettingsForm(event=self.event, obj=defaults) if form.validate_on_submit(): data = form.data content_review_questions = data.pop('content_review_questions', None) layout_review_questions = data.pop('layout_review_questions', None) if content_review_questions is None: content_review_questions = self.event.cfp.content_review_questions if layout_review_questions is None: layout_review_questions = self.event.cfp.layout_review_questions self.event.paper_review_questions = content_review_questions + layout_review_questions email_settings = data.pop('email_settings') data.update(email_settings) paper_reviewing_settings.set_multi(self.event, data) flash(_("The reviewing settings were saved successfully"), 'success') logger.info("Paper reviewing settings of %r updated by %r", self.event, session.user) return jsonify_data() self.commit = False return jsonify_form(form)
def _process(self): has_ratings = (PaperReviewRating.query.join( PaperReviewRating.review).join(PaperReview.revision).join( PaperRevision._contribution).join( PaperReviewRating.question).filter( ~Contribution.is_deleted, Contribution.event == self.event, PaperReviewQuestion.field_type == 'rating').has_rows()) defaults = FormDefaults( content_review_questions=self.event.cfp.content_review_questions, layout_review_questions=self.event.cfp.layout_review_questions, **paper_reviewing_settings.get_all(self.event)) form = PaperReviewingSettingsForm(event=self.event, obj=defaults, has_ratings=has_ratings) if form.validate_on_submit(): data = form.data data.update(data.pop('email_settings')) paper_reviewing_settings.set_multi(self.event, data) flash(_("The reviewing settings were saved successfully"), 'success') logger.info("Paper reviewing settings of %r updated by %r", self.event, session.user) return jsonify_data() self.commit = False disabled_fields = form.RATING_FIELDS if has_ratings else () return jsonify_form(form, disabled_fields=disabled_fields)
def set_deadline(event, role, deadline, enforce=True): paper_reviewing_settings.set_multi(event, { '{}_deadline'.format(role.name): deadline, 'enforce_{}_deadline'.format(role.name): enforce }) log_data = {'Enforced': enforce, 'Deadline': deadline.isoformat() if deadline else 'None'} logger.info('Paper reviewing deadline (%s) set in %r by %r', role.name, event, session.user) event.log(EventLogRealm.reviewing, EventLogKind.change, 'Papers', "Paper reviewing deadline ({}) set".format(role.title), session.user, data=log_data)
def set_deadline(event, role, deadline, enforce=True): paper_reviewing_settings.set_multi(event, { f'{role.name}_deadline': deadline, f'enforce_{role.name}_deadline': enforce }) log_data = {'Enforced': enforce, 'Deadline': deadline.isoformat() if deadline else 'None'} logger.info('Paper reviewing deadline (%s) set in %r by %r', role.name, event, session.user) event.log(EventLogRealm.reviewing, EventLogKind.change, 'Papers', f"Paper reviewing deadline ({role.title}) set", session.user, data=log_data)
def _process(self): defaults = FormDefaults(content_review_questions=self.event.cfp.content_review_questions, layout_review_questions=self.event.cfp.layout_review_questions, **paper_reviewing_settings.get_all(self.event)) form = PaperReviewingSettingsForm(event=self.event, obj=defaults, has_ratings=self.ratings_query.has_rows()) if form.validate_on_submit(): data = form.data data.update(data.pop('email_settings')) self._scale_ratings(data['scale_lower'], data['scale_upper']) paper_reviewing_settings.set_multi(self.event, data) flash(_('The reviewing settings were saved successfully'), 'success') logger.info('Paper reviewing settings of %r updated by %r', self.event, session.user) return jsonify_data() self.commit = False return jsonify_form(form)
def _scale_ratings(self, scale_min, scale_max): prev_min = paper_reviewing_settings.get(self.event, 'scale_lower') prev_max = paper_reviewing_settings.get(self.event, 'scale_upper') if scale_min == prev_min and scale_max == prev_max: return assert scale_max > scale_min paper_reviewing_settings.set_multi(self.event, { 'scale_lower': scale_min, 'scale_upper': scale_max, }) for rating in self.ratings_query: if rating.value is None: continue value = (rating.value - prev_min) / (prev_max - prev_min) rating.value = round(value * (scale_max - scale_min) + scale_min)
def _process(self): has_ratings = (PaperReviewRating.query .join(PaperReviewRating.review) .join(PaperReview.revision) .join(PaperRevision._contribution) .join(PaperReviewRating.question) .filter(~Contribution.is_deleted, Contribution.event == self.event, PaperReviewQuestion.field_type == 'rating') .has_rows()) defaults = FormDefaults(content_review_questions=self.event.cfp.content_review_questions, layout_review_questions=self.event.cfp.layout_review_questions, **paper_reviewing_settings.get_all(self.event)) form = PaperReviewingSettingsForm(event=self.event, obj=defaults, has_ratings=has_ratings) if form.validate_on_submit(): data = form.data data.update(data.pop('email_settings')) paper_reviewing_settings.set_multi(self.event, data) flash(_("The reviewing settings were saved successfully"), 'success') logger.info("Paper reviewing settings of %r updated by %r", self.event, session.user) return jsonify_data() self.commit = False disabled_fields = form.RATING_FIELDS if has_ratings else () return jsonify_form(form, disabled_fields=disabled_fields)
def _process(self): defaults = FormDefaults(content_review_questions=self.event.cfp.content_review_questions, layout_review_questions=self.event.cfp.layout_review_questions, **paper_reviewing_settings.get_all(self.event)) form = PaperReviewingSettingsForm(event=self.event, obj=defaults) if form.validate_on_submit(): data = form.data content_review_questions = data.pop('content_review_questions', None) layout_review_questions = data.pop('layout_review_questions', None) if content_review_questions is None: content_review_questions = self.event.cfp.content_review_questions if layout_review_questions is None: layout_review_questions = self.event.cfp.layout_review_questions self.event.paper_review_questions = content_review_questions + layout_review_questions email_settings = data.pop('email_settings') data.update(email_settings) paper_reviewing_settings.set_multi(self.event, data) flash(_("The reviewing settings were saved successfully"), 'success') logger.info("Paper reviewing settings of %r updated by %r", self.event, session.user) return jsonify_data() self.commit = False return jsonify_form(form)
def schedule(self, start_dt, end_dt): paper_reviewing_settings.set_multi(self.event, { 'start_dt': start_dt, 'end_dt': end_dt })
def _migrate_settings(self): pr = self.pr role_add = _translate_notif_options( pr, { 'layout_reviewer': ('_enableEditorEmailNotif', False), 'content_reviewer': ('_enableReviewerEmailNotif', False), 'judge': ('_enableRefereeEmailNotif', False) }) contrib_assignment = _translate_notif_options( pr, { 'layout_reviewer': ('_enableEditorEmailNotifForContribution', False), 'content_reviewer': ('_enableReviewerEmailNotifForContribution', False), 'judge': ('_enableRefereeEmailNotifForContribution', False) }) paper_submission = _translate_notif_options( pr, { 'layout_reviewer': ('_enableAuthorSubmittedMatEditorEmailNotif', True), 'content_reviewer': ('_enableAuthorSubmittedMatReviewerEmailNotif', True), 'judge': ('_enableAuthorSubmittedMatRefereeEmailNotif', False) }) paper_reviewing_settings.set_multi( self.event, { 'start_dt': _to_utc(pr._startSubmissionDate), 'end_dt': _to_utc(pr._endSubmissionDate), 'judge_deadline': _to_utc(pr._defaultRefereeDueDate), 'content_reviewer_deadline': _to_utc(pr._defaultReviwerDueDate), 'layout_reviewer_deadline': _to_utc(pr._defaultEditorDueDate), 'enforce_judge_deadline': False, 'enforce_layout_reviewer_deadline': False, 'enforce_content_reviewer_deadline': False, 'content_reviewing_enabled': pr._choice in {CPR_CONTENT_REVIEWING, CPR_CONTENT_AND_LAYOUT_REVIEWING}, 'layout_reviewing_enabled': pr._choice in {CPR_LAYOUT_REVIEWING, CPR_CONTENT_AND_LAYOUT_REVIEWING}, 'scale_lower': -3, 'scale_upper': 3, # notifications 'notify_on_added_to_event': role_add, 'notify_on_assigned_contrib': contrib_assignment, 'notify_on_paper_submission': paper_submission, 'notify_judge_on_review': (getattr(pr, '_enableEditorSubmittedRefereeEmailNotif', True) or getattr(pr, '_enableReviewerSubmittedRefereeEmailNotif', True)), 'notify_author_on_judgment': (pr._enableRefereeJudgementEmailNotif or pr._enableEditorJudgementEmailNotif or pr._enableReviewerJudgementEmailNotif) })
def schedule(self, start_dt, end_dt): paper_reviewing_settings.set_multi(self.event, { 'start_dt': start_dt, 'end_dt': end_dt })