- correct url in template
authorymh <ymh.work@gmail.com>
Thu, 23 May 2013 00:17:02 +0200
changeset 1193 cd67b17d257d
parent 1192 7a8e74f819bc
child 1194 8e20df96315b
- correct url in template - general cleaning - activate LdtUser in admin - remove ADMIN_MEDIA_PREFIX
src/ldt/ldt/api/ldt/resources/content.py
src/ldt/ldt/api/ldt/resources/project.py
src/ldt/ldt/api/ldt/resources/segment.py
src/ldt/ldt/api/ldt/resources/tag.py
src/ldt/ldt/api/ldt/resources/user.py
src/ldt/ldt/api/ldt/urls.py
src/ldt/ldt/api/urls.py
src/ldt/ldt/ldt_utils/admin.py
src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/app_index.html
src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/dumpdata.html
src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/reindex_form.html
src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/stats_form.html
src/ldt/ldt/ldt_utils/templates/front/front_all_contents.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/ldt_div.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/published_projects.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_form.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html
src/ldt/ldt/ldt_utils/tests/ldt_tests.py
src/ldt/ldt/ldt_utils/urls.py
src/ldt/ldt/ldt_utils/utils.py
src/ldt/ldt/ldt_utils/views/group.py
src/ldt/ldt/ldt_utils/views/lignesdetemps.py
src/ldt/ldt/ldt_utils/views/project.py
src/ldt/ldt/ldt_utils/views/workspace.py
src/ldt/ldt/security/utils.py
src/ldt/ldt/settings.py
src/ldt/ldt/templates/admin/cms_change_form.html
src/ldt/ldt/templates/admin/cms_change_list.html
src/ldt/ldt/templates/admin/index.html
src/ldt/ldt/templates/admin/page_base.html
src/ldt/ldt/templates/admin/page_change_form.html
src/ldt/ldt/templates/admin/page_change_list.html
src/ldt/ldt/templates/admin/page_index.html
src/ldt/ldt/templates/admin/page_login.html
src/ldt/ldt/templates/cms/admin/cms/page/change_form.html
src/ldt/ldt/text/urls.py
src/ldt/ldt/user/admin.py
src/ldt/ldt/user/forms.py
src/ldt/ldt/user/models.py
src/ldt/ldt/user/templates/ldt/user/login_form.html
src/ldt/ldt/user/urls.py
src/ldt/ldt/user/views.py
src/ldt/ldt/utils/context_processors.py
--- a/src/ldt/ldt/api/ldt/resources/content.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/resources/content.py	Thu May 23 00:17:02 2013 +0200
@@ -1,9 +1,9 @@
-from django.conf.urls.defaults import url
+from django.conf.urls import url
+from itertools import groupby
+from ldt.indexation import get_results_list
 from ldt.ldt_utils.models import Content, Media
+from tastypie import fields
 from tastypie.resources import Bundle, ModelResource, ALL_WITH_RELATIONS, ALL
-from tastypie import fields
-from ldt.indexation import get_results_list
-from itertools import groupby
 
 class MediaResource(ModelResource):
     
--- a/src/ldt/ldt/api/ldt/resources/project.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/resources/project.py	Thu May 23 00:17:02 2013 +0200
@@ -1,12 +1,13 @@
 from django.conf import settings
-from django.conf.urls.defaults import url
+from django.conf.urls import url
 from django.contrib.auth.models import Group
 from guardian.shortcuts import assign
-from ldt.ldt_utils.models import Project
-from ldt.api.ldt.authentication import SessionAuthentication, MultiAuthentication, ApiKeyAuthentication
-from ldt.api.ldt.serializers.cinelabserializer import CinelabSerializer
+from ldt.api.ldt.authentication import (SessionAuthentication, 
+    MultiAuthentication, ApiKeyAuthentication)
 from ldt.api.ldt.resources import ContentResource
 from ldt.api.ldt.resources.user import UserResource
+from ldt.api.ldt.serializers.cinelabserializer import CinelabSerializer
+from ldt.ldt_utils.models import Project
 from ldt.security import protect_models, unprotect_models
 from ldt.security.permissionchecker import check_object_perm_for_user
 from tastypie import fields, http
--- a/src/ldt/ldt/api/ldt/resources/segment.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/resources/segment.py	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,5 @@
 from django.conf import settings
-from django.conf.urls.defaults import url
+from django.conf.urls import url
 from django.core.paginator import Paginator, InvalidPage
 from django.db.models import F, Q
 from ldt.indexation import get_results_list
--- a/src/ldt/ldt/api/ldt/resources/tag.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/resources/tag.py	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,5 @@
 from django.conf import settings
-from django.conf.urls.defaults import url
+from django.conf.urls import url
 from django.core.paginator import Paginator, InvalidPage
 from ldt.ldt_utils.models import Segment
 from tagging.models import Tag
--- a/src/ldt/ldt/api/ldt/resources/user.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/resources/user.py	Thu May 23 00:17:02 2013 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import url
+from django.conf.urls import url
 from django.contrib.auth import get_user_model
 from tastypie.resources import Bundle, ModelResource
 
--- a/src/ldt/ldt/api/ldt/urls.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/ldt/urls.py	Thu May 23 00:17:02 2013 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns, include
+from django.conf.urls import patterns, include
 from ldt.api.ldt.resources import ProjectResource, ContentResource, SegmentResource, AnnotationResource, UserResource, TagResource
 from tastypie.api import Api
 
