Exemplo n.º 1
0
 def __call__(self, form, field):
     if field.data is None:
         return
     field_dt = as_utc(field.data)
     earliest_dt = self.get_earliest(form, field)
     latest_dt = self.get_latest(form, field)
     if field_dt != field.object_data:
         if earliest_dt and field_dt < earliest_dt:
             if self.earliest_now:
                 msg = _("'{}' can't be in the past ({})").format(
                     field.label, field.timezone)
             else:
                 dt = format_datetime(earliest_dt, timezone=field.timezone)
                 msg = _("'{}' can't be before {} ({})").format(
                     field.label, dt, field.timezone)
             raise ValidationError(msg)
         if latest_dt and field_dt > latest_dt:
             if self.latest_now:
                 msg = _("'{}' can't be in the future ({})").format(
                     field.label, field.timezone)
             else:
                 dt = format_datetime(latest_dt, timezone=field.timezone)
                 msg = _("'{}' can't be after {} ({})").format(
                     field.label, dt, field.timezone)
             raise ValidationError(msg)
Exemplo n.º 2
0
 def render(cls, event):
     start_dt, end_dt = get_access_dates(get_last_request(event))
     if start_dt.date() == end_dt.date():
         return format_datetime(start_dt, format='d MMM YYY', locale='en_GB')
     else:
         return '{} - {}'.format(format_datetime(start_dt, format='d MMM YYY', locale='en_GB'),
                                 format_datetime(end_dt, format='d MMM YYY', locale='en_GB'))
Exemplo n.º 3
0
def formatDateTime(dateTime, showWeek=False, format=None, locale=None, server_tz=False):
    week = "EEEE" if showWeek else ""

    if not format:
        return format_datetime(dateTime, week+'d/M/yyyy H:mm', locale=locale, server_tz=server_tz)
    else:
        return format_datetime(dateTime, format, locale=locale, server_tz=server_tz)
Exemplo n.º 4
0
 def __call__(self, form, field):
     if field.data is None:
         return
     field_dt = as_utc(field.data)
     earliest_dt = self.get_earliest(form, field)
     latest_dt = self.get_latest(form, field)
     if field_dt != field.object_data:
         if earliest_dt and field_dt < earliest_dt:
             if self.earliest_now:
                 msg = _("'{}' can't be in the past ({})").format(
                     field.label, field.timezone)
             else:
                 dt = format_datetime(earliest_dt, timezone=field.timezone)
                 msg = _("'{}' can't be before {} ({})").format(
                     field.label, dt, field.timezone)
             raise ValidationError(msg)
         if latest_dt and field_dt > latest_dt:
             if self.latest_now:
                 msg = _("'{}' can't be in the future ({})").format(
                     field.label, field.timezone)
             else:
                 dt = format_datetime(latest_dt, timezone=field.timezone)
                 msg = _("'{}' can't be after {} ({})").format(
                     field.label, dt, field.timezone)
             raise ValidationError(msg)
Exemplo n.º 5
0
def formatDateTime(dateTime, showWeek=False, format=None, locale=None, server_tz=False):
    week = "EEEE" if showWeek else ""

    if not format:
        return format_datetime(dateTime, week+'d/M/yyyy H:mm', locale=locale, server_tz=server_tz)
    else:
        return format_datetime(dateTime, format, locale=locale, server_tz=server_tz)
Exemplo n.º 6
0
class IRegFormRegistrantBasicFossil(IFossil):
    def getId(self):
        """
        Registrarant id
        """

    getId.name = "registrant_id"

    def getFullName(self):
        """
        Registrarant fullname
        """

    getFullName.name = "full_name"
    getFullName.produce = lambda x: x.getFullName(title=True,
                                                  firstNameFirst=True)

    def getAdjustedRegistrationDate(self):
        """
        If the user payed
        """

    getAdjustedRegistrationDate.name = "registration_date"
    getAdjustedRegistrationDate.produce = lambda x: format_datetime(
        x.getAdjustedRegistrationDate(), format="short")

    def getPayed(self):
        """
        If the user payed
        """

    getPayed.name = "paid"
    getPayed.produce = lambda x: x.getPayed() if x.getConference().getModPay(
    ).isActivated() else None

    def getTotal(self):
        """
        Total amount payed
        """

    getTotal.name = "amount_paid"
    getTotal.produce = lambda x: x.getTotal() if x.getConference().getModPay(
    ).isActivated() else None

    def isCheckedIn(self):
        """
        Registrarant fullname
        """

    isCheckedIn.name = "checked_in"

    def getAdjustedCheckInDate(self):
        """
        If the user payed
        """

    getAdjustedCheckInDate.name = "checkin_date"
    getAdjustedCheckInDate.produce = lambda x: format_datetime(
        x.getAdjustedCheckInDate(), format="short") if x.isCheckedIn(
        ) else None
Exemplo n.º 7
0
Arquivo: utils.py Projeto: Ictp/indico
def formatDateTime(dateTime, showWeek=False, format=None, locale=None):
    week = "EEEE" if showWeek else ""

    if not format:
        return format_datetime(dateTime, week+'d/M/yyyy H:mm', locale=locale).encode('utf-8')
    else:
        return format_datetime(dateTime, format, locale=locale).encode('utf-8')
Exemplo n.º 8
0
 def render(cls, event):
     start_dt, end_dt = get_access_dates(get_last_request(event))
     if start_dt.date() == end_dt.date():
         return to_unicode(format_datetime(start_dt, format='d MMM YYY', locale='en_GB'))
     else:
         return "{} - {}".format(to_unicode(format_datetime(start_dt, format='d MMM YYY', locale='en_GB')),
                                 to_unicode(format_datetime(end_dt, format='d MMM YYY', locale='en_GB')))
