Exemple #1
0
def query():
    """Displays all results for the query in category category_id, which can be
       'all' if no category is selected."""

    if not is_caltech_user():
        return login_redirect()

    category_id = flask.request.args.get('cat')
    if category_id is None:
        flask.abort(404)
    query = flask.request.args.get('q', '')

    # Create a dict of the passed-in attributes which are filterable
    attrs = {
        attr: value
        for attr, value in flask.request.args.items() if attr in SEARCH_ATTRS
    }
    attrs['item_active'] = True
    if category_id != helpers.ALL_CATEGORY:
        try:
            attrs['cat_id'] = int(category_id)
        except ValueError:
            flask.abort(404)
        # Pass in the cat_id to generate_search_table() if it's not 'all'

    items = helpers.generate_search_table(attrs, query)
    return helpers.render_with_top_marketplace_bar(
        'search.html', items=items, cat_id=category_id)
Exemple #2
0
def get_all_events():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    res = helpers.sync_data(all_data=True)
    error_message = helpers.check_if_error(res)
    if error_message:
        return flask.jsonify({'err': error_message})
    return flask.jsonify({'events': res})
Exemple #3
0
def get_image(user_id):
    if not is_caltech_user():
        flask.abort(401)

    extension, image = helpers.get_image(user_id)
    response = flask.make_response(image)
    response.headers.set('Content-Type',
                         mimetypes.guess_type('img.' + extension)[0])
    return response
Exemple #4
0
def get_events():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    res = helpers.sync_data(1, flask.request.form['year'], 12,
                            flask.request.form['year'])
    error_message = helpers.check_if_error(res)
    if error_message:
        return flask.jsonify({'err': error_message})
    return flask.jsonify({'events': res})
Exemple #5
0
def directory_search():
    if not is_caltech_user():
        return login_redirect()

    return flask.render_template(
        'directory_search.html',
        manage_members_houses=helpers.get_manage_members_houses(),
        houses=helpers.get_houses(),
        options=helpers.get_options(),
        residences=helpers.get_residences(),
        grad_years=helpers.get_grad_years())
Exemple #6
0
def sync():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    res = helpers.sync_data(all_data=True)
    error_message = helpers.check_if_error(res)
    if error_message:
        flask.flash(error_message)
    global last_update_time
    last_update_time = datetime.datetime.now()
    return flask.render_template(
        'calendar.html', permissions=helpers.get_permission())
Exemple #7
0
def feedback(group):
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()
    if group not in Groups:
        return flask.abort(404)
    summary = False
    if auth_utils.check_login():
        perms = auth_utils.get_permissions(flask.session['username'])
        if default_permissions.ADMIN in perms or permissions[group].SUMMARY in perms:
            summary = True
    return flask.render_template(
        'feedback.html', summary=summary, group=group, msg=Groups[group])
Exemple #8
0
def feedback_submit(group):
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()
    if group not in Groups:
        return flask.abort(404)
    fields = ['name', 'email', 'subject', 'msg', 'ombuds']
    data = {}
    for field in fields:
        data[field] = flask.request.form.get(field)
    complaint_id = helpers.register_complaint(group, data)
    flask.flash(
        Markup('Success (you may want to save this link): <a href="' +
               helpers.get_link(group, complaint_id) + '">View Complaint</a>'))
    return flask.redirect(flask.url_for('feedback.feedback', group=group))
Exemple #9
0
def view_user(user_id):
    if not is_caltech_user():
        return login_redirect()

    user = helpers.get_user(user_id)
    is_me = 'username' in flask.session and get_user_id(
        flask.session['username']) == user_id
    hidden_fields = helpers.get_hidden_fields(flask.session.get('username'),
                                              user_id)
    return flask.render_template('view_user.html',
                                 user=user,
                                 is_me=is_me,
                                 user_id=user_id,
                                 hidden_fields=hidden_fields)
Exemple #10
0
def get_events_backup():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    res = helpers.get_events_backup(1, flask.request.form['year'], 12,
                                    flask.request.form['year'])
    error_message = helpers.check_if_error(res)
    if error_message:
        return flask.jsonify({'err': error_message})
    return flask.jsonify({
        'events':
        res,
        'last_update_time':
        last_update_time.strftime("%Y-%m-%dT%H:%M:%SZ")
    })
