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
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"
element_type = 'collection'
+
def is_valid_collection_code(value):
"Check if the collection code is well formed"
regex = '^' + collection_code_regex + '$'
# 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
return countries
countries.verbose_name = _("states / nations")
-
def main_countries(self):
"Return the main countries of the items (no aliases or ancestors)"
countries = []
countries.append(item.location)
countries.sort(self.__name_cmp)
return countries
-
main_countries.verbose_name = _("states / nations")
def ethnic_groups(self):
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):
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"
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"),
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:
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):