damned-lies r1299 - in trunk: . media/css media/img people templates templates/people templates/teams templates/vertimus vertimus
- From: stephaner svn gnome org
- To: svn-commits-list gnome org
- Subject: damned-lies r1299 - in trunk: . media/css media/img people templates templates/people templates/teams templates/vertimus vertimus
- Date: Sun, 4 Jan 2009 22:36:05 +0000 (UTC)
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"/> {{ user.person }}</a> •
+ <a href="{{ user.get_absolute_url }}"><img src="{{ MEDIA_URL }}img/nobody-16.png" alt="Person"/> {{ user.person }}</a> •
<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]