Beispiel #1
0
    def fields(self):
        query = (Room.query.filter(
            ~Room.is_deleted,
            Room.id.in_(get_managed_room_ids(self.user))).order_by(
                func.indico.natsort(Room.full_name)))

        fields = {
            'email_mode':
            IndicoEnumSelectField(
                _('Room notifications'),
                enum=RoomEmailMode,
                description=_(
                    'If you own or manage any rooms, you can choose whether to '
                    'receive notifications about activity related to them.')),
            'email_blacklist':
            IndicoQuerySelectMultipleField(
                _('Room blacklist'),
                query_factory=lambda: query,
                get_label='full_name',
                collection_class=set,
                render_kw={'size': 10},
                description=_('Regardless of the room notifications selected '
                              'above, you will never receive notifications '
                              'for rooms selected in this list.'))
        }
        if not query.count():
            # don't show an empty select field if user doesn't manage any rooms
            del fields['email_blacklist']
        return fields
Beispiel #2
0
def test_managed_rooms(monkeypatch, bulk_possible, create_user, create_room,
                       dummy_user):
    from indico.modules.rb.operations.rooms import get_managed_room_ids
    monkeypatch.setattr(User, 'can_get_all_multipass_groups', bulk_possible)

    users = {
        'x': {
            'first_name': 'Regular',
            'last_name': 'User'
        },
        'y': {
            'first_name': 'Room',
            'last_name': 'Owner'
        },
        'z': {
            'first_name': 'ManyRooms',
            'last_name': 'Owner'
        }
    }

    rooms = {
        'a': {
            'verbose_name': 'Red room',
            'owner': 'z'
        },
        'b': {
            'verbose_name': 'Blue room',
            'owner': 'y'
        },
        'c': {
            'verbose_name': 'Green room',
            'owner': 'y'
        }
    }

    user_map = {
        key: create_user(id_, **data)
        for id_, (key, data) in enumerate(users.items(), 1)
    }
    room_map = {}
    for id_, (key, data) in enumerate(rooms.items(), 1):
        data['id'] = id_
        data['owner'] = user_map[data['owner']]
        room_map[key] = create_room(**data)

    room_map['a'].update_principal(user_map['y'], full_access=True)

    for key, user in user_map.items():
        room_ids = [
            room.id for room in room_map.values()
            if (room.owner == user_map[key] or room.can_manage(user))
        ]
        assert get_managed_room_ids(user) == set(room_ids)
def get_room_blockings(timeframe=None, created_by=None, in_rooms_owned_by=None):
    query = (Blocking.query
             .join(Blocking.blocked_rooms)
             .join(BlockedRoom.room)
             .options(contains_eager('blocked_rooms').contains_eager('room'),
                      selectinload('_allowed')))

    criteria = []
    if timeframe == 'recent':
        criteria.append(Blocking.end_date >= date.today())
    elif timeframe == 'year':
        criteria.extend([Blocking.start_date <= date(date.today().year, 12, 31),
                         Blocking.end_date >= date(date.today().year, 1, 1)])
    if created_by:
        criteria.append(Blocking.created_by_user == created_by)
    if in_rooms_owned_by:
        criteria.append(BlockedRoom.room_id.in_(get_managed_room_ids(in_rooms_owned_by)))

    query = query.filter(db.and_(*criteria))
    return query.all()
Beispiel #4
0
def get_room_blockings(timeframe=None, created_by=None, in_rooms_owned_by=None):
    query = (Blocking.query
             .join(Blocking.blocked_rooms)
             .join(BlockedRoom.room)
             .options(contains_eager('blocked_rooms').contains_eager('room'),
                      selectinload('_allowed')))

    criteria = []
    if timeframe == 'recent':
        criteria.append(Blocking.end_date >= date.today())
    elif timeframe == 'year':
        criteria.extend([Blocking.start_date <= date(date.today().year, 12, 31),
                         Blocking.end_date >= date(date.today().year, 1, 1)])
    if created_by:
        criteria.append(Blocking.created_by_user == created_by)
    if in_rooms_owned_by:
        criteria.append(BlockedRoom.room_id.in_(get_managed_room_ids(in_rooms_owned_by)))

    query = query.filter(db.and_(*criteria))
    return query.all()
Beispiel #5
0
 def is_active(cls, user):
     return (rb_user_settings.get(user, 'email_mode', None) is not None or
             rb_user_settings.get(user, 'email_blacklist', None) is not None
             or get_managed_room_ids(user))