示例#1
0
def add_friends():
    # log usage
    ulog('add_friends -> page access')

    users = User.query.all()
    users = filter(lambda u: u.user_id != current_user.user_id, users)

    # update friends if form submitted
    if request.method == 'POST':
        friend_ids = request.form.getlist('friend_checkbox')
        for friend_id in friend_ids:
            friend = User.query.get(int(friend_id))
            ulog('add_friends -> user {} added friend {}'.format(
                current_user, friend))
            print('adding friend ', friend_id)
            current_user.add_friend(friend)

        # TODO: allow unfriending people?

        db.session.commit()

        # redirect to list
        return redirect(url_for('list'))

    return render_template(
        'add_friends.html',
        users=users,
        current_friends=current_user.friends if current_user.friends else [])
示例#2
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # if user is already logged in
        if current_user.is_authenticated and current_user.username == form.username.data:
            print(
                'User {} is already logged in. Navigating to destinations list'
                .format(current_user))
            return redirect(url_for('list'))

        # log in user, if they exist
        user = User.query.filter_by(username=form.username.data).first()
        if user is None:
            msg = 'Could not find user with username {}'.format(
                form.username.data)
            print(msg)
            flash(msg)
            return redirect(url_for('login'))
        login_user(user, remember=True)

        # log usage
        ulog('login -> login by user {}'.format(user))

        # redirect user either to list or to previous page
        next_page = request.args.get('next')
        if not next_page or url_parse(next_page).netloc != '':
            next_page = url_for('list')
        return redirect(next_page)

    return render_template('login.html', form=form)
示例#3
0
def user(username):
    # log usage
    ulog('user -> page access for username {}'.format(username))

    user = User.query.filter_by(username=username).first_or_404()
    destinations = sorted(user.destinations,
                          key=attrgetter('num_visits'),
                          reverse=True)
    num_friends = len(user.friends)

    return render_template('user.html',
                           user=user,
                           destinations=destinations,
                           num_friends=num_friends)
示例#4
0
def delete_destination():
    destination_id = int(request.form['destination_id'])
    dest = Destination.query.get(destination_id)
    print('Deleting', dest)

    # delete any associations destination is in
    for assoc in dest.users:
        db.session.delete(assoc)

    # delete destination itself
    db.session.delete(dest)
    db.session.commit()
    ulog('delete_destination -> user {} deleting destination {}'.format(
        current_user.username, dest))
    return {}
示例#5
0
def signup():
    form = SignupForm()
    if form.validate_on_submit():
        # TODO: if user already exists, send them straight to list
        print('Attempting to sign in user with information: ',
              form.username.data, form.email.data, form.name.data)

        user = User.query.filter_by(username=form.username.data).first()
        if user is not None:
            msg = 'There is already an account with the username {}'.format(
                form.username.data)
            print(msg)
            flash(msg)
            return redirect(url_for('signup'))

        user = User.query.filter_by(email=form.email.data).first()
        if user is not None:
            msg = 'There is already an account with the email {}'.format(
                form.email.data)
            print(msg)
            flash(msg)
            return redirect(url_for('signup'))

        # register user in database
        new_user = User(username=form.username.data,
                        name=form.name.data,
                        email=form.email.data,
                        friends=[],
                        destinations=[])
        db.session.add(new_user)
        print('registering user: {}'.format(new_user))
        db.session.commit()
        # log in new user
        login_user(new_user, remember=True)
        ulog('signup -> new signup by user {}'.format(new_user))
        # notify admins that new user signed up
        # NOTE: NOT WORKING
        # send_email('New User Signup', app.config['ADMIN_EMAILS'][0], ['*****@*****.**'], '', '<h2>New User Signup</h2>')

        # after user signs up, send them to page to select friends
        return redirect(url_for('add_friends'))

    return render_template('signup.html', form=form)
示例#6
0
def list():
    # log usage
    ulog('list -> page access')
    form = SearchForm()
    page_number = request.args.get('page', 1, type=int)
    region = request.args.get('region', current_user.region)

    # update user's region if they selected a different one
    if region != current_user.region:
        current_user.region = region
        db.session.commit()

    if form.validate_on_submit():
        # user has searched for destination
        search_term = '%{}%'.format(form.dq.data)
        print(search_term)
        # get destinations by search_term
        destinations_paginated = Destination.query.filter(
            Destination.name.like(search_term)).order_by(
                Destination.num_visits.desc()).order_by(
                    Destination.destination_id).paginate(
                        page_number, app.config['DESTINATIONS_PER_PAGE'],
                        False)
        print(destinations_paginated)

    else:
        # user has accessed page normally
        # get destinations by region
        destinations_paginated = Destination.query.filter_by(
            region=region).order_by(Destination.num_visits.desc()).order_by(
                Destination.destination_id).paginate(
                    page_number, app.config['DESTINATIONS_PER_PAGE'], False)

    # create next and previous URLs for pagination
    next_url = url_for('list', page=destinations_paginated.next_num, region=region) \
        if destinations_paginated.has_next else None
    prev_url = url_for('list', page=destinations_paginated.prev_num, region=region) \
        if destinations_paginated.has_prev else None

    # compile visit numbers for each destination
    destinations = destinations_paginated.items
    context = []
    for d in destinations:
        tmp = {
            'num_visits_by_current_user': 0,
            'friends_visited': [],
            'num_visits_by_friends': 0
        }
        for assoc in d.users:
            if assoc.user.user_id == current_user.user_id:
                tmp['num_visits_by_current_user'] = assoc.num_visits
            if assoc.user in current_user.friends:
                tmp['friends_visited'].append(assoc.user)
                tmp['num_visits_by_friends'] += assoc.num_visits
        context.append(tmp)

    return render_template('list.html',
                           destinations=enumerate(destinations),
                           context=context,
                           region=region,
                           current_user=current_user,
                           next_url=next_url,
                           prev_url=prev_url,
                           page_number=page_number,
                           num_dests=app.config['DESTINATIONS_PER_PAGE'],
                           form=form,
                           ADMINS=app.config['ADMINS'])
示例#7
0
def internal_error(error):
    ulog('500 -> encounted by {}'.format(current_user))
    db.session.rollback()
    return render_template('500.html'), 500