Commit 1fb114a8 authored by Michal Čihař's avatar Michal Čihař

Support for adding users to ACL projects

Issue #509
Signed-off-by: default avatarMichal Čihař <michal@cihar.com>
parent a93a9305
......@@ -16,6 +16,7 @@ Released on ? 2014.
* Added support for GitLab notifications.
* Added support for disabling translation suggestions.
* Django 1.7 support.
* ACL projects now have user management.
weblate 1.9
-----------
......
......@@ -55,7 +55,7 @@ msgstr "Další emailové adresy můžete přidat na záložce Přihlašování.
#: weblate/accounts/forms.py:253 weblate/accounts/forms.py:331
msgid "Full name"
msgstr "Vaše jméno"
msgstr "Celé jméno"
#: weblate/accounts/forms.py:262
msgid "Subject"
......
......@@ -2,6 +2,7 @@
{% load i18n %}
{% load translations %}
{% load url from future %}
{% load crispy_forms_tags %}
{% block breadcrumbs %}
<li><a href="{{ object.get_absolute_url }}">{{ object }}</a></li>
......@@ -27,6 +28,9 @@
{% endif %}
<li><a href="{% url 'checks' %}?project={{ object.slug }}">{% trans "Failing checks" %}</a></li>
<li><a href="{% url 'checks' %}?project={{ object.slug }}&amp;ignored=true">{% trans "Ignored checks" %}</a></li>
{% if perms.trans.manage_acl %}
<li><a href="#acl" data-toggle="tab">{% trans "Manage users" %}</a></li>
{% endif %}
</ul>
</li>
{% if enable_sharing %}
......@@ -139,7 +143,57 @@
</div>
{% endif %}
{% if perms.trans.manage_acl %}
<div class="tab-pane" id="acl">
<div class="row">
<div class="col-md-6">
<div class="panel panel-primary">
<div class="panel-heading"><h4 class="panel-title">{% trans "Users" %}</h4></div>
<div class="panel-body">
<table class="table table-striped">
<thead>
<tr>
<th>{% trans "Username" %}</th>
<th>{% trans "Full name" %}</th>
<th>{% trans "Email" %}</th>
</tr>
</thead>
<tbody>
{% for user in object.all_users %}
<tr>
<td>{{ user.username }}</td>
<td>{{ user.first_name }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<form action="{% url "add-user" project=object.slug %}" method="post">
{% csrf_token %}
<div class="panel panel-primary">
<div class="panel-heading"><h4 class="panel-title">{% trans "Add new user" %}</h4></div>
<div class="panel-body">
{{ add_user_form|crispy }}
</div>
<div class="panel-footer">
<input type="submit" class="btn btn-default" value="{% trans "Add" %}" />
</div>
</div>
</form>
</div>
</div>
</div>
{% endif %}
</div>
......
......@@ -652,3 +652,13 @@ class PriorityForm(forms.Form):
'Strings with higher priority are offered first to translators.'
),
)
class AddUserForm(forms.Form):
name = forms.CharField(
label=_('User to add'),
help_text=_(
'Please provide username or email. '
'User needs to have already active account in Weblate.'
),
)
......@@ -20,12 +20,14 @@
from django.shortcuts import render, redirect
from django.utils.translation import ugettext as _
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import User
from django.contrib import messages
from django.db.models import Sum, Count, Q
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
from django.views.decorators.http import require_POST
import django.views.defaults
from weblate.trans.models import (
......@@ -34,9 +36,11 @@ from weblate.trans.models import (
)
from weblate.requirements import get_versions, get_optional_versions
from weblate.lang.models import Language
from weblate.trans.util import redirect_param
from weblate.trans.forms import (
get_upload_form, SearchForm,
AutoForm, ReviewForm, NewLanguageForm,
AddUserForm,
)
from weblate.accounts.models import Profile, notify_new_language
from weblate.trans.views.helper import (
......@@ -243,6 +247,7 @@ def show_project(request, project):
'last_changes_url': urlencode(
{'project': obj.slug}
),
'add_user_form': AddUserForm(),
}
)
......@@ -475,3 +480,34 @@ def new_language(request, project, subproject):
subproject=obj.slug,
project=obj.project.slug
)
@require_POST
@permission_required('trans.manage_acl')
def add_user(request, project):
obj = get_project(request, project)
form = AddUserForm(request.POST)
if form.is_valid():
try:
user = User.objects.get(
Q(username=form.cleaned_data['name']) |
Q(email=form.cleaned_data['name'])
)
obj.add_user(user)
messages.success(
request, _('User has been added to this project.')
)
except User.DoesNotExist:
messages.error(request, _('No matching user found!'))
except User.MultipleObjectsReturned:
messages.error(request, _('More users matched!'))
else:
messages.error(request, _('Invalid user specified!'))
return redirect_param(
'project',
'#acl',
project=obj.slug,
)
......@@ -186,6 +186,11 @@ urlpatterns = patterns(
'weblate.trans.views.basic.new_language',
name='new-language',
),
url(
r'^add-user/' + PROJECT + '$',
'weblate.trans.views.basic.add_user',
name='add-user',
),
# Activity HTML
url(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment