Mercurial > hg > savane-forge
changeset 166:e122a60f5815
Organized ExtendedUser<->ExtendedGroup relationship
author | Sylvain Beucler <beuc@beuc.net> |
---|---|
date | Thu, 15 Jul 2010 11:50:36 +0200 |
parents | 82e2c77565bb |
children | ffc79e4bc251 |
files | TODO savane/my/filters.py savane/my/urls.py savane/svmain/fixtures/demo/users_groups.yaml savane/svmain/fixtures/developmentstatus.yaml savane/svmain/models.py savane/svmain/urls.py settings_default.py templates/base.html templates/my/index.html templates/svmain/extendedgroup_detail.html templates/svmain/extendeduser_detail.html |
diffstat | 12 files changed, 115 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/TODO +++ b/TODO @@ -17,7 +17,7 @@ [/] Group page - [ ] Members list + GPG keyring + [/] Members list + GPG keyring [/] Account conf
new file mode 100644 --- /dev/null +++ b/savane/my/filters.py @@ -0,0 +1,36 @@ +# Only select information related to the current user +# Copyright (C) 2010 Sylvain Beucler +# +# This file is part of Savane. +# +# Savane is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# Savane is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +def only_mine(f): + """Filter a generic query_set to only display objets related to + the current user""" + def _fd(request, queryset, *args, **kwargs): + user = request.user + queryset = queryset.filter(user=user.id) + return f(request, queryset, *args, **kwargs) + return _fd + +#def only_my_groups(f): +# """ +# Filter groups that the current user is member of +# """ +# def _fd(request, queryset, *args, **kwargs): +# user = request.user +# queryset = queryset.filter(extendeduser=user.id) +# return f(request, queryset, *args, **kwargs) +# return _fd
--- a/savane/my/urls.py +++ b/savane/my/urls.py @@ -23,15 +23,7 @@ from django.views.generic.list_detail import object_list import views import savane.svmain.models as svmain_models - -def only_mine(f): - """Filter a generic query_set to only display objets related to - the current user""" - def _dec(request, queryset, *args, **kwargs): - user = request.user - queryset = queryset.filter(user=user.id) - return f(request, queryset, *args, **kwargs) - return _dec +from savane.my.filters import * # Batch-decorator for urlpatterns # http://www.djangosnippets.org/snippets/532/
new file mode 100644 --- /dev/null +++ b/savane/svmain/fixtures/demo/users_groups.yaml @@ -0,0 +1,41 @@ +- model: svmain.groupconfiguration + pk: 1 + fields: + name: "GNU projects" +- model: auth.group + pk: 1 + fields: + name: emacs +- model: svmain.extendedgroup + pk: 1 + fields: + type: 1 + devel_status: 6 + register_time: 2001-02-08 15:03:48 +- model: auth.user + pk: 1 + fields: + username: admin + is_staff: true + is_superuser: true + password: sha1$2c71c$92bacf9046c9d9335dc13d1b8a8d57ea87f8e37e +- model: svmain.extendeduser + pk: 1 + fields: + status: 'A' +- model: auth.user + pk: 2 + fields: + username: rms + password: sha1$6bde8$748d99ad2f2493225efb0e6b78914c5c9a065275 + groups: [1, ] +- model: svmain.extendeduser + pk: 2 + fields: + status: 'A' +- model: svmain.membership + pk: 1 + fields: + user: 2 + group: 1 + admin_flags: 'A'
--- a/savane/svmain/fixtures/developmentstatus.yaml +++ b/savane/svmain/fixtures/developmentstatus.yaml @@ -1,36 +1,36 @@ -- fields: - name: '0 - Undefined' - model: svmain.developmentstatus - pk: 1 - fields: name: '1 - Planning' model: svmain.developmentstatus - pk: 2 + pk: 1 - fields: name: '2 - Pre-Alpha' model: svmain.developmentstatus + pk: 2 +- fields: + name: '3 - Alpha' + model: svmain.developmentstatus pk: 3 - fields: - name: '3 - Alpha' + name: '4 - Beta' model: svmain.developmentstatus pk: 4 - fields: - name: '4 - Beta' + name: '5 - Production/Stable' model: svmain.developmentstatus pk: 5 - fields: - name: '5 - Production/Stable' - model: svmain.developmentstatus - pk: 6 -- fields: name: '6 - Mature' model: svmain.developmentstatus - pk: 7 + pk: 6 - fields: name: 'N/A' model: svmain.developmentstatus - pk: 8 + pk: 7 - fields: name: '? - Orphaned/Unmaintained' model: svmain.developmentstatus + pk: 8 +- fields: + name: '0 - Undefined' + model: svmain.developmentstatus pk: 9
--- a/savane/svmain/models.py +++ b/savane/svmain/models.py @@ -508,6 +508,13 @@ """ Extra attributes about a User<->Group relationship (e.g. "is the user an admin?") + + Consider this as metadata about an existing + django.contrib.auth.User.groups relationship; or a potential + relationship (e.g. pending membership waiting for admin approval). + + The group membership is defined by the underlying User.groups + relationship, not this one. """ user = models.ForeignKey(ExtendedUser) group = models.ForeignKey(ExtendedGroup)
--- a/savane/svmain/urls.py +++ b/savane/svmain/urls.py @@ -46,7 +46,7 @@ 'slug_field' : 'username' }, name='savane.svmain.user_detail'), url(r'^us/(?P<slug>[-\w]+)$', views.user_redir), - url(r'^users/(?P<slug>[-\w]+)$', views.user_redir), + url(r'^users/(?P<slug>[-\w]+)/?$', views.user_redir), url(r'^license/$', 'django.views.generic.list_detail.object_list', { 'queryset' : svmain_models.License.objects.all(), },
--- a/settings_default.py +++ b/settings_default.py @@ -54,6 +54,7 @@ ) TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( + 'django.core.context_processors.request', 'savane.context_processors.media', )
--- a/templates/base.html +++ b/templates/base.html @@ -37,10 +37,12 @@ </div> {% if user.is_authenticated %} <div class="fast_menu_user"> - {{ user.username}} ({{ user.first_name }} {{ user.last_name }}) + Connected as <a href="{% url savane.my.views.index %}"> + {{ user.username}} + {% if user.first_name or user.last_name %}({{ user.first_name }} {{ user.last_name }}) {% endif %} <!-- <a href="">Items</a> --> <!-- <a href="">Groups</a> --> - <a href="{% url savane.my.views.sv_conf %}">Account Conf</a> + </a> | <a href="{% url django.contrib.auth.views.logout %}">Logout</a> </div> {% else %}
--- a/templates/my/index.html +++ b/templates/my/index.html @@ -2,5 +2,12 @@ {% extends "base.html" %} {% block content %} -My nice personal page. +<p>My nice personal page.</p> + +<p> + <a href="{% url savane.my.views.sv_conf %}">Account configuration</a> +| <a href="{% url savane.my.group_list %}">My groups</a> +| <a href="{% url savane.svmain.user_detail request.user.username %}">My public page</a> +</p> + {% endblock %}
--- a/templates/svmain/extendedgroup_detail.html +++ b/templates/svmain/extendedgroup_detail.html @@ -12,7 +12,7 @@ {% if object.user_set.all %} <ul> - {% for user in object.extendeduser_set.all %} + {% for user in object.user_set.all %} <li><a href="{{ user.get_absolute_url }}">{{ user.username }}</a></li> {% endfor %} </ul>
--- a/templates/svmain/extendeduser_detail.html +++ b/templates/svmain/extendeduser_detail.html @@ -25,7 +25,7 @@ <ul> {% for membership in object.membership_set.all %} <li> - <a href="{{ membership.group.get_absolute_url }}">{{ membership.group.name }}</a> {{ membership.admin_flags}} + <a href="{{ membership.group.get_absolute_url }}">{{ membership.group.name }}</a> - with flags: {{ membership.admin_flags}} </li> {% endfor %} </ul> @@ -33,22 +33,6 @@ Not part of any group yet {% endif %} - -<p>Is a member of (using Membership + direct field):</p> - -{% if object.extendedgroup_set.all %} -<ul> - {% for group in object.extendedgroup_set.all %} - <li> - <a href="{{ group.get_absolute_url }}">{{ group.name }}</a> - </li> - {% endfor %} - </ul> -{% else %} - Not part of any group yet -{% endif %} - - {% endblock %} {% comment %}