]> git.parisson.com Git - telemeta.git/commitdiff
Add more metadata to collection CSV export
authorGuillaume Pellerin <yomguy@parisson.com>
Mon, 12 Jan 2015 23:21:26 +0000 (00:21 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Mon, 12 Jan 2015 23:21:26 +0000 (00:21 +0100)
Fix collection related media forms

telemeta/models/media.py
telemeta/models/system.py
telemeta/templates/telemeta/collection_detail.html
telemeta/templates/telemeta/collection_edit.html
telemeta/templates/telemeta/mediaitem_edit.html
telemeta/urls.py
telemeta/views/collection.py
telemeta/views/core.py
telemeta/views/playlist.py

index 9374d40751bb4043caaae1a8961bc1d6e919cc6b..3f6f9b916c6e18f3ff3a5a336738c53ed7cae44d 100644 (file)
@@ -55,6 +55,8 @@ from telemeta.util.kdenlive.session import *
 from django.db import models
 from django.db.models import URLField
 from django.conf import settings
+from django.core.urlresolvers import reverse, reverse_lazy
+from django.contrib.sites.models import Site
 
 
 # Special code regex of collections for the branch
@@ -95,6 +97,9 @@ def get_random_hash():
     hash = random.getrandbits(64)
     return "%016x" % hash
 
+def get_full_url(path):
+    return 'http://' + Site.objects.get_current().domain + path
+
 
 class MediaResource(ModelCore):
     "Base class of all media objects"
@@ -196,6 +201,7 @@ class MediaCollection(MediaResource):
 
     element_type = 'collection'
 
+
     def is_valid_collection_code(value):
         "Check if the collection code is well formed"
         regex = '^' + collection_code_regex + '$'
@@ -262,9 +268,17 @@ class MediaCollection(MediaResource):
     # All
     objects               = MediaCollectionManager()
 
+    class Meta(MetaCore):
+        db_table = 'media_collections'
+        ordering = ['code']
+        verbose_name = _('collection')
+
     def __unicode__(self):
         return self.code
 
+    def save(self, force_insert=False, force_update=False, user=None, code=None):
+        super(MediaCollection, self).save(force_insert, force_update)
+
     @property
     def public_id(self):
         return self.code
@@ -292,7 +306,6 @@ class MediaCollection(MediaResource):
         return countries
     countries.verbose_name = _("states / nations")
 
-
     def main_countries(self):
         "Return the main countries of the items (no aliases or ancestors)"
         countries = []
@@ -301,7 +314,6 @@ class MediaCollection(MediaResource):
                 countries.append(item.location)
         countries.sort(self.__name_cmp)
         return countries
-
     main_countries.verbose_name = _("states / nations")
 
     def ethnic_groups(self):
@@ -333,13 +345,50 @@ class MediaCollection(MediaResource):
         return size
     computed_size.verbose_name = _('collection size')
 
-    def save(self, force_insert=False, force_update=False, user=None, code=None):
-        super(MediaCollection, self).save(force_insert, force_update)
+    def document_status(self):
+        if '_I_' in self.public_id:
+            return _('Unpublished')
+        elif '_E_' in self.public_id:
+            return _('Published')
+        else:
+            return ''
 
-    class Meta(MetaCore):
-        db_table = 'media_collections'
-        ordering = ['code']
-        verbose_name = _('collection')
+    def last_revision(self):
+        revisions = Revision.objects.filter(element_type=self.element_type, element_id = self.id)
+        if revisions:
+            return revisions[0]
+        else:
+            return Revision()
+
+    def to_dict_with_more(self):
+        metadata = self.to_dict()
+        metadata['url'] = get_full_url(reverse('telemeta-collection-detail', kwargs={'public_id':self.pk}))
+        metadata['doc_status'] = self.document_status()
+        metadata['countries'] = ';'.join(self.main_countries())
+        metadata['ethnic_groups'] = ';'.join(self.ethnic_groups())
+        metadata['last_modification_date'] = unicode(self.last_revision().time)
+        metadata['computed_duration'] = unicode(self.computed_duration())
+        metadata['computed_size'] = unicode(self.computed_size())
+        metadata['number_of_items'] = unicode(self.items.all().count())
+
+        i = 0
+        for media in self.related.all():
+            metadata['related_media_title' + '_' + str(i)] = media.title
+            if media.url:
+                metadata['related_media_url' + '_' + str(i)] = media.url
+            else:
+                metadata['related_media_url' + '_' + str(i)] = get_full_url(reverse('telemeta-collection-related',
+                                            kwargs={'public_id': self.public_id, 'media_id': media.id}))
+            i += 1
+
+        i = 0
+        for indentifier in self.identifiers.all():
+            metadata['identifier' + '_' + str(i)] = identifier.identifier
+            metadata['identifier_type' + '_' + str(i)] = identifier.type
+            metadata['identifier_date_last' + '_' + str(i)] = unicode(identifier.date_last)
+            metadata['identifier_notes' + '_' + str(i)] = identifier.notes
+            i += 1
+        return metadata
 
 
 class MediaCollectionRelated(MediaRelated):
@@ -519,6 +568,10 @@ class MediaItem(MediaResource):
             return 0
     size.verbose_name = _('item size')
 
+    def to_dict_with_more(self):
+        metadata = self.to_dict()
+        metadata['url'] = reverse_lazy('telemeta-item-detail', kwargs={'public_id':self.pk})
+        return metadata
 
 class MediaItemRelated(MediaRelated):
     "Item related media"
index f58a7c187c9a71f1ea8652cf76cf38511614d040..a0acde0dd75d5b686ea8c9cf54b862544cf420cb 100644 (file)
@@ -76,6 +76,7 @@ class Revision(ModelCore):
 
     class Meta(MetaCore):
         db_table = 'revisions'
+        ordering = ['-time']
 
 
 class UserProfile(models.Model):
@@ -125,5 +126,3 @@ class Search(ModelCore):
     def __unicode__(self):
         return self.keywords
 
-
-
index 7cb594a4fe31c46fe01307c670af7ffe9be3d53e..d78d03af19f9e28edb903fe7fb4a029e8a7fea48 100644 (file)
                 {% dl_field collection "creator" placeholder %}
                 {% endif %}
                 <dt>{% trans "Document status" %}</dt>
-                {% if '_I_' in collection.public_id %}
-                 <dd>{% trans 'Unpublished' context "collection" %}</dd>
-                {% elif '_E_' in collection.public_id %}
-                 <dd>{% trans 'Published' context "collection" %}</dd>
-                {% else %}
-                 <dd>&nbsp;</dd>
-                {% endif %}
+                <dd>{{ collection.document_status }}</dd>
                 {% if collection.description %}
                 {% dl_field collection "description" %}
                 {% endif %}
index 58795069e9e2a48f8b5319adbdd0744c6abc4ae1..42f3701856e2dc3340ada4ef5bb22ce2b5dc936b 100644 (file)
@@ -30,7 +30,7 @@
 {% block infos %}
 
   <div>
-  <form method="post" id="_editForm" action="">{% csrf_token %}
+  <form method="post" id="_editForm" action="" enctype="multipart/form-data" data-ajax="false">{% csrf_token %}
 
     <ul class="nav nav-tabs" role="tablist">
       <li class="active"><a href="#general" role="tab" data-toggle="tab">{% trans "General" %}</a></li>
index 53777dd6fda84c6521177cd312aae4c46d09ff32..e854dace6bd11b99a95e63181f75e4ed31a058b6 100644 (file)
@@ -81,7 +81,7 @@
 
 {% block infos %}
   <div>
-    <form enctype="multipart/form-data" id="_editForm" method="post" action="">{% csrf_token %}
+    <form id="_editForm" method="post" action="" enctype="multipart/form-data" data-ajax="false">{% csrf_token %}
 
     <ul class="nav nav-tabs" role="tablist">
       <li class="active"><a href="#general" role="tab" data-toggle="tab">{% trans "General" %}</a></li>
index 3322b325f3bc5c119e641148422914ad319dca0c..46c5f761e1a111f3e66c8246215c90b58afc9658 100644 (file)
@@ -118,8 +118,8 @@ urlpatterns = patterns('',
     url(r'^archives/collections_add/$', CollectionAddView.as_view(), name="telemeta-collection-add"),
     url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/add_item/$', ItemAddView.as_view(), name="telemeta-collection-additem"),
     url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', collection_view.collection_delete, name="telemeta-collection-delete"),
-    url(r'^archives/collections/(?P<collection_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', collection_view.related_media_collection_stream, name="telemeta-collection-related"),
-    url(r'^archives/collections/(?P<collection_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', collection_view.related_media_collection_download, name="telemeta-collection-related-download"),
+    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', collection_view.related_media_collection_stream, name="telemeta-collection-related"),
+    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', collection_view.related_media_collection_download, name="telemeta-collection-related-download"),
 
     # FIXME: need all paths
     url(r'^collections/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(), {'url': '/archives/collections/%(path)s/', 'permanent': False}, name="telemeta-collection-redir"),
index 252ee112ad87f92a0e29ed1b409b41ff83917ec5..3637efd4b6d42f6e82576e41a54ecc45d1f692a1 100644 (file)
@@ -292,7 +292,7 @@ class CollectionDetailView(CollectionViewMixin, DetailView):
         check_related_media(context['related_media'])
         context['parents'] = MediaCorpus.objects.filter(children=collection)
         revisions = Revision.objects.filter(element_type='collection',
-                                            element_id=collection.id).order_by('-time')
+                                            element_id=collection.id)
         if revisions:
             context['last_revision'] = revisions[0]
         else:
@@ -316,6 +316,8 @@ class CollectionEditView(CollectionViewMixin, UpdateWithInlinesView):
         return super(CollectionEditView, self).form_valid(form)
 
     def get_success_url(self):
+        #FIXME should be in form_valid but doesn't work with extra_views
+        self.get_object().set_revision(self.request.user)
         return reverse_lazy('telemeta-collection-detail', kwargs={'public_id':self.kwargs['public_id']})
 
     def get_context_data(self, **kwargs):
index c98f3adeb5cfc1017b3f523c11e812a6bff0d8b1..a9684f54b9d6c075bbe4fe07b41779a6fcc48984 100644 (file)
@@ -74,6 +74,7 @@ from django.views.decorators.http import condition
 from django.utils.translation import ugettext_lazy as _
 from django.forms.models import model_to_dict
 from django.views.generic.edit import DeletionMixin, BaseDeleteView
+from django.contrib.sites.models import Site
 
 from telemeta.models import *
 import telemeta.models
@@ -295,3 +296,4 @@ def get_kwargs_or_none(key, kwargs):
         return kwargs[key]
     else:
         return None
+
index 9cf6bd52e5f82e3921bf81d0081b67519484551f..ade8fc23c1a66f91a7948827e8ba20407e26677c 100644 (file)
@@ -111,7 +111,7 @@ class PlaylistView(object):
                     elements.append(collection)
 
         if elements:
-            element = elements[0].to_dict()
+            element = elements[0].to_dict_with_more()
             tags = element.keys()
             # code and title on the two first column
             tags.remove('code')
@@ -123,7 +123,7 @@ class PlaylistView(object):
 
             for element in elements:
                 data = []
-                element = element.to_dict()
+                element = element.to_dict_with_more()
                 for tag in tags:
                     data.append(element[tag])
                 writer.writerow(data)