Exemple #1
0
def pull_ids(endpoint, values):
    try:
        g.group_url = values.pop('group_url')
        g.group = Group.query.filter_by(url=g.group_url).one_or_none()
        g.event_id = values.pop('event_id')
        g.event = Event.query.get(g.event_id)
        if not g.group or not g.event:
            abort(404)
        g.event.to_local('start', 'end')
        if current_user().is_authenticated:
            g.membership = Membership.query.filter_by(
                group_id=g.group.id, user_id=current_user().id,
                is_active=True).one_or_none()
            if g.membership:
                g.group_role = GroupRole.query.get(g.membership.role_id)
            else:
                g.group_role = None
            g.signup = Signup.query.filter_by(event_id=g.event.id,
                                              user_id=current_user().id,
                                              is_active=True).one_or_none()
            if g.signup:
                if g.signup.role_id:
                    g.event_role = EventRole.query.get(g.signup.role_id)
                else:
                    role = EventRole.query.filter_by(
                        event_id=g.event.id,
                        name=g.event.setting('role').value).one()
                    g.signup.update(role_id=role.id).save()
                    g.event_role = role
            else:
                g.event_role = None
        else:
            g.membership = g.signup = g.group_role = g.event_role = None
    except NoResultFound:
        abort(404)
Exemple #2
0
def pull_ids(endpoint, values):
    try:
        g.group_url = values.pop('group_url')
        g.group = Group.query.filter_by(url=g.group_url).one_or_none()
        g.event_id = values.pop('event_id')
        g.event = Event.query.get(g.event_id)
        if not g.group or not g.event:
            abort(404)
        g.event.to_local('start', 'end')
        if current_user().is_authenticated:
            g.membership = Membership.query.filter_by(
                group_id=g.group.id,
                user_id=current_user().id,
                is_active=True).one_or_none()
            if g.membership:
                g.group_role = GroupRole.query.get(g.membership.role_id)
            else:
                g.group_role = None
            g.signup = Signup.query.filter_by(
                event_id=g.event.id,
                user_id=current_user().id,
                is_active=True).one_or_none()
            if g.signup:
                if g.signup.role_id:
                    g.event_role = EventRole.query.get(g.signup.role_id)
                else:
                    role = EventRole.query.filter_by(event_id=g.event.id, name=g.event.setting('role').value).one()
                    g.signup.update(role_id=role.id).save()
                    g.event_role = role
            else:
                g.event_role = None
        else:
            g.membership = g.signup = g.group_role = g.event_role = None
    except NoResultFound:
        abort(404)
Exemple #3
0
def deactivate_signup(signup_id):
    """Deactivate signup"""
    try:
        signup = Signup.query.get(signup_id)
        if not signup.user.id == current_user().id and not current_user().can('authorize'):
            raise UserWarning('Not allowed to delete other signups.')
        signup.update(is_active=False).save()
        return redirect(url_for('event.home'))
    except NoResultFound:
        abort(404)
Exemple #4
0
def checkin_signup(signup_id):
    """checkin signup"""
    if g.group.setting('self_checkin').is_active or current_user().can('authorize'):
        try:
            signup = Signup.query.get(signup_id)
            checkin = signup.user.checkin(g.event, current_user())
            return redirect(url_for('event.home'))
        except NoResultFound:
            abort(404)
    else:
        return redirect(url_for('group.events'))
Exemple #5
0
def deactivate_signup(signup_id):
    """Deactivate signup"""
    try:
        signup = Signup.query.get(signup_id)
        if not signup.user.id == current_user().id and not current_user().can(
                'authorize'):
            raise UserWarning('Not allowed to delete other signups.')
        signup.update(is_active=False).save()
        return redirect(url_for('event.home'))
    except NoResultFound:
        abort(404)
Exemple #6
0
def checkin_signup(signup_id):
    """checkin signup"""
    if g.group.setting('self_checkin').is_active or current_user().can(
            'authorize'):
        try:
            signup = Signup.query.get(signup_id)
            checkin = signup.user.checkin(g.event, current_user())
            return redirect(url_for('event.home'))
        except NoResultFound:
            abort(404)
    else:
        return redirect(url_for('group.events'))
Exemple #7
0
def create_group():
    """create group form"""
    form = GroupForm(request.form)
    if request.method == 'POST' and form.validate():
        group = Group.from_request().save().load_roles(
            default_group_roles[request.form['category']]).save()
        current_user().join(group, role='Owner')
        group.load_settings('whitelist')
        return redirect(url_for('group.home', group_url=group.url))
    return render_dashboard('public/form.html',
                            title='Create Group',
                            submit='create',
                            form=form)
