(Public-)Corpus List fix+highligting owner status

This commit is contained in:
Inga Kirschnick 2023-05-05 08:41:14 +02:00
parent 8a85dd9e61
commit b07addc5c3
9 changed files with 51 additions and 58 deletions

View File

@ -51,7 +51,8 @@ def create_corpus():
def corpus(corpus_id):
corpus = Corpus.query.get_or_404(corpus_id)
cfrs = CorpusFollowerRole.query.all()
users = User.query.filter(User.is_public == True, User.id != current_user.id).all()
# TODO: Better solution for filtering admin
users = User.query.filter(User.is_public == True, User.id != current_user.id, User.id != corpus.user.id, User.role_id < 4).all()
cfa = CorpusFollowerAssociation.query.filter_by(corpus_id=corpus_id, follower_id=current_user.id).first()
if cfa is None:
if corpus.user == current_user or current_user.is_administrator():

View File

@ -3,6 +3,7 @@ from flask_breadcrumbs import register_breadcrumb
from flask_login import current_user, login_required, login_user
from app.auth.forms import LoginForm
from app.models import Corpus, User
from sqlalchemy import or_
from . import bp
@ -38,8 +39,10 @@ def faq():
@register_breadcrumb(bp, '.dashboard', '<i class="material-icons left">dashboard</i>Dashboard')
@login_required
def dashboard():
corpora = Corpus.query.filter(or_(Corpus.followers.any(id=current_user.id), Corpus.user == current_user)).all()
return render_template(
'main/dashboard.html.j2',
corpora=corpora,
title='Dashboard'
)
@ -81,15 +84,7 @@ def terms_of_use():
@register_breadcrumb(bp, '.social_area', '<i class="material-icons left">group</i>Social Area')
@login_required
def social_area():
# corpora = [
# c.to_json_serializeable() for c
# in Corpus.query.filter(Corpus.is_public == True, Corpus.user != current_user).all()
# ]
corpora = Corpus.query.filter(Corpus.is_public == True, Corpus.user != current_user).all()
# users = [
# u.to_json_serializeable(relationships=True, filter_by_privacy_settings=True,) for u
# in User.query.filter(User.is_public == True, User.id != current_user.id).all()
# ]
users = User.query.filter(User.is_public == True, User.id != current_user.id).all()
return render_template(
'main/social_area.html.j2',

View File

@ -16,15 +16,6 @@ class CorpusList extends ResourceList {
if (this.isInitialized) {this.onPatch(patch);}
});
});
app.getUser(this.userId).then((user) => {
let followedCorpora = [];
for (let cfa of Object.values(user.corpus_follower_associations)) {
followedCorpora.push(cfa.corpus);
}
this.add(Object.values(user.corpora));
this.add(followedCorpora);
this.isInitialized = true;
});
}
// #region Mandatory getters and methods to implement
@ -33,6 +24,7 @@ class CorpusList extends ResourceList {
<tr class="list-item clickable hoverable">
<td><a class="btn-floating disabled"><i class="material-icons service-color darken" data-service="corpus-analysis">book</i></a></td>
<td><b class="title"></b><br><i class="description"></i></td>
<td><span class="owner"></span></td>
<td><span class="status badge new corpus-status-color corpus-status-text" data-badge-caption=""></span></td>
<td class="right-align">
<a class="list-action-trigger btn-floating red waves-effect waves-light" data-list-action="delete-request"><i class="material-icons">delete</i></a>
@ -48,7 +40,9 @@ class CorpusList extends ResourceList {
{data: ['creation-date']},
{name: 'status', attr: 'data-status'},
'description',
'title'
'title',
'owner',
{data: ['is-owner']}
];
}
@ -68,6 +62,7 @@ class CorpusList extends ResourceList {
<tr>
<th></th>
<th>Title and Description</th>
<th>Owner</th>
<th>Status</th>
<th></th>
</tr>
@ -84,7 +79,9 @@ class CorpusList extends ResourceList {
'creation-date': corpus.creation_date,
'description': corpus.description,
'status': corpus.status,
'title': corpus.title
'title': corpus.title,
'owner': corpus.user.username,
'is-owner': corpus.user.id === currentUserId ? true : false
};
}

View File

@ -1,14 +0,0 @@
class FollowedCorpusList extends CorpusList {
get item() {
return `
<tr class="list-item clickable hoverable">
<td><a class="btn-floating disabled"><i class="material-icons service-color darken" data-service="corpus-analysis">book</i></a></td>
<td><b class="title"></b><br><i class="description"></i></td>
<td><span class="status badge new corpus-status-color corpus-status-text" data-badge-caption=""></span></td>
<td class="right-align">
<a class="list-action-trigger btn-floating service-color darken waves-effect waves-light" data-list-action="view" data-service="corpus-analysis"><i class="material-icons">send</i></a>
</td>
</tr>
`.trim();
}
}

View File

@ -4,6 +4,7 @@ class PublicCorpusList extends CorpusList {
<tr class="list-item clickable hoverable">
<td><a class="btn-floating disabled"><i class="material-icons service-color darken" data-service="corpus-analysis">book</i></a></td>
<td><b class="title"></b><br><i class="description"></i></td>
<td><span class="owner"></span></td>
<td><span class="status badge new corpus-status-color corpus-status-text" data-badge-caption=""></span></td>
<td class="right-align">
<a class="list-action-trigger btn-floating service-color darken waves-effect waves-light" data-list-action="view" data-service="corpus-analysis"><i class="material-icons">send</i></a>

View File

@ -110,8 +110,8 @@
</table>
<br>
<p></p>
{% if not current_user.is_following_corpus(corpus) %}
<a class="waves-effect waves-light btn-small">Request Corpus</a>
{% if not current_user.is_following_corpus(corpus) and corpus.user.has_profile_privacy_setting('SHOW_EMAIL') %}
<a class="waves-effect waves-light btn-small" href="mailto:{{ corpus.user.email }}">Request Corpus</a>
{% endif %}
<a class="waves-effect waves-light btn-small" href="{{ url_for('users.user', user_id=corpus.user.id) }}">View profile</a>
</div>
@ -153,7 +153,7 @@
{% block modals %}
{{ super() }}
{% if cfr.has_permission('MANAGE_FOLLOWERS') %}
{% if current_user == corpus.user or current_user.is_administrator() %}
<div class="modal" id="publishing-modal">
<div class="modal-content">
<h4>Change your Corpus publishing status</h4>
@ -172,9 +172,7 @@
<a class="modal-close waves-effect waves-green btn-flat">Close</a>
</div>
</div>
{% endif %}
{% if current_user == corpus.user or current_user.is_administrator() %}
<div class="modal" id="delete-modal">
<div class="modal-content">
<h4>Confirm Corpus deletion</h4>
@ -221,9 +219,9 @@
You can set different roles via the link, you can also edit them later in the menu below.
It is recommended not to set the expiration date of the link too far.
</p>
<h5>Please make sure that the invited users are legally allowed to view the included corpus files.</h5>
<p><b>Please make sure that the invited users are legally allowed to view the included corpus files.</b></p>
<div class="row">
<div class="col s12 l3">
<div class="col s12 l2">
<div class="input-field">
<i class="material-icons prefix">badge</i>
<select id="share-link-modal-corpus-follower-role-select">
@ -241,12 +239,12 @@
<label for="expiration-date">Expiration date</label>
</div>
</div>
<div class="col s12 l3">
<div class="col s12 l2">
<br class="hide-on-med-and-down">
<a class="btn waves-effect waves-light" id="share-link-modal-create-button">Create<i class="material-icons right">send</i></a>
</div>
<div class="col s12 l6">
<div class="col s12 l5">
<div class="row hide" id="share-link-modal-output-container">
<div class="col s9">
<div class="input-field">
@ -275,13 +273,6 @@
let corpusDisplay = new CorpusDisplay(document.querySelector('#corpus-display'));
{% if current_user.is_following_corpus(corpus) %}
{% if cfr.has_permission('MANAGE_FILES') %}
let buildButton = document.querySelector('#build-button');
buildButton.addEventListener('click', () => {
Requests.corpora.entity.build({{ corpus.hashid|tojson }})
});
{% endif %}
let unfollowRequestElement = document.querySelector('.action-button[data-action="unfollow-request"]');
unfollowRequestElement.addEventListener('click', () => {
Requests.corpora.entity.followers.entity.delete({{ corpus.hashid|tojson }}, {{ current_user.hashid|tojson }})

View File

@ -15,7 +15,7 @@
<div class="col s12">
<div class="card">
<div class="card-content">
<div class="corpus-list" data-user-id="{{ current_user.hashid }}"></div>
<div class="corpus-list no-autoinit" data-user-id="{{ current_user.hashid }}"></div>
</div>
<div class="card-action right-align">
<a class="btn disabled waves-effect waves-light" href="{{ url_for('corpora.import_corpus') }}">Import Corpus<i class="material-icons right">import_export</i></a>
@ -135,3 +135,21 @@
</div>
</div>
{% endblock modals %}
{% block scripts %}
{{ super() }}
<script>
let corpusList = new CorpusList(document.querySelector('.corpus-list'));
corpusList.add(
[
{% for corpus in corpora %}
{{ corpus.to_json_serializeable(backrefs=True)|tojson }},
{% endfor %}
]
);
corpusItems = document.querySelectorAll('[data-is-owner="false"]');
corpusItems.forEach((item) => {
item.classList.add('deep-purple', 'lighten-5');
});
</script>
{% endblock scripts %}

View File

@ -74,7 +74,7 @@
publicCorpusList.add(
[
{% for corpus in corpora %}
{{ corpus.to_json_serializeable()|tojson }},
{{ corpus.to_json_serializeable(backrefs=True)|tojson }},
{% endfor %}
]
);

View File

@ -122,19 +122,23 @@
{% block scripts %}
{{ super() }}
<script>
let followedCorpusList = new FollowedCorpusList(document.querySelector('.followed-corpus-list'));
let followedCorpusList = new PublicCorpusList(document.querySelector('.followed-corpus-list'));
followedCorpusList.add(
[
{% for corpus in user.followed_corpora %}
{{ corpus.to_json_serializeable()|tojson }},
{% if (corpus.is_public or corpus.user == current_user) %}
{{ corpus.to_json_serializeable(backrefs=True)|tojson }},
{% endif %}
{% endfor %}
]
);
let publicCorpusList = new PublicCorpusList(document.querySelector('.public-corpus-list'));
publicCorpusList.add(
[
{% for corpus in user.corpora if corpus.is_public %}
{{ corpus.to_json_serializeable()|tojson }},
{% for corpus in user.corpora %}
{% if corpus.is_public %}
{{ corpus.to_json_serializeable(backrefs=True)|tojson }},
{% endif %}
{% endfor %}
]
);