diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 11f98f6..f27ba47 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1441,6 +1441,32 @@ def update_project_settings(session, repo, settings, user): return 'Edited successfully settings of repo: %s' % repo.fullname +def update_user_settings(session, settings, user): + ''' Update the settings of a project. ''' + user_obj = get_user(session, user) + + update = [] + new_settings = user_obj.settings + for key in new_settings: + if key in settings: + if new_settings[key] != settings[key]: + update.append(key) + new_settings[key] = settings[key] + else: + update.append(key) + val = False + new_settings[key] = val + + if not update: + return 'No settings to change' + else: + user_obj.settings = new_settings + session.add(user_obj) + session.flush() + + return 'Successfully edited your settings' + + def fork_project(session, user, repo, gitfolder, docfolder, ticketfolder, requestfolder): ''' Fork a given project into the user's forks. ''' diff --git a/pagure/templates/user_settings.html b/pagure/templates/user_settings.html index 71c2a55..fe22f90 100644 --- a/pagure/templates/user_settings.html +++ b/pagure/templates/user_settings.html @@ -112,6 +112,42 @@ + + +
+
+ User settings +
+
+
+ {% for key in user.settings | sort %} + {% if user.settings[key] in [True, False, 'y'] %} +
+ +
+ {% else %} +
+ + +
+ {% endif %} + {% endfor %} + +

+ + {{ form.csrf_token }} +

+
+
+
+
{% if config.get('PAGURE_AUTH')=='local' %} Change password diff --git a/pagure/ui/app.py b/pagure/ui/app.py index 6f2f8f7..adef315 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -471,6 +471,49 @@ def user_settings(): form=form, ) +@APP.route('/settings/usersettings', methods=['POST']) +@login_required +def update_user_settings(): + """ Update the user's settings set in the settings page. + """ + if admin_session_timedout(): + if flask.request.method == 'POST': + flask.flash('Action canceled, try it again', 'error') + return flask.redirect( + flask.url_for('auth_login', next=flask.request.url)) + + + user = pagure.lib.search_user( + SESSION, username=flask.g.fas_user.username) + if not user: + flask.abort(404, 'User not found') + + form = pagure.forms.ConfirmationForm() + + if form.validate_on_submit(): + settings = {} + for key in flask.request.form: + if key == 'csrf_token': + continue + settings[key] = flask.request.form[key] + + try: + message = pagure.lib.update_user_settings( + SESSION, + settings=settings, + user=flask.g.fas_user.username, + ) + SESSION.commit() + flask.flash(message) + except pagure.exceptions.PagureException as msg: + SESSION.rollback() + flask.flash(msg, 'error') + except SQLAlchemyError as err: # pragma: no cover + SESSION.rollback() + flask.flash(str(err), 'error') + + return flask.redirect(flask.url_for('user_settings')) + @APP.route('/markdown/', methods=['POST']) def markdown_preview():