Exemple #8
0
def create_group():
    """create group form"""
    form = GroupForm(request.form)
    if request.method == 'POST' and form.validate():
        group = Group.from_request().save().load_roles(
            default_group_roles[request.form['category']]).save()
        current_user().join(group, role='Owner')
        group.load_settings('whitelist')
        return redirect(url_for('group.home', group_url=group.url))
    return render_dashboard('public/form.html',
        title='Create Group',
        submit='create',
        form=form)
Exemple #9
0
def member(user_id):
    """Displays information about member"""

    user = User.query.get(user_id)
    g.membership = Membership.query.filter_by(group_id=g.group.id,
                                              user_id=user_id).one_or_none()

    if not g.membership and user_id == current_user():
        return render_group(
            'confirm.html',
            back=url_for('group.home'),
            title='Create Profile?',
            message=
            'You have not yet joined this group. Click below to join now!',
            action='Join',
            url=url_for('group.signup'))

    checkins = Event.query.join(Checkin).filter(Checkin.user_id == user_id,
                                                Event.group_id == g.group.id)

    # naiive way of counting hours - need a query to do this!
    hours = 0.0
    for event in checkins:
        hours += (event.end - event.start).seconds / 3600.0

    return render_group('group/member.html',
                        membership=g.membership,
                        user=user,
                        total_checkins=checkins.count(),
                        total_hours=hours)
Exemple #10
0
def leave():
    """group leave"""
    Membership.query.filter_by(group_id=g.group.id,
                               user_id=current_user().id,
                               is_active=True).one().deactivate()
    # raise UserWarning(Membership.query.filter_by(
    #     group_id=g.group.id,
    #     user_id=current_user().id).one().is_active)
    return redirect(url_for('group.home'))
Exemple #11
0
def pull_group_id(endpoint, values):
    try:
        g.group_url = values.pop('group_url')
        g.group = Group.query.filter_by(url=g.group_url).one_or_none()
        if not g.group:
            abort(404)
        g.event_role = g.signup = None
        if current_user().is_authenticated:
            g.membership = Membership.query.filter_by(
                group_id=g.group.id, user_id=current_user().id,
                is_active=True).one_or_none()
            if g.membership:
                g.group_role = GroupRole.query.get(g.membership.role_id)
            else:
                g.group_role = None
        else:
            g.membership = g.group_role = None
    except NoResultFound:
        return 'No such group.'
Exemple #12
0
def checkin():
    """event checkin"""
    message = ''
    form = EventCheckinForm(request.form)
    if request.method == 'POST' and form.validate():
        setting = UserSetting.query.filter_by(
            name='authorize_code',
            value=request.form['code'].strip(),
            is_active=True).one_or_none()
        if setting:
            checkin = current_user().checkin(g.event, setting.user)
            return redirect(url_for('event.home', notif=8))
        message = 'Authorization failed.'
    form.event_id.default = g.event.id
    form.user_id.default = current_user().id
    form.process()
    return render_event('event/form.html',
                        title='Checkin for %s' % event.name,
                        message=message,
                        submit='Checkin',
                        form=form)
Exemple #13
0
def checkin():
    """event checkin"""
    message = ''
    form = EventCheckinForm(request.form)
    if request.method == 'POST' and form.validate():
        setting = UserSetting.query.filter_by(
            name='authorize_code',
            value=request.form['code'].strip(),
            is_active=True).one_or_none()
        if setting:
            checkin = current_user().checkin(g.event, setting.user)
            return redirect(url_for('event.home', notif=8))
        message = 'Authorization failed.'
    form.event_id.default = g.event.id
    form.user_id.default = current_user().id
    form.process()
    return render_event('event/form.html',
        title='Checkin for %s' % event.name,
        message=message,
        submit='Checkin',
        form=form)
