Redesign corpus page and add possibility to add followers by username for owner

This commit is contained in:
Patrick Jentsch
2023-03-01 16:31:41 +01:00
parent ec6d0a6477
commit 145b80356d
4 changed files with 313 additions and 201 deletions

View File

@ -3,6 +3,7 @@ from flask import (
abort,
current_app,
flash,
jsonify,
make_response,
Markup,
redirect,
@ -49,22 +50,34 @@ def fake_add():
return ''
@bp.route('/<hashid:corpus_id>/is_public/enable', methods=['POST'])
@bp.route('/<hashid:corpus_id>/is_public', methods=['POST'])
@login_required
@owner_or_admin_required()
def enable_corpus_is_public(corpus_id):
def update_corpus_is_public(corpus_id):
is_public = request.json
if not isinstance(is_public, bool):
response = jsonify('The request body must be a boolean')
response.status_code = 400
abort(response)
corpus = Corpus.query.get_or_404(corpus_id)
corpus.is_public = True
corpus.is_public = is_public
db.session.commit()
return '', 204
@bp.route('/<hashid:corpus_id>/is_public/disable', methods=['POST'])
@bp.route('/<hashid:corpus_id>/followers/add', methods=['POST'])
@login_required
@owner_or_admin_required()
def disable_corpus_is_public(corpus_id):
def add_corpus_followers(corpus_id):
usernames = request.json
if not (isinstance(usernames, list) or all(isinstance(u, str) for u in usernames)):
response = jsonify('The request body must be a list of strings')
response.status_code = 400
abort(response)
corpus = Corpus.query.get_or_404(corpus_id)
corpus.is_public = False
for username in usernames:
user = User.query.filter_by(username=username, is_public=True).first_or_404()
user.follow_corpus(corpus)
db.session.commit()
return '', 204
@ -169,14 +182,12 @@ def create_corpus():
@login_required
def corpus(corpus_id):
corpus = Corpus.query.get_or_404(corpus_id)
exp_date = (datetime.utcnow() + timedelta(days=7)).strftime('%b %d, %Y')
roles = [x.name for x in CorpusFollowerRole.query.all()]
corpus_follower_roles = CorpusFollowerRole.query.all()
if corpus.user == current_user or current_user.is_administrator():
return render_template(
'corpora/corpus.html.j2',
corpus=corpus,
exp_date=exp_date,
roles=roles,
corpus_follower_roles=corpus_follower_roles,
title='Corpus'
)
if current_user.is_following_corpus(corpus) or corpus.is_public:
@ -191,6 +202,7 @@ def corpus(corpus_id):
)
abort(403)
@bp.route('/<hashid:corpus_id>/generate-corpus-share-link', methods=['GET', 'POST'])
@login_required
@corpus_follower_permission_required('GENERATE_SHARE_LINK')