--- a/src/ldt/ldt/api/urls.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/api/urls.py	Thu May 23 00:17:02 2013 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns, include
+from django.conf.urls import patterns, include
 
 urlpatterns = patterns('',
    # all my other url mappings
--- a/src/ldt/ldt/ldt_utils/admin.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/admin.py	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,5 @@
 from StringIO import StringIO
-from django.conf.urls.defaults import patterns, url
+from django.conf.urls import patterns, url
 from django.contrib import admin
 from django.core.management import call_command
 from django.http import HttpResponse
--- a/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/app_index.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/app_index.html	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,4 @@
 {% extends "admin/app_index.html" %}
-{% load absurl %}
 {% load static %}
 {% block extrastyle %}
     {{ block.super }}
@@ -13,18 +12,18 @@
 	<table summary="Import">
 		<caption>Import</caption>
 		<tr>
-			<th><a href="{% absurl 'admin:ldt_content_import_file' %}">Import
+			<th><a href="{% url 'admin:ldt_content_import_file' %}">Import
 			an ldt</a>
 			</th>
 			<td>&nbsp;</td>
 		</tr>
 		<tr>
-			<th><a href="{% absurl 'admin:ldt_content_reindex' %}">Reindex</a>
+			<th><a href="{% url 'admin:ldt_content_reindex' %}">Reindex</a>
 			</th>
 			<td>&nbsp;</td>
 		</tr>
 		<tr>
-			<th><a href="{% absurl 'admin:ldt_project_compute_stats' %}">Compute stats</a>
+			<th><a href="{% url 'admin:ldt_project_compute_stats' %}">Compute stats</a>
 			</th>
 			<td>&nbsp;</td>
 		</tr>
@@ -34,7 +33,7 @@
     <table summary="Data">
         <caption>Data</caption>
         <tr>
-            <th><a href="{% absurl 'admin:ldt_admin_dump_data' %}">Dump data</a>
+            <th><a href="{% url 'admin:ldt_admin_dump_data' %}">Dump data</a>
             </th>
             <td>&nbsp;</td>
         </tr>
--- a/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/dumpdata.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/dumpdata.html	Thu May 23 00:17:02 2013 +0200
@@ -1,6 +1,5 @@
 {% extends "admin/ldt_utils/app_action.html" %}
 {% load i18n %}
-{% load absurl %}
 {# DUMP DATA #}
 {% block content %}
 {% if message %}
@@ -9,8 +8,8 @@
 </div>
 {% endif %}
 <div>
-<p>Click <a href="{% absurl 'admin:ldt_admin_dump_data' %}?dump=1">HERE</a> if you want to download the dumpdata's json. It can be long to load. The dumpdata is full and raw, without natural keys.</p>
+<p>Click <a href="{% url 'admin:ldt_admin_dump_data' %}?dump=1">HERE</a> if you want to download the dumpdata's json. It can be long to load. The dumpdata is full and raw, without natural keys.</p>
 </div>
 
-<a href="{% absurl 'admin:app_list' 'ldt_utils' %}">Back to administration page</a>
+<a href="{% url 'admin:app_list' app_label='ldt_utils' %}">Back to administration page</a>
 {% endblock %}
--- a/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/reindex_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/reindex_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,6 +1,5 @@
 {% extends "admin/ldt_utils/app_action.html" %}
 {% load i18n %}
-{% load absurl %}
 {# reindex contents #}
 {% block content %}
 {% if message %}
@@ -12,13 +11,13 @@
 {% endif %}
 <div>
 <form method="post"
-	action="{% absurl 'admin:ldt_content_reindex' %}">{% csrf_token %}
+	action="{% url 'admin:ldt_content_reindex' %}">{% csrf_token %}
 <table>
 	{{ form.as_table }}
 </table>
 <input type="submit" /></form>
 </div>
 
-<a href="{% absurl 'admin:app_list' 'ldt_utils' %}">Back to administration page</a>
+<a href="{% url 'admin:app_list' app_label='ldt_utils' %}">Back to administration page</a>
 
 {% endblock %}
--- a/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/stats_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/admin/ldt_utils/content/stats_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,6 +1,5 @@
 {% extends "admin/ldt_utils/app_action.html" %}
 {% load i18n %}
-{% load absurl %}
 {# reindex contents #}
 {% block content %}
 {% if message %}
@@ -12,13 +11,13 @@
 {% endif %}
 <div>
 <form method="post"
-	action="{% absurl 'admin:ldt_project_compute_stats' %}">{% csrf_token %}
+	action="{% url 'admin:ldt_project_compute_stats' %}">{% csrf_token %}
 <table>
 	{{ form.as_table }}
 </table>
 <input type="submit" /></form>
 </div>
 
-<a href="{% absurl 'admin:app_list' 'ldt_utils' %}">Back to administration page</a>
+<a href="{% url 'admin:app_list' app_label='ldt_utils' %}">Back to administration page</a>
 
 {% endblock %}
--- a/src/ldt/ldt/ldt_utils/templates/front/front_all_contents.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/front/front_all_contents.html	Thu May 23 00:17:02 2013 +0200
@@ -98,7 +98,7 @@
     {% for content in results.object_list %}
     <li class="li_media">
         <div class="img_and_overlay">
-            <a href="{% url 'ldt.ldt_utils.views.front.annot_content' content.iri_id %}">
+            <a href="{% url 'ldt.ldt_utils.views.front.annot_content' content_iri_id=content.iri_id %}">
                 {% thumbnail content.image "294x165" format="PNG" crop="center" as im %}<img src="{{ im.url }}" class="img_media" width="{{ im.width }}" height="{{ im.height }}" alt="{% trans 'open this media' %}" title="{% trans 'open this media' %}">{% endthumbnail %}
             </a>
             <div class="overlay">
@@ -112,7 +112,7 @@
             </div>
         </div>
         <div class="bulle_annot" title="{% blocktrans count nb=content.nb_annotations %}{{nb}} annotation on this media{% plural %}{{nb}} annotations on this media{% endblocktrans %}">{{ content.nb_annotations }}</div>
-        <p><a href="{% url 'ldt.ldt_utils.views.front.annot_content' content.iri_id %}" title="{% trans 'open this media' %}" ><b>{% if content.title|length > 69 %}{{content.title|slice:":69"}}...{% else %}{{content.title}}{% endif %}</b></a></p>
+        <p><a href="{% url 'ldt.ldt_utils.views.front.annot_content' content_iri_id=content.iri_id %}" title="{% trans 'open this media' %}" ><b>{% if content.title|length > 69 %}{{content.title|slice:":69"}}...{% else %}{{content.title}}{% endif %}</b></a></p>
         <p>{% trans 'by' %} IRI | {{content.duration|str_duration:"h"}}</p>
     </li>
     {% endfor %}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Thu May 23 00:17:02 2013 +0200
@@ -1,26 +1,24 @@
 {% extends "ldt/ldt_utils/workspace_base.html" %}
 {% load i18n %}
 {% load static %}
-{% load absurl %}
 
- {# form of creation of content #}
-{% load adminmedia %}
+{# form of creation of content #}
 
 {% block js_import %}
 	{{ block.super }}
-    <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/core.js" ></script>
-    <script type="text/javascript" src="{{ADMIN_MEDIA_PREFIX}}js/jquery.init.js"></script>
-    <script type="text/javascript" src='{% static "ldt/js/jquery.min.js" %}'></script>
+    <script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
+    <script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
+    <script type="text/javascript" src="{% static 'ldt/js/jquery.min.js' %}"></script>
     <script type="text/javascript" src="{% url 'ldt.jsi18n' packages='ldt' %}" ></script>	
-    <script type="text/javascript" src='{% static "ldt/js/projectscontents.js" %}'></script>
-    <script type="text/javascript" src='{% static "ldt/js/jquery.textchange.min.js" %}'></script>
-    <script type="text/javascript" src='{% static "ldt/js/jquery-ui.min.js" %}'></script>
+    <script type="text/javascript" src="{% static 'ldt/js/projectscontents.js' %}"></script>
+    <script type="text/javascript" src="{% static 'ldt/js/jquery.textchange.min.js' %}"></script>
+    <script type="text/javascript" src="{% static 'ldt/js/jquery-ui.min.js' %}"></script>
 	{{ content_form.media.js }}
 {% endblock %}
 
 {% block js_declaration %}
 	<script type="text/javascript">
-	window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+	window.__admin_media_prefix__ = "{% filter escapejs %}{% get_static_prefix %}/admin/{% endfilter %}";
 	
 	$(document).ready(function() {
 		// url_upload, media_prefix, post_added_params, btn_label, success_label, wait_label, cancel_label, remove_url, get_dur_url
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_group.html	Thu May 23 00:17:02 2013 +0200
@@ -1,16 +1,14 @@
 {% extends "ldt/ldt_utils/workspace_base.html" %}
 {% load i18n %}
 {% load static %}
-{% load absurl %}
 
-{% load adminmedia %}
 {% load thumbnail %}
 
 {% block js_import %}
 	{{ block.super }}
-    <script type="text/javascript" src="{% absurl 'ldt.jsi18n' packages='ldt' %}" ></script>
-	<script type="text/javascript" src='{% static "ldt/js/projectscontents.js" %}' ></script> 
-	<script type="text/javascript" src='{% static "ldt/js/tiny_mce/tiny_mce.js" %}'></script>
+    <script type="text/javascript" src="{% url 'ldt.jsi18n' packages='ldt' %}" ></script>
+	<script type="text/javascript" src="{% static 'ldt/js/projectscontents.js' %}" ></script> 
+	<script type="text/javascript" src="{% static 'ldt/js/tiny_mce/tiny_mce.js' %}"></script>
 	{{ content_form.media.js }}
 {% endblock %}
 
@@ -44,7 +42,7 @@
            $( this ).find("button[type=submit]").removeClass("e-clicked");
         });
 
-		var search_url = "{% absurl 'ldt.ldt_utils.views.workspace.share_filter' filter='__FILTER__' use_groups='false' %}";
+		var search_url = "{% url 'ldt.ldt_utils.views.workspace.share_filter' filter='__FILTER__' use_groups='false' %}";
 	});
 	</script>
 
@@ -55,7 +53,7 @@
 	<div id="add_group" class="span-18 last">
 	<div class="projectscontentstitle span-18 last">{% if group_id %}{% trans "Update a group" %}{% else %}{% trans "Create a group" %}{% endif %}</div>
 	
-	<form action="{% if group_id %}{% absurl 'ldt.ldt_utils.views.group.update_group' group_id %} {% else %}{% absurl 'ldt.ldt_utils.views.group.create_group' %}{% endif %}" method="POST" enctype="multipart/form-data" {% if target_parent %}target="_parent"{% endif %}>
+	<form action="{% if group_id %}{% url 'ldt.ldt_utils.views.group.update_group' group_id=group_id %} {% else %}{% url 'ldt.ldt_utils.views.group.create_group' %}{% endif %}" method="POST" enctype="multipart/form-data" {% if target_parent %}target="_parent"{% endif %}>
 	{% csrf_token %} 
 	<input type="hidden" name="form_status" value="{{form_status}}" id="project_form_status" />
 	<input type="hidden" name="id_group" value="" id="id_group"/>
@@ -67,9 +65,7 @@
 		{% endfor %}
 		
 		<label for="description">{% trans "Description" %}</label>
-		<textarea id="description" name="description">
-		{{ img_container.description }}
-		</textarea>
+		<textarea id="description" name="description">{{ img_container.description }}</textarea>
 	</div>
 
 	{% include "ldt/ldt_utils/partial/permissions.html" %}		
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Thu May 23 00:17:02 2013 +0200
@@ -1,7 +1,6 @@
 {% extends "ldt/ldt_raw_base.html" %}
 {% load static %}
 {% load i18n %} {# form of creation of content #}
-{% load adminmedia %}
 
 {% block js_import %}
 	{{ block.super }}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html	Thu May 23 00:17:02 2013 +0200
@@ -15,9 +15,9 @@
 var groups_filter_url = "{% url 'ldt.ldt_utils.views.group.groups_filter' filter='__FILTER__' %}";
 var content_filter_url = "{% url 'ldt.ldt_utils.views.content.contents_filter' filter_c='__FILTER__' %}";
 var project_filter_url = "{% url 'ldt.ldt_utils.views.project.projects_filter' filter='__FILTER__' is_owner='false' status='0' id_group='__ID_GROUP__' %}";
-var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' '__PROJECT_ID__' %}";
-var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' '__PROJECT_ID__' %}";
-var get_group_projects_url = "{% url 'ldt.ldt_utils.views.group.get_group_projects' %}";
+var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' id='__PROJECT_ID__' %}";
+var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' id='__PROJECT_ID__' %}";
+var get_group_projects_url = "{% url 'ldt.ldt_utils.views.group.get_group_projects_view' %}";
 
 function init_events(base_node) {
 	init_events_projects(base_node, "{% url 'ldt.ldt_utils.views.workspace.popup_embed' %}", project_filter_url, publish_project_url, unpublish_project_url)
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html	Thu May 23 00:17:02 2013 +0200
@@ -26,8 +26,8 @@
 	    <tbody class="projectscontentsbody">
 	{% for content in contents %}
 		<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
-		  <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_add.png" %}' title="{% trans 'create project' %}" alt="{% trans 'create project' %}" href="{% url 'ldt.ldt_utils.views.project.create_project' content.iri_id %}" class="ldt_link_create_project"/></div></td>
-		  <td class="cellimg"><div class="cellimgdiv"><img  alt="{% trans 'preview media'%}" title="{% trans 'preview media'%}" src='{% static "ldt/img/control_play.png" %}' href="{% url 'ldt.ldt_utils.views.lignesdetemps.index' content.iri_id %}" class="ldt_link_open_ldt"/></div></td>
+		  <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_add.png" %}' title="{% trans 'create project' %}" alt="{% trans 'create project' %}" href="{% url 'ldt.ldt_utils.views.project.create_project' iri_id=content.iri_id %}" class="ldt_link_create_project"/></div></td>
+		  <td class="cellimg"><div class="cellimgdiv"><img  alt="{% trans 'preview media'%}" title="{% trans 'preview media'%}" src='{% static "ldt/img/control_play.png" %}' href="{% url 'ldt.ldt_utils.views.lignesdetemps.index'  url=content.iri_id %}" class="ldt_link_open_ldt"/></div></td>
 		  <td>{% thumbnail content.image "50x50" format="PNG" crop="top" as im %}<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">{% endthumbnail %}</td>
 		  <td class="contenttitle"><a {% if content.change %} class="contenttitlelink infostooltip" href="{% url 'ldt.ldt_utils.views.content.write_content' iri_id=content.iri_id %}" data-title="{{ content.title}}"  data-desc="{{ content.description }}" {% else %} class="contenttitlelink qtiplink" title="{% trans "You can't edit this content" %}" {% endif %}>{{ content.title|default:"_" }}</a></td>
 		</tr>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/groupslist.html	Thu May 23 00:17:02 2013 +0200
@@ -45,7 +45,7 @@
 		
 		{% if group.change %}
 			<td class="groupimg" >
-				<a class="grouplink create_group" title="{% trans 'Change this group'%}" href="{% url 'ldt.ldt_utils.views.group.update_group' group.id %}">
+				<a class="grouplink create_group" title="{% trans 'Change this group'%}" href="{% url 'ldt.ldt_utils.views.group.update_group' group_id=group.id %}">
 			    {% thumbnail group.profile.image "50x50" crop="center" format="PNG" as im %}<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" class="editable"/>{% empty %}&nbsp;{% endthumbnail %}
 	    		</a>
 	    	</td>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/ldt_div.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/ldt_div.html	Thu May 23 00:17:02 2013 +0200
@@ -32,8 +32,8 @@
 		{% else %}
 		readOnly:'true',
 		{% endifequal %}
-		segmentPassMask:"{% absurl 'ldt.ldt_utils.views.lignesdetemps.index_segment' '{4}' '{0}' '{1}' '{2}' '{3}' %}",
-		simplePlayerPassMask:"{% absurl 'ldt.ldt_utils.views.front.annot_content' '{0}' '{4}' '{2}' %}#id={3}"
+		segmentPassMask:"{% absurl 'ldt.ldt_utils.views.lignesdetemps.index_segment' project_id='{4}' content_id='{0}' cutting_id='{1}' ensemble_id='{2}' segment_id='{3}' %}",
+		simplePlayerPassMask:"{% absurl 'ldt.ldt_utils.views.front.annot_content' content_iri_id='{0}' project_id='{4}' cutting_id='{2}' %}#id={3}"
 		
 	};
 
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html	Thu May 23 00:17:02 2013 +0200
@@ -18,9 +18,9 @@
 {% for project in projects %}
 
     <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}" >
-        {% url 'ldt.ldt_utils.views.json.project_json_id' project.ldt_id as json_url_id %}
+        {% url 'ldt.ldt_utils.views.json.project_json_id' id=project.ldt_id as json_url_id %}
         {% if is_gecko %}
-            <td class="cellimg"><div class="cellimgdiv"><a  href="{% url 'index_project_full' project.ldt_id %}">
+            <td class="cellimg"><div class="cellimgdiv"><a  href="{% url 'index_project_full' id=project.ldt_id %}">
             {% if project.change or project.owner == user %}
               {% if project.state != 2 %}
                 <img src='{% static "ldt/img/page_edit.png" %}' alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/>
@@ -32,7 +32,7 @@
             {% endif %}
             </a></div></td>
         {% else %}
-            <td class="cellimg"><div class="cellimgdiv"><a href="{% url 'index_project' project.ldt_id %}" class="ldt_link_open_ldt">
+            <td class="cellimg"><div class="cellimgdiv"><a href="{% url 'index_project' id=project.ldt_id %}" class="ldt_link_open_ldt">
             {% if project.change or project.owner == user %}
               {% if project.state != 2 %}
                 <img src='{% static "ldt/img/page_edit.png" %}' alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/>
@@ -45,7 +45,7 @@
             </a></div></td>
         {% endif %}
         
-        <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_copy.png" %}' href="{% url 'ldt.ldt_utils.views.project.copy_project' project.ldt_id group_id %}" class="ldt_link_copy_project" alt="{% trans 'copy project' %}" title="{% trans 'copy project' %}"/></div></td>
+        <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_copy.png" %}' href="{% url 'ldt.ldt_utils.views.project.copy_project' ldt_id=project.ldt_id group_id=group_id %}" class="ldt_link_copy_project" alt="{% trans 'copy project' %}" title="{% trans 'copy project' %}"/></div></td>
         <td class="cellimg">
          <div class="cellimgdiv">
           {% if project.state == 2 %}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html	Thu May 23 00:17:02 2013 +0200
@@ -17,13 +17,13 @@
     <tbody class="projectscontentsbody">
 {% for project in projects %}
     <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}" >
-        {% url 'ldt.ldt_utils.views.json.project_json_id' project.ldt_id as json_url_id %}
+        {% url 'ldt.ldt_utils.views.json.project_json_id' id=project.ldt_id as json_url_id %}
         {% if is_gecko %}
-            <td class="cellimg"><div class="cellimgdiv"><a  href="{% url 'index_project_full' project.ldt_id %}"><img src='{% static "ldt/img/page_eye.png" %}' alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></a></div></td>
+            <td class="cellimg"><div class="cellimgdiv"><a  href="{% url 'index_project_full' id=project.ldt_id %}"><img src='{% static "ldt/img/page_eye.png" %}' alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></a></div></td>
         {% else %}
-            <td class="cellimg"><div class="cellimgdiv"><a href="{% url 'index_project' project.ldt_id %}" class="ldt_link_open_ldt"><img src='{% static "ldt/img/page_eye.png" %}'  alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></a></div></td>
+            <td class="cellimg"><div class="cellimgdiv"><a href="{% url 'index_project' id=project.ldt_id %}" class="ldt_link_open_ldt"><img src='{% static "ldt/img/page_eye.png" %}'  alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></a></div></td>
         {% endif %}
-        <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_copy.png" %}' href="{% url 'ldt.ldt_utils.views.project.copy_project' project.ldt_id %}" class="ldt_link_copy_project" alt="{% trans 'copy the project' %}" title="{% trans 'copy the project' %}"/></div></td>
+        <td class="cellimg"><div class="cellimgdiv"><img src='{% static "ldt/img/page_copy.png" %}' href="{% url 'ldt.ldt_utils.views.project.copy_project' ldt_id=project.ldt_id %}" class="ldt_link_copy_project" alt="{% trans 'copy the project' %}" title="{% trans 'copy the project' %}"/></div></td>
         <td class="cellimg">
          <div class="cellimgdiv">
           <a href='{% url 'ldt.ldt_utils.views.workspace.popup_embed' %}?json_url={{WEB_URL}}{{json_url_id}}&player_id=player_project_{{project.ldt_id}}&ldt_id={{project.ldt_id}}'>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/published_projects.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/published_projects.html	Thu May 23 00:17:02 2013 +0200
@@ -14,8 +14,8 @@
 
 var content_filter_url = "{% url 'ldt.ldt_utils.views.content.contents_filter' filter_c='__FILTER__' %}";
 var project_filter_url = "{% url 'ldt.ldt_utils.views.project.projects_filter' filter='__FILTER__' is_owner='false' status='2' %}";
-var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' '__PROJECT_ID__' %}";
-var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' '__PROJECT_ID__' %}";
+var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' id='__PROJECT_ID__' %}";
+var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' id='__PROJECT_ID__' %}";
 
 
 function init_events(base_node) {
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,6 +1,5 @@
 {% extends "ldt/ldt_base.html" %}
 {% load i18n %}
-{% load absurl %}
 
 {% block js_declaration %}
 <script type="text/javascript">
@@ -21,7 +20,7 @@
 
 {% block content %}
 <form method="post" id="my_form"
-	{% comment %}action="{% absurl 'ldt.ldt_utils.views.workspace.search_index' %}"{% endcomment %}
+	{% comment %}action="{% url 'ldt.ldt_utils.views.workspace.search_index' %}"{% endcomment %}
 	action="{% url 'ldt.ldt_utils.views.workspace.search_index' %}"
 	accept-charset="utf-8">
 {% csrf_token %}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html	Thu May 23 00:17:02 2013 +0200
@@ -15,8 +15,8 @@
 
 var content_filter_url = "{% url 'ldt.ldt_utils.views.content.contents_filter' filter_c='__FILTER__' %}";
 var project_filter_url = "{% url 'ldt.ldt_utils.views.project.projects_filter' filter='__FILTER__' is_owner='true' status='0' %}";
-var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' '__PROJECT_ID__' %}";
-var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' '__PROJECT_ID__' %}";
+var publish_project_url = "{% url 'ldt.ldt_utils.views.project.publish' id='__PROJECT_ID__' %}";
+var unpublish_project_url = "{% url 'ldt.ldt_utils.views.project.unpublish' id='__PROJECT_ID__' %}";
 
 function init_events(base_node) {
 	init_events_all(base_node, "{% url 'ldt.ldt_utils.views.workspace.popup_embed' %}", content_filter_url, project_filter_url, publish_project_url, unpublish_project_url);
--- a/src/ldt/ldt/ldt_utils/tests/ldt_tests.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/tests/ldt_tests.py	Thu May 23 00:17:02 2013 +0200
@@ -83,7 +83,7 @@
         query = base64.urlsafe_b64encode(search.encode('utf8'))
 
         self.project.contents.add(self.cont3, self.cont4)
-        ldoc = self.LU.generate_init([field, query], 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments')
+        ldoc = self.LU.generate_init({'field':field, 'query':query}, 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments')
         self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init")
         self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library")    
     def test_create_ldt(self):
--- a/src/ldt/ldt/ldt_utils/urls.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/urls.py	Thu May 23 00:17:02 2013 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns, url, include
+from django.conf.urls import patterns, url, include
 from ldt.management import test_ldt
 
 # Uncomment the next two lines to enable the admin:
--- a/src/ldt/ldt/ldt_utils/utils.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/utils.py	Thu May 23 00:17:02 2013 +0200
@@ -3,7 +3,6 @@
 from django.utils.translation import ugettext as _
 from StringIO import StringIO
 import datetime
-import django.core.urlresolvers
 import lxml.etree #@UnresolvedImport
 import uuid
 from ldt.utils.url import request_with_auth
@@ -147,10 +146,9 @@
         elementFiles = lxml.etree.SubElement(iri, 'files')    
         elementInit = lxml.etree.SubElement(elementFiles, 'init')
         elementfile = lxml.etree.SubElement(elementInit, 'file')   
-        elementfile.set('src', absurl_norequest(method, args=url))
-        elementfile.set('src', django.core.urlresolvers.reverse(method, args=url))
+        elementfile.set('src', absurl_norequest(method, kwargs=url))
         if(search):
-            elementfile.set("segsel", absurl_norequest(search, args=url))
+            elementfile.set("segsel", absurl_norequest(search, kwargs=url))
 
         lxml.etree.SubElement(elementFiles, 'recent')
         lxml.etree.SubElement(elementFiles, 'library')
--- a/src/ldt/ldt/ldt_utils/views/group.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/views/group.py	Thu May 23 00:17:02 2013 +0200
@@ -1,13 +1,15 @@
 from django.conf import settings
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import Group
+from django.db import transaction
 from django.http import HttpResponseServerError
 from django.shortcuts import render_to_response, get_object_or_404, redirect
 from django.template import RequestContext
+from guardian.shortcuts import (remove_perm, get_objects_for_group, 
+    get_objects_for_user)
 from ldt.ldt_utils.forms import GroupAddForm
-from guardian.shortcuts import remove_perm, get_objects_for_group, get_objects_for_user
+from ldt.security.cache import get_cached_checker, cached_assign
 from ldt.security.utils import add_change_attr, get_userlist, get_userlist_group
-from ldt.security.cache import get_cached_checker, cached_assign
 from ldt.user.forms import PictureForm
 
 
@@ -45,6 +47,7 @@
 
 
 @login_required
+@transaction.commit_on_success
 def create_group(request):
     if not request.user.has_perm('auth.add_group'):
         return HttpResponseServerError('<h1>User %s can not create a group.</h1>' % request.user.username)
@@ -96,6 +99,7 @@
                                                                   'elem_list' : get_userlist(request.user), 'profile_picture_form': picture_form}, context_instance=RequestContext(request))
 
 @login_required
+@transaction.commit_on_success
 def update_group(request, group_id):
     group = get_object_or_404(Group, id=group_id)
     checker = get_cached_checker(request.user)
--- a/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Thu May 23 00:17:02 2013 +0200
@@ -24,7 +24,7 @@
     
     language_code = request.LANGUAGE_CODE[:2]
     
-    url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, query])
+    url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", kwargs={'field':field, 'query':query})
     colorurl=static("ldt/swf/ldt/pkg/color.xml")
     i18nurl=static("ldt/swf/ldt/pkg/i18n")
     baseurl=static("ldt/swf/ldt/")
@@ -34,7 +34,7 @@
     
     ldtgen = LdtUtils()
     
-    doc = ldtgen.generate_init([field, query], 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments')
+    doc = ldtgen.generate_init({'field':field, 'query':query}, 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments')
     
     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
     resp.write(lxml.etree.tostring(doc, pretty_print=True, encoding="utf-8")) 
@@ -86,7 +86,7 @@
 
 
 def index_segment(request, project_id, content_id, cutting_id, ensemble_id, segment_id):
-    url_str = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init_segment", args=[project_id, content_id, ensemble_id, cutting_id, segment_id])
+    url_str = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init_segment", kwargs={'project_id':project_id, 'content_id':content_id, 'ensemble_id':ensemble_id, 'cutting_id':cutting_id, 'segment_id':segment_id})
     post_url = ""
     language_code = request.LANGUAGE_CODE[:2]
     readonly = 'true'
@@ -102,7 +102,7 @@
         get_object_or_404(Project.safe_objects, ldt_id=project_id)
     
     ldtgen = LdtUtils()
-    doc = ldtgen.generate_init([project_id, content_id, ensemble_id, cutting_id, segment_id], 'ldt.ldt_utils.views.lignesdetemps.ldt_segment', 'ldt.ldt_utils.views.lignesdetemps.highlight_segment')
+    doc = ldtgen.generate_init({'project_id':project_id, 'content_id':content_id, 'ensemble_id':ensemble_id, 'cutting_id':cutting_id, 'segment_id':segment_id}, 'ldt.ldt_utils.views.lignesdetemps.ldt_segment', 'ldt.ldt_utils.views.lignesdetemps.highlight_segment')
     return HttpResponse(lxml.etree.tostring(lxml.etree.ElementTree(doc), pretty_print=True), mimetype="text/xml;charset=utf-8")
 
 def highlight_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
@@ -188,7 +188,7 @@
 @login_required    
 def index_project(request, id, full=False):  # @ReservedAssignment
 
-    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", args=['ldt_project', id])
+    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", kwargs={'method':'ldt_project', 'url':id})
     posturl = absurl(request, "ldt.ldt_utils.views.lignesdetemps.save_ldt_project")
     language_code = request.LANGUAGE_CODE[:2]
     colorurl = static("ldt/swf/ldt/pkg/color.xml")
@@ -224,7 +224,7 @@
 
 def embed_ldt(request, id):  # @ReservedAssignment
     # Almost identical to index_project but without login_required and less parameters
-    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", args=['ldt_project', id])
+    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", kwargs={'method':'ldt_project', 'url':id})
     posturl = ""
     language_code = request.LANGUAGE_CODE[:2]
     colorurl = absstatic(request, "ldt/swf/ldt/pkg/color.xml")
@@ -245,7 +245,7 @@
 def init(request, method, url):
     ldtgen = LdtUtils()
 
-    doc = ldtgen.generate_init([url], 'ldt.ldt_utils.views.lignesdetemps.' + method, None)    
+    doc = ldtgen.generate_init({'id':url}, 'ldt.ldt_utils.views.lignesdetemps.' + method, None)    
 
     library = doc.xpath('/iri/files/library')[0]
     for c in Content.safe_objects.all().select_related("media_obj"):
@@ -359,7 +359,7 @@
 
 def index(request, url):
     
-    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", args=['ldt', url])
+    urlStr = absurl(request, "ldt.ldt_utils.views.lignesdetemps.init", kwargs={'method':'ldt', 'url':url})
     language_code = request.LANGUAGE_CODE[:2]
     colorurl=absstatic(request, "ldt/swf/ldt/pkg/color.xml")
     i18nurl=absstatic(request, "ldt/swf/ldt/pkg/i18n")
--- a/src/ldt/ldt/ldt_utils/views/project.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/views/project.py	Thu May 23 00:17:02 2013 +0200
@@ -45,9 +45,9 @@
             form_status = "saved"
             is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
             if is_gecko :
-                redirect_to = reverse('index_project_full', args=[project.ldt_id])
+                redirect_to = reverse('index_project_full', kwargs={'id':project.ldt_id})
             else:
-                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))   
+                return HttpResponseRedirect(reverse('index_project', kwargs={'id':project.ldt_id}))   
      
     else:
         form = LdtAddForm()
@@ -89,14 +89,14 @@
             # Modal window is not used with firefox
             is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
             if is_gecko :
-                redirect_to = reverse('index_project_full', args=[project.ldt_id])
+                redirect_to = reverse('index_project_full', kwargs={'id':project.ldt_id})
             else:
-                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
+                return HttpResponseRedirect(reverse('index_project', kwargs={'id':project.ldt_id}))
     else:
         form = AddProjectForm()
            
     return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status': form_status, 'contents':contents,'groups' : groups,
-                                                                'redirect_to': redirect_to, 'elem_list': get_userlist(request.user), 'create_project_action':reverse("ldt.ldt_utils.views.project.create_project", args=[iri_id])}, context_instance=RequestContext(request))
+                                                                'redirect_to': redirect_to, 'elem_list': get_userlist(request.user), 'create_project_action':reverse("ldt.ldt_utils.views.project.create_project", kwargs={'iri_id':iri_id})}, context_instance=RequestContext(request))
 
 @login_required
 def update_project(request, ldt_id):