Exemple #14
0
def signup():
    """event signup"""
    form = EventSignupForm(request.form)
    message = ''
    choose_role = g.event.setting('choose_role').is_active
    whitelisted = []
    for block in g.group.setting('whitelist').value.split(','):
        data = block.split('(')
        if len(data) == 2:
            whitelisted.append((data[0].strip(), data[1].strip()[:-1]))
        else:
            whitelisted.append((data[0].strip(), ''))
    emails = [s.strip() for s, _ in whitelisted]
    if current_user().email in emails:
        title = [
            title for email, title in whitelisted
            if email == current_user().email
        ][0]
        message = 'You\'ve been identified as "%s". Hello! Click "Confirm" below, to get started.' % title
    roles = EventRole.query.filter_by(event_id=g.event.id,
                                      is_active=True).all()
    if choose_role:
        form.role_id.choices = [(r.id, r.name) for r in roles]
    else:
        del form.role_id
    if current_user() in g.event:
        return redirect(url_for('event.home', notif=7))
    # if request.method == 'POST' and form.validate():
    data = {'category': g.event.setting('default_category').value}
    if current_user().email in emails:
        if title not in [r.name for r in roles]:
            title = 'Authorizer'
        data['role'] = title or 'Authorizer'
    elif choose_role:
        data['role_id'] = request.form['role_id']
    else:
        data['role'] = g.event.setting('role').value
    signup = current_user().signup(g.event, **data)
    return redirect(url_for('event.home'))
Exemple #15
0
def signup():
    """event signup"""
    form = EventSignupForm(request.form)
    message = ''
    choose_role = g.event.setting('choose_role').is_active
    whitelisted = []
    for block in g.group.setting('whitelist').value.split(','):
        data = block.split('(')
        if len(data) == 2:
            whitelisted.append((data[0].strip(), data[1].strip()[:-1]))
        else:
            whitelisted.append((data[0].strip(), ''))
    emails = [s.strip() for s, _ in whitelisted]
    if current_user().email in emails:
        title = [title for email, title in whitelisted if email == current_user().email][0]
        message = 'You\'ve been identified as "%s". Hello! Click "Confirm" below, to get started.' % title
    roles = EventRole.query.filter_by(
        event_id=g.event.id,
        is_active=True).all()
    if choose_role:
        form.role_id.choices = [(r.id, r.name) for r in roles]
    else:
        del form.role_id
    if current_user() in g.event:
        return redirect(url_for('event.home', notif=7))
    # if request.method == 'POST' and form.validate():
    data = {'category': g.event.setting('default_category').value }
    if current_user().email in emails:
        if title not in [r.name for r in roles]:
            title = 'Authorizer'
        data['role'] = title or 'Authorizer'
    elif choose_role:
        data['role_id'] = request.form['role_id']
    else:
        data['role'] = g.event.setting('role').value
    signup = current_user().signup(g.event, **data)
    return redirect(url_for('event.home'))
Exemple #16
0
def authorize():
    """event authorization (for checkin)"""
    form = EventGenerateCodeForm(request.form)
    setting = current_user().setting('authorize_code')
    n = 25
    if (request.method == 'POST' and form.validate()) or setting.value == default_user_settings['authorize_code']['value'] or UserSetting.query.filter_by(value=setting.value).count() > 1:
        setting.value = Base.hash(request.form.get('value', str(arrow.now()))
            )[n:n+int(request.form.get('length', 5))]
        setting.save()
    message = 'Current code: %s' % setting.value
    return render_event('event/form.html',
        title='Authorization Code for %s' % event.name,
        message=message,
        submit='Regenerate',
        form=form,
        back=url_for('event.home'))
Exemple #17
0
def signup():
    """group signup"""
    message = ''
    form = GroupSignupForm(request.form)
    choose_role = g.group.setting('choose_role').is_active
    message = 'Thank you for your interest in %s! Just click "Join" to join.' % g.group.name
    whitelisted, submit = [], 'Confirm'
    for block in g.group.setting('whitelist').value.split(','):
        data = block.split('(')
        if len(data) == 2:
            whitelisted.append((data[0].strip(), data[1].strip()[:-1]))
        else:
            whitelisted.append((data[0].strip(), ''))
    emails = [s.strip() for s, _ in whitelisted]
    if current_user().email in emails:
        title = [
            title for email, title in whitelisted
            if email == current_user().email
        ][0]
        message = 'You\'ve been identified as <code>%s</code>. Hello! Click "Confirm" below, to get started.' % title
        if not GroupRole.query.filter_by(group_id=g.group.id,
                                         name=title).one_or_none():
            submit = None
            message = 'You\'ve been identified as <code>%s</code>. Hello! However, there is no such role <code>%s</code> in this group - only <code>%s</code>. Please contact your group manager.' % (
                title, title, str([r.name for r in g.group.roles()]))
    if choose_role:
        form.role_id.choices = [(r.id, r.name)
                                for r in GroupRole.query.filter_by(
                                    group_id=g.group.id, is_active=True).all()]
    else:
        del form.role_id
    if current_user() in g.group:
        return redirect(url_for('group.home', notif=5))
    if request.method == 'POST' and form.validate():
        if current_user().email in emails:
            role = {'role': title or 'Authorizer'}
        elif choose_role:
            role = {'role_id': request.form['role_id']}
        else:
            role = {'role': g.group.setting('role').value}
        membership = current_user().join(g.group, **role)
        return redirect(url_for('group.home'))
    form.group_id.default = g.group.id
    form.user_id.default = current_user().id
    form.process()
    return render_group('group/form.html',
                        form_title='Signup for %s' % g.group.name,
                        form_description='Ready to join? Click confirm below.',
                        wide_title=True,
                        submit=submit,
                        form=form,
                        message=message,
                        back=url_for('group.home'))
