damned-lies r1299 - in trunk: . media/css media/img people templates templates/people templates/teams templates/vertimus vertimus



Author: stephaner
Date: Sun Jan  4 22:36:04 2009
New Revision: 1299
URL: http://svn.gnome.org/viewvc/damned-lies?rev=1299&view=rev

Log:
2009-01-04  StÃphane Raimbault  <stephane raimbault gmail com>

	Many changes to the user account management interface.
	
	* media/css/main.css: Adjustments for person detail and list.
	* people/forms.py: Renaming to match Django conventions.
	* people/models.py: Use the new name of the view.
	* people/urls.py: Renamed views and new one.
	* people/views.py: Better transaction management. Protect access
	by the login_required decorator. Separated forms. Add context
	information for the 'Working on' section.
	* settings_sample.py: Added humanize tags.
	* templates/base.html: Use nobody-16.png instead of
	person.png (same icon for now).
	* templates/module_detail.html: Updated to use person_overview.
	* templates/people/password_change_done.html: Deleted.
	* templates/people/password_change_form.html: Renamed.
	* templates/people/person_base.html: Master template for person.
	* templates/people/person_detail.html: New 'Working on' section to show the current 
	list of modules on which the user is working.
	* templates/people/person_detail_change_form.html: Separated form person_detail.
	* templates/people/person_overview.html: Use MEDIA_URL. HTML
	indentation. New CSS class.
	* templates/people/person_password_change_form.html: Use the master template.
	* templates/people/person_team_join_form.html: New.
	* templates/people/person_team_membership.html: Reusable template.
	* templates/person_base.html: Moved.
	* templates/teams/team_base.html: Updated to use person_overview.
	* templates/vertimus/vertimus_detail.html: Use nobody-16.png instead of
	person.png (same icon for now).
	* vertimus/models.py: New StateDb.get_absolute_url()


Added:
   trunk/media/img/nobody-16.png   (props changed)
      - copied unchanged from r1293, /trunk/media/img/person.png
   trunk/templates/people/person_base.html
   trunk/templates/people/person_detail_change_form.html
   trunk/templates/people/person_overview.html
      - copied, changed from r1281, /trunk/templates/person_base.html
   trunk/templates/people/person_password_change_form.html   (contents, props changed)
      - copied, changed from r1288, /trunk/templates/people/password_change_form.html
   trunk/templates/people/person_team_join_form.html
   trunk/templates/people/person_team_membership.html
Removed:
   trunk/media/img/person.png
   trunk/templates/people/password_change_done.html
   trunk/templates/people/password_change_form.html
   trunk/templates/person_base.html
Modified:
   trunk/ChangeLog
   trunk/media/css/main.css
   trunk/people/forms.py
   trunk/people/models.py
   trunk/people/urls.py
   trunk/people/views.py
   trunk/settings_sample.py
   trunk/templates/base.html
   trunk/templates/module_detail.html
   trunk/templates/people/person_detail.html
   trunk/templates/teams/team_base.html
   trunk/templates/vertimus/vertimus_detail.html
   trunk/vertimus/models.py

Modified: trunk/media/css/main.css
==============================================================================
--- trunk/media/css/main.css	(original)
+++ trunk/media/css/main.css	Sun Jan  4 22:36:04 2009
@@ -98,25 +98,14 @@
   border: 0px;
 }
 
-img.people {
-  float: left;
-  margin-left: -85px;
-}
-
 img.screenshot {
   max-width: 550px;
   border: 0;
 }
 
-div.maintainer {
-  padding-left: 85px;
-  margin-bottom: 12px;
-  clear: left;
-}
-
 /* Used in people/person_list */
 .person_list {
-  padding-left: 85px;
+  padding-left: 65px;
   margin-bottom: 12px;
   clear: left;
 }
@@ -126,12 +115,25 @@
 }
 
 .person_list img {
-  border: 0;
   height: 48px;
   float: left;
   margin-left: -65px;
 }
 
+/* Used in people/person_list */
+.person_detail {
+  clear: left;
+}
+
+.person_detail .name {
+  font-size: 140%;
+}
+
+.person_detail img {
+  margin-right: 1em;
+  float: left;
+}
+
 div.mainpage {
   width:80%;
   text-align: left;

Modified: trunk/people/forms.py
==============================================================================
--- trunk/people/forms.py	(original)
+++ trunk/people/forms.py	Sun Jan  4 22:36:04 2009
@@ -8,12 +8,6 @@
 from teams.models import Team
 from people.models import Person
 
-class JoinTeamForm(forms.Form):
-    def __init__(self, *args, **kwargs):
-        super(JoinTeamForm, self).__init__(*args, **kwargs)
-        # FIXME: exclude team to which user is already member
-        self.fields['teams'] = forms.ModelChoiceField(queryset=Team.objects.all())
-
 class RegistrationForm(forms.Form):
     """ Form for user registration """
     username = forms.RegexField(max_length=30, regex=r'^\w+$',
@@ -78,8 +72,13 @@
 
         return new_user
 
-class EditProfileForm(forms.ModelForm):
+class DetailForm(forms.ModelForm):
     class Meta:
         model = Person
         fields = ('first_name', 'last_name', 'email', 'image', 'webpage_url', 'irc_nick', 'bugzilla_account')
 
+class TeamJoinForm(forms.Form):
+    def __init__(self, *args, **kwargs):
+        super(TeamJoinForm, self).__init__(*args, **kwargs)
+        # FIXME: exclude team to which user is already member
+        self.fields['teams'] = forms.ModelChoiceField(queryset=Team.objects.all())

Modified: trunk/people/models.py
==============================================================================
--- trunk/people/models.py	(original)
+++ trunk/people/models.py	Sun Jan  4 22:36:04 2009
@@ -84,7 +84,7 @@
 
     @models.permalink
     def get_absolute_url(self):
-        return ('person', [self.username])
+        return ('person-username-view', [self.username])
 
     def coordinates_teams(self):
         from teams.models import Team

Modified: trunk/people/urls.py
==============================================================================
--- trunk/people/urls.py	(original)
+++ trunk/people/urls.py	Sun Jan  4 22:36:04 2009
@@ -4,21 +4,23 @@
 info_dict_list = {
     'queryset': Person.objects.all(),
     'template_object_name': 'person',
-    'extra_context': { 
+    'extra_context': {
         'pageSection': "teams"
     }
 }
-    
-urlpatterns = patterns('',
-    url(r'^$', 'django.views.generic.list_detail.object_list', dict(info_dict_list), 'persons'),                    
-    url(r'^(?P<object_id>\d+)/$', 'people.views.person_detail_from_id', name='person_from_id'),
+
+# Regex order is really important here
+
+urlpatterns = patterns('people.views',
+    url(r'^detail_change/$', 'person_detail_change', name='person-detail-change-view'),
+    url(r'^password_change/$', 'person_password_change', name='person-password-change-view'),
+    url(r'^team_join/$', 'person_team_join', name='person-team-join-view'),
+    url(r'^(?P<person_id>\d+)/$', 'person_detail', name='person-id-view'),
     # equivalent to the previous, but using username instead of user pk
-    url(r'^(?P<slug>[\w \ \-]+)/$', 'people.views.person_detail_from_username', name='person'),
-    url(r'^(?P<slug>[\w \ \-]+)/edit/$', 'people.views.person_detail_from_username', {'edit_profile': True}, name='person_edit'),
+    url(r'^(?P<person_username>[\w \ \-]+)/$', 'person_detail', name='person-username-view'),
 )
 
-# FIXME Not possible to give the pageSection
-urlpatterns += patterns('django.contrib.auth.views',
-    url(r'^password_change$', 'password_change', {'template_name': 'people/password_change_form.html'}, name='password-change-view'),
-    (r'^password_change_done$', 'password_change_done', {'template_name': 'people/password_change_done.html'}),
+urlpatterns += patterns('django.views.generic.list_detail',
+    url(r'^$', 'object_list', dict(info_dict_list), name='persons-view'),
 )
+

Modified: trunk/people/views.py
==============================================================================
--- trunk/people/views.py	(original)
+++ trunk/people/views.py	Sun Jan  4 22:36:04 2009
@@ -21,57 +21,102 @@
 from django.shortcuts import render_to_response, get_object_or_404
 from django.utils.translation import ugettext as _
 from django.template import RequestContext
-from django.db import IntegrityError
+from django.db import transaction, IntegrityError
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.forms import PasswordChangeForm
 from people.models import Person
 from teams.models import Role
-from people.forms import JoinTeamForm, EditProfileForm
+from people.forms import TeamJoinForm, DetailForm
+from vertimus.models import StateDb
 
-def person_detail_from_username(request, slug, edit_profile=False):
-    person = get_object_or_404(Person, username=slug)
-    return person_detail(request, person, edit_profile)
+def person_detail(request, person_id=None, person_username=None):
+    if person_id:
+        person = get_object_or_404(Person, pk=person_id)
+    else:
+        person = get_object_or_404(Person, username=person_username)
 
-def person_detail_from_id(request, object_id, edit_profile=False):
-    person = get_object_or_404(Person, pk=object_id)
-    return person_detail(request, person, edit_profile)
+    states = StateDb.objects.filter(actiondb__person=person).distinct()
+    context = {
+        'pageSection': "teams",
+        'person': person,
+        'states': states,
+    }
+    return render_to_response('people/person_detail.html', context,
+            context_instance=RequestContext(request))
 
-def person_detail(request, person, edit_profile):
+ login_required
+def person_detail_change(request):
+    """Handle the form to change the details"""
+    person = get_object_or_404(Person, username=request.user.username)
     messages = []
-    # Handle the form to join a team
-    if request.method == 'POST' and request.POST.get('join_team_form',None):
-        join_form = JoinTeamForm(request.POST)
-        if join_form.is_valid():
-            if request.user.username == person.username:
-                team = join_form.cleaned_data['teams']
-                new_role = Role(team=team, person=person) # role default to translator
-                try:
-                    new_role.save()
-                except IntegrityError:
-                    messages.append(_("You are already member of this team."))
-            else:
-                messages.append(_("Sorry, you're not allowed to modify this user."))
-    else:
-        join_form = JoinTeamForm()
-    # Handle the form to edit profile
-    profile_form = None
-    if request.method == 'POST' and request.POST.get('edit_profile_form',None):
-        form = EditProfileForm(request.POST, instance=person)
+    if request.method == 'POST':
+        form = DetailForm(request.POST, instance=person)
         if form.is_valid():
-            if request.user.username == person.username:
-                form.save()
-            else:
-                messages.append(_("Sorry, you're not allowed to modify this user."))
+            form.save()
         else:
             messages.append("Sorry, the form is not valid.")
-            profile_form = form
-    elif edit_profile:
-        profile_form = EditProfileForm(instance=person)
-        
+    else:
+        form = DetailForm(instance=person)
+
     context = {
         'pageSection': "teams",
         'person': person,
-        'join_form': join_form,
-        'profile_form': profile_form,
+        'form': form,
         'messages': messages
     }
-    return render_to_response('people/person_detail.html', context, context_instance=RequestContext(request))
+    return render_to_response('people/person_detail_change_form.html', context,
+            context_instance=RequestContext(request))
 
+ login_required
+ transaction commit_manually
+def person_team_join(request):
+    """Handle the form to join a team"""
+    person = get_object_or_404(Person, username=request.user.username)
+    messages = []
+    if request.method == 'POST':
+        form = TeamJoinForm(request.POST)
+        if form.is_valid():
+            team = form.cleaned_data['teams']
+            new_role = Role(team=team, person=person) # role default to translator
+            try:
+                new_role.save()
+                transaction.commit()
+            except IntegrityError:
+                transaction.rollback()
+                messages.append(_("You are already member of this team."))
+    else:
+        form = TeamJoinForm()
+
+    context = {
+        'pageSection': "teams",
+        'person': person,
+        'form': form,
+        'messages': messages
+    }
+    return render_to_response('people/person_team_join_form.html', context, 
+            context_instance=RequestContext(request))
+
+
+ login_required
+def person_password_change(request):
+    """Handle the generic form to change the password"""
+    person = get_object_or_404(Person, username=request.user.username)
+    messages = []
+
+    if request.method == 'POST':
+        form = PasswordChangeForm(request.user, request.POST)
+        if form.is_valid():
+            messages.append(_("Your password has been changed."))
+            form.save()
+    else:
+        form = PasswordChangeForm(request.user)
+
+    context = {
+        'pageSection': "teams",
+        'person': person,
+        'form': form,
+        'messages': messages
+    }
+    return render_to_response('people/person_password_change_form.html', context,
+            context_instance=RequestContext(request))
+    

Modified: trunk/settings_sample.py
==============================================================================
--- trunk/settings_sample.py	(original)
+++ trunk/settings_sample.py	Sun Jan  4 22:36:04 2009
@@ -112,6 +112,7 @@
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.admin',
+    'django.contrib.humanize',
 #    'django_openid',
     'common',
     'languages',

Modified: trunk/templates/base.html
==============================================================================
--- trunk/templates/base.html	(original)
+++ trunk/templates/base.html	Sun Jan  4 22:36:04 2009
@@ -68,7 +68,7 @@
   <div id="authenticated">
     {% if user.is_authenticated %}
     <form action="{% url login %}" method="post">
-      <a href="{{ user.get_absolute_url }}"><img src="{{ MEDIA_URL }}img/person.png" alt="Person"/>&nbsp;{{ user.person }}</a> &bull;
+      <a href="{{ user.get_absolute_url }}"><img src="{{ MEDIA_URL }}img/nobody-16.png" alt="Person"/>&nbsp;{{ user.person }}</a> &bull;
       <input type="hidden" name="logout" value="1" />
       <input type="submit" value="{% trans 'Log Out' %}" />
     </form>

Modified: trunk/templates/module_detail.html
==============================================================================
--- trunk/templates/module_detail.html	(original)
+++ trunk/templates/module_detail.html	Sun Jan  4 22:36:04 2009
@@ -28,7 +28,7 @@
       {% if module.maintainers.all %}
       <h2>{% trans "Maintainers" %}</h2>
       {% for person in module.maintainers.all %}
-        {% include "person_base.html" %}
+        {% include "people/person_overview.html" %}
       {% endfor %}
       {% endif %}
     </td>

Added: trunk/templates/people/person_base.html
==============================================================================
--- (empty file)
+++ trunk/templates/people/person_base.html	Sun Jan  4 22:36:04 2009
@@ -0,0 +1,26 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% load stats_extras %}
+
+{% block title %}{% trans "GNOME Contributor" %}{% endblock %}
+
+{% block content %}
+<div class="mainpage">
+  {% if user.is_authenticated %}
+  {% ifequal user.username person.username %}
+  <div class="right_actions">
+    <ul>
+      <li><a href="{% url person-detail-change-view %}">{% trans "Change your details" %}</a></li>
+      <li><a href="{% url person-password-change-view %}">{% trans "Change your password" %}</a></li>
+      <li><a href="{% url person-team-join-view %}">{% trans "Join a team" %}</a></li>
+    </ul>
+  </div>
+  {% endifequal %}
+  {% endif %}
+
+  {% include "people/person_overview.html" %}
+
+  {% block subcontent %}
+  {% endblock %}
+</div>
+{% endblock %}

Modified: trunk/templates/people/person_detail.html
==============================================================================
--- trunk/templates/people/person_detail.html	(original)
+++ trunk/templates/people/person_detail.html	Sun Jan  4 22:36:04 2009
@@ -1,67 +1,37 @@
-{% extends "base.html" %}
+{% extends "people/person_base.html" %}
 {% load i18n %}
+{% load humanize %}
 {% load stats_extras %}
 
-{% block title %}{% trans "GNOME Contributor" %}{% endblock %}
+{% block subcontent %}
+
+{% if person.maintains_modules.all %}
+<h2>{% trans "Maintains:" %}</h2>
+<ul>
+  {% for module in person.maintains_modules.all %}
+  <li><a href="{{ module.get_absolute_url }} ">{{ module.description }}</a></li>
+  {% endfor %}
+</ul>
+{% endif %}
+
+{% include "people/person_team_membership.html" %}
+
+{% if states %}
+<h2>{% trans "Working on" %}</h2>
+
+<table>
+<tr>
+  <th>Date</th><th>Module</th><th>State</th>
+</tr>
+{% for state in states %}
+<tr>
+  <td>{{ state.updated|naturalday }}</td>
+  <td><a href="{{ state.get_absolute_url }}">{{ state.branch.module.get_description }} - {{ state.branch.name }} - {% trans state.domain.description %} - {{ state.language.get_name }}</a></td>
+  <td>{{ state }}</td>
+</tr>
+{% endfor %}
+</table>
+
+{% endif %}
 
-{% block content %}
-<div class="mainpage">
-  <h2>{{ person.name }}</h2>
-  {% if user.is_authenticated %}
-  {% ifequal user.username person.username %}
-  <div class="right_actions">
-    <ul>
-      <li><a href="{% url person_edit slug=person.username %}">{% trans "Change your details" %}</a></li>
-      <li><a href="{% url password-change-view %}">{% trans "Change your password" %}</a></li>
-    </ul>
-  </div>
-  {% endifequal %}
-  {% endif %}
-
-  {% if profile_form %}
-    <div class="maintainer">
-    <form action="." method="POST" class="djform">
-      <table>{{ profile_form.as_table }}
-        <tr><td colspan="2" align="center"><input type="submit" value="{% trans "Save" %}"></td></tr>
-      </table>
-        <input type="hidden" name="edit_profile_form" value="1" />
-    </form>
-    </div>
-  {% else %}
-    {% include "person_base.html" %}
-  {% endif %}
-  
-  <div class="maintainer">
-  {% if person.maintains_modules.all %}
-      <h2>{% trans "Maintains:" %}</h2>
-      <ul>
-        {% for module in person.maintains_modules.all %}
-        <li><a href="{{ module.get_absolute_url }} ">{{ module.description }}</a></li>
-        {% endfor %}
-      </ul>
-  {% endif %}
-
-  {% if person.role_set.all %}
-    <h2>{% trans "Team membership" %}</h2>
-    <ul>
-    {% for role in person.role_set.all %}
-      {% with role.role as role_name %}
-      <li>{% blocktrans with role.team|linked_with:role.team.get_description|safe as team_name %}Member of {{ team_name }} team ({{ role_name }}){% endblocktrans %}
-      </li>
-      {% endwith %}
-    {% endfor %}
-    </ul>
-  {% endif %}
-    
-  {% if user.is_authenticated %}
-    {% ifequal user.username person.username %}
-      <form action="." method="POST">
-      <p><em>{% trans "I would like to join the following team as 'translator':" %}</em><br />
-       {{ join_form.teams }}  <input type="submit" value="{% trans "Join" %}">
-       <input type="hidden" name="join_team_form" value="1" />
-      </form>
-    {% endifequal %}
-  {% endif %}
-  </div>
-</div>
 {% endblock %}

Added: trunk/templates/people/person_detail_change_form.html
==============================================================================
--- (empty file)
+++ trunk/templates/people/person_detail_change_form.html	Sun Jan  4 22:36:04 2009
@@ -0,0 +1,19 @@
+{% extends "people/person_base.html" %}
+{% load i18n %}
+{% load stats_extras %}
+
+{% block subcontent %}
+
+<h2>{% trans "Change your details" %}</h2>
+
+<form action="" method="POST" class="djform">
+  <table>
+    {{ form.as_table }}
+    <tr>
+      <td colspan="2" align="center"><input type="submit" value="{% trans "Save" %}"></td>
+    </tr>
+  </table>
+  <input type="hidden" name="detail_change_form" value="1" />
+</form>
+
+{% endblock %}

Copied: trunk/templates/people/person_overview.html (from r1281, /trunk/templates/person_base.html)
==============================================================================
--- /trunk/templates/person_base.html	(original)
+++ trunk/templates/people/person_overview.html	Sun Jan  4 22:36:04 2009
@@ -3,36 +3,36 @@
 
 {% load i18n %}
 
-  <div class="maintainer">
+<div class="person_detail">
   {% if person.image %}
-    <img class="people" src="{{ person.image }}" alt="{{ person.name }}" />
+  <img src="{{ person.image }}" alt="{{ person.name }}" />
   {% else %}
-    <img class="people" src="/media/img/nobody.png" alt="" />
+  <img src="{{ MEDIA_URL }}img/nobody.png" alt="" />
   {% endif %}
 
-  <a style="font-size: 140%;" href="{{ person.get_absolute_url }}">{{ person.name }}</a><br />
+  <a class="name" href="{{ person.get_absolute_url }}">{{ person.name }}</a><br />
 
   {% if person.no_spam_email %}
-    <a href="mailto:{{ person.no_spam_email }}">{{ person.no_spam_email }}</a><br />
+  <a href="mailto:{{ person.no_spam_email }}">{{ person.no_spam_email }}</a><br />
   {% endif %}
+
   {% if person.webpage_url %}
-    <a href="{{ person.webpage_url }}">{{ person.webpage_url }}</a><br />
+  <a href="{{ person.webpage_url }}">{{ person.webpage_url }}</a><br />
   {% endif %}
 
   <br />
   {% if person.irc_nick %}
-    <strong>{% trans "Instant messaging:" %}</strong>
-    <ul>
+  <strong>{% trans "Instant messaging:" %}</strong>
+  <ul>
     <li><em>{{ person.irc_nick }}</em> (IRC)</li>
-    </ul>
+  </ul>
   {% endif %}
-
+  
   {% if person.no_spam_bugzilla_account %}
-    <strong>{% trans "Bugzilla account:" %}</strong> {{ person.no_spam_bugzilla_account }}<br />
+  <strong>{% trans "Bugzilla account:" %}</strong> {{ person.no_spam_bugzilla_account }}<br />
   {% endif %}
 
   {% if person.svn_account %}
   <strong>{% trans "SVN account:" %}</strong> <a href="http://cia.vc/stats/author/{{ person.svn_account }}">{{ person.svn_account}}</a><br />
   {% endif %}
-
 </div>

Copied: trunk/templates/people/person_password_change_form.html (from r1288, /trunk/templates/people/password_change_form.html)
==============================================================================
--- /trunk/templates/people/password_change_form.html	(original)
+++ trunk/templates/people/person_password_change_form.html	Sun Jan  4 22:36:04 2009
@@ -1,10 +1,7 @@
-{% extends "base.html" %}
+{% extends "people/person_base.html" %}
 {% load i18n %}
 
-{% block title %}{% trans 'Password change' %}{% endblock %}
-
-{% block content %}
-<div class="mainpage">
+{% block subcontent %}
 
 <h2>{% trans 'Password change' %}</h2>
 
@@ -35,5 +32,4 @@
   </table>
 </form>
 
-<div>
 {% endblock %}

Added: trunk/templates/people/person_team_join_form.html
==============================================================================
--- (empty file)
+++ trunk/templates/people/person_team_join_form.html	Sun Jan  4 22:36:04 2009
@@ -0,0 +1,17 @@
+{% extends "people/person_base.html" %}
+{% load i18n %}
+
+{% block subcontent %}
+
+{% include "people/person_team_membership.html" %}
+
+<h2>{% trans "Join a new team" %}</h2>
+
+<form action="" method="POST">
+  <p><em>{% trans "I would like to join the following team as 'translator':" %}</em><br />
+    {{ form.teams }}
+    <input type="submit" value="{% trans "Join" %}">
+    <input type="hidden" name="join_team_form" value="1" />
+</form>
+
+{% endblock %}

Added: trunk/templates/people/person_team_membership.html
==============================================================================
--- (empty file)
+++ trunk/templates/people/person_team_membership.html	Sun Jan  4 22:36:04 2009
@@ -0,0 +1,14 @@
+{% load i18n %}
+{% load stats_extras %}
+
+{% if person.role_set.all %}
+<h2>{% trans "Team membership" %}</h2>
+<ul>
+  {% for role in person.role_set.all %}
+  {% with role.role as role_name %}
+  <li>{% blocktrans with role.team|linked_with:role.team.get_description|safe as team_name %}Member of {{ team_name }} team ({{ role_name }}){% endblocktrans %}
+  </li>
+  {% endwith %}
+  {% endfor %}
+</ul>
+{% endif %}

Modified: trunk/templates/teams/team_base.html
==============================================================================
--- trunk/templates/teams/team_base.html	(original)
+++ trunk/templates/teams/team_base.html	Sun Jan  4 22:36:04 2009
@@ -30,7 +30,7 @@
   {% if team.get_coordinator %}
     <h2>{% trans "Coordinator" %}</h2>
     {% with team.get_coordinator as person %}
-    {% include "person_base.html" %}
+    {% include "person_overview.html" %}
     {% endwith %}
   {% endif %}
 </td></tr></table>

Modified: trunk/templates/vertimus/vertimus_detail.html
==============================================================================
--- trunk/templates/vertimus/vertimus_detail.html	(original)
+++ trunk/templates/vertimus/vertimus_detail.html	Sun Jan  4 22:36:04 2009
@@ -73,7 +73,7 @@
   {% for action in action_history %}
   <div class="vertimus_action">
     <div class="vertimus_action_head">
-      <img src="{{ MEDIA_URL }}img/person.png" alt="Person"/> <a href="{{ action.person.get_absolute_url }}">{{ action.person.name }}</a>
+      <img src="{{ MEDIA_URL }}img/nobody-16.png" alt="Person"/> <a href="{{ action.person.get_absolute_url }}">{{ action.person.name }}</a>
       , <strong>{{ action }}</strong>, {{ action.created|date:"Y-m-d H:i" }}
     </div>
     <div class="vertimus_action_content">

Modified: trunk/vertimus/models.py
==============================================================================
--- trunk/vertimus/models.py	(original)
+++ trunk/vertimus/models.py	Sun Jan  4 22:36:04 2009
@@ -61,6 +61,10 @@
     def __unicode__(self):
         return self.name
 
+    @models.permalink
+    def get_absolute_url(self):
+        return ('vertimus-ids-view', [self.branch.id, self.domain.id, self.language.id])
+
 class StateAbstract(object):
     """Abstract class"""
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]