Exemple #11
0
def get_all_events_backup():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    res = helpers.get_events_backup(all_data=True)
    error_message = helpers.check_if_error(res)
    if error_message:
        return flask.jsonify({'err': error_message})
    return flask.jsonify({
        'events':
        res,
        'permissions':
        helpers.get_permission(),
        'last_update_time':
        last_update_time.strftime("%Y-%m-%dT%H:%M:%SZ")
    })
Exemple #12
0
def view_user(user_id):
    if not is_caltech_user():
        return login_redirect()

    username = flask.session.get('username')
    user = helpers.get_user(user_id)
    if user is not None:
        hidden_fields = helpers.get_hidden_fields(username, user_id)
        user = {
            key: value
            for key, value in user.items() if key not in hidden_fields
        }
    is_me = username is not None and get_user_id(username) == user_id
    return flask.render_template('view_user.html',
                                 user=user,
                                 is_me=is_me,
                                 user_id=user_id)
Exemple #13
0
def view_item(item_id):
    """View additional details about item <item_id>"""

    if not is_caltech_user():
        return login_redirect()

    item = helpers.table_fetch(
        """
            marketplace_items NATURAL LEFT JOIN
            marketplace_textbooks NATURAL JOIN
            marketplace_categories
        """,
        one=True,
        fields=VIEW_FIELDS,
        attrs={'item_id': item_id})

    # Make sure the item_id is a valid item, i.e. data is nonempty
    if item is None:
        flask.abort(404)

    # Display textbook edition
    edition = item['textbook_edition']
    if edition:
        item['textbook_edition'] = helpers.process_edition(edition)

    # Grab the stored image links
    image_links = helpers.get_image_links(item_id)

    # Notify if the item is inactive
    if not item['item_active']:
        flask.flash('This item has been archived!')

    return helpers.render_with_top_marketplace_bar(
        'view_item.html',
        item_id=item_id,
        item=item,
        image_links=image_links,
        user=get_name_and_email(item['user_id']),
        can_edit=helpers.can_manage(item))
Exemple #14
0
def calendar_search():
    if not auth_utils.is_caltech_user():
        return auth_utils.login_redirect()

    return flask.render_template(
        'calendar_search.html', permissions=helpers.get_permission())
Exemple #15
0
def search():
    if not is_caltech_user():
        flask.abort(401)

    if flask.request.method == 'POST':
        form = flask.request.form
        page = 1
        per_page = 10
    else:
        form = flask.request.args
        page = int(form['page'])
        total = int(form['total'])
        per_page = int(form['per_page'])
    name = form['name']
    if name.strip() == '':
        name = None
    house_id = form['house_id']
    if house_id:
        house_id = int(house_id)
    else:
        house_id = None
    option_id = form['option_id']
    if option_id:
        option_id = int(option_id)
    else:
        option_id = None
    building_id = form['building_id']
    if building_id:
        building_id = int(building_id)
    else:
        building_id = None
    grad_year = form['grad_year']
    if grad_year:
        grad_year = int(grad_year)
    else:
        grad_year = None
    # TODO: remove timezone after COVID
    timezone_from = form.get('timezone_from')
    timezone_to = form.get('timezone_to')
    timezone_from = int(timezone_from) if timezone_from else None
    timezone_to = int(timezone_to) if timezone_to else None
    offset = (page - 1) * per_page
    args = dict(name=name,
                house_id=house_id,
                option_id=option_id,
                building_id=building_id,
                grad_year=grad_year,
                username=form['username'],
                email=form['email'],
                timezone_from=timezone_from,
                timezone_to=timezone_to)
    if flask.request.method == 'POST':
        total = helpers.execute_search(**args)
    offset = (page - 1) * per_page
    users = helpers.execute_search(**args, offset=offset, per_page=per_page)
    if total == 1:  #1 result
        return redirect(
            flask.url_for('directory_search.view_user',
                          user_id=users[0]['user_id']))
    show_images = form.get('show_images')
    query_info = {k: ('' if v is None else v) for k, v in args.items()}
    query_info['total'] = total
    query_info['show_images'] = show_images
    return flask.render_template('search_results.html',
                                 users=users,
                                 show_images=show_images,
                                 total=total,
                                 per_page=per_page,
                                 page=page,
                                 query_info=query_info)
Exemple #16
0
def search_by_name(name_query):
    if not is_caltech_user():
        flask.abort(401)

    return jsonify(helpers.get_users_by_name_query(name_query))