Revision 7b499930
Added by Serghei Mihai over 9 years ago
uauth/organization/forms.py | ||
---|---|---|
14 | 14 |
'password': forms.PasswordInput |
15 | 15 |
} |
16 | 16 |
|
17 |
def save(self): |
|
18 |
# save previous password |
|
19 |
old_password = self.initial.get('password') |
|
20 |
obj = super(LocalAccountForm, self).save(commit=False) |
|
21 |
if not self.cleaned_data.get('password'): |
|
22 |
obj.password = old_password |
|
23 |
obj.save() |
|
24 |
return obj |
|
25 |
|
|
17 | 26 |
|
18 | 27 |
class LocalAccountCreateForm(LocalAccountForm): |
19 | 28 |
accounts_number = forms.IntegerField(_('Number of accounts to create'), required=False) |
uauth/organization/tables.py | ||
---|---|---|
6 | 6 |
|
7 | 7 |
class AccountTable(tables.Table): |
8 | 8 |
username = tables.TemplateColumn( |
9 |
'<a rel="popup" href="#" %}">{{ record.username }}</a>',
|
|
9 |
'<a href="{% url "edit-user" organization.slug record.pk %}" rel="popup"><i class="icon-edit"></i></a><a href="{% url "view-user" organization.slug record.pk %}">{{ record.username }}</a>',
|
|
10 | 10 |
verbose_name=_('Username')) |
11 | 11 |
|
12 | 12 |
class Meta: |
uauth/organization/templates/organization/edit_user.html | ||
---|---|---|
1 |
{% extends "organization/base.html" %} |
|
2 |
{% load i18n %} |
|
3 |
|
|
4 |
{% block content %} |
|
5 |
<form method="post" autocomplete="off"> |
|
6 |
{% csrf_token %} |
|
7 |
<table> |
|
8 |
{{ form.as_table }} |
|
9 |
</table> |
|
10 |
<div class="form-actions"> |
|
11 |
<input type="submit" value="{% trans "Update" %}" class="btn btn-primary" /> |
|
12 |
<button name="delete" class="ui-state-default delete-button icon-delete">{% trans "Delete" %}</button> |
|
13 |
</div> |
|
14 |
<script> |
|
15 |
$('input.datepicker').datepicker({dateFormat: "yy-mm-dd", weekStart: 1 }); |
|
16 |
</script> |
|
17 |
</form> |
|
18 |
{% endblock %} |
uauth/organization/templates/organization/user.html | ||
---|---|---|
1 |
{% load i18n %} |
|
2 |
|
|
3 |
<div class="user"> |
|
4 |
<h3>{% trans "Login" %} {{ user.username }} {% if user.get_fullname %}({{ user.get_fullname }}){% endif %}</h3> |
|
5 |
<h4>{% trans "Password:" %} {{ user.password }}</h4> |
|
6 |
<p class="expire">{% trans "Expiring:" %} {% if user.expiration_date %}{{ user.expiration_date|date:"DATETIME_FORMAT" }}{% else %}{% trans "never" %}{% endif %}</p> |
|
7 |
<p><strong>{% trans "Description" %}</strong></p> |
|
8 |
<p>{{ user.description }}</p> |
|
9 |
</div> |
uauth/organization/templates/organization/view_user.html | ||
---|---|---|
1 |
{% extends "organization/base.html" %} |
|
2 |
{% load i18n %} |
|
3 |
|
|
4 |
{% block page-title %} |
|
5 |
{% trans 'User details' %} |
|
6 |
{% endblock %} |
|
7 |
|
|
8 |
{% block appbar %} |
|
9 |
<h2>{% trans "User details" %}</h2> |
|
10 |
{% endblock %} |
|
11 |
|
|
12 |
{% block content %} |
|
13 |
{% include "organization/user.html" with user=object %} |
|
14 |
{% endblock %} |
|
15 |
|
uauth/organization/urls.py | ||
---|---|---|
6 | 6 |
url(r'^$', manage, name='manage'), |
7 | 7 |
url(r'^users/?$', users, name='manage-users'), |
8 | 8 |
url(r'^users/create$', create_users, name='create-users'), |
9 |
url(r'^users/(?P<pk>[\w]+)/$', view_user, name='view-user'), |
|
10 |
url(r'^users/(?P<pk>[\w]+)/edit$', edit_user, name='edit-user'), |
|
9 | 11 |
) |
uauth/organization/views.py | ||
---|---|---|
1 | 1 |
from django.utils.translation import ugettext as _ |
2 | 2 |
from django.core.urlresolvers import reverse_lazy |
3 |
from django.http import HttpResponseRedirect |
|
3 | 4 |
|
4 | 5 |
from django.views.generic.base import TemplateView |
5 | 6 |
from django.views.generic.list import ListView |
6 |
from django.views.generic.edit import FormView |
|
7 |
from django.views.generic.edit import FormView, UpdateView |
|
8 |
from django.views.generic import DetailView |
|
7 | 9 |
from django.contrib import messages |
8 | 10 |
|
9 | 11 |
from django_tables2 import RequestConfig |
10 | 12 |
|
11 | 13 |
from .utils import create_user |
12 | 14 |
from .models import LocalAccount, Organization |
13 |
from .forms import LocalAccountCreateForm |
|
15 |
from .forms import LocalAccountCreateForm, LocalAccountForm
|
|
14 | 16 |
from .tables import AccountTable |
15 | 17 |
|
16 | 18 |
|
... | ... | |
75 | 77 |
return super(UsersCreateView, self).form_valid(form) |
76 | 78 |
|
77 | 79 |
create_users = UsersCreateView.as_view() |
80 |
|
|
81 |
|
|
82 |
class ShowUserView(OrganizationMixin, DetailView): |
|
83 |
model = LocalAccount |
|
84 |
template_name = 'organization/view_user.html' |
|
85 |
|
|
86 |
view_user = ShowUserView.as_view() |
|
87 |
|
|
88 |
|
|
89 |
class UserEditView(OrganizationMixin, UpdateView): |
|
90 |
template_name = 'organization/edit_user.html' |
|
91 |
model = LocalAccount |
|
92 |
form_class = LocalAccountForm |
|
93 |
|
|
94 |
def form_valid(self, form): |
|
95 |
username = self.object.username |
|
96 |
if 'delete' in self.request.POST: |
|
97 |
self.object.delete() |
|
98 |
messages.info(self.request, _('Account "%s" successfully deleted' % username)) |
|
99 |
return HttpResponseRedirect(self.get_success_url()) |
|
100 |
else: |
|
101 |
messages.info(self.request, _('Account "%s" successfully updated' % username)) |
|
102 |
return super(UserEditView, self).form_valid(form) |
|
103 |
|
|
104 |
edit_user = UserEditView.as_view() |
uauth/static/css/style.css | ||
---|---|---|
46 | 46 |
padding: 5px; |
47 | 47 |
color: #fff; |
48 | 48 |
background: #999; |
49 |
} |
|
50 |
|
|
51 |
.user { |
|
52 |
border: 2px solid #aaa; |
|
53 |
padding: 5px; |
|
54 |
} |
|
55 |
|
|
56 |
.icon-edit:before { |
|
57 |
content: '\f044'; |
|
58 |
margin: 0 3px; |
|
59 |
} |
|
60 |
|
|
61 |
.icon-delete:before { |
|
62 |
content: '\f1f8'; |
|
63 |
margin: 0 3px; |
|
49 | 64 |
} |
Also available in: Unified diff
user credentials and edit views(#7065)