modify segment. export xml corrected.
Binary file src/egonomy/locale/en/LC_MESSAGES/django.mo has changed
--- a/src/egonomy/locale/en/LC_MESSAGES/django.po Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/locale/en/LC_MESSAGES/django.po Tue Feb 26 17:52:44 2013 +0100
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-26 03:55-0600\n"
+"POT-Creation-Date: 2013-02-26 09:32-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,6 +25,10 @@
msgid "English"
msgstr ""
+#: views.py:68 views.py:87
+msgid "You are not allowed to modify this fragment."
+msgstr ""
+
#: templates/egonomy_all_fragments.html:7
#: templates/egonomy_all_fragments.html:18
#: templates/egonomy_all_fragments.html:21
@@ -49,7 +53,7 @@
#: templates/egonomy_all_fragments.html:59
#: templates/egonomy_annotate_picture.html:123
#: templates/egonomy_create_fragment.html:184 templates/egonomy_home.html:81
-#: templates/egonomy_view_fragment.html:100
+#: templates/egonomy_view_fragment.html:102
msgid "Annotated by"
msgstr ""
@@ -116,7 +120,6 @@
msgstr ""
#: templates/egonomy_annotate_picture.html:76
-#: templates/egonomy_view_fragment.html:53
msgid "Save keywords"
msgstr ""
@@ -125,18 +128,18 @@
msgstr ""
#: templates/egonomy_annotate_picture.html:80 templates/egonomy_base.html:36
-#: templates/egonomy_view_fragment.html:57
+#: templates/egonomy_view_fragment.html:53
msgid "by"
msgstr ""
#: templates/egonomy_annotate_picture.html:85
-#: templates/egonomy_view_fragment.html:62
+#: templates/egonomy_view_fragment.html:64
msgid "Create a fragment"
msgstr ""
#: templates/egonomy_annotate_picture.html:91
#: templates/egonomy_create_fragment.html:152
-#: templates/egonomy_view_fragment.html:68
+#: templates/egonomy_view_fragment.html:70
msgid "Fragments from this picture"
msgstr ""
@@ -156,15 +159,15 @@
msgid "Create or edit a fragment"
msgstr ""
+#: templates/egonomy_create_fragment.html:69
+msgid "Erase the drawing"
+msgstr ""
+
#: templates/egonomy_create_fragment.html:70
-msgid "Erase the drawing"
+msgid "Back to the original drawing"
msgstr ""
#: templates/egonomy_create_fragment.html:71
-msgid "Back to the original drawing"
-msgstr ""
-
-#: templates/egonomy_create_fragment.html:72
msgid "New fragment"
msgstr ""
@@ -228,10 +231,14 @@
msgid "View a fragment"
msgstr ""
-#: templates/egonomy_view_fragment.html:56
+#: templates/egonomy_view_fragment.html:52
msgid "Last modification"
msgstr ""
+#: templates/egonomy_view_fragment.html:58
+msgid "Modify this fragment"
+msgstr ""
+
#: templates/registration/login.html:5
msgid "Login"
msgstr ""
Binary file src/egonomy/locale/fr/LC_MESSAGES/django.mo has changed
--- a/src/egonomy/locale/fr/LC_MESSAGES/django.po Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/locale/fr/LC_MESSAGES/django.po Tue Feb 26 17:52:44 2013 +0100
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-26 03:56-0600\n"
+"POT-Creation-Date: 2013-02-26 09:34-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -26,6 +26,11 @@
msgid "English"
msgstr "Anglais"
+#: views.py:68
+#: views.py:87
+msgid "You are not allowed to modify this fragment."
+msgstr "Vous n'être pas autorisé à modifier ce fragment."
+
#: templates/egonomy_all_fragments.html:7
#: templates/egonomy_all_fragments.html:18
#: templates/egonomy_all_fragments.html:21
@@ -52,7 +57,7 @@
#: templates/egonomy_annotate_picture.html:123
#: templates/egonomy_create_fragment.html:184
#: templates/egonomy_home.html:81
-#: templates/egonomy_view_fragment.html:100
+#: templates/egonomy_view_fragment.html:102
msgid "Annotated by"
msgstr "Annoté par"
@@ -124,7 +129,6 @@
msgstr "Thésaurus Pertimm"
#: templates/egonomy_annotate_picture.html:76
-#: templates/egonomy_view_fragment.html:53
msgid "Save keywords"
msgstr "Enregistrer les mots-clés"
@@ -134,18 +138,18 @@
#: templates/egonomy_annotate_picture.html:80
#: templates/egonomy_base.html:36
-#: templates/egonomy_view_fragment.html:57
+#: templates/egonomy_view_fragment.html:53
msgid "by"
msgstr "par"
#: templates/egonomy_annotate_picture.html:85
-#: templates/egonomy_view_fragment.html:62
+#: templates/egonomy_view_fragment.html:64
msgid "Create a fragment"
msgstr "Créer un fragment"
#: templates/egonomy_annotate_picture.html:91
#: templates/egonomy_create_fragment.html:152
-#: templates/egonomy_view_fragment.html:68
+#: templates/egonomy_view_fragment.html:70
msgid "Fragments from this picture"
msgstr "Fragments issus de cette image"
@@ -165,15 +169,15 @@
msgid "Create or edit a fragment"
msgstr "Créer ou modifier un fragment"
-#: templates/egonomy_create_fragment.html:70
+#: templates/egonomy_create_fragment.html:69
msgid "Erase the drawing"
msgstr "Effacer le tracé"
-#: templates/egonomy_create_fragment.html:71
+#: templates/egonomy_create_fragment.html:70
msgid "Back to the original drawing"
msgstr "Revenir au tracé d'origine"
-#: templates/egonomy_create_fragment.html:72
+#: templates/egonomy_create_fragment.html:71
msgid "New fragment"
msgstr "Nouveau fragment"
@@ -237,10 +241,14 @@
msgid "View a fragment"
msgstr "Voir un fragment"
-#: templates/egonomy_view_fragment.html:56
+#: templates/egonomy_view_fragment.html:52
msgid "Last modification"
msgstr "Dernière modification"
+#: templates/egonomy_view_fragment.html:58
+msgid "Modify this fragment"
+msgstr "Modifier ce fragment"
+
#: templates/registration/login.html:5
msgid "Login"
msgstr "Se connecter"
--- a/src/egonomy/management/commands/export_to_xml.py Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/management/commands/export_to_xml.py Tue Feb 26 17:52:44 2013 +0100
@@ -87,15 +87,15 @@
if img.info and img.info.image_file:
file_array = img.info.image_file.name.split("/")
file_folder = path + file_array[-2]
- file_name = file_array[-1].split(".")[0] + ".xml"
+ file_name = "content-" + file_array[-1].split(".")[0] + ".xml"
if not os.path.isdir(file_folder):
os.makedirs(file_folder)
file_path = file_folder + os.sep + file_name
else:
# If image_file is none, the xml file is put in path folder
- file_path = path + img.id + ".xml"
- errors.append(img.id + ".xml")
-
+ file_path = path + "content-" + img.id + ".xml"
+ errors.append("content-" + img.id + ".xml")
+
if os.path.exists(file_path):
os.remove(file_path)
@@ -109,22 +109,22 @@
for t in tags:
xml_str += u"\t<keyword>" + t.strip() + u"</keyword>\n"
# metadatas
- xml_str += u"\t<metadata>\n\t\t<name>cliche<name>\n\t\t<value>" + (img.metadata.cliche if img.metadata.cliche else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>inventaire<name>\n\t\t<value>" + (img.metadata.inventaire if img.metadata.inventaire else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>date<name>\n\t\t<value>" + str((img.metadata.date if img.metadata.date else "")) + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>longueur<name>\n\t\t<value>" + str((img.metadata.longueur if img.metadata.longueur else "")) + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>hauteur<name>\n\t\t<value>" + str((img.metadata.hauteur if img.metadata.hauteur else "")) + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>profondeur<name>\n\t\t<value>" + str((img.metadata.profondeur if img.metadata.profondeur else "")) + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>diametre<name>\n\t\t<value>" + str((img.metadata.diametre if img.metadata.diametre else "")) + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>photographe<name>\n\t\t<value>" + (img.metadata.photographe if img.metadata.photographe else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>auteur<name>\n\t\t<value>" + (img.metadata.auteur if img.metadata.auteur else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>droits<name>\n\t\t<value>" + (img.metadata.droits if img.metadata.droits else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>mentions<name>\n\t\t<value>" + (img.metadata.mentions if img.metadata.mentions else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>periode<name>\n\t\t<value>" + (img.metadata.periode if img.metadata.periode else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>technique<name>\n\t\t<value>" + (img.metadata.technique if img.metadata.technique else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>site<name>\n\t\t<value>" + (img.metadata.site if img.metadata.site else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>lieu<name>\n\t\t<value>" + (img.metadata.lieu if img.metadata.lieu else "") + u"</value>\n\t</metadata>\n"
- xml_str += u"\t<metadata>\n\t\t<name>localisation<name>\n\t\t<value>" + (img.metadata.localisation if img.metadata.localisation else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>cliche</name>\n\t\t<value>" + (img.metadata.cliche if img.metadata.cliche else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>inventaire</name>\n\t\t<value>" + (img.metadata.inventaire if img.metadata.inventaire else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>date</name>\n\t\t<value>" + str((img.metadata.date if img.metadata.date else "")) + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>longueur</name>\n\t\t<value>" + str((img.metadata.longueur if img.metadata.longueur else "")) + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>hauteur</name>\n\t\t<value>" + str((img.metadata.hauteur if img.metadata.hauteur else "")) + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>profondeur</name>\n\t\t<value>" + str((img.metadata.profondeur if img.metadata.profondeur else "")) + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>diametre</name>\n\t\t<value>" + str((img.metadata.diametre if img.metadata.diametre else "")) + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>photographe</name>\n\t\t<value>" + (img.metadata.photographe if img.metadata.photographe else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>auteur</name>\n\t\t<value>" + (img.metadata.auteur if img.metadata.auteur else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>droits</name>\n\t\t<value>" + (img.metadata.droits if img.metadata.droits else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>mentions</name>\n\t\t<value>" + (img.metadata.mentions if img.metadata.mentions else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>periode</name>\n\t\t<value>" + (img.metadata.periode if img.metadata.periode else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>technique</name>\n\t\t<value>" + (img.metadata.technique if img.metadata.technique else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>site</name>\n\t\t<value>" + (img.metadata.site if img.metadata.site else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>lieu</name>\n\t\t<value>" + (img.metadata.lieu if img.metadata.lieu else "") + u"</value>\n\t</metadata>\n"
+ xml_str += u"\t<metadata>\n\t\t<name>localisation</name>\n\t\t<value>" + (img.metadata.localisation if img.metadata.localisation else "") + u"</value>\n\t</metadata>\n"
xml_str += u"</content>"
# Write xml string
os.write(fd, xml_str.encode('utf8'))
--- a/src/egonomy/templates/egonomy_create_fragment.html Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/templates/egonomy_create_fragment.html Tue Feb 26 17:52:44 2013 +0100
@@ -68,7 +68,7 @@
<div class="column column-half">
<a href="#" class="head-button clear-fragment" title="{% trans 'Erase the drawing' %}">×</a>
<a href="#" class="head-button reset-fragment" title="{% trans 'Back to the original drawing' %}">↺</a>
- <h2>{% trans 'New fragment' %} :</h2>
+ <h2>{% if frg_to_modify %}{{ frg_to_modify.title }}{% else %}{% trans 'New fragment' %}{% endif %} :</h2>
<div class="center-image">
<div class="image-and-fragment">
{% with img.info.image_file as image %}
@@ -89,9 +89,10 @@
<div class="cutout-canvas"></div>
</div>
</div>
- <input name="fragment_path" id="fragment_path" type="hidden" class="fragment-path column-half" value="" />
+ <input name="fragment_path" id="fragment_path" type="hidden" class="fragment-path column-half" value="{% if frg_to_modify %}{{ frg_to_modify.coordinates }}{% endif %}" />
<input name="image_id" id="image_id" type="hidden" value="{{ img.id }}" />
- {% csrf_token %}
+ {% if frg_to_modify %}<input name="fragment_pk" id="fragment_pk" type="hidden" value="{{ frg_to_modify.pk }}" />{% endif %}
+ {% csrf_token %}
</div>
<div class="column column-half">
<table class="image-metadata">
@@ -101,15 +102,15 @@
</tr>
<tr>
<th>{% trans "Fragment's title" %} :</th>
- <td><input type="text" class="fragment-title" placeholder="{% trans "Fragment's title" %}" name="fragment_title" id="fragment_title"/></td>
+ <td><input type="text" class="fragment-title" placeholder="{% trans "Fragment's title" %}" name="fragment_title" id="fragment_title" {% if frg_to_modify %}value="{{ frg_to_modify.title }}"{% endif %}/></td>
</tr>
<tr>
<th>{% trans "Fragment's description" %} :</th>
- <td><textarea class="fragment-description" name="fragment_description" id="fragment_description"></textarea></td>
+ <td><textarea class="fragment-description" name="fragment_description" id="fragment_description" {% if frg_to_modify %}value="{{ frg_to_modify.description }}"{% endif %}></textarea></td>
</tr>
<tr>
<th>{% trans 'Users keywords' %} :</th>
- <td><input id="user_keywords" name="user_keywords" class="user-keywords"></ul><!--textarea class="user-keywords" name="user_keywords" id="user_keywords"></textarea--></td>
+ <td><input id="user_keywords" name="user_keywords" class="user-keywords" {% if frg_to_modify %}value="{{ frg_to_modify.tags }}"{% endif %}></ul>
</tr>
{% if img.metadata.mots_cles %}
<tr>
--- a/src/egonomy/templates/egonomy_view_fragment.html Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/templates/egonomy_view_fragment.html Tue Feb 26 17:52:44 2013 +0100
@@ -48,14 +48,16 @@
<th>{% trans "Users keywords" %}</th>
<td>{{ fragment.tags }}</td>
</tr>
- <!--tr>
- <th> </th>
- <td><input class="user-submit" type="submit" value="{% trans 'Save keywords' %}" /></td>
- </tr-->
<tr>
<th>{% trans "Last modification" %} :</th>
- <td>{{ fragment.date_saved }} {% trans 'by' %} <strong>{{ fragment.author }}</strong></td>
+ <td>{{ fragment.date_saved }} {% trans 'by' %} <strong><a href="{% url 'user_fragments' username=fragment.author %}">{{ fragment.author }}</a></strong></td>
</tr>
+ {% ifequal user fragment.author %}
+ <tr>
+ <th> </th>
+ <td><a href="{% url 'create_fragment' image_id=fragment.image.id fragment_pk=fragment.pk %}" class="big-button">{% trans "Modify this fragment" %}</a></td>
+ </tr>
+ {% endifequal %}
</table>
</form>
<div class="fullwidth">
--- a/src/egonomy/urls.py Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/urls.py Tue Feb 26 17:52:44 2013 +0100
@@ -11,7 +11,8 @@
url(r'^$', 'egonomy.views.home', name='home'),
url(r'^annotate/(?P<image_id>.*)/$', 'egonomy.views.annotate_picture', name='annotate_picture'),
url(r'^viewfragment/(?P<fragment_pk>.*)/$', 'egonomy.views.view_fragment', name='view_fragment'),
- url(r'^createfragment/(?P<image_id>.*)/$', 'egonomy.views.create_fragment', name='create_fragment'),
+ url(r'^createfragment/(?P<image_id>.*)/(?P<fragment_pk>.*)/$', 'egonomy.views.create_fragment', name='create_fragment'),
+ url(r'^createfragment/(?P<image_id>.*)/', 'egonomy.views.create_fragment', name='create_fragment'),
url(r'^savefragment/$', 'egonomy.views.save_fragment', name='save_fragment'),
url(r'^allpictures/$', 'egonomy.views.all_pictures', name='all_pictures'),
url(r'^allfragments/$', 'egonomy.views.all_fragments', name='all_fragments'),
--- a/src/egonomy/views.py Tue Feb 26 11:01:21 2013 +0100
+++ b/src/egonomy/views.py Tue Feb 26 17:52:44 2013 +0100
@@ -1,17 +1,19 @@
from django.conf import settings
from django.contrib.auth.decorators import login_required
+from django.contrib.auth.models import User
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.core.urlresolvers import reverse
from django.db.models.aggregates import Max
+from django.http.response import HttpResponseForbidden
from django.shortcuts import get_object_or_404, render_to_response, redirect
from django.template import RequestContext
+from django.utils.translation import ugettext as _
from egonomy.models import ImageMetadata, Image, Fragment
from egonomy.search_indexes import QueryParser
from egonomy.search_indexes.paginator import SearchPaginator
from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
from haystack.query import RelatedSearchQuerySet
import logging
-from django.contrib.auth.models import User
logger = logging.getLogger(__name__)
@@ -54,13 +56,19 @@
context_instance=RequestContext(request))
@login_required
-def create_fragment(request, image_id):
+def create_fragment(request, image_id, fragment_pk=None):
img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id)
frg_list = Fragment.objects.filter(image=img).order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')
+ frg_to_modify = None
+ if fragment_pk:
+ frg_to_modify = get_object_or_404(Fragment.objects.select_related('author'), pk=fragment_pk)
+ # We check if the current user is the fragment's author
+ if frg_to_modify.author != request.user:
+ return HttpResponseForbidden(_("You are not allowed to modify this fragment."))
return render_to_response("egonomy_create_fragment.html",
- {'img': img, 'fragment_list': frg_list},
+ {'img': img, 'frg_to_modify': frg_to_modify, 'fragment_list': frg_list},
context_instance=RequestContext(request))
@login_required
@@ -71,16 +79,22 @@
frg_kw = request.POST["user_keywords"]
frg_path = request.POST["fragment_path"]
frg_image_id = request.POST["image_id"]
- img = get_object_or_404(Image, id=frg_image_id)
+ if "fragment_pk" in request.POST:
+ frg_pk = request.POST["fragment_pk"]
+ frg = get_object_or_404(Fragment.objects.select_related('author'), pk=frg_pk)
+ # We check if the current user is the fragment's author
+ if frg.author != request.user:
+ return HttpResponseForbidden(_("You are not allowed to modify this fragment."))
+ else :
+ img = get_object_or_404(Image, id=frg_image_id)
+ frg = Fragment()
+ frg.image = img
+ frg.author = request.user
- frg = Fragment()
- frg.image = img
frg.coordinates = frg_path
frg.title = frg_title
frg.description = frg_desc
frg.tags = frg_kw
- frg.author = request.user
-
frg.save()
return redirect("view_fragment", fragment_pk=frg.pk)