Exemple #18
0
def authorize():
    """event authorization (for checkin)"""
    form = EventGenerateCodeForm(request.form)
    setting = current_user().setting('authorize_code')
    n = 25
    if (request.method == 'POST'
            and form.validate()) or setting.value == default_user_settings[
                'authorize_code']['value'] or UserSetting.query.filter_by(
                    value=setting.value).count() > 1:
        setting.value = Base.hash(request.form.get('value', str(
            arrow.now())))[n:n + int(request.form.get('length', 5))]
        setting.save()
    message = 'Current code: %s' % setting.value
    return render_event('event/form.html',
                        title='Authorization Code for %s' % event.name,
                        message=message,
                        submit='Regenerate',
                        form=form,
                        back=url_for('event.home'))
Exemple #19
0
def create_event():
    """create event"""
    form = EventForm(request.form)
    if request.method == 'POST' and form.validate():
        event = Event.from_request().save().load_roles(
            default_event_roles[g.group.category]).set_local(
                'start', 'end', 'until').save()
        return redirect(
            url_for('event.home',
                    event_id=current_user().signup(
                        event, 'Owner', category='Accepted').event_id))
    form.group_id.default = g.group.id
    form.start.default = arrow.now().floor('hour').to('local')
    form.end.default = form.start.default.replace(hours=1)
    form.until.default = form.end.default
    form.process()
    return render_group('group/form.html',
                        title='Create Event',
                        submit='Create',
                        form=form,
                        back=url_for('group.events'))
Exemple #20
0
def shift(yyyymmdd):
    """Event shift page.

    :param yyyymmdd: date formatted as YYYYMMDD
    """
    date = arrow.get(yyyymmdd, 'YYYYMMDD')
    candidate = g.event.get_shift_or_none(date)
    action = {}
    if candidate:
        return redirect(url_for('event.home', event_id=candidate.id))
    if current_user().can('create_event'):
        action = dict(url=url_for('event.copy', yyyymmdd=yyyymmdd),
                      action='Activate')
    return render_event(
        'confirm.html',
        title='Pending "{name}"'.format(name=event.name),
        message='This shift for the recurring event "{name}" on {date} has not'
        ' yet been activated.'.format(name=event.name,
                                      date=date.format('MMMM D, YYYY')),
        back=url_for('group.events'),
        **action)
Exemple #21
0
def shift(yyyymmdd):
    """Event shift page.

    :param yyyymmdd: date formatted as YYYYMMDD
    """
    date = arrow.get(yyyymmdd, 'YYYYMMDD')
    candidate = g.event.get_shift_or_none(date)
    action = {}
    if candidate:
        return redirect(url_for('event.home', event_id=candidate.id))
    if current_user().can('create_event'):
        action = dict(
            url=url_for('event.copy', yyyymmdd=yyyymmdd),
            action='Activate')
    return render_event(
        'confirm.html',
        title='Pending "{name}"'.format(name=event.name),
        message='This shift for the recurring event "{name}" on {date} has not'
        ' yet been activated.'.format(
            name=event.name,
            date=date.format('MMMM D, YYYY')),
        back=url_for('group.events'),
        **action)
Exemple #22
0
def home():
    """user dashboard"""
    return render_dashboard('dashboard/index.html',
                            groups=current_user().groups())
Exemple #23
0
def home():
    """user dashboard"""
    return render_dashboard('dashboard/index.html', groups=current_user().groups())
Exemple #24
0
def leave():
    """leave event"""
    current_user().leave(g.event)
    return redirect(url_for('group.events'))
Exemple #25
0
def leave():
    """leave event"""
    current_user().leave(g.event)
    return redirect(url_for('group.events'))