@@ -174,7 +174,7 @@
         
     return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups, 'elem_list': get_userlist(request.user), 
                                                                 'ldt_id': ldt_id, 'contents':contents, 'display_reset':display_reset, 'member_list': member_list, 'admin_list': admin_list,
-                                                                'create_project_action':reverse("ldt.ldt_utils.views.project.update_project", args=[ldt_id]),
+                                                                'create_project_action':reverse("ldt.ldt_utils.views.project.update_project", kwargs={'ldt_id':ldt_id}),
                                                                 'profile_picture_form': picture_form}, context_instance=RequestContext(request))
 
 @login_required
@@ -191,9 +191,9 @@
             project = project.copy_project(title=form.cleaned_data['title'], user=user, group=group)
             is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
             if is_gecko:
-                return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
+                return HttpResponseRedirect(reverse('index_project_full', kwargs={'id':project.ldt_id}))
             else:
-                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
+                return HttpResponseRedirect(reverse('index_project', kwargs={'id':project.ldt_id}))
     else:
         form = CopyProjectForm()
     # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
--- a/src/ldt/ldt/ldt_utils/views/workspace.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/ldt_utils/views/workspace.py	Thu May 23 00:17:02 2013 +0200
@@ -122,7 +122,7 @@
     if not project_id :
         return HttpResponseForbidden(_("Parameters project_id or content_id must be given in the url"))
         
-    json_url = reverse("projectjson_id", args=[project_id])
+    json_url = reverse("projectjson_id", kwargs={'id':project_id})
     player_id = "player_project_" + project_id
     ldt_id = project_id
     rend_dict = get_datas_for_embed(request, json_url, player_id, ldt_id)
@@ -299,7 +299,7 @@
         page = sform.cleaned_data["page"] or 1
         ldt_pres = sform.cleaned_data["ldt_pres"]
         if ldt_pres:
-            url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr])
+            url = absurl(request, "ldt.ldt_utils.views.lignesdetemps.search_init", kwargs={'field':field, 'query':queryStr})
             return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'colorurl': colorurl, 'i18nurl': i18nurl , 'language': language_code, 'baseurl': baseurl, 'url': url}, context_instance=RequestContext(request))
         else:                                        
             results, nb, nb_segment = get_search_results(request, search, field, page)            
--- a/src/ldt/ldt/security/utils.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/security/utils.py	Thu May 23 00:17:02 2013 +0200
@@ -147,7 +147,7 @@
     return [users_list + groups_list, admin_users + admin_groups]
  
 def get_userlist_group(group, user):
-    members = group.user_set.all()
+    members = group.ldtuser_set.all()
     admin = get_users_with_perms(group)
 
     member_list = []
--- a/src/ldt/ldt/settings.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/settings.py	Thu May 23 00:17:02 2013 +0200
@@ -75,8 +75,6 @@
 LOG_LEVEL = getattr(settings, 'LOG_LEVEL', logging.INFO)
 EMPTY_MEDIA_EXTERNALID = getattr(settings, 'EMPTY_MEDIA_EXTERNALID', None)
 
-ADMIN_MEDIA_PREFIX = getattr(settings, 'ADMIN_MEDIA_PREFIX', None)
-
 TEST_WEBSERVER_ADDRPORT = getattr(settings, 'TEST_WEBSERVER_ADDRPORT', '127.0.0.1:8000')
 
 ACCOUNT_ACTIVATION_DAYS = getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7)
--- a/src/ldt/ldt/templates/admin/cms_change_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/cms_change_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,5 @@
 {% extends "admin/page_change_form.html" %}
-{% load i18n admin_modify adminmedia cms_tags cms_admin %}
+{% load i18n admin_modify static cms_tags cms_admin %}
 {% block js_import %}
 {% endblock %}
 {% block extrahead %}
@@ -7,7 +7,7 @@
 {% if not add %}
 	<script type="text/javascript" src="{{ CMS_MEDIA_URL }}js/change_form.js"></script>
 {% endif %}
-<script type="text/javascript" src="{% admin_media_prefix %}js/urlify.js"></script>
+<script type="text/javascript" src="{% static 'admin/js/urlify.js' %}"></script>
 
 {% if add %}
 	<script type="text/javascript">
--- a/src/ldt/ldt/templates/admin/cms_change_list.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/cms_change_list.html	Thu May 23 00:17:02 2013 +0200
@@ -1,5 +1,5 @@
 {% extends "admin/page_change_list.html" %}
-{% load adminmedia admin_list i18n cms_admin js %}
+{% load admin_list i18n cms_admin js %}
 {% block bodyclass %}change-list{% endblock %}
 
 {% if not is_popup %}{% block breadcrumbs %}
--- a/src/ldt/ldt/templates/admin/index.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/index.html	Thu May 23 00:17:02 2013 +0200
@@ -1,7 +1,7 @@
 {% extends "admin/base_site.html" %}
 {% load i18n %}
 
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load static %}{% static 'admin/css/dashboard.css' %}" />{% endblock %}
 
 {% block coltype %}colMS{% endblock %}
 
--- a/src/ldt/ldt/templates/admin/page_base.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/page_base.html	Thu May 23 00:17:02 2013 +0200
@@ -3,8 +3,8 @@
 
 {% block css_import %}
 {{ block.super }}
-    <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/page_base.css{% endblock %}" />
-    {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
+    <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load static %}{% static 'admin/css/page_base.css' %}{% endblock %}" />
+    {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static 'admin/css/rtl.css' %}{% endblock %}" />{% endif %}
 {% endblock %}
 
 
--- a/src/ldt/ldt/templates/admin/page_change_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/page_change_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,12 +1,12 @@
 {% extends "admin/page_base_site.html" %}