Exemplo n.º 9
0
def generate_spreadsheet_from_abstracts(abstracts, static_item_ids,
                                        dynamic_items):
    """Generates a spreadsheet data from a given abstract list.

    :param abstracts: The list of abstracts to include in the file
    :param static_item_ids: The abstract properties to be used as columns
    :param dynamic_items: Contribution fields as extra columns
    """
    field_names = ['Id', 'Title']
    static_item_mapping = OrderedDict([
        ('state', ('State', lambda x: x.state.title)),
        ('submitter', ('Submitter', lambda x: x.submitter.full_name)),
        ('authors', ('Primary authors',
                     lambda x: [a.full_name for a in x.primary_authors])),
        ('accepted_track', ('Accepted track',
                            lambda x: x.accepted_track.short_title
                            if x.accepted_track else None)),
        ('submitted_for_tracks',
         ('Submitted for tracks',
          lambda x: [t.short_title for t in x.submitted_for_tracks])),
        ('reviewed_for_tracks',
         ('Reviewed for tracks',
          lambda x: [t.short_title for t in x.reviewed_for_tracks])),
        ('accepted_contrib_type', ('Accepted type',
                                   lambda x: x.accepted_contrib_type.name
                                   if x.accepted_contrib_type else None)),
        ('submitted_contrib_type', ('Submitted type',
                                    lambda x: x.submitted_contrib_type.name
                                    if x.submitted_contrib_type else None)),
        ('score', ('Score', lambda x: round(x.score, 1)
                   if x.score is not None else None)),
        ('submitted_dt',
         ('Submission date',
          lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('modified_dt', ('Modification date', lambda x:
                         (to_unicode(format_datetime(x.modified_dt))
                          if x.modified_dt else '')))
    ])
    field_names.extend(
        unique_col(item.title, item.id) for item in dynamic_items)
    field_names.extend(title for name, (title,
                                        fn) in static_item_mapping.iteritems()
                       if name in static_item_ids)
    rows = []
    for abstract in abstracts:
        data = abstract.data_by_field
        abstract_dict = {'Id': abstract.friendly_id, 'Title': abstract.title}
        for item in dynamic_items:
            key = unique_col(item.title, item.id)
            abstract_dict[key] = data[
                item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in static_item_mapping.iteritems():
            if name not in static_item_ids:
                continue
            value = fn(abstract)
            abstract_dict[title] = value
        rows.append(abstract_dict)
    return field_names, rows
Exemplo n.º 10
0
def generate_csv_from_registrations(registrations, regform_items, special_items):
    """Generates a CSV file from a given registration list.

    :param registrations: The list of registrations to include in the file
    :param regform_items: The registration form items to be used as columns
    :param special_items: Registration form information as extra columns
    """

    field_names = ['ID', 'Name']
    special_item_mapping = OrderedDict([
        ('reg_date', ('Registration date', lambda x: format_datetime(x.submitted_dt))),
        ('state', ('Registration state', lambda x: x.state.title)),
        ('price', ('Price', lambda x: x.render_price())),
        ('checked_in', ('Checked in', lambda x: 'Yes' if x.checked_in else 'No')),
        ('checked_in_date', ('Check-in date', lambda x: format_datetime(x.checked_in_dt) if x.checked_in else ''))
    ])
    for item in regform_items:
        field_names.append('{}_{}'.format(item.title.encode('utf-8'), item.id))
        if item.input_type == 'accommodation':
            field_names.append('{}_{}_{}'.format(item.title.encode('utf-8'), 'Arrival', item.id))
            field_names.append('{}_{}_{}'.format(item.title.encode('utf-8'), 'Departure', item.id))
    field_names.extend(title for name, (title, fn) in special_item_mapping.iteritems() if name in special_items)
    buf = BytesIO()
    writer = csv.DictWriter(buf, fieldnames=field_names)
    writer.writeheader()
    for registration in registrations:
        data = registration.data_by_field
        registration_dict = {
            'ID': registration.friendly_id,
            'Name': "{} {}".format(registration.first_name, registration.last_name).encode('utf-8')
        }
        for item in regform_items:
            key = '{}_{}'.format(item.title.encode('utf-8'), item.id)
            if item.input_type == 'accommodation':
                registration_dict[key] = _prepare_data(data[item.id].friendly_data.get('choice')
                                                       if item.id in data else '')
                key = '{}_{}_{}'.format(item.title.encode('utf-8'), 'Arrival', item.id)
                arrival_date = data[item.id].friendly_data.get('arrival_date') if item.id in data else None
                registration_dict[key] = _prepare_data(format_date(arrival_date) if arrival_date else '')
                key = '{}_{}_{}'.format(item.title.encode('utf-8'), 'Departure', item.id)
                departure_date = data[item.id].friendly_data.get('departure_date') if item.id in data else None
                registration_dict[key] = _prepare_data(format_date(departure_date) if departure_date else '')
            else:
                registration_dict[key] = _prepare_data(data[item.id].friendly_data if item.id in data else '')
        for name, (title, fn) in special_item_mapping.iteritems():
            if name not in special_items:
                continue
            value = fn(registration)
            if isinstance(value, unicode):
                value = value.encode('utf-8')
            registration_dict[title] = value
        writer.writerow(registration_dict)
    buf.seek(0)
    return buf
Exemplo n.º 11
0
def generate_spreadsheet_from_registrations(registrations, regform_items, special_items):
    """Generates a spreadsheet data from a given registration list.

    :param registrations: The list of registrations to include in the file
    :param regform_items: The registration form items to be used as columns
    :param special_items: Registration form information as extra columns
    """
    field_names = ['ID', 'Name']
    special_item_mapping = OrderedDict([
        ('reg_date', ('Registration date', lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('state', ('Registration state', lambda x: x.state.title)),
        ('price', ('Price', lambda x: x.render_price())),
        ('checked_in', ('Checked in', lambda x: x.checked_in)),
        ('checked_in_date', ('Check-in date', lambda x: (to_unicode(format_datetime(x.checked_in_dt)) if x.checked_in
                                                         else '')))
    ])
    for item in regform_items:
        field_names.append('{}_{}'.format(item.title, item.id))
        if item.input_type == 'accommodation':
            field_names.append('{}_{}_{}'.format(item.title, 'Arrival', item.id))
            field_names.append('{}_{}_{}'.format(item.title, 'Departure', item.id))
    field_names.extend(title for name, (title, fn) in special_item_mapping.iteritems() if name in special_items)
    rows = []
    for registration in registrations:
        data = registration.data_by_field
        registration_dict = {
            'ID': registration.friendly_id,
            'Name': "{} {}".format(registration.first_name, registration.last_name)
        }
        for item in regform_items:
            key = '{}_{}'.format(item.title, item.id)
            if item.input_type == 'accommodation':
                registration_dict[key] = _prepare_data(data[item.id].friendly_data.get('choice')
                                                       if item.id in data else '')
                key = '{}_{}_{}'.format(item.title, 'Arrival', item.id)
                arrival_date = data[item.id].friendly_data.get('arrival_date') if item.id in data else None
                registration_dict[key] = _prepare_data(format_date(arrival_date) if arrival_date else '')
                key = '{}_{}_{}'.format(item.title, 'Departure', item.id)
                departure_date = data[item.id].friendly_data.get('departure_date') if item.id in data else None
                registration_dict[key] = _prepare_data(format_date(departure_date) if departure_date else '')
            else:
                registration_dict[key] = _prepare_data(data[item.id].friendly_data if item.id in data else '')
        for name, (title, fn) in special_item_mapping.iteritems():
            if name not in special_items:
                continue
            value = fn(registration)
            registration_dict[title] = value
        rows.append(registration_dict)
    return field_names, rows
Exemplo n.º 12
0
    def process(self, start_month, end_month):
        start_dt, end_dt = get_month_dates(start_month, end_month)
        result, months = calculate_monthly_stats(start_dt, end_dt)
        # number of days within the boundary dates (inclusive)
        num_days = ((end_dt - start_dt).days + 1)

        return jsonify(
            data=result,
            num_days=num_days,
            months=[{
                'name': format_datetime(m, "MMMM YYYY", locale=session.lang),
                'id': format_datetime(m, "YYYY-M"),
                'num_days': ((m + relativedelta(months=1, days=-1)) - m).days + 1
            } for m in months]
        )
Exemplo n.º 13
0
def generate_spreadsheet_from_registrations(registrations, regform_items, special_items):
    """Generates a spreadsheet data from a given registration list.

    :param registrations: The list of registrations to include in the file
    :param regform_items: The registration form items to be used as columns
    :param special_items: Registration form information as extra columns
    """
    field_names = ['ID', 'Name']
    special_item_mapping = OrderedDict([
        ('reg_date', ('Registration date', lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('state', ('Registration state', lambda x: x.state.title)),
        ('price', ('Price', lambda x: x.render_price())),
        ('checked_in', ('Checked in', lambda x: x.checked_in)),
        ('checked_in_date', ('Check-in date', lambda x: (to_unicode(format_datetime(x.checked_in_dt)) if x.checked_in
                                                         else '')))
    ])
    for item in regform_items:
        field_names.append(unique_col(item.title, item.id))
        if item.input_type == 'accommodation':
            field_names.append(unique_col('{} ({})'.format(item.title, 'Arrival'), item.id))
            field_names.append(unique_col('{} ({})'.format(item.title, 'Departure'), item.id))
    field_names.extend(title for name, (title, fn) in special_item_mapping.iteritems() if name in special_items)
    rows = []
    for registration in registrations:
        data = registration.data_by_field
        registration_dict = {
            'ID': registration.friendly_id,
            'Name': "{} {}".format(registration.first_name, registration.last_name)
        }
        for item in regform_items:
            key = unique_col(item.title, item.id)
            if item.input_type == 'accommodation':
                registration_dict[key] = data[item.id].friendly_data.get('choice') if item.id in data else ''
                key = unique_col('{} ({})'.format(item.title, 'Arrival'), item.id)
                arrival_date = data[item.id].friendly_data.get('arrival_date') if item.id in data else None
                registration_dict[key] = format_date(arrival_date) if arrival_date else ''
                key = unique_col('{} ({})'.format(item.title, 'Departure'), item.id)
                departure_date = data[item.id].friendly_data.get('departure_date') if item.id in data else None
                registration_dict[key] = format_date(departure_date) if departure_date else ''
            else:
                registration_dict[key] = data[item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in special_item_mapping.iteritems():
            if name not in special_items:
                continue
            value = fn(registration)
            registration_dict[title] = value
        rows.append(registration_dict)
    return field_names, rows
Exemplo n.º 14
0
 def validate_end_dt(self, field):
     if not self.check_timetable_boundaries:
         return
     if self.update_timetable.data:
         # if we move timetable entries according to the start date
         # change, check that there's enough time at the end.
         start_dt_offset = self.start_dt.data - self.start_dt.object_data
         end_buffer = field.data - max(self.toplevel_timetable_entries,
                                       key=attrgetter('end_dt')).end_dt
         delta = max(timedelta(), start_dt_offset - end_buffer)
         if delta:
             delta_str = format_human_timedelta(delta, 'minutes', True)
             raise ValidationError(
                 _("The event is too short to fit all timetable entries. "
                   "It must be at least {} longer.").format(delta_str))
     else:
         # if we do not update timetable entries, only check that
         # the event does not end before its last timetable entry;
         # a similar check for the start time is done above in that
         # field's validation method.
         max_end_dt = max(self.toplevel_timetable_entries,
                          key=attrgetter('end_dt')).end_dt
         if field.data < max_end_dt:
             raise ValidationError(
                 _("The event cannot end before its last timetable entry, which is at {}."
                   ).format(
                       to_unicode(
                           format_datetime(max_end_dt,
                                           timezone=self.event.tzinfo))))
Exemplo n.º 15
0
 def getVars(self):
     vars = WTemplated.getVars( self )
     vars['user'] = self._avatar
     vars['currentUser'] = self._rh._getUser()
     vars["tokens"] = Catalog.getIdx('user_oauth_request_token').get(self._avatar.getId(), [])
     vars["formatTimestamp"] = lambda ts: format_datetime(utctimestamp2date(ts), format='d/M/yyyy H:mm')
     return vars
Exemplo n.º 16
0
def generate_csv_from_survey(survey, submission_ids):
    """Generates a CSV file from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = {"submitter", "submission_date"}
    field_names |= {"{}_{}".format(question.title, question.id) for question in survey.questions}

    buf = BytesIO()
    submissions = _filter_submissions(survey, submission_ids)
    writer = csv.DictWriter(buf, fieldnames=field_names)
    writer.writeheader()
    for submission in submissions:
        submission_dict = {
            "submitter": submission.user.full_name.encode("utf-8") if submission.user else None,
            "submission_date": format_datetime(submission.submitted_dt),
        }

        for answer in submission.answers:
            key = "{}_{}".format(answer.question.title, answer.question.id)
            submission_dict[key] = _prepare_data(answer.answer_data)
        writer.writerow(submission_dict)
    buf.seek(0)
    return buf
Exemplo n.º 17
0
def generate_spreadsheet_from_contributions(contributions):
    """Return a tuple consisting of spreadsheet columns and respective
    contribution values"""

    headers = ['Id', 'Title', 'Description', 'Date', 'Duration', 'Type', 'Session', 'Track', 'Presenters', 'Materials']
    rows = []
    for c in sorted(contributions, key=attrgetter('friendly_id')):
        contrib_data = {'Id': c.friendly_id, 'Title': c.title, 'Description': c.description,
                        'Duration': format_human_timedelta(c.duration),
                        'Date': format_datetime(c.timetable_entry.start_dt) if c.timetable_entry else None,
                        'Type': c.type.name if c.type else None,
                        'Session': c.session.title if c.session else None,
                        'Track': c.track.title if c.track else None,
                        'Materials': None,
                        'Presenters': ', '.join(speaker.person.full_name for speaker in c.speakers)}

        attachments = []
        attached_items = get_attached_items(c)
        for attachment in attached_items.get('files', []):
            attachments.append(attachment.absolute_download_url)

        for folder in attached_items.get('folders', []):
            for attachment in folder.attachments:
                attachments.append(attachment.absolute_download_url)

        if attachments:
            contrib_data['Materials'] = ', '.join(attachments)
        rows.append(contrib_data)
    return headers, rows
Exemplo n.º 18
0
def generate_spreadsheet_from_contributions(contributions):
    """Return a tuple consisting of spreadsheet columns and respective
    contribution values"""

    headers = ['Id', 'Title', 'Description', 'Date', 'Duration', 'Type', 'Session', 'Track', 'Presenters', 'Materials']
    rows = []
    for c in sorted(contributions, key=attrgetter('friendly_id')):
        contrib_data = {'Id': c.friendly_id, 'Title': c.title, 'Description': c.description,
                        'Duration': format_human_timedelta(c.duration),
                        'Date': format_datetime(c.timetable_entry.start_dt) if c.timetable_entry else None,
                        'Type': c.type.name if c.type else None,
                        'Session': c.session.title if c.session else None,
                        'Track': c.track.title if c.track else None,
                        'Materials': None,
                        'Presenters': ', '.join(speaker.person.full_name for speaker in c.speakers)}

        attachments = []
        attached_items = get_attached_items(c)
        for attachment in attached_items.get('files', []):
            attachments.append(attachment.absolute_download_url)

        for folder in attached_items.get('folders', []):
            for attachment in folder.attachments:
                attachments.append(attachment.absolute_download_url)

        if attachments:
            contrib_data['Materials'] = ', '.join(attachments)
        rows.append(contrib_data)
    return headers, rows
Exemplo n.º 19
0
 def export_checkin(self, aw):
     self._registrant.setCheckedIn(self._check_in)
     checkin_date = format_datetime(self._registrant.getAdjustedCheckInDate(), format="short")
     return {
         "checkin_in": self._check_in,
         "checkin_date": checkin_date if self._check_in else None
     }
Exemplo n.º 20
0
def generate_csv_from_survey(survey, submission_ids):
    """Generates a CSV file from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = {'submitter', 'submission_date'}
    field_names |= {
        '{}_{}'.format(question.title, question.id)
        for question in survey.questions
    }

    buf = BytesIO()
    submissions = _filter_submissions(survey, submission_ids)
    writer = csv.DictWriter(buf, fieldnames=field_names)
    writer.writeheader()
    for submission in submissions:
        submission_dict = {
            'submitter':
            submission.user.full_name.encode('utf-8')
            if submission.user else None,
            'submission_date':
            format_datetime(submission.submitted_dt),
        }

        for answer in submission.answers:
            key = '{}_{}'.format(answer.question.title, answer.question.id)
            submission_dict[key] = _prepare_data(answer.answer_data)
        writer.writerow(submission_dict)
    buf.seek(0)
    return buf
Exemplo n.º 21
0
    def _prepare(self, check = True):

        # Date checks...
        if check:
            from MaKaC.conference import ConferenceHolder
            if not ConferenceHolder().hasKey(self.conf.getId()):
                self.getLogger().warning("Conference %s no longer exists! "
                                     "Deleting alarm." % self.conf.getId())
                self.conf.removeAlarm(self)
                self.suicide()
            elif self.conf.getStartDate() <= self._getCurrentDateTime():
                self.getLogger().warning("Conference %s already started. "
                                     "Deleting alarm." % self.conf.getId())
                self.conf.removeAlarm(self)
                self.suicide()
                return False

        # Email
        startDateTime = format_datetime(self.conf.getAdjustedStartDate(), format="short")
        self.setUpSubject()
        try:
            locationText = self.conf.getLocation().getName()
            if self.conf.getLocation().getAddress() != "":
                locationText += ", %s" % self.conf.getLocation().getAddress()
            if self.conf.getRoom().getName() != "":
                locationText += " (%s)" % self.conf.getRoom().getName()
        except:
            locationText = ""
        if locationText != "":
            locationText = " %s: %s" % ( _("Location"), locationText)

        if self.getToAllParticipants() :
            if self.conf.getType() == "conference":
                for r in self.conf.getRegistrantsList():
                    self.addToUser(r)
            else:
                for p in self.conf.getParticipation().getParticipantList() :
                    self.addToUser(p)
        from MaKaC.webinterface import urlHandlers
        if Config.getInstance().getShortEventURL() != "":
            url = "%s%s" % (Config.getInstance().getShortEventURL(),self.conf.getId())
        else:
            url = urlHandlers.UHConferenceDisplay.getURL(self.conf)
        self.setText("""Hello,
    Please note that the event "%s" will start on %s (%s).
    %s

    You can access the full event here:
    %s

Best Regards

""" % (self.conf.getTitle(),\
                startDateTime,\
                self.conf.getTimezone(),\
                locationText,\
                url,\
                ))
        self._setMailText()
        return True
Exemplo n.º 22
0
    def _process(self):
        reminder = self.reminder
        form = ReminderForm(obj=self._get_defaults(), event=self.event)
        if form.validate_on_submit():
            if reminder.is_sent:
                flash(
                    _("This reminder has already been sent and cannot be modified anymore."
                      ), 'error')
                return redirect(url_for('.edit', reminder))
            form.populate_obj(reminder, existing_only=True)
            if form.schedule_type.data == 'now':
                _send_reminder(reminder)
            else:
                logger.info('Reminder modified by %s: %s', session.user,
                            reminder)
                flash(
                    _("The reminder at {} has been modified.").format(
                        to_unicode(format_datetime(reminder.scheduled_dt))),
                    'success')
            return jsonify_data(flash=False)

        return jsonify_template('events/reminders/edit_reminder.html',
                                event=self.event,
                                reminder=reminder,
                                form=form)
Exemplo n.º 23
0
 def getVars(self):
     wvars = WTemplated.getVars(self)
     wvars['user'] = self._avatar
     wvars['currentUser'] = self._rh._getUser()
     wvars["tokens"] = Catalog.getIdx('user_oauth_access_token').get(self._avatar.getId(), [])
     wvars["formatTimestamp"] = lambda ts: format_datetime(ts, format='d/M/yyyy H:mm')
     return wvars
Exemplo n.º 24
0
 def _process(self):
     form = ContributionStartDateForm(obj=FormDefaults(start_dt=self.contrib.start_dt), contrib=self.contrib)
     if form.validate_on_submit():
         with track_time_changes():
             update_timetable_entry(self.contrib.timetable_entry, {'start_dt': form.start_dt.data})
         return jsonify_data(new_value=format_datetime(self.contrib.start_dt, 'short'))
     return jsonify_form(form, back_button=False, disabled_until_change=True)
Exemplo n.º 25
0
def generate_spreadsheet_from_survey(survey, submission_ids):
    """Generates spreadsheet data from a given survey.

    :param survey: `Survey` for which the user wants to export submissions
    :param submission_ids: The list of submissions to include in the file
    """
    field_names = ['Submitter', 'Submission Date']
    sorted_questions = sorted(survey.questions,
                              key=attrgetter('parent.position', 'position'))
    field_names += [
        unique_col(_format_title(question), question.id)
        for question in sorted_questions
    ]

    submissions = _filter_submissions(survey, submission_ids)
    rows = []
    for submission in submissions:
        submission_dict = {
            'Submitter':
            submission.user.full_name if submission.user else None,
            'Submission Date':
            to_unicode(format_datetime(submission.submitted_dt)),
        }
        for key in field_names:
            submission_dict.setdefault(key, '')
        for answer in submission.answers:
            key = unique_col(_format_title(answer.question),
                             answer.question.id)
            submission_dict[key] = answer.answer_data
        rows.append(submission_dict)
    return field_names, rows
Exemplo n.º 26
0
 def getVars(self):
     wvars = WTemplated.getVars(self)
     ath = AccessTokenHolder()
     wvars["formatTimestamp"] = lambda ts: format_datetime(
         ts, format='d/M/yyyy H:mm')
     wvars['tokens'] = sorted(ath.getList(),
                              key=lambda t: t.getUser().getId())
     return wvars
Exemplo n.º 27
0
 def setUpSubject(self):
     start_dt = format_datetime(self.conf.getAdjustedStartDate(),
                                format='short',
                                keep_tz=True)
     self.setSubject(
         _("Event reminder: {} ({} {})").format(self.conf.getTitle(),
                                                start_dt,
                                                self.conf.getTimezone()))
Exemplo n.º 28
0
 def export_registrant(self, aw):
     registration_date = format_datetime(self._registrant.getAdjustedRegistrationDate(), format="short")
     checkin_date = format_datetime(self._registrant.getAdjustedCheckInDate(), format="short")
     self._registrant.getPayed()
     result = {
         "registrant_id": self._registrant.getId(),
         "full_name": self._registrant.getFullName(title=True, firstNameFirst=True),
         "checked_in": self._registrant.isCheckedIn(),
         "checkin_date": checkin_date if self._registrant.isCheckedIn() else None,
         "registration_date": registration_date,
         "payed": self._registrant.getPayed() if self._conf.getModPay().isActivated() else None,
         "pay_amount": self._registrant.getTotal() if self._conf.getModPay().isActivated() else None
     }
     regForm = self._conf.getRegistrationForm()
     personalData = regForm.getPersonalData().getRegistrantValues(self._registrant)
     result.update(personalData)
     return result
Exemplo n.º 29
0
 def render(cls, event):
     start_dt, end_dt = event.start_dt_local, event.end_dt_local
     interval = _('{} to {}').format(format_date(start_dt, format='long'), format_date(end_dt, format='long'))
     if start_dt.date() == end_dt.date():
         interval = format_datetime(start_dt)
     elif start_dt.date().replace(day=1) == end_dt.date().replace(day=1):
         interval = '{} - {} {}'.format(start_dt.day, end_dt.day, format_date(start_dt, format='MMMM yyyy'))
     return interval
Exemplo n.º 30
0
    def api_checkin(self, aw):
        self._registrant.setCheckedIn(self._check_in)
        checkin_date = format_datetime(self._registrant.getAdjustedCheckInDate(), format="short")

        return {
            "checked_in": self._check_in,
            "checkin_date": checkin_date if self._check_in else None
        }
Exemplo n.º 31
0
 def render(cls, **kwargs):
     arg = kwargs.pop(cls.render_kwarg)
     if kwargs:
         raise TypeError(f'render() got unexpected kwargs: {kwargs}')
     if not arg.start_dt:
         return ''
     formatted = format_datetime(arg.start_dt, cls.date_format, locale='en_GB', timezone=arg.event.tzinfo)
     return cls.transform(formatted) if cls.transform else formatted
Exemplo n.º 32
0
 def getVars(self):
     wvars = WTemplated.getVars(self)
     wvars['user'] = self._avatar
     wvars['currentUser'] = self._rh._getUser()
     wvars["tokens"] = Catalog.getIdx('user_oauth_access_token').get(
         self._avatar.getId(), [])
     wvars["formatTimestamp"] = lambda ts: format_datetime(
         ts, format='d/M/yyyy H:mm')
     return wvars
Exemplo n.º 33
0
 def __init__(self, *args, **kwargs):
     self.event = kwargs.pop('event')
     super().__init__(*args, **kwargs)
     contrib_choices = [(contrib.id, '{} (#{}, {})'.format(contrib.title,
                                                           contrib.friendly_id,
                                                           format_datetime(contrib.start_dt,
                                                                           timezone=self.event.tzinfo)))
                        for contrib in sorted(self.event.contributions,
                                              key=lambda c: (c.title, c.start_dt or as_utc(datetime(1970, 1, 1))))
                        if contrib.start_dt is not None]
     blocks = (SessionBlock.query
               .filter(SessionBlock.session.has((Session.event == self.event) & ~Session.is_deleted))
               .all())
     block_choices = [(block.id, '{} ({})'.format(block.full_title,
                                                  format_datetime(block.start_dt, timezone=self.event.tzinfo)))
                      for block in sorted(blocks, key=attrgetter('full_title', 'start_dt'))]
     self.contribution.choices = [('', _('Please select a contribution'))] + contrib_choices
     self.block.choices = [('', _('Please select a session block'))] + block_choices
Exemplo n.º 34
0
def update_timetable_entry(entry, data):
    entry.populate_from_dict(data)
    object_type, object_title = _get_object_info(entry)
    db.session.flush()
    signals.event.timetable_entry_updated.send(entry)
    logger.info('Timetable entry %s updated by %s', entry, session.user)
    entry.event_new.log(EventLogRealm.management, EventLogKind.change, 'Timetable',
                        "Entry for {} '{}' modified".format(object_type, object_title), session.user,
                        data={'Time': format_datetime(entry.start_dt)})
Exemplo n.º 35
0
 def _process(self):
     if self.reminder.is_sent:
         flash(_('Sent reminders cannot be deleted.'), 'error')
     else:
         db.session.delete(self.reminder)
         logger.info('Reminder deleted by {}: {}'.format(session.user, self.reminder))
         flash(_("The reminder at {} has been deleted.").format(format_datetime(self.reminder.scheduled_dt)),
               'success')
     return redirect(url_for('.list', self.event))
Exemplo n.º 36
0
 def _process(self):
     if self.reminder.is_sent:
         flash(_('Sent reminders cannot be deleted.'), 'error')
     else:
         db.session.delete(self.reminder)
         logger.info('Reminder deleted by %s: %s', session.user, self.reminder)
         flash(_("The reminder at {} has been deleted.")
               .format(to_unicode(format_datetime(self.reminder.scheduled_dt))), 'success')
     return redirect(url_for('.list', self.event_new))
Exemplo n.º 37
0
def generate_spreadsheet_from_abstracts(abstracts, static_item_ids, dynamic_items):
    """Generates a spreadsheet data from a given abstract list.

    :param abstracts: The list of abstracts to include in the file
    :param static_item_ids: The abstract properties to be used as columns
    :param dynamic_items: Contribution fields as extra columns
    """
    field_names = ['Id', 'Title']
    static_item_mapping = OrderedDict([
        ('state', ('State', lambda x: x.state.title)),
        ('submitter', ('Submitter', lambda x: x.submitter.full_name)),
        ('authors', ('Primary authors', lambda x: [a.full_name for a in x.primary_authors])),
        ('accepted_track', ('Accepted track', lambda x: x.accepted_track.short_title if x.accepted_track else None)),
        ('submitted_for_tracks', ('Submitted for tracks',
                                  lambda x: [t.short_title for t in x.submitted_for_tracks])),
        ('reviewed_for_tracks', ('Reviewed for tracks', lambda x: [t.short_title for t in x.reviewed_for_tracks])),
        ('accepted_contrib_type', ('Accepted type',
                                   lambda x: x.accepted_contrib_type.name if x.accepted_contrib_type else None)),
        ('submitted_contrib_type', ('Submitted type',
                                    lambda x: x.submitted_contrib_type.name if x.submitted_contrib_type else None)),
        ('score', ('Score', lambda x: round(x.score, 1))),
        ('submitted_dt', ('Submission date', lambda x: to_unicode(format_datetime(x.submitted_dt)))),
        ('modified_dt', ('Modification date', lambda x: (to_unicode(format_datetime(x.modified_dt)) if x.modified_dt
                                                         else '')))
    ])
    field_names.extend(unique_col(item.title, item.id) for item in dynamic_items)
    field_names.extend(title for name, (title, fn) in static_item_mapping.iteritems() if name in static_item_ids)
    rows = []
    for abstract in abstracts:
        data = abstract.data_by_field
        abstract_dict = {
            'Id': abstract.friendly_id,
            'Title': abstract.title
        }
        for item in dynamic_items:
            key = unique_col(item.title, item.id)
            abstract_dict[key] = data[item.id].friendly_data if item.id in data else ''
        for name, (title, fn) in static_item_mapping.iteritems():
            if name not in static_item_ids:
                continue
            value = fn(abstract)
            abstract_dict[title] = value
        rows.append(abstract_dict)
    return field_names, rows
Exemplo n.º 38
0
 def _sendEventRequest(self, key, eventType, avatar, conference):
     try:
         logger = self.getLogger()
         plugin = PluginsHolder().getPluginType('calendaring').getPlugin('outlook')
         if not isUserPluginEnabled(avatar.getId()):
             logger.info("Outlook plugin disabled for user: {}".format(avatar.getId()))
             return {'status_code': 200}
         if eventType in ['added', 'updated']:
             logger.debug("Performing '{}' for: {}".format(eventType, avatar.getId()))
             url = urlHandlers.UHConferenceDisplay.getURL(conference)
             location = strip_control_chars(conference.getRoom().getName()) if conference.getRoom() else ''
             description = strip_control_chars(conference.getDescription())
             self.payload = {'userEmail': avatar.getEmail(),
                             'uniqueID': plugin.getOption('prefix').getValue() + key,
                             'subject': strip_control_chars(conference.getTitle()),
                             'location': location,
                             'body': '<a href="{}">{}</a><br><br>{}'.format(url, url, description),
                             'status': plugin.getOption('status').getValue(),
                             'startDate': format_datetime(conference.getStartDate(),
                                                          format=plugin.getOption('datetimeFormat').getValue(),
                                                          timezone=pytz.utc),
                             'endDate': format_datetime(conference.getEndDate(),
                                                        format=plugin.getOption('datetimeFormat').getValue(),
                                                        timezone=pytz.utc),
                             'isThereReminder': plugin.getOption('reminder').getValue(),
                             'reminderTimeInMinutes': plugin.getOption('reminder_minutes').getValue()}
             operation = plugin.getOption('addToCalendarOperationName').getValue() if eventType == 'added' else plugin.getOption('updateCalendarOperationName').getValue()
         elif eventType == 'removed':
             logger.debug("Removing calendar entry for: {}".format(avatar.getId()))
             self.payload = {'userEmail': avatar.getEmail(),
                             'uniqueID': plugin.getOption('prefix').getValue() + key}
             operation = plugin.getOption('removeFromCalendarOperationName').getValue()
         else:
             return None
         headers = {'content-type': 'application/x-www-form-urlencoded'}
         return requests.post(urlpath.tslash(plugin.getOption('url').getValue()) + operation,
                              auth=(plugin.getOption('login').getValue(), plugin.getOption('password').getValue()),
                              data=self.payload, headers=headers, timeout=plugin.getOption('timeout').getValue())
     except requests.exceptions.Timeout:
         logger.exception('Timeout')
     except requests.exceptions.RequestException:
         logger.exception('RequestException: Connection problem')
     except Exception, e:
         logger.exception('Outlook EventException: {}'.format(e))
Exemplo n.º 39
0
 def render(cls, event):
     start_dt, end_dt = event.start_dt_local, event.end_dt_local
     interval = _("{} to {}").format(to_unicode(format_date(start_dt, format='long')),
                                     to_unicode(format_date(end_dt, format='long')))
     if start_dt.date() == end_dt.date():
         interval = to_unicode(format_datetime(start_dt))
     elif start_dt.date().replace(day=1) == end_dt.date().replace(day=1):
         interval = "{} - {} {}".format(start_dt.day, end_dt.day,
                                        to_unicode(format_date(start_dt, format='MMMM yyyy')))
     return interval
Exemplo n.º 40
0
def update_timetable_entry(entry, data):
    changes = entry.populate_from_dict(data)
    object_type, object_title = _get_object_info(entry)
    db.session.flush()
    if changes:
        signals.event.timetable_entry_updated.send(entry, changes=changes)
        logger.info('Timetable entry %s updated by %s', entry, session.user)
        entry.event.log(EventLogRealm.management, EventLogKind.change, 'Timetable',
                        "Entry for {} '{}' modified".format(object_type, object_title), session.user,
                        data={'Time': format_datetime(entry.start_dt)})
Exemplo n.º 41
0
def delete_timetable_entry(entry, log=True):
    object_type, object_title = _get_object_info(entry)
    signals.event.timetable_entry_deleted.send(entry)
    entry.object = None
    db.session.flush()
    if log:
        logger.info('Timetable entry %s deleted by %s', entry, session.user)
        entry.event_new.log(EventLogRealm.management, EventLogKind.negative, 'Timetable',
                            "Entry for {} '{}' deleted".format(object_type, object_title), session.user,
                            data={'Time': format_datetime(entry.start_dt)})
Exemplo n.º 42
0
def _prepare_excel_data(data, tz=None):
    if isinstance(data, (list, tuple)):
        data = ', '.join(data)
    elif isinstance(data, set):
        data = ', '.join(sorted(data, key=unicode.lower))
    elif is_lazy_string(data) or isinstance(data, Markup):
        data = unicode(data)
    elif isinstance(data, datetime):
        data = format_datetime(data, timezone=tz).decode('utf-8')
    return data
Exemplo n.º 43
0
 def _process(self):
     if self.reminder.is_sent:
         flash(_("Sent reminders cannot be deleted."), "error")
     else:
         db.session.delete(self.reminder)
         logger.info("Reminder deleted by {}: {}".format(session.user, self.reminder))
         flash(
             _("The reminder at {} has been deleted.").format(format_datetime(self.reminder.scheduled_dt)), "success"
         )
     return redirect(url_for(".list", self.event))
Exemplo n.º 44
0
def _prepare_excel_data(data, tz=None):
    if isinstance(data, (list, tuple)):
        data = '; '.join(data)
    elif isinstance(data, set):
        data = '; '.join(sorted(data, key=unicode.lower))
    elif is_lazy_string(data) or isinstance(data, Markup):
        data = unicode(data)
    elif isinstance(data, datetime):
        data = format_datetime(data, timezone=tz).decode('utf-8')
    return data
Exemplo n.º 45
0
def _convert_data(event, value):
    if isinstance(value, timedelta):
        value = format_human_timedelta(value)
    elif isinstance(value, datetime):
        value = format_datetime(value, locale="en_GB", timezone=event.timezone)
    elif value.__class__.__name__ == "ContributionType":
        value = value._name
    elif value.__class__.__name__ == "AbstractFieldContent":
        value = '{}: "{}"'.format(convert_to_unicode(value.field._caption), convert_to_unicode(value.value))
    return convert_to_unicode(value).strip()
Exemplo n.º 46
0
def delete_timetable_entry(entry, log=True):
    object_type, object_title = _get_object_info(entry)
    signals.event.timetable_entry_deleted.send(entry)
    entry.object = None
    db.session.flush()
    if log:
        logger.info('Timetable entry %s deleted by %s', entry, session.user)
        entry.event.log(EventLogRealm.management, EventLogKind.negative, 'Timetable',
                        "Entry for {} '{}' deleted".format(object_type, object_title), session.user,
                        data={'Time': format_datetime(entry.start_dt)})
Exemplo n.º 47
0
 def _process(self):
     query = _session_block_query(self.event)
     result = [{'id': session_block.id,
                'friendly_id': session_block.session.friendly_id,
                'title': session_block.full_title,
                'full_title': '#{}: {} ({})'.format(
                    session_block.session.friendly_id, session_block.full_title,
                    to_unicode(format_datetime(session_block.timetable_entry.start_dt)))}
               for session_block in query]
     return jsonify(result)
Exemplo n.º 48
0
def _convert_data(event, value):
    if isinstance(value, timedelta):
        value = format_human_timedelta(value)
    elif isinstance(value, datetime):
        value = format_datetime(value, locale='en_GB', timezone=event.timezone)
    elif value.__class__.__name__ == 'ContributionType':
        value = value._name
    elif value.__class__.__name__ == 'AbstractFieldContent':
        value = '{}: "{}"'.format(convert_to_unicode(value.field._caption),
                                  convert_to_unicode(value.value))
    return convert_to_unicode(value).strip()
Exemplo n.º 49
0
 def _getAnswer(self):
     if not self._registrant_ids:
         raise NoReportError(_("No registrants were selected to check-in"))
     dates_changed = {}
     for registrant_id in self._registrant_ids:
         registrant = self._conf.getRegistrantById(registrant_id)
         if not registrant.isCheckedIn():
             registrant.setCheckedIn(True)
             checkInDate = registrant.getAdjustedCheckInDate()
             dates_changed[registrant_id] = format_datetime(checkInDate)
     return {"dates": dates_changed}
Exemplo n.º 50
0
    def api_checkin(self, aw):
        if self._object:
            self._object.setCheckedIn(self._check_in)
            checkin_date = format_datetime(self._object.getAdjustedCheckInDate(), format="short") if self._check_in else None

            return {
                "checked_in": self._check_in,
                "checkin_date": checkin_date if self._check_in else None
            }
        else:
            return {"status": "no session has been found"}
Exemplo n.º 51
0
 def _getAnswer(self):
     if not self._registrant_ids:
         raise NoReportError(_("No registrants were selected to check-in"))
     dates_changed = {}
     for registrant_id in self._registrant_ids:
         registrant = self._conf.getRegistrantById(registrant_id)
         if not registrant.isCheckedIn():
             registrant.setCheckedIn(True)
             checkInDate = registrant.getAdjustedCheckInDate()
             dates_changed[registrant_id] = format_datetime(checkInDate)
     return {"dates": dates_changed}
Exemplo n.º 52
0
 def _sendEventRequest(self, key, eventType, avatar, conference):
     try:
         logger = self.getLogger()
         plugin = PluginsHolder().getPluginType('calendaring').getPlugin('outlook')
         if not isUserPluginEnabled(avatar.getId()):
             logger.info("outlook plugin disabled for user: %s" % avatar.getId())
             return 200
         if eventType in ['added', 'updated']:
             logger.debug("performing '%s' for: %s" % (eventType, avatar.getId()))
             url = urlHandlers.UHConferenceDisplay.getURL(conference)
             payload = {'userEmail': avatar.getEmail(),
                        'uniqueID': plugin.getOption('prefix').getValue() + key,
                        'subject': conference.getTitle(),
                        'location': conference.getRoom().getName() if conference.getRoom() else '',
                        'body': '<a href="%s">%s</a>' % (url, url) + '<br><br>' + conference.getDescription(),
                        'status': plugin.getOption('status').getValue(),
                        'startDate': format_datetime(conference.getStartDate(), format=plugin.getOption('datetimeFormat').getValue()),
                        'endDate': format_datetime(conference.getEndDate(), format=plugin.getOption('datetimeFormat').getValue()),
                        'isThereReminder': plugin.getOption('reminder').getValue(),
                        'reminderTimeInMinutes': plugin.getOption('reminder_minutes').getValue(),
                        }
             operation = plugin.getOption('addToCalendarOperationName').getValue() if eventType == 'added' else plugin.getOption('updateCalendarOperationName').getValue()
         elif eventType == 'removed':
             logger.debug("removing calendar entry for: %s" % avatar.getId())
             payload = {'userEmail': avatar.getEmail(),
                        'uniqueID': plugin.getOption('prefix').getValue() + key,
                        }
             operation = plugin.getOption('removeFromCalendarOperationName').getValue()
         else:
             return None
         headers = {'content-type': 'application/x-www-form-urlencoded'}
         r = requests.post(urlpath.tslash(plugin.getOption('url').getValue()) + operation,
                           auth=(plugin.getOption('login').getValue(), plugin.getOption('password').getValue()),
                           data=payload, headers=headers, timeout=plugin.getOption('timeout').getValue())
         return r.status_code
     except requests.exceptions.Timeout:
         logger.exception('Timeout')
     except requests.exceptions.RequestException:
         logger.exception('RequestException: Connection problem')
     except Exception, e:
         logger.exception('Outlook EventException: %s' % e)
Exemplo n.º 53
0
def create_timetable_entry(event, data, parent=None, extend_parent=False):
    entry = TimetableEntry(event_new=event, parent=parent)
    entry.populate_from_dict(data)
    object_type, object_title = _get_object_info(entry)
    db.session.flush()
    signals.event.timetable_entry_created.send(entry)
    logger.info('Timetable entry %s created by %s', entry, session.user)
    entry.event_new.log(EventLogRealm.management, EventLogKind.positive, 'Timetable',
                        "Entry for {} '{}' created".format(object_type, object_title), session.user,
                        data={'Time': format_datetime(entry.start_dt)})
    if extend_parent:
        entry.extend_parent()
    return entry
Exemplo n.º 54
0
 def getLaunchInfo(cls, booking, displayTz=None):
     launchInfo = {"launchText": _("Join Now!"), "launchLink": ""}
     if booking.canBeStarted():
         launchInfo["launchLink"] = booking.getURL()
         launchInfo["launchTooltip"] = _("Click here to join the EVO meeting!")
     else:
         if booking.getStartDate() > nowutc():
             launchInfo["launchTooltip"] = _(
                 "This meeting starts at %s so you cannot join it yet"
             ) % format_datetime(booking.getStartDate())
         else:
             launchInfo["launchTooltip"] = _("This meeting has already took place")
     return launchInfo
Exemplo n.º 55
0
    def getVars(self):
        vars = wcomponents.WTemplated.getVars(self)

        vars["isWithdrawn"] = isinstance(self._contrib.getCurrentStatus(), conference.ContribStatusWithdrawn)
        vars["Contribution"] = vars["target"] = self._contrib
        vars["urlICSFile"] = urlHandlers.UHContribToiCal.getURL(self._contrib)

        vars["showAttachedFiles"] = self._contrib.getConference().getAbstractMgr().showAttachedFilesContribList() and isinstance(self._contrib, conference.AcceptedContribution) and self._contrib.getAbstract() and len(self._contrib.getAbstract().getAttachments()) > 0
        vars["abstractAttachments"] = fossilize(self._contrib.getAbstract().getAttachments().values(), ILocalFileAbstractMaterialFossil) if isinstance(self._contrib, conference.AcceptedContribution) and self._contrib.getAbstract() else []

        vars.update(self._getIcalExportParams(self._aw.getUser(), '/export/event/%s/contribution/%s.ics' %
                                              (self._contrib.getConference().getId(), self._contrib.getId())))

        vars["getAuthorURL"] = lambda auth: self._getAuthorURL(auth)
        vars["formatDate"] = lambda date: format_date(date, "d MMM yyyy")
        tz = timezone(DisplayTZ(self._aw, self._contrib.getConference()).getDisplayTZ())
        vars["formatTime"] = lambda time: format_time(time, format="short", timezone=tz)
        vars["formatDateTime"] = lambda dt: format_datetime(dt, format='d/M/yyyy H:mm', timezone=tz)
        vars["accessWrapper"] = self._aw
        statusReviewing = self._getStatusReviewing()
        vars["showSubmit"] = statusReviewing not in ["Accept", "Reject", "Submitted"]
        vars["showMaterial"] = statusReviewing is not None
        vars["showHistory"] = statusReviewing is not None
        vars["reviewingActive"] = self._contrib.getConference() and \
            self._contrib.getConference().getConfPaperReview().hasReviewing() and \
            not isinstance(self._contrib.getCurrentStatus(), conference.ContribStatusWithdrawn) and \
            (self._contrib.canUserSubmit(self._aw.getUser()) or self._contrib.canModify(self._aw))
        if statusReviewing == "Submitted":
            vars["statusText"] = _("Awaiting review")
            vars["statusClass"] = "contributionReviewingStatusPending"
        elif statusReviewing == "Accept":
            vars["statusText"] = _("ACCEPTED")
            vars["statusClass"] = "contributionReviewingStatusAccepted"
        elif statusReviewing == "Reject":
            vars["statusText"] = _("REJECTED")
            vars["statusClass"] = "contributionReviewingStatusRejected"
        elif statusReviewing == "To be corrected":
            vars["statusText"] = _("To be corrected")
            vars["statusClass"] = "contributionReviewingStatusCorrected"
        elif statusReviewing is not None:
            vars["statusText"] = statusReviewing
            vars["statusClass"] = "contributionReviewingStatusCorrected"
        else:
            vars["statusText"] = _("Paper not yet submitted")
            vars["statusClass"] = "contributionReviewingStatusNotSubmitted"
        vars["prefixUpload"] = "Re-" if statusReviewing not in ["Accept", "Reject", None] else ""
        vars["getResourceName"] = lambda resource: self._getResourceName(resource)
        vars["reportNumberSystems"] = Config.getInstance().getReportNumberSystems()
        return vars
Exemplo n.º 56
0
    def _process(self):
        form = ReminderForm(event=self.event, schedule_type='relative')
        if form.validate_on_submit():
            reminder = EventReminder(creator=session.user, event=self.event)
            form.populate_obj(reminder, existing_only=True)
            db.session.add(reminder)
            db.session.flush()
            if form.schedule_type.data == 'now':
                _send_reminder(reminder)
            else:
                logger.info('Reminder created by {}: {}'.format(session.user, reminder))
                flash(_("A reminder at {} has been created.").format(format_datetime(reminder.scheduled_dt)), 'success')
            return redirect(url_for('.list', self.event))

        return WPReminders.render_template('edit_reminder.html', self.event, event=self.event, reminder=None, form=form,
                                           widget_attrs=form.default_widget_attrs)
Exemplo n.º 57
0
    def _process(self):
        form = ReminderForm(event=self.event, schedule_type='relative')
        if form.validate_on_submit():
            reminder = EventReminder(creator=session.user, event=self.event)
            form.populate_obj(reminder, existing_only=True)
            db.session.add(reminder)
            db.session.flush()
            if form.schedule_type.data == 'now':
                _send_reminder(reminder)
            else:
                logger.info('Reminder created by %s: %s', session.user, reminder)
                flash(_("A reminder at {} has been created.")
                      .format(to_unicode(format_datetime(reminder.scheduled_dt))), 'success')
            return jsonify_data(flash=False)

        return jsonify_template('events/reminders/edit_reminder.html', event=self.event, reminder=None, form=form,
                                widget_attrs=form.default_widget_attrs)
Exemplo n.º 58
0
    def _process(self):
        reminder = self.reminder
        form = ReminderForm(obj=self._get_defaults(), event=self.event)
        if form.validate_on_submit():
            if reminder.is_sent:
                flash(_("This reminder has already been sent and cannot be modified anymore."), 'error')
                return redirect(url_for('.edit', reminder))
            form.populate_obj(reminder, existing_only=True)
            if form.schedule_type.data == 'now':
                _send_reminder(reminder)
            else:
                logger.info('Reminder modified by %s: %s', session.user, reminder)
                flash(_("The reminder at {} has been modified.")
                      .format(to_unicode(format_datetime(reminder.scheduled_dt))), 'success')
            return jsonify_data(flash=False)

        return jsonify_template('events/reminders/edit_reminder.html', event=self.event, reminder=reminder,
                                form=form)
Exemplo n.º 59
0
    def _process(self):
        reminder = self.reminder
        form = ReminderForm(obj=self._get_defaults(), event=self.event)
        if form.validate_on_submit():
            if reminder.is_sent:
                flash(_("This reminder has already been sent and cannot be modified anymore."), 'error')
                return redirect(url_for('.edit', reminder))
            form.populate_obj(reminder, existing_only=True)
            if form.schedule_type.data == 'now':
                _send_reminder(reminder)
            else:
                logger.info('Reminder modified by {}: {}'.format(session.user, reminder))
                flash(_("The reminder at {} has been modified.").format(format_datetime(reminder.scheduled_dt)),
                      'success')
            return redirect(url_for('.list', self.event))

        widget_attrs = ({field.short_name: {'disabled': True} for field in form}
                        if reminder.is_sent
                        else form.default_widget_attrs)
        return WPReminders.render_template('edit_reminder.html', self.event, event=self.event, reminder=reminder,
                                           form=form, widget_attrs=widget_attrs)