mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-24 10:34:17 +00:00
(Public-)Corpus List fix+highligting owner status
This commit is contained in:
parent
8a85dd9e61
commit
b07addc5c3
@ -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():
|
||||
|
@ -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',
|
||||
|
@ -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
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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>
|
||||
|
@ -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 }})
|
||||
@ -321,8 +312,8 @@ let inviteUserModalSearchElement = document.querySelector('#invite-user-modal-se
|
||||
let inviteUserModalInviteButtonElement = document.querySelector('#invite-user-modal-invite-button');
|
||||
let users = {
|
||||
{% for user in users %}
|
||||
{{ user.username|tojson }}: {{ url_for('users.user_avatar', user_id=user.id)|tojson }}
|
||||
{% if not loop.last %},{% endif %}
|
||||
{{ user.username|tojson }}: {{ url_for('users.user_avatar', user_id=user.id)|tojson }}
|
||||
{% if not loop.last %},{% endif %}
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
|
@ -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 %}
|
||||
|
@ -74,7 +74,7 @@
|
||||
publicCorpusList.add(
|
||||
[
|
||||
{% for corpus in corpora %}
|
||||
{{ corpus.to_json_serializeable()|tojson }},
|
||||
{{ corpus.to_json_serializeable(backrefs=True)|tojson }},
|
||||
{% endfor %}
|
||||
]
|
||||
);
|
||||
|
@ -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 %}
|
||||
]
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user