-{% load i18n admin_modify adminmedia %}
+{% load i18n admin_modify static %}
 
 {% block extrahead %}{{ block.super }}
 <script type="text/javascript" src="../../../jsi18n/"></script>
 {{ media }}
 {% endblock %}
 
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}" />{% endblock %}
 
 {% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
 
--- a/src/ldt/ldt/templates/admin/page_change_list.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/page_change_list.html	Thu May 23 00:17:02 2013 +0200
@@ -1,11 +1,11 @@
 {% extends "admin/page_base_site.html" %}
-{% load adminmedia admin_list i18n %}
+{% load static admin_list i18n %}
 
 {% block extrastyle %}
   {{ block.super }}
-  <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
+  <link rel="stylesheet" type="text/css" href="{% static 'admin/css/changelists.css' %}" />
   {% if cl.formset %}
-    <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
+    <link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}" />
     <script type="text/javascript" src="../../jsi18n/"></script>
   {% endif %}
   {{ media }}
--- a/src/ldt/ldt/templates/admin/page_index.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/page_index.html	Thu May 23 00:17:02 2013 +0200
@@ -1,7 +1,7 @@
 {% extends "admin/page_base_site.html" %}
 {% load i18n %}
 
-{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load adminmedia %}{% admin_media_prefix %}css/dashboard.css" />{% endblock %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% load static %}{% static 'admin/css/dashboard.css' %}" />{% endblock %}
 
 {% block coltype %}colMS{% endblock %}
 
--- a/src/ldt/ldt/templates/admin/page_login.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/admin/page_login.html	Thu May 23 00:17:02 2013 +0200
@@ -1,7 +1,7 @@
 {% extends "admin/page_base_site.html" %}
 {% load i18n %}
 
-{% block extrastyle %}{% load adminmedia %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/login.css" />{% endblock %}
+{% block extrastyle %}{% load static %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static 'admin/css/login.css' %}" />{% endblock %}
 
 {% block bodyclass %}{% endblock %}
 
--- a/src/ldt/ldt/templates/cms/admin/cms/page/change_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/templates/cms/admin/cms/page/change_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,11 +1,11 @@
 {% extends "admin/base_site.html" %}
-{% load i18n admin_modify adminmedia cms_admin %}
+{% load i18n admin_modify static cms_admin %}
 {% block extrahead %}{{ block.super }}
 <script type="text/javascript" src="../../../../jsi18n/"></script>
 {% for js in javascript_imports %}{% include_admin_script js %}{% endfor %}
 {% endblock %}
-{% block stylesheet %}{% admin_media_prefix %}css/forms.css" />
-<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}cms/admin.css{% endblock %}
+{% block stylesheet %}{% static 'admin/css/forms.css' %}" />
+<link rel="stylesheet" type="text/css" href="{% static 'admin/cms/admin.css' %}{% endblock %}
 {% block coltype %}{% if ordered_objects %}colMS{% else %}colM{% endif %}{% endblock %}
 {% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
 {% block userlinks %}<a href="../../../doc/">{% trans 'Documentation' %}</a> / <a href="../../../password_change/">{% trans 'Change password' %}</a> / <a href="../../../logout/">{% trans 'Log out' %}</a>{% endblock %}
--- a/src/ldt/ldt/text/urls.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/text/urls.py	Thu May 23 00:17:02 2013 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns, url
+from django.conf.urls import patterns, url
 
 # Uncomment the next two lines to enable the admin:
 # from django.contrib import admin
--- a/src/ldt/ldt/user/admin.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/admin.py	Thu May 23 00:17:02 2013 +0200
@@ -1,17 +1,20 @@
 from django.contrib import admin
-from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 from guardian.admin import GuardedModelAdmin
+from ldt.user.models import LdtUser
 from models import GroupProfile
 
-User = get_user_model()
-
 class GroupProfileInline(admin.StackedInline):
     model = GroupProfile
 
 class GroupAdmin(GuardedModelAdmin):
     inlines = [GroupProfileInline, ]
 
+class LdtUserAdmin(admin.ModelAdmin):
+    pass
+
 
 admin.site.unregister(Group)
-admin.site.register(Group, GroupAdmin)
\ No newline at end of file
+admin.site.register(Group, GroupAdmin)
+
+admin.site.register(LdtUser, LdtUserAdmin)
\ No newline at end of file
--- a/src/ldt/ldt/user/forms.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/forms.py	Thu May 23 00:17:02 2013 +0200
@@ -1,10 +1,123 @@
 from django import forms
 from django.conf import settings
 from django.contrib.auth import get_user_model
+from django.contrib.auth.forms import UserCreationForm, UserChangeForm
+from django.contrib.auth.models import Group
+from django.forms.util import ErrorList
 from django.utils.translation import gettext as _
-from django.contrib.auth.models import Group
 
 User = get_user_model()
+
+class LdtForm(UserCreationForm):
+        
+    class Meta:
+        model = User
+        
+    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
+                 initial=None, error_class=ErrorList, label_suffix=':',
+                 empty_permitted=False, instance=None):
+                 
+        if instance:
+            initial = initial or {}           
+        
+        super(LdtForm, self).__init__(data, files, auto_id, prefix,
+            initial, error_class, label_suffix, empty_permitted, instance)
+        
+        if instance:
+            self.fields['password1'].required = False
+            self.fields['password1'].label = _('New password')
+            self.fields['password2'].required = False
+            self.fields['password2'].label = _('New password confirmation')
+        
+        self._password_change = True
+        
+    def clean_username(self):
+        if self.instance:
+            return self.cleaned_data['username']
+        return super(LdtForm, self).clean_username()
+    
+    def clean_password2(self): 
+        if self.instance and self.cleaned_data['password1'] == '' and self.cleaned_data['password2'] == '':
+            self._password_change = False
+            return u''
+        return super(LdtForm, self).clean_password2()
+    
+   
+    def save(self, commit=True):
+        Super = self._password_change and LdtForm  or UserCreationForm  
+        user = super(Super, self).save(commit=False)
+        # if user.pk != None:
+            # self.save_m2m()
+        
+        if commit:
+            user.save()
+        
+        return user
+
+        
+class EmailChangeForm(forms.Form):
+    email1 = forms.EmailField(label=_("E-mail"), max_length=75)
+    email2 = forms.EmailField(label=_("E-mail"), max_length=75)
+    
+    def __init__(self, user=None, *args, **kwargs):
+        self.user = user
+        super(EmailChangeForm, self).__init__(*args, **kwargs)
+        
+    def clean_email2(self):
+        email1 = self.cleaned_data.get('email1')
+        email2 = self.cleaned_data.get('email2')
+        if email1 and email2:
+            if email1 != email2:
+                raise forms.ValidationError(_("The two emails didn't match."))
+        return email2
+
+    
+    def save(self):
+        self.user.email = self.cleaned_data['email1']
+        self.user.save()
+        return self.user
+    
+
+class NameChangeForm(forms.Form):
+    first_name = forms.CharField(label=_("First name"), max_length=30)
+    last_name = forms.CharField(label=_("Last name"), max_length=30)
+    
+    def __init__(self, user=None, *args, **kwargs):
+        self.user = user
+        super(NameChangeForm, self).__init__(*args, **kwargs)
+        
+        
+    def save(self):
+        self.user.first_name = self.cleaned_data['first_name']
+        self.user.last_name = self.cleaned_data['last_name']
+        self.user.save()
+        return self.user
+    
+
+class ProfileForm(UserChangeForm):
+    
+    def __init__(self, user=None, *args, **kwargs):
+        #self.user = user
+        super(ProfileForm, self).__init__(*args, **kwargs)
+        
+ 
+    class Meta:
+        model = User
+        fields = ('username', 'email', 'first_name', 'last_name', 'password')
+        
+        
+class LanguageChangeForm(forms.Form):
+    language = forms.ChoiceField(label=_("Language"), choices=settings.LANGUAGES)
+    
+    def __init__(self, user=None, *args, **kwargs):
+        self.user = user
+        super(LanguageChangeForm, self).__init__(*args, **kwargs)
+        
+    def save(self):
+        profile = self.user.get_profile()
+        profile.language = self.cleaned_data['language']
+        profile.save()
+        return self.user
            
 class PictureForm(forms.Form):
     image=forms.ImageField(label=_("Profile picture"), required=False)
--- a/src/ldt/ldt/user/models.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/models.py	Thu May 23 00:17:02 2013 +0200
@@ -1,12 +1,11 @@
 from django.conf import settings
-from django.contrib.auth.models import (AbstractUser, User, UserManager, Group, 
+from django.contrib.auth.models import (AbstractUser, UserManager, Group, 
     BaseUserManager)
 from django.db import models
 from django.db.models.signals import post_save
 from django.utils import timezone
 from sorl.thumbnail import ImageField
 
-
 class LdtUserManager(BaseUserManager):    
 
     def create_user(self, username, email=None, password=None, **extra_fields):
@@ -46,9 +45,11 @@
             profile = GroupProfile()
             profile.group_id = instance.id
             profile.save()
-            admins = User.objects.filter(is_superuser=True)
+            admins = LdtUser.objects.filter(is_superuser=True)
             if admins:
-                instance.user_set.add(admins[0])            
+                admin_user = admins[0] 
+                admin_user.groups.add(instance)
+                admin_user.save()            
 
 class LdtUser(AbstractUser):
     language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2])    
--- a/src/ldt/ldt/user/templates/ldt/user/login_form.html	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/templates/ldt/user/login_form.html	Thu May 23 00:17:02 2013 +0200
@@ -1,11 +1,10 @@
 {% load i18n %}
-{% load absurl %}
 {# print user's state and form of login #}
 {% block js_import %}
 {{block.super}}
 
     <script language="javascript">
-    var url_login_ajax='{% absurl "ldt.user.views.login_ajax" %}';
+    var url_login_ajax='{% url "ldt.user.views.login_ajax" %}';
     {% if reload %}    
         var reload=true;    
     {% else %}
--- a/src/ldt/ldt/user/urls.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/urls.py	Thu May 23 00:17:02 2013 +0200
@@ -1,6 +1,9 @@
-from django.conf.urls.defaults import patterns, url
+from django.conf.urls import patterns, url
 
 urlpatterns = patterns('',
     url(r'^loginAjax/$', 'ldt.user.views.login_ajax'),
+    url(r'^profile/$', 'ldt.user.views.profile'),
+    url(r'^password/$', 'ldt.user.views.password'),
+    url(r'^picture/$', 'ldt.user.views.profile_picture'),
     url(r'^logout/', 'ldt.user.views.logout_view'),
 )
--- a/src/ldt/ldt/user/views.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/user/views.py	Thu May 23 00:17:02 2013 +0200
@@ -1,10 +1,85 @@
+from .forms import ProfileForm, LanguageChangeForm, PictureForm
 from django.contrib.auth import authenticate, login, logout
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth.forms import PasswordChangeForm
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render_to_response
 from django.template import RequestContext, loader
 from django.utils import simplejson
 from django.utils.translation import ugettext as _
+from django.views.i18n import set_language
     
+@login_required   
+def profile(request):
+    msg = ''
+    profile = request.user.get_profile()
+    user_language = profile.language
+    
+    if request.method == "POST":
+        profile_form = ProfileForm(request.user, request.POST, instance=request.user)
+        language_form = LanguageChangeForm(request.user, request.POST)
+        password_form = PasswordChangeForm(request.user)
+        if profile_form.is_valid() and language_form.is_valid():
+            profile_form.save()
+            language_form.save()  
+            set_language(request)
+            msg = _("Your profile has been updated.")
+            user_language = language_form.cleaned_data['language']      
+              
+    else:
+        language_form = LanguageChangeForm()
+        profile_form = ProfileForm(instance=request.user)
+        password_form = PasswordChangeForm(request.user)
+    profile_picture_form = PictureForm()
+    
+    return render_to_response('ldt/user/change_profile.html', {'profile_form' : profile_form, 'language_form' : language_form, 'password_form' : password_form, 'user_language' : user_language, 'profile_picture_form':profile_picture_form, 'msg' : msg }, context_instance=RequestContext(request))    
+
+    
+@login_required   
+def password(request):
+    msg = ''
+    user_language = request.user.get_profile().language
+   
+    if request.method == "POST":        
+        password_form = PasswordChangeForm(request.user, request.POST)
+        profile_form = ProfileForm(instance=request.user)
+        language_form = LanguageChangeForm()
+        if password_form.is_valid():
+            password_form.save()
+            msg = _("Your password has been updated.")
+
+    else:
+        language_form = LanguageChangeForm()
+        profile_form = ProfileForm()
+        password_form = PasswordChangeForm(request.user)
+    
+    profile_picture_form = PictureForm()
+    
+    return render_to_response('ldt/user/change_profile.html', {'profile_form' : profile_form, 'language_form' : language_form, 'password_form' : password_form, 'user_language' : user_language, 'profile_picture_form':profile_picture_form, 'msg' : msg }, context_instance=RequestContext(request))    
+
+    
+@login_required   
+def profile_picture(request):
+    msg = ''
+    user_language = request.user.get_profile().language
+   
+    if request.method == "POST":
+        profile_form = ProfileForm(instance=request.user)
+        language_form = LanguageChangeForm(request.user, request.POST)
+        password_form = PasswordChangeForm(request.user)
+        profile_picture_form = PictureForm(request.user, request.POST, request.FILES)
+        if profile_picture_form.is_valid():
+            profile_picture_form.save()
+            msg = _("Your profile picture has been updated.")
+
+    else:
+        language_form = LanguageChangeForm()
+        profile_form = ProfileForm()
+        password_form = PasswordChangeForm(request.user)
+        profile_picture_form = PictureForm()
+    
+    return render_to_response('ldt/user/change_profile.html', {'profile_form' : profile_form, 'language_form' : language_form, 'password_form' : password_form, 'user_language' : user_language, 'profile_picture_form':profile_picture_form, 'msg' : msg }, context_instance=RequestContext(request))
+
 
 def logout_view(request):
     logout(request)
--- a/src/ldt/ldt/utils/context_processors.py	Tue May 21 17:20:25 2013 +0200
+++ b/src/ldt/ldt/utils/context_processors.py	Thu May 23 00:17:02 2013 +0200
@@ -4,8 +4,11 @@
 
 
 def ldt_context(request):
-    return {'BASE_URL': settings.BASE_URL, 'MEDIA_URL': settings.MEDIA_URL, \
-             'WEB_URL': get_web_url(), \
-             'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX, 'VERSION': ldt.get_version(), \
-             'WEB_VERSION' : settings.WEB_VERSION, }
+    return {
+        'BASE_URL': settings.BASE_URL,
+        'MEDIA_URL': settings.MEDIA_URL,
+        'WEB_URL': get_web_url(),
+        'VERSION': ldt.get_version(),
+        'WEB_VERSION' : settings.WEB_VERSION,
+    }