From 28c0ef4a929f93ae4506cd3e93e87ce08a4fbd55 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Apr 26 2015 08:23:48 +0000 Subject: Add the group controller listing all groups or displaying one --- diff --git a/pagure/templates/group_info.html b/pagure/templates/group_info.html new file mode 100644 index 0000000..676dd5c --- /dev/null +++ b/pagure/templates/group_info.html @@ -0,0 +1,43 @@ +{% extends "master.html" %} + +{% block title %}Group {{ group.name }}{% endblock %} +{%block tag %}groups{% endblock %} + + +{% block header %} + +{% endblock %} + +{% block content %} +

Group: {{ group.group_name }}

+ + +

Members

+ +{% if authenticated and group.group_name in g.fas_user.groups %} +
+

Add an user to this group

+
+ + {{ form.csrf_token }} + +
+
+{% endif %} + +
+ +
+ +{% endblock %} diff --git a/pagure/templates/group_list.html b/pagure/templates/group_list.html new file mode 100644 index 0000000..6cc4c3e --- /dev/null +++ b/pagure/templates/group_list.html @@ -0,0 +1,51 @@ +{% extends "master.html" %} + +{% block title %}Groups{% endblock %} +{%block tag %}groups{% endblock %} + + +{% block content %} + +

Groups

+ +{% if total_page and total_page > 1 %} + + + + + + +
+ {% if page > 1%} + + < Previous + + {% else %} + < Previous + {% endif %} + {{ page }} / {{ total_page }} + {% if page < total_page %} + + Next > + + {% else %} + Next > + {% endif %} +
+{% endif %} + +

{{ groups_length }} groups.

+ +
+ +
+ +{% endblock %} diff --git a/pagure/ui/groups.py b/pagure/ui/groups.py new file mode 100644 index 0000000..db5f51b --- /dev/null +++ b/pagure/ui/groups.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2015 - Copyright Red Hat Inc + + Authors: + Pierre-Yves Chibon + +""" + +import flask +import os + +from sqlalchemy.exc import SQLAlchemyError + +import pagure +import pagure.forms +import pagure.lib + + +# pylint: disable=E1101 + +# URLs + +@pagure.APP.route('/groups') +def group_lists(): + ''' List all the groups associated with all the projects. ''' + groups = pagure.lib.search_groups(pagure.SESSION, grp_type='user') + + return flask.render_template( + 'group_list.html', + groups=groups, + ) + + +@pagure.APP.route('/group/', methods=['GET', 'POST']) +def view_group(group): + ''' Displays information about this group. ''' + group = pagure.lib.search_groups( + pagure.SESSION, grp_name=group, grp_type='user') + + if not group: + flask.abort(404, 'Group not found') + + # Add new user to the group if asked + form = pagure.forms.AddUserForm() + if pagure.authenticated() and form.validate_on_submit(): + + if not group.group_name in flask.g.fas_user.groups: + flask.flash('Action restricted', 'error') + return flask.redirect(flask.url_for('.view_group', group=group)) + + username = form.user.data + user = pagure.lib.search_user(pagure.SESSION, username=username) + if not user: + flask.flash('No user `%s` found' % username, 'error') + return flask.redirect(flask.url_for('.view_group', group=group)) + + try: + msg = pagure.lib.add_user_to_group( + pagure.SESSION, username, group, + flask.g.fas_user.username) + pagure.SESSION.commit() + flask.flash(msg) + except SQLAlchemyError as err: + pagure.SESSION.rollback() + flask.flash( + 'Could not add user `%s` to group `%s`.' % ( + user.user, group.group_name), + 'error') + pagure.APP.logger.debug( + 'Could not add user `%s` to group `%s`.' % ( + user.user, group.group_name)) + pagure.APP.logger.exception(err) + + + return flask.render_template( + 'group_info.html', + group=group, + form=form, + )