changeset 188:469c9b64a556

Interface to add members to a project
author Sylvain Beucler <beuc@beuc.net>
date Sun, 25 Jul 2010 14:50:51 +0200
parents 95a750a73174
children 508ab7cdef8d
files savane/svmain/models.py savane/svmain/urls.py savane/svmain/views.py templates/svmain/group_admin_members.html templates/svmain/group_admin_members_add.html
diffstat 5 files changed, 83 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/savane/svmain/models.py
+++ b/savane/svmain/models.py
@@ -533,7 +533,7 @@
       blank=True, help_text="membership properties")
     onduty = models.BooleanField(default=True,
       help_text="Untick to hide emeritous members from the project page")
-    since = models.DateField(blank=True, null=True)
+    since = models.DateField(auto_now_add=True, blank=True, null=True)
 
     # TODO: split news params
     #news_flags int(11) default NULL
--- a/savane/svmain/urls.py
+++ b/savane/svmain/urls.py
@@ -93,6 +93,9 @@
   url(r'^p/(?P<slug>[-\w]+)/admin/members/$', views.group_admin_members,
       { 'extra_context' : { 'title' : 'Administration Summary: Manage Members' }, },
       name='savane.svmain.group_admin_members'),
+  url(r'^p/(?P<slug>[-\w]+)/admin/members/add/$', views.group_admin_members_add,
+      { 'extra_context' : { 'title' : 'Administration Summary: Manage Members' }, },
+      name='savane.svmain.group_admin_members_add'),
 )
 
 urlpatterns += patterns ('',
--- a/savane/svmain/views.py
+++ b/savane/svmain/views.py
@@ -108,3 +108,25 @@
         }
     context.update(extra_context)
     return context
+
+def group_admin_members_add(request, slug, extra_context={}):
+    group = get_object_or_404(auth_models.Group, name=slug)
+
+    if request.method == "POST":
+        user = get_object_or_404(auth_models.User, pk=int(request.POST['user_id']))
+        svmain_models.Membership(user=user, group=group, admin_flags='').save()
+        return HttpResponseRedirect('../')
+
+    from django.views.generic.list_detail import object_list
+    from savane.filters import search
+    from django.contrib.auth.admin import UserAdmin
+    context = {}
+    context.update(extra_context)
+    context.update({'group' : group})
+    queryset = auth_models.User.objects.filter(is_active=True).exclude(pk__in=group.user_set.all())
+    return search(object_list)(request,
+                               queryset=queryset,
+                               paginate_by=20,
+                               model_admin=UserAdmin,
+                               extra_context=context,
+                               template_name='svmain/group_admin_members_add.html')
--- a/templates/svmain/group_admin_members.html
+++ b/templates/svmain/group_admin_members.html
@@ -14,13 +14,16 @@
 
 {% block content %}
 
-<p>Members:</p>
+<p>Members:<br />
 <form action="" method="POST">{% csrf_token %}
 <table>
 <tr><th>User</th><th>Admin</th><th>Remove?</th></tr>
 {% for membership in memberships %}
 <tr>
-  <td>{{ membership.user.get_full_name }} &lt;{{ membership.user.username }}&gt;</td>
+  <td>
+    {{ membership.user.get_full_name }}
+    &lt;<a href="{% url savane.svmain.user_detail membership.user.username %}">{{ membership.user.username }}</a>&gt;
+  </td>
   <td>
     {% ifequal request.user membership.user %}
     <em>{% trans "You are Admin" %}</em>
new file mode 100644
--- /dev/null
+++ b/templates/svmain/group_admin_members_add.html
@@ -0,0 +1,52 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% load svtopmenu %}
+
+{% block title %}
+{{group.svgroupinfo.full_name_display}} - {{title}}
+{% endblock %}
+
+{% block icon %}preferences{% endblock %}
+
+{% block topmenu %}
+  {% svtopmenu "group" %}
+{% endblock %}
+
+{% block content %}
+
+{% include "svmain/pagination.inc.html" %}
+
+<form action="." method="GET">
+  {% trans "Search" %}: <input type="text" name="q" value="{{q}}" />
+</form>
+
+{% if object_list %}
+    <table>
+    <tr><th>User</th><th>Full name</th><th>Profile</th><th></th></tr>
+    {% for object in object_list %}
+    <tr>
+      <td>{{ object.username }}</td>
+      <td>{{ object.get_full_name }}</td>
+      <td><a href="{% url savane.svmain.user_detail object.username %}">{% trans 'view' %}</a></td>
+      <td>
+	<form action="" method="POST">{% csrf_token %}
+	  <input type="hidden" name="user_id" value="{{object.pk}}" />
+	  <input type="submit" value="{% trans 'Add' %}" />
+	</form>
+      </td>
+    </tr>
+    {% endfor %}
+    </table>
+{% else %}
+    <p>{% trans "All other users are members of your group!" %}</p>
+{% endif %}
+
+{% endblock %}
+
+{% comment %}
+Local Variables: **
+mode: django-html **
+tab-width: 4 **
+indent-tabs-mode: nil **
+End: **
+{% endcomment %}