from flask import ( abort, redirect, render_template, send_from_directory, url_for ) from flask_breadcrumbs import register_breadcrumb from flask_login import current_user, login_required import os from app.models import Corpus, User from . import bp from .utils import user_dynamic_list_constructor as user_dlc @bp.route('') @register_breadcrumb(bp, '.', 'groupUsers') @login_required def users(): return redirect(url_for('main.social_area', _anchor='users')) @bp.route('/') @register_breadcrumb(bp, '.entity', '', dynamic_list_constructor=user_dlc) @login_required def user(user_id): user = User.query.get_or_404(user_id) last_seen = user.last_seen.strftime('%Y-%m-%d %H:%M') member_since = user.member_since.strftime('%Y-%m-%d') followed_corpora = [ c.to_json_serializeable() for c in user.followed_corpora ] own_public_corpora = [ c.to_json_serializeable() for c in Corpus.query.filter_by(is_public = True, user = user).all() ] if not user.is_public and user != current_user: abort(403) return render_template( 'users/profile.html.j2', followed_corpora=followed_corpora, last_seen=last_seen, member_since=member_since, own_public_corpora=own_public_corpora, user=user, user_id=user_id, title=user.username ) @bp.route('//avatar') @login_required def profile_avatar(user_id): user = User.query.get_or_404(user_id) if not (user.is_public or user == current_user or current_user.is_administrator()): abort(403) if user.avatar is None: return redirect(url_for('static', filename='images/user_avatar.png')) return send_from_directory( os.path.dirname(user.avatar.path), os.path.basename(user.avatar.path), as_attachment=True, attachment_filename=user.avatar.filename, mimetype=user.avatar.mimetype )