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)
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)
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)
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'))
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)
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'))
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)
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)
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'))
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.'
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)
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'))
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'))
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'))
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'))
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'))
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'))
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)
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)
def home(): """user dashboard""" return render_dashboard('dashboard/index.html', groups=current_user().groups())
def leave(): """leave event""" current_user().leave(g.event) return redirect(url_for('group.events'))