Skip to content
Snippets Groups Projects
Commit 020de69e authored by Patrick Jentsch's avatar Patrick Jentsch
Browse files

settings update

parent 9e585787
No related branches found
No related tags found
No related merge requests found
from flask import flash, redirect, render_template, request, url_for from flask import abort, flash, redirect, render_template, url_for
from flask_breadcrumbs import register_breadcrumb from flask_breadcrumbs import register_breadcrumb
from app import db, hashids from app import db
from app.models import Corpus, Role, User, UserSettingJobStatusMailNotificationLevel from app.models import Avatar, Corpus, User
from app.settings.forms import EditNotificationsForm from app.settings.forms import (
from app.settings.forms import EditAccountForm ChangePasswordForm,
EditNotificationsForm,
EditAccountForm,
EditProfileForm
)
from . import bp from . import bp
from .forms import AdminEditUserForm from .forms import AdminEditUserForm
from app.users.utils import ( from app.users.utils import (
...@@ -54,52 +58,116 @@ def user(user_id): ...@@ -54,52 +58,116 @@ def user(user_id):
) )
@bp.route('/users/<hashid:user_id>/edit', methods=['GET', 'POST']) @bp.route('/users/<hashid:user_id>/settings', methods=['GET', 'POST'])
@register_breadcrumb(bp, '.users.entity.edit', 'Edit', endpoint_arguments_constructor=user_eac) @register_breadcrumb(bp, '.users.entity.settings', '<i class="material-icons left">settings</i>Settings')
def edit_user(user_id): def user_settings(user_id):
user = User.query.get_or_404(user_id) user = User.query.get_or_404(user_id)
admin_edit_user_form = AdminEditUserForm( # region forms
data={'confirmed': user.confirmed, 'role': user.role.hashid}, edit_account_form = EditAccountForm(user=user)
prefix='admin-edit-user-form' edit_profile_form = EditProfileForm(user=user)
) change_password_form = ChangePasswordForm(user=user)
edit_profile_settings_form = EditAccountForm( edit_notifications_form = EditNotificationsForm(user=user)
user, # endregion forms
data=user.to_json_serializeable(), # region handle edit profile settings form
prefix='edit-profile-settings-form' if edit_account_form.validate_on_submit():
) user.email = edit_account_form.email.data
edit_notification_settings_form = EditNotificationsForm( user.username = edit_account_form.username.data
data=user.to_json_serializeable(), db.session.commit()
prefix='edit-notification-settings-form' flash('Profile settings updated')
) return redirect(url_for('.user_settings'))
if (admin_edit_user_form.submit.data # endregion handle edit profile settings forms
and admin_edit_user_form.validate()): # region handle edit public profile information form
user.confirmed = admin_edit_user_form.confirmed.data if edit_profile_form.validate_on_submit():
role_id = hashids.decode(admin_edit_user_form.role.data) if edit_profile_form.avatar.data:
user.role = Role.query.get(role_id) try:
Avatar.create(
edit_profile_form.avatar.data,
user=user
)
except (AttributeError, OSError):
abort(500)
user.about_me = edit_profile_form.about_me.data
user.location = edit_profile_form.location.data
user.organization = edit_profile_form.organization.data
user.website = edit_profile_form.website.data
user.full_name = edit_profile_form.full_name.data
db.session.commit() db.session.commit()
flash('Your changes have been saved') flash('Your changes have been saved')
return redirect(url_for('.edit_user', user_id=user.id)) return redirect(url_for('.user_settings'))
if (edit_profile_settings_form.submit.data # endregion handle edit public profile information form
and edit_profile_settings_form.validate()): # region handle change_password_form POST
user.email = edit_profile_settings_form.email.data if change_password_form.validate_on_submit():
user.username = edit_profile_settings_form.username.data user.password = change_password_form.new_password.data
db.session.commit() db.session.commit()
flash('Your changes have been saved') flash('Your changes have been saved')
return redirect(url_for('.edit_user', user_id=user.id)) return redirect(url_for('.user_settings'))
if (edit_notification_settings_form.submit.data # endregion handle change_password_form POST
and edit_notification_settings_form.validate()): # region handle edit_notification_settings_form POST
if edit_notifications_form.validate_on_submit():
user.setting_job_status_mail_notification_level = \ user.setting_job_status_mail_notification_level = \
UserSettingJobStatusMailNotificationLevel[ edit_notifications_form.job_status_mail_notification_level.data
edit_notification_settings_form.job_status_mail_notification_level.data # noqa
]
db.session.commit() db.session.commit()
flash('Your changes have been saved') flash('Your changes have been saved')
return redirect(url_for('.edit_user', user_id=user.id)) return redirect(url_for('.user_settings'))
# endregion handle edit_notification_settings_form POST
return render_template( return render_template(
'admin/edit_user.html.j2', 'admin/user_settings.html.j2',
admin_edit_user_form=admin_edit_user_form, title='Settings',
edit_profile_settings_form=edit_profile_settings_form, change_password_form=change_password_form,
edit_notification_settings_form=edit_notification_settings_form, edit_account_form=edit_account_form,
title='Edit user', edit_notifications_form=edit_notifications_form,
edit_profile_form=edit_profile_form,
user=user user=user
) )
# @bp.route('/users/<hashid:user_id>/edit', methods=['GET', 'POST'])
# @register_breadcrumb(bp, '.users.entity.edit', 'Edit', endpoint_arguments_constructor=user_eac)
# def edit_user(user_id):
# user = User.query.get_or_404(user_id)
# admin_edit_user_form = AdminEditUserForm(
# data={'confirmed': user.confirmed, 'role': user.role.hashid},
# prefix='admin-edit-user-form'
# )
# edit_profile_settings_form = EditAccountForm(
# user,
# data=user.to_json_serializeable(),
# prefix='edit-profile-settings-form'
# )
# edit_notification_settings_form = EditNotificationsForm(
# data=user.to_json_serializeable(),
# prefix='edit-notification-settings-form'
# )
# if (admin_edit_user_form.submit.data
# and admin_edit_user_form.validate()):
# user.confirmed = admin_edit_user_form.confirmed.data
# role_id = hashids.decode(admin_edit_user_form.role.data)
# user.role = Role.query.get(role_id)
# db.session.commit()
# flash('Your changes have been saved')
# return redirect(url_for('.edit_user', user_id=user.id))
# if (edit_profile_settings_form.submit.data
# and edit_profile_settings_form.validate()):
# user.email = edit_profile_settings_form.email.data
# user.username = edit_profile_settings_form.username.data
# db.session.commit()
# flash('Your changes have been saved')
# return redirect(url_for('.edit_user', user_id=user.id))
# if (edit_notification_settings_form.submit.data
# and edit_notification_settings_form.validate()):
# user.setting_job_status_mail_notification_level = \
# UserSettingJobStatusMailNotificationLevel[
# edit_notification_settings_form.job_status_mail_notification_level.data # noqa
# ]
# db.session.commit()
# flash('Your changes have been saved')
# return redirect(url_for('.edit_user', user_id=user.id))
# return render_template(
# 'admin/edit_user.html.j2',
# admin_edit_user_form=admin_edit_user_form,
# edit_profile_settings_form=edit_profile_settings_form,
# edit_notification_settings_form=edit_notification_settings_form,
# title='Edit user',
# user=user
# )
...@@ -4,7 +4,7 @@ from threading import Thread ...@@ -4,7 +4,7 @@ from threading import Thread
import os import os
from app import db from app import db
from app.decorators import content_negotiation from app.decorators import content_negotiation
from app.models import Avatar, User from app.models import Avatar, User, ProfilePrivacySettings
from . import bp from . import bp
@bp.route('/<hashid:user_id>', methods=['DELETE']) @bp.route('/<hashid:user_id>', methods=['DELETE'])
...@@ -71,3 +71,28 @@ def update_user_is_public(user_id): ...@@ -71,3 +71,28 @@ def update_user_is_public(user_id):
'category': 'corpus' 'category': 'corpus'
} }
return response_data, 200 return response_data, 200
# @bp.route('/<hashid:user_id>/profile-privacy-settings', methods=['PUT'])
# @login_required
# @content_negotiation(consumes='application/json', produces='application/json')
# def update_profile_privacy_settings(user_id):
# profile_privacy_settings = request.json
# if not isinstance(profile_privacy_settings, list):
# abort(400)
# for profile_privacy_setting in profile_privacy_settings:
# if not isinstance(profile_privacy_setting, str):
# abort(400)
# if not profile_privacy_setting in ProfilePrivacySettings.__members__:
# abort(400)
# user = User.query.get_or_404(user_id)
# user.is_public = is_public
# db.session.commit()
# response_data = {
# 'message': (
# f'User "{user.username}" is now'
# f' {"public" if is_public else "private"}'
# ),
# 'category': 'corpus'
# }
# return response_data, 200
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
</ul> </ul>
</div> </div>
<div class="card-action right-align"> <div class="card-action right-align">
<a class="btn waves-effect waves-light" href="{{ url_for('.edit_user', user_id=user.id) }}"><i class="material-icons left">edit</i>Edit</a> <a class="btn waves-effect waves-light" href="{{ url_for('.user_settings', user_id=user.id) }}"><i class="material-icons left">edit</i>Edit</a>
<a class="btn red modal-trigger waves-effect waves-light" data-target="delete-user-modal"><i class="material-icons left">delete</i>Delete</a> <a class="btn red modal-trigger waves-effect waves-light" data-target="delete-user-modal"><i class="material-icons left">delete</i>Delete</a>
</div> </div>
</div> </div>
......
{% extends "settings/settings.html.j2" %}
{% block page_content %}
{{ super() }}
ADMIN ADDITIONS
{% endblock page_content %}
...@@ -19,26 +19,6 @@ ...@@ -19,26 +19,6 @@
<div class="col s8"> <div class="col s8">
<br> <br>
<ul class="collapsible no-autoinit settings-collapsible"> <ul class="collapsible no-autoinit settings-collapsible">
<li>
<div class="collapsible-header" style="justify-content: space-between;">
<span>User Settings</span>
<i class="caret material-icons right">keyboard_arrow_right</i>
</div>
<div class="collapsible-body">
<form method="POST" enctype="multipart/form-data">
<div class="row">
<div class="col s6">
{{ 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>
</div>
<div class="right-align">
{{ wtf.render_field(edit_account_form.submit, material_icon='send') }}
</div>
</form>
</div>
</li>
<li> <li>
<div class="collapsible-header" style="justify-content: space-between;"><span>Public Profile</span><i class="material-icons caret right">keyboard_arrow_right</i></div> <div class="collapsible-header" style="justify-content: space-between;"><span>Public Profile</span><i class="material-icons caret right">keyboard_arrow_right</i></div>
<div class="collapsible-body"> <div class="collapsible-body">
...@@ -57,6 +37,26 @@ ...@@ -57,6 +37,26 @@
<div class="divider"></div> <div class="divider"></div>
<p>Show:</p> <p>Show:</p>
<div class="row"> <div class="row">
<div class="col s3">
<label>
<input {% if user.has_profile_privacy_setting('SHOW_EMAIL') %}checked{% endif %} id="profile-show-email-checkbox" type="checkbox">
<span>Email</span>
</label>
</div>
<div class="col s3">
<label>
<input {% if user.has_profile_privacy_setting('SHOW_LAST_SEEN') %}checked{% endif %} id="profile-show-last-seen-checkbox" type="checkbox">
<span>Last seen</span>
</label>
</div>
<div class="col s3">
<label>
<input {% if user.has_profile_privacy_setting('SHOW_MEMBER_SINCE') %}checked{% endif %} id="profile-show-member-since-checkbox" type="checkbox">
<span>Member since</span>
</label>
</div>
</div>
{# <div class="row">
<div class="col s3"> <div class="col s3">
<p> <p>
<label> <label>
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
</label> </label>
</p> </p>
</div> </div>
</div> </div> #}
<p></p> <p></p>
<br> <br>
{{ wtf.render_field(edit_profile_form.full_name, material_icon='badge') }} {{ wtf.render_field(edit_profile_form.full_name, material_icon='badge') }}
...@@ -125,7 +125,33 @@ ...@@ -125,7 +125,33 @@
<ul class="collapsible no-autoinit settings-collapsible"> <ul class="collapsible no-autoinit settings-collapsible">
<li> <li>
<div class="collapsible-header" style="justify-content: space-between;"> <div class="collapsible-header" style="justify-content: space-between;">
<span>Notification Settings</span> <span>Account</span>
<i class="caret material-icons right">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> <i class="caret material-icons">keyboard_arrow_right</i>
</div> </div>
<div class="collapsible-body"> <div class="collapsible-body">
...@@ -155,22 +181,6 @@ ...@@ -155,22 +181,6 @@
</form> </form>
</div> </div>
</li> </li>
<li>
<div class="collapsible-header" style="justify-content: space-between;">
<span>Delete Account</span>
<i class="caret material-icons right">keyboard_arrow_right</i>
</div>
<div class="collapsible-body">
<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>
</ul> </ul>
</div> </div>
</div> </div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment