示例#1
0
def room_assistance_emails():
    inner = (Request.query.filter(
        Request.type == 'room-assistance',
        Request.state == RequestState.accepted).add_columns(
            func.jsonb_array_elements_text(
                Request.data['occurrences']).label('requested_at')).subquery())

    aliased_event = aliased(Event, name='event')
    requests = (db.session.query(inner, aliased_event).join(
        aliased_event, aliased_event.id == inner.c.event_id).filter(
            aliased_event.own_room_id.isnot(None)).filter(
                db.cast(inner.c.requested_at, db.Date) == db.cast(
                    now_utc(), db.Date)).all())

    requests = [req._asdict() for req in requests]
    template = get_plugin_template_module('emails/room_assistance_emails.html',
                                          requests=requests,
                                          parse_dt=dateutil.parser.parse)
    recipients = RoomAssistancePlugin.settings.get(
        'room_assistance_recipients')
    if recipients:
        email = make_email(from_address=config.NO_REPLY_EMAIL,
                           to_list=recipients,
                           template=template,
                           html=True)
        send_email(email)
示例#2
0
def conference_room_emails():
    start_date, end_date = _get_start_end_date()
    date_filter = db.and_(
        db.cast(Reservation.start_dt, db.Date) >= start_date,
        db.cast(Reservation.start_dt, db.Date) <= end_date)
    start_dt = as_utc(datetime.combine(start_date, time()))
    end_dt = as_utc(datetime.combine(end_date, time()))
    events_by_room = {}
    for room in CERNCronjobsPlugin.settings.get('rooms'):
        query = (Event.query.filter(~Event.is_deleted,
                                    Event.happens_between(start_dt, end_dt),
                                    Event.own_room_id == room.id).order_by(
                                        Event.start_dt))
        events_by_room[room] = _group_by_date(query)

    res_events_by_room = {}
    for room in CERNCronjobsPlugin.settings.get('reservation_rooms'):
        res_events_by_room[room] = _group_by_date(
            _get_reservations_query(date_filter, room_id=room.id))

    category_ids = [
        int(category['id'])
        for category in CERNCronjobsPlugin.settings.get('categories')
    ]
    committees = _get_category_events_query(start_dt, end_dt, category_ids)

    template = get_plugin_template_module(
        'conference_room_email.html',
        events_by_room=events_by_room,
        res_events_by_room=res_events_by_room,
        committees_by_date=_group_by_date(committees))
    recipients = CERNCronjobsPlugin.settings.get('conf_room_recipients')
    if recipients:
        _send_email(recipients, template)
示例#3
0
 def _make_json_response(self, data, is_event):
     mod = get_plugin_template_module("_results.html")
     return {
         "html": "\n".join(mod.render_result(r, is_event) for r in data["results"]),
         "has_more": data["has_more"],
         "offset": data["offset"],
     }
示例#4
0
def notify_attached(room, event, user):
    """Notifies about an existing chatroom being attached to an event.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action
    """
    tpl = get_plugin_template_module('emails/attached.txt', chatroom=room, event=event, user=user)
    _send(event, tpl)
示例#5
0
def notify_modified(room, event, user):
    """Notifies about the modification of a chatroom.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action
    """
    tpl = get_plugin_template_module('emails/modified.txt', chatroom=room, event=event, user=user)
    _send(event, tpl)
示例#6
0
def notify_owner(plugin, vc_room):
    """Notifies about the deletion of a Vidyo room from the Vidyo server."""
    user = vc_room.vidyo_extension.owned_by_user
    tpl = get_plugin_template_module('emails/remote_deleted.html',
                                     plugin=plugin,
                                     vc_room=vc_room,
                                     event=None,
                                     vc_room_event=None,
                                     user=user)
    _send('delete', user, plugin, None, vc_room, tpl)
示例#7
0
 def _make_json_response(self, data, is_event):
     mod = get_plugin_template_module('_results.html')
     return {
         'html':
         '\n'.join(mod.render_result(r, is_event) for r in data['results']),
         'has_more':
         data['has_more'],
         'offset':
         data['offset']
     }
示例#8
0
def notify_deleted(plugin, room, room_assoc, event, user):
    """Notifies about the deletion of a vc_room from the system.

    :param room: the vc_room
    :param event: the event
    :param user: the user performing the action
    """
    with plugin.plugin_context():
        tpl = get_plugin_template_module('emails/deleted.html', plugin=plugin, vc_room=room, event=event,
                                         vc_room_event=room_assoc, user=user)
        _send('delete', user, plugin, event, room, tpl.get_subject(), tpl.get_body())
示例#9
0
def notify_deleted(room, event, user, room_deleted):
    """Notifies about the deletion of a chatroom.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action; `None` if due to event deletion
    :param room_deleted: if the room has been deleted from the jabber server
    """
    tpl = get_plugin_template_module('emails/deleted.txt', chatroom=room, event=event, user=user,
                                     room_deleted=room_deleted)
    _send(event, tpl)
示例#10
0
def send_email_to_assistance(request, template_name, **template_params):
    from indico_room_assistance.plugin import RoomAssistancePlugin

    to_list = RoomAssistancePlugin.settings.get('room_assistance_recipients')
    if not to_list:
        return
    request_start_dt = request.data['start_dt']
    request_data = dict(request.data, start_dt=dateutil.parser.parse(request_start_dt))
    template = get_plugin_template_module('emails/{}.html'.format(template_name), event=request.event,
                                          requested_by=request.created_by_user, request_data=request_data,
                                          **template_params)
    send_email(make_email(from_address=config.NO_REPLY_EMAIL, to_list=to_list, template=template, html=True))
示例#11
0
def notify_modified(room, event, user):
    """Notifies about the modification of a chatroom.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action
    """
    tpl = get_plugin_template_module('emails/modified.txt',
                                     chatroom=room,
                                     event=event,
                                     user=user)
    _send(event, tpl)
示例#12
0
def notify_attached(room, event, user):
    """Notifies about an existing chatroom being attached to an event.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action
    """
    tpl = get_plugin_template_module('emails/attached.txt',
                                     chatroom=room,
                                     event=event,
                                     user=user)
    _send(event, tpl)
示例#13
0
def notify_created(plugin, room, room_assoc, event, user):
    """Notifies about the creation of a vc_room.

    :param room: the vc_room
    :param event: the event
    :param user: the user performing the action
    """
    with plugin.plugin_context():
        tpl = get_plugin_template_module('emails/created.html', plugin=plugin, vc_room=room, event=event,
                                         vc_room_event=room_assoc, user=user,
                                         linked_to_title=get_linked_to_description(room_assoc))
        _send('create', user, plugin, event, room, tpl.get_subject(), tpl.get_body())
示例#14
0
def seminar_emails():
    start_date, end_date = _get_start_end_date()
    start_dt = as_utc(datetime.combine(start_date, time()))
    end_dt = as_utc(datetime.combine(end_date, time()))
    seminar_categories = CERNCronjobsPlugin.settings.get('seminar_categories')
    if not seminar_categories:
        return
    category_ids = [int(category['id']) for category in seminar_categories]
    query = _get_category_events_query(start_dt, end_dt, category_ids)
    template = get_plugin_template_module('seminar_emails.html', events_by_date=_group_by_date(query))
    recipients = CERNCronjobsPlugin.settings.get('seminar_recipients')
    if recipients:
        _send_email(recipients, template)
def send_email_to_assistance(request, template_name, **template_params):
    from indico_room_assistance.plugin import RoomAssistancePlugin

    to_list = RoomAssistancePlugin.settings.get('room_assistance_recipients')
    if not to_list:
        return

    occurrences = [dateutil.parser.parse(occ) for occ in request.data['occurrences']]
    request_data = dict(request.data, occurrences=occurrences)
    template = get_plugin_template_module(f'emails/{template_name}.html', event=request.event,
                                          requested_by=request.created_by_user, request_data=request_data,
                                          **template_params)
    send_email(make_email(from_address=config.NO_REPLY_EMAIL, to_list=to_list, template=template, html=True))
示例#16
0
def notify_deleted(room, event, user, room_deleted):
    """Notifies about the deletion of a chatroom.

    :param room: the chatroom
    :param event: the event
    :param user: the user performing the action; `None` if due to event deletion
    :param room_deleted: if the room has been deleted from the jabber server
    """
    tpl = get_plugin_template_module('emails/deleted.txt',
                                     chatroom=room,
                                     event=event,
                                     user=user,
                                     room_deleted=room_deleted)
    _send(event, tpl)
示例#17
0
def startup_assistance_emails():
    reservations = _get_reservations_query(
        db.cast(Reservation.start_dt, db.Date) == date.today())
    reservations_by_room = OrderedDict()
    for reservation in reservations:
        if reservation.room in reservations_by_room:
            reservations_by_room[reservation.room].append(reservation)
        else:
            reservations_by_room[reservation.room] = [reservation]
    template = get_plugin_template_module(
        'startup_assistance_emails.html',
        reservations_by_room=reservations_by_room)
    recipients = CERNCronjobsPlugin.settings.get(
        'startup_assistance_recipients')
    if recipients:
        _send_email(recipients, template)
示例#18
0
def room_assistance_emails():
    requests = (Request.query.filter(
        Request.type == 'room-assistance',
        Request.state == RequestState.accepted, Event.own_room_id.isnot(None),
        db.cast(Request.data['start_dt'].astext,
                db.Date) == db.cast(now_utc(), db.Date)).join(Event))

    template = get_plugin_template_module('emails/room_assistance_emails.html',
                                          requests=requests,
                                          parse_dt=dateutil.parser.parse)
    recipients = RoomAssistancePlugin.settings.get(
        'room_assistance_recipients')
    if recipients:
        email = make_email(from_address=config.NO_REPLY_EMAIL,
                           to_list=recipients,
                           template=template,
                           html=True)
        send_email(email)
示例#19
0
def notify_owner(plugin, vc_room):
    """Notifies about the deletion of a Vidyo room from the Vidyo server."""
    user = vc_room.vidyo_extension.owned_by_user
    tpl = get_plugin_template_module('emails/remote_deleted.html', plugin=plugin, vc_room=vc_room, event=None,
                                     vc_room_event=None, user=user)
    _send('delete', user, plugin, None, vc_room, tpl)