mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-13 17:40:40 +00:00
Update admin user settings
This commit is contained in:
@ -58,6 +58,7 @@
|
||||
filters='rjsmin',
|
||||
output='gen/Requests.%(version)s.js',
|
||||
'js/Requests/Requests.js',
|
||||
'js/Requests/admin/admin.js',
|
||||
'js/Requests/contributions/contributions.js',
|
||||
'js/Requests/contributions/spacy_nlp_pipeline_models.js',
|
||||
'js/Requests/contributions/tesseract_ocr_pipeline_models.js',
|
||||
|
@ -96,7 +96,7 @@
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a class="btn modal-close waves-effect waves-light">Cancel</a>
|
||||
<a href="{{ url_for('.delete_user', user_id=user.id) }}" class="btn red modal-close waves-effect waves-light"><i class="material-icons left">delete</i>Delete</a>
|
||||
<a class="btn red modal-close waves-effect waves-light"><i class="material-icons left">delete</i>Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock modals %}
|
||||
|
@ -1,6 +1,74 @@
|
||||
{% extends "settings/settings.html.j2" %}
|
||||
|
||||
{% block page_content %}
|
||||
{% block admin_settings %}
|
||||
<div class="col s12 l4">
|
||||
<h4>Administrator Settings</h4>
|
||||
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
||||
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
||||
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
|
||||
Stet clita kasd gubergren, no sea tak</p>
|
||||
</div>
|
||||
<div class="col s12 l8">
|
||||
<br>
|
||||
<ul class="collapsible no-autoinit settings-collapsible">
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Confirmation status</span>
|
||||
<i class="caret material-icons">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<div class="row">
|
||||
<div class="col s12 l1">
|
||||
<p><i class="material-icons">check</i></p>
|
||||
</div>
|
||||
<div class="col s12 l7">
|
||||
<p>
|
||||
Confirmed<br>
|
||||
<span class="light">Change confirmation status manually.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col s3 l4">
|
||||
<div class="switch">
|
||||
<label>
|
||||
unconfirmed
|
||||
<input {% if user.confirmed %}checked{% endif %} id="user-confirmed-switch" type="checkbox">
|
||||
<span class="lever"></span>
|
||||
confirmed
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Role</span>
|
||||
<i class="caret material-icons">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST">
|
||||
{{ update_user_form.hidden_tag() }}
|
||||
{{ wtf.render_field(update_user_form.role, material_icon='manage_accounts') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(update_user_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endblock admin_settings %}
|
||||
|
||||
{% block scripts %}
|
||||
{{ super() }}
|
||||
ADMIN ADDITIONS
|
||||
{% endblock page_content %}
|
||||
<script>
|
||||
let userConfirmedSwitchElement = document.querySelector('#user-confirmed-switch');
|
||||
userConfirmedSwitchElement.addEventListener('change', (event) => {
|
||||
let newConfirmed = userConfirmedSwitchElement.checked;
|
||||
Requests.admin.users.entity.confirmed.update({{ user.hashid|tojson }}, newConfirmed)
|
||||
.catch((response) => {
|
||||
userConfirmedSwitchElement.checked = !userConfirmedSwitchElement;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock scripts %}
|
||||
|
@ -50,8 +50,4 @@
|
||||
{% block scripts %}
|
||||
{{ super() }}
|
||||
{% include "_scripts.html.j2" %}
|
||||
{% set page_script = self._TemplateReference__context.name|replace('.html.j2', '.js.j2') %}
|
||||
<script>
|
||||
{% include page_script ignore missing %}
|
||||
</script>
|
||||
{% endblock scripts %}
|
||||
|
@ -7,8 +7,7 @@
|
||||
<div class="col s12">
|
||||
<h1 id="title">{{ title }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col s12 l4">
|
||||
<h4>Profile Settings</h4>
|
||||
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
||||
@ -21,7 +20,7 @@
|
||||
<ul class="collapsible no-autoinit settings-collapsible">
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Profile Privacy Settings</span>
|
||||
<span>Profile Privacy</span>
|
||||
<i class="material-icons caret">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
@ -62,38 +61,47 @@
|
||||
<span>Profile information</span>
|
||||
<i class="material-icons caret">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST">
|
||||
{{ update_profile_information_form.hidden_tag() }}
|
||||
{{ wtf.render_field(update_profile_information_form.full_name, material_icon='badge') }}
|
||||
{{ wtf.render_field(update_profile_information_form.about_me, material_icon='description', id='about-me-textfield') }}
|
||||
{{ wtf.render_field(update_profile_information_form.website, material_icon='laptop') }}
|
||||
{{ wtf.render_field(update_profile_information_form.organization, material_icon='business') }}
|
||||
{{ wtf.render_field(update_profile_information_form.location, material_icon='location_on') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(update_profile_information_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Avatar</span>
|
||||
<i class="material-icons caret">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{{ edit_profile_form.hidden_tag() }}
|
||||
{{ wtf.render_field(edit_profile_form.full_name, material_icon='badge') }}
|
||||
{{ wtf.render_field(edit_profile_form.about_me, material_icon='description', id='about-me-textfield') }}
|
||||
{{ wtf.render_field(edit_profile_form.website, material_icon='laptop') }}
|
||||
{{ wtf.render_field(edit_profile_form.organization, material_icon='business') }}
|
||||
{{ wtf.render_field(edit_profile_form.location, material_icon='location_on') }}
|
||||
<p></p>
|
||||
{{ update_avatar_form.hidden_tag() }}
|
||||
<div class="row">
|
||||
<div class="col s12 m2">
|
||||
<img src="{{ url_for('users.user_avatar', user_id=user.id) }}" alt="user-image" class="circle responsive-img" id="avatar">
|
||||
<div class="col s12 l2">
|
||||
<img src="{{ url_for('users.user_avatar', user_id=user.id) }}" alt="Avatar" class="circle responsive-img" id="update-avatar-form-avatar-preview">
|
||||
</div>
|
||||
<div class="col s12 m6">
|
||||
{{ wtf.render_field(edit_profile_form.avatar, accept='image/jpeg, image/png, image/gif', placeholder='Choose an image file', id='avatar-upload') }}
|
||||
</div>
|
||||
<div class="col s12 m1">
|
||||
<a class="btn-floating red waves-effect waves-light modal-trigger" style="margin-top:15px;" href="#delete-avatar-modal"><i class="material-icons">delete</i></a>
|
||||
<div class="col s12 l10">
|
||||
<br class="hide-on-med-and-down">
|
||||
{{ wtf.render_field(update_avatar_form.avatar, accept='image/jpeg, image/png, image/gif', placeholder='Choose a JPEG or PNG file') }}
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<p></p>
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(edit_profile_form.submit, material_icon='send') }}
|
||||
<a class="btn red waves-effect waves-light modal-trigger" href="#delete-avatar-modal"><i class="material-icons left">delete</i>Delete</a>
|
||||
{{ wtf.render_field(update_avatar_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="col s12 l4">
|
||||
<h4>General Settings</h4>
|
||||
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
||||
@ -109,38 +117,14 @@
|
||||
<span>Account</span>
|
||||
<i class="caret material-icons">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{{ edit_account_form.hidden_tag() }}
|
||||
{{ wtf.render_field(edit_account_form.username, material_icon='person') }}
|
||||
{{ wtf.render_field(edit_account_form.email, material_icon='email') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(edit_account_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
<br>
|
||||
<div class="divider"></div>
|
||||
<p>Deleting an account has the following effects:</p>
|
||||
<ul>
|
||||
<li>All data associated with your corpora and jobs will be permanently deleted.</li>
|
||||
<li>All settings will be permanently deleted.</li>
|
||||
</ul>
|
||||
<div class="right-align">
|
||||
<a class="btn red waves-effect waves-light modal-trigger" href="#delete-user"><i class="material-icons left">delete</i>Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Notifications</span>
|
||||
<i class="caret material-icons">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST">
|
||||
{{ edit_notifications_form.hidden_tag() }}
|
||||
{{ wtf.render_field(edit_notifications_form.job_status_mail_notification_level, material_icon='notifications') }}
|
||||
{{ update_account_information_form.hidden_tag() }}
|
||||
{{ wtf.render_field(update_account_information_form.username, material_icon='person') }}
|
||||
{{ wtf.render_field(update_account_information_form.email, material_icon='email') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(edit_notifications_form.submit, material_icon='send') }}
|
||||
<a class="btn red waves-effect waves-light modal-trigger" href="#delete-user"><i class="material-icons left">delete</i>Delete</a>
|
||||
{{ wtf.render_field(update_account_information_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -152,18 +136,35 @@
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST">
|
||||
{{ change_password_form.hidden_tag() }}
|
||||
{{ wtf.render_field(change_password_form.password, material_icon='vpn_key') }}
|
||||
{{ wtf.render_field(change_password_form.new_password, material_icon='vpn_key') }}
|
||||
{{ wtf.render_field(change_password_form.new_password_2, material_icon='vpn_key') }}
|
||||
{{ update_password_form.hidden_tag() }}
|
||||
{{ wtf.render_field(update_password_form.password, material_icon='vpn_key') }}
|
||||
{{ wtf.render_field(update_password_form.new_password, material_icon='vpn_key') }}
|
||||
{{ wtf.render_field(update_password_form.new_password_2, material_icon='vpn_key') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(change_password_form.submit, material_icon='send') }}
|
||||
{{ wtf.render_field(update_password_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="collapsible-header" style="justify-content: space-between;">
|
||||
<span>Notifications</span>
|
||||
<i class="caret material-icons">keyboard_arrow_right</i>
|
||||
</div>
|
||||
<div class="collapsible-body">
|
||||
<form method="POST">
|
||||
{{ update_notifications_form.hidden_tag() }}
|
||||
{{ wtf.render_field(update_notifications_form.job_status_mail_notification_level, material_icon='notifications') }}
|
||||
<div class="right-align">
|
||||
{{ wtf.render_field(update_notifications_form.submit, material_icon='send') }}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% block admin_settings %}{% endblock admin_settings %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock page_content %}
|
||||
@ -184,11 +185,16 @@
|
||||
<div class="modal" id="delete-user">
|
||||
<div class="modal-content">
|
||||
<h4>Confirm User deletion</h4>
|
||||
<p>Do you really want to delete the User <b>{{ user.username }}</b>? All files will be permanently deleted!</p>
|
||||
<p>Do you really want to delete the User <b>{{ user.username }}</b>?</p>
|
||||
<p>Deleting an account has the following effects:</p>
|
||||
<ul>
|
||||
<li>All data (Jobs, Corpora, ...) associated with the account will be permanently deleted.</li>
|
||||
<li>All settings will be permanently deleted.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a class="btn modal-close waves-effect waves-light">Cancel</a>
|
||||
<a class="btn modal-close red waves-effect waves-light" id="delete-user-button">Delete</a>
|
||||
<a class="btn modal-close red waves-effect waves-light" id="delete-user">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock modals %}
|
||||
@ -196,25 +202,25 @@
|
||||
{% block scripts %}
|
||||
{{ super() }}
|
||||
<script>
|
||||
let deleteButtonElement = document.querySelector('#delete-avatar');
|
||||
let avatarElement = document.querySelector('#avatar');
|
||||
let avatarUploadElement = document.querySelector('#avatar-upload');
|
||||
let deleteAvatarButtonElement = document.querySelector('#delete-avatar');
|
||||
let avatarPreviewElement = document.querySelector('#update-avatar-form-avatar-preview');
|
||||
let avatarUploadElement = document.querySelector('#update-avatar-form-avatar');
|
||||
|
||||
avatarUploadElement.addEventListener('change', () => {
|
||||
let file = avatarUploadElement.files[0];
|
||||
avatarElement.src = URL.createObjectURL(file);
|
||||
avatarPreviewElement.src = URL.createObjectURL(file);
|
||||
});
|
||||
|
||||
deleteButtonElement.addEventListener('click', () => {
|
||||
deleteAvatarButtonElement.addEventListener('click', () => {
|
||||
Requests.settings.entity.deleteAvatar({{ user.hashid|tojson }})
|
||||
.then(
|
||||
(response) => {
|
||||
avatarElement.src = {{ url_for('static', filename='images/user_avatar.png')|tojson }};
|
||||
avatarPreviewElement.src = {{ url_for('static', filename='images/user_avatar.png')|tojson }};
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
document.querySelector('#delete-user-button').addEventListener('click', (event) => {
|
||||
document.querySelector('#delete-user').addEventListener('click', (event) => {
|
||||
Requests.settings.entity.delete({{ user.hashid|tojson }})
|
||||
.then((response) => {window.location.href = '/';});
|
||||
});
|
||||
|
Reference in New Issue
Block a user