From: Guillaume Pellerin Date: Fri, 27 Jan 2012 15:16:18 +0000 (+0100) Subject: add fund and corpus templates (NOT finished *break* UI now) X-Git-Tag: 1.3.9~42 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=28a1c2eee9c1b6d42d4768886eb4eff22ced27bb;p=telemeta.git add fund and corpus templates (NOT finished *break* UI now) --- diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 09b170c3..9bfd4f2b 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -89,11 +89,10 @@ class MediaResource(ModelCore): class MediaBaseResource(MediaResource): "Describe a base resource" - # General informations - reference = CharField(_('reference'), unique=True, null=True) title = CharField(_('title'), required=True) description = CharField(_('description')) code = CharField(_('code'), unique=True, required=True) + reference = CharField(_('reference'), unique=True, null=True) public_access = CharField(_('public access'), choices=PUBLIC_ACCESS_CHOICES, max_length=16, default="metadata") diff --git a/telemeta/templates/telemeta_default/base.html b/telemeta/templates/telemeta_default/base.html index 12959fa2..173a3a71 100644 --- a/telemeta/templates/telemeta_default/base.html +++ b/telemeta/templates/telemeta_default/base.html @@ -98,8 +98,8 @@
  • {% trans "Archives" %} diff --git a/telemeta/templates/telemeta_default/corpus_add.html b/telemeta/templates/telemeta_default/corpus_add.html new file mode 100644 index 00000000..e6e63e90 --- /dev/null +++ b/telemeta/templates/telemeta_default/corpus_add.html @@ -0,0 +1,35 @@ +{% extends "telemeta/corpus_detail.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block title %} + Corpus : NEW +{% endblock %} + +{% block title_buttons %} + {% trans "Cancel" %} +{% endblock %} + +{% block infos %} +
    +
    {% csrf_token %} + + + {% for field in form %} + + + + + {% endfor %} +
    {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
    {{ field.errors }}
    {{ field.label_tag }}: {{ field }}
    +
    + {% trans "Cancel" %} + {% trans "Save" %} +
    +
    +
    +{% endblock infos%} + +{% block delete %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/corpus_detail.html b/telemeta/templates/telemeta_default/corpus_detail.html new file mode 100644 index 00000000..b7e4b1d8 --- /dev/null +++ b/telemeta/templates/telemeta_default/corpus_detail.html @@ -0,0 +1,74 @@ +{% extends "telemeta/base.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block head_title %}{% trans "Corpus" %}{{corpus|prepend:' : '}} - {{ block.super }}{% endblock %} + +{% block extra_javascript %} +{% endblock %} + +{% if corpus %} + +{% block title %} + + Collection : + {{ corpus.title }} +{% endblock %} + +{% block title_buttons %} +
    + {% if user.is_authenticated and perms.telemeta.change_mediacorpus %} + {% trans "Edit" %} + {% trans "Copy" %} + {% endif %} + {% if user.is_authenticated %} + {% trans "Add to playlist" %} + {% endif %} + Dublin Core +
    +{% endblock %} + +{% block content %} + {% block infos %} +
    + {% if corpus.items.count %}{{ corpus.collections.count }} {% ifequal corpus.collections.count 1 %}item{% else %}collections{% endifequal %}{% else %}No collection% endif %} +
    +
    + {% block general_info %} +
    + {% dl_field corpus "reference" %} + {% dl_field corpus "title" %} + {% dl_field corpus "description" %} + {% dl_field corpus "code" %} +
    + {% endblock general_info %} + +
    + {% block related %} + {% include "telemeta/inc/corpus_related.html" %} + {% endblock related %} +
    + +
    +

    Collections

    + {% with "1" as location_name %} + {% include "telemeta/inc/mediacollection_list.html" %} + {% endwith %} +
    + + {% endblock infos %} +
    +{% endblock %} + +{% block delete %} +{% if user.is_authenticated and perms.telemeta.delete_mediacorpus %} + {% trans "Delete" %} +{% endif %} + +{% endblock %} + +{% else %} +

    No such corpus

    +{% endif %} + diff --git a/telemeta/templates/telemeta_default/corpus_edit.html b/telemeta/templates/telemeta_default/corpus_edit.html new file mode 100644 index 00000000..23c56e77 --- /dev/null +++ b/telemeta/templates/telemeta_default/corpus_edit.html @@ -0,0 +1,34 @@ +{% extends "telemeta/corpus_detail.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block title %} + Corpus : {{ corpus }} +{% endblock %} +{% block title_buttons %} + {% trans "Cancel" %} +{% endblock %} + +{% block infos %} +
    +
    {% csrf_token %} + + + {% for field in form %} + + + + + {% endfor %} +
    {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
    {{ field.errors }}
    {{ field.label_tag }}: {{ field }}
    +
    + {% trans "Cancel" %} + {% trans "Save" %} +
    +
    +
    +{% endblock infos%} + +{% block delete %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/corpus_list.html b/telemeta/templates/telemeta_default/corpus_list.html new file mode 100644 index 00000000..8486c0ab --- /dev/null +++ b/telemeta/templates/telemeta_default/corpus_list.html @@ -0,0 +1,24 @@ +{% extends "telemeta/base.html" %} +{% load telemeta_utils %} +{% load i18n %} + +{% block head_title %}{% trans "Media Corpus" %} - {{ block.super }}{% endblock %} + +{% block title%} + {% trans "Media Corpus" %} +{% endblock %} + +{% block title_buttons %} + {% trans "All" %} + {% if user.is_authenticated and perms.telemeta.add_mediacorpus %} + {% trans "Add" %} + {% endif %} +{% endblock %} + +{% block content %} +{% with object_list as corpus %} +
    +{% include "telemeta/inc/corpus_list.html" %} +
    +{% endwith %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/fund_add.html b/telemeta/templates/telemeta_default/fund_add.html new file mode 100644 index 00000000..7ae7d36e --- /dev/null +++ b/telemeta/templates/telemeta_default/fund_add.html @@ -0,0 +1,35 @@ +{% extends "telemeta/fund_detail.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block title %} + Corpus : NEW +{% endblock %} + +{% block title_buttons %} + {% trans "Cancel" %} +{% endblock %} + +{% block infos %} +
    +
    {% csrf_token %} + + + {% for field in form %} + + + + + {% endfor %} +
    {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
    {{ field.errors }}
    {{ field.label_tag }}: {{ field }}
    +
    + {% trans "Cancel" %} + {% trans "Save" %} +
    +
    +
    +{% endblock infos%} + +{% block delete %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/fund_detail.html b/telemeta/templates/telemeta_default/fund_detail.html new file mode 100644 index 00000000..0df73c7d --- /dev/null +++ b/telemeta/templates/telemeta_default/fund_detail.html @@ -0,0 +1,74 @@ +{% extends "telemeta/base.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block head_title %}{% trans "Funds" %}{{fund|prepend:' : '}} - {{ block.super }}{% endblock %} + +{% block extra_javascript %} +{% endblock %} + +{% if fund %} + +{% block title %} + + Collection : + {{ fund.title }} +{% endblock %} + +{% block title_buttons %} +
    + {% if user.is_authenticated and perms.telemeta.change_mediafund %} + {% trans "Edit" %} + {% trans "Copy" %} + {% endif %} + {% if user.is_authenticated %} + {% trans "Add to playlist" %} + {% endif %} + Dublin Core +
    +{% endblock %} + +{% block content %} + {% block infos %} +
    + {% if fund.corpus.count %}{{ fund.corpus.count }} {% ifequal fund.corpus.count 1 %}item{% else %}corpus{% endifequal %}{% else %}No corpus% endif %} +
    +
    + {% block general_info %} +
    + {% dl_field fund "reference" %} + {% dl_field fund "title" %} + {% dl_field fund "description" %} + {% dl_field fund "code" %} +
    + {% endblock general_info %} + +
    + {% block related %} + {% include "telemeta/inc/fund_related.html" %} + {% endblock related %} +
    + +
    +

    Corpus

    + {% with "1" as location_name %} + {% include "telemeta/inc/corpus_list.html" %} + {% endwith %} +
    + + {% endblock infos %} +
    +{% endblock %} + +{% block delete %} +{% if user.is_authenticated and perms.telemeta.delete_mediafund %} + {% trans "Delete" %} +{% endif %} + +{% endblock %} + +{% else %} +

    No such fund

    +{% endif %} + diff --git a/telemeta/templates/telemeta_default/fund_edit.html b/telemeta/templates/telemeta_default/fund_edit.html new file mode 100644 index 00000000..8a1520f4 --- /dev/null +++ b/telemeta/templates/telemeta_default/fund_edit.html @@ -0,0 +1,34 @@ +{% extends "telemeta/fund_detail.html" %} +{% load i18n %} +{% load telemeta_utils %} + +{% block title %} + Fund : {{ fund }} +{% endblock %} +{% block title_buttons %} + {% trans "Cancel" %} +{% endblock %} + +{% block infos %} +
    +
    {% csrf_token %} + + + {% for field in form %} + + + + + {% endfor %} +
    {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
    {{ field.errors }}
    {{ field.label_tag }}: {{ field }}
    +
    + {% trans "Cancel" %} + {% trans "Save" %} +
    +
    +
    +{% endblock infos%} + +{% block delete %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/fund_list.html b/telemeta/templates/telemeta_default/fund_list.html new file mode 100644 index 00000000..0c893032 --- /dev/null +++ b/telemeta/templates/telemeta_default/fund_list.html @@ -0,0 +1,24 @@ +{% extends "telemeta/base.html" %} +{% load telemeta_utils %} +{% load i18n %} + +{% block head_title %}{% trans "Media Funds" %} - {{ block.super }}{% endblock %} + +{% block title%} + {% trans "Media Funds" %} +{% endblock %} + +{% block title_buttons %} + {% trans "All" %} + {% if user.is_authenticated and perms.telemeta.add_mediafunds %} + {% trans "Add" %} + {% endif %} +{% endblock %} + +{% block content %} +{% with object_list as funds %} +
    +{% include "telemeta/inc/fund_list.html" %} +
    +{% endwith %} +{% endblock %} diff --git a/telemeta/templates/telemeta_default/inc/corpus_list.html b/telemeta/templates/telemeta_default/inc/corpus_list.html new file mode 100644 index 00000000..1e50ea36 --- /dev/null +++ b/telemeta/templates/telemeta_default/inc/corpus_list.html @@ -0,0 +1,31 @@ +{% load telemeta_utils %} +{% load i18n %} +{% if corpi %} +{% if hits %} + +

    +{% blocktrans %}Corpus {{ first_on_page }} to {{ last_on_page }} on {{ hits }}{% endblocktrans %} +| Pages : {% if pages == 1 %}1{% else %}{% if is_paginated %}{% load paginator %}{% paginator 5 %}{% endif %}{% endif %} +

    +{% endif %} + + + + + + + +{% for corpus in corpi %} + + + + + +{% endfor %} +
    {% trans "Title" %}{% trans "Description" %}{% trans "Code" %}{% trans "Reference" %}
    + {{ corpus.title }} + {{ corpus.code }}{{ corpus.reference }}
    +{% else %} +

    {% trans "No corpus" %}

    +{% endif %} + diff --git a/telemeta/templates/telemeta_default/inc/fund_list.html b/telemeta/templates/telemeta_default/inc/fund_list.html new file mode 100644 index 00000000..00f5e8d2 --- /dev/null +++ b/telemeta/templates/telemeta_default/inc/fund_list.html @@ -0,0 +1,31 @@ +{% load telemeta_utils %} +{% load i18n %} +{% if funds %} +{% if hits %} + +

    +{% blocktrans %}Funds {{ first_on_page }} to {{ last_on_page }} on {{ hits }}{% endblocktrans %} +| Pages : {% if pages == 1 %}1{% else %}{% if is_paginated %}{% load paginator %}{% paginator 5 %}{% endif %}{% endif %} +

    +{% endif %} + + + + + + + +{% for fund in funds %} + + + + + +{% endfor %} +
    {% trans "Title" %}{% trans "Description" %}{% trans "Code" %}{% trans "Reference" %}
    + {{ fund.title }} + {{ fund.code }}{{ fund.reference }}
    +{% else %} +

    {% trans "No fund" %}

    +{% endif %} + diff --git a/telemeta/urls.py b/telemeta/urls.py index 7b5be526..191e15fc 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -111,7 +111,7 @@ urlpatterns = patterns('', dict(template='telemeta/mediaitem_edit.html'), name="telemeta-item-edit"), url(r'^archives/items/(?P[A-Za-z0-9._-]+)/copy/$', item_view.item_copy, dict(template='telemeta/mediaitem_copy.html'), name="telemeta-item-copy"), - url(r'^item/add/$', item_view.item_add, + url(r'^archives/item_new/add/$', item_view.item_add, dict(template='telemeta/mediaitem_add.html'), name="telemeta-item-add"), url(r'^archives/items/(?P[A-Za-z0-9._-]+)/player/(?P[0-9]+)x(?P[0-9]+)/$', item_view.item_detail, dict(template='telemeta/mediaitem_player.html'), name="telemeta-item-player"), @@ -130,9 +130,9 @@ urlpatterns = patterns('', # collections url(r'^archives/collections/$', 'django.views.generic.list_detail.object_list', dict(all_collections, paginate_by=20, template_name="telemeta/collection_list.html"), name="telemeta-collections"), - url(r'^collections_unpublished/$', 'django.views.generic.list_detail.object_list', + url(r'^archives/collections_unpublished/$', 'django.views.generic.list_detail.object_list', dict(all_collections_unpublished, paginate_by=20, template_name="telemeta/collection_list.html"), name="telemeta-collections-unpublished"), - url(r'^collections_published/$', 'django.views.generic.list_detail.object_list', + url(r'^archives/collections_published/$', 'django.views.generic.list_detail.object_list', dict(all_collections_published, paginate_by=20, template_name="telemeta/collection_list.html"), name="telemeta-collections-published"), url(r'^archives/collections/?page=(?P[0-9]+)$', 'django.views.generic.list_detail.object_list', @@ -153,7 +153,7 @@ urlpatterns = patterns('', dict(template='telemeta/collection_edit.html'), name="telemeta-collection-edit"), url(r'^archives/collections/(?P[A-Za-z0-9._-]+)/copy/$', collection_view.collection_copy, dict(template='telemeta/collection_edit.html'), name="telemeta-collection-copy"), - url(r'^collection/add/$', collection_view.collection_add, + url(r'^archives/collection_new/add/$', collection_view.collection_add, dict(template='telemeta/collection_add.html'), name="telemeta-collection-add"), url(r'^archives/collections/(?P[A-Za-z0-9._-]+)/add_item/$', item_view.item_add, dict(template='telemeta/mediaitem_add.html'), name="telemeta-collection-additem"), @@ -168,10 +168,30 @@ urlpatterns = patterns('', # Corpus url(r'^archives/corpus/$', 'django.views.generic.list_detail.object_list', dict(all_corpus, paginate_by=20, template_name="telemeta/corpus_list.html"), name="telemeta-corpus"), + url(r'^archives/corpus/(?P[A-Za-z0-9._-]+)/$', corpus_view.corpus_detail, + dict(template="telemeta/corpus_detail.html"), name="telemeta-corpus-detail"), + url(r'^archives/corpus/(?P[A-Za-z0-9._-]+)/dc/$', corpus_view.corpus_detail, + dict(template="telemeta/corpus_detail_dc.html"), name="telemeta-corpus-dublincore"), + url(r'^archives/corpus/(?P[A-Za-z0-9._-]+)/edit/$', corpus_view.corpus_edit, + dict(template='telemeta/corpus_edit.html'), name="telemeta-corpus-edit"), + url(r'^archives/corpus/(?P[A-Za-z0-9._-]+)/copy/$', corpus_view.corpus_copy, + dict(template='telemeta/corpus_edit.html'), name="telemeta-corpus-copy"), + url(r'^archives/corpus_new/add/$', corpus_view.corpus_add, + dict(template='telemeta/corpus_add.html'), name="telemeta-corpus-add"), # Funds url(r'^archives/funds/$', 'django.views.generic.list_detail.object_list', - dict(all_funds, paginate_by=20, template_name="telemeta/fund_list.html"), name="telemeta-fund"), + dict(all_funds, paginate_by=20, template_name="telemeta/fund_list.html"), name="telemeta-funds"), + url(r'^archives/funds/(?P[A-Za-z0-9._-]+)/$', fund_view.fund_detail, + dict(template="telemeta/fund_detail.html"), name="telemeta-fund-detail"), + url(r'^archives/funds/(?P[A-Za-z0-9._-]+)/dc/$', fund_view.fund_detail, + dict(template="telemeta/fund_detail_dc.html"), name="telemeta-fund-dublincore"), + url(r'^archives/funds/(?P[A-Za-z0-9._-]+)/edit/$', fund_view.fund_edit, + dict(template='telemeta/fund_edit.html'), name="telemeta-fund-edit"), + url(r'^archives/funds/(?P[A-Za-z0-9._-]+)/copy/$', fund_view.fund_copy, + dict(template='telemeta/fund_edit.html'), name="telemeta-fund-copy"), + url(r'^archives/fund/add/$', fund_view.fund_add, + dict(template='telemeta/fund_add.html'), name="telemeta-fund-add"), # search url(r'^search/$', general_view.search, name="telemeta-search"), diff --git a/telemeta/views/base.py b/telemeta/views/base.py index 188de05a..1bed4a09 100644 --- a/telemeta/views/base.py +++ b/telemeta/views/base.py @@ -1471,3 +1471,115 @@ class CorpusView(object): formset = MediaCorpusRelatedFormSet(instance=corpus) return render(request, template, {'corpus': corpus, 'formset': formset,}) + +class CorpusView(object): + """Provide Corpuss web UI methods""" + + def corpus_detail(self, request, public_id, template='telemeta/corpus_detail.html'): + corpus = MediaCorpus.objects.get(public_id=public_id) + collections = corpus.collections.enriched() + collections = collections.order_by('code') + + if corpus.public_access == 'none' and not (request.user.is_staff or request.user.is_superuser): + mess = ugettext('Access not allowed') + title = ugettext('Corpus') + ' : ' + public_id + ' : ' + mess + description = ugettext('Please login or contact the website administator to get a private access.') + messages.error(request, title) + return render(request, 'telemeta/messages.html', {'description' : description}) + + related_media = MediaCorpusRelated.objects.filter(corpus=corpus) + check_related_media(related_media) + + return render(request, template, {'corpus': corpus, 'collections': collections, 'related_media': related_media}) + + @method_decorator(permission_required('telemeta.change_mediacorpus')) + def corpus_edit(self, request, public_id, template='telemeta/corpus_edit.html'): + corpus = MediaCorpus.objects.get(public_id=public_id) + if request.method == 'POST': + form = MediaCorpusForm(data=request.POST, files=request.FILES, instance=corpus) + if form.is_valid(): + code = form.cleaned_data['code'] + if not code: + code = public_id + form.save() + corpus.set_revision(request.user) + return HttpResponseRedirect('/archives/corpus/'+code) + else: + form = MediaCorpusForm(instance=corpus) + + return render(request, template, {'corpus': corpus, "form": form,}) + + @method_decorator(permission_required('telemeta.add_mediacorpus')) + def corpus_add(self, request, template='telemeta/corpus_add.html'): + corpus = MediaCorpus() + if request.method == 'POST': + form = MediaCorpusForm(data=request.POST, files=request.FILES, instance=corpus) + if form.is_valid(): + code = form.cleaned_data['code'] + if not code: + code = public_id + form.save() + corpus.set_revision(request.user) + return HttpResponseRedirect('/archives/corps/'+code) + else: + form = MediaCorpusForm(instance=corpus) + + return render(request, template, {'corpus': corpus, "form": form,}) + + @method_decorator(permission_required('telemeta.add_mediacorpus')) + def corpus_copy(self, request, public_id, template='telemeta/corpus_edit.html'): + if request.method == 'POST': + corpus = MediaCorpus() + form = MediaCorpusForm(data=request.POST, files=request.FILES, instance=corpus) + if form.is_valid(): + code = form.cleaned_data['code'] + if not code: + code = public_id + form.save() + corpus.set_revision(request.user) + return HttpResponseRedirect('/archives/corpus/'+code) + else: + corpus = MediaCorpus.objects.get(public_id=public_id) + form = MediaCorpusForm(instance=corpus) + + return render(request, template, {'corpus': corpus, "form": form,}) + + def corpus_playlist(self, request, public_id, template, mimetype): + try: + corpus = MediaCorpus.objects.get(public_id=public_id) + except ObjectDoesNotExist: + raise Http404 + + template = loader.get_template(template) + context = RequestContext(request, {'corpus': corpus, 'host': request.META['HTTP_HOST']}) + return HttpResponse(template.render(context), mimetype=mimetype) + + @method_decorator(permission_required('telemeta.delete_mediacorpus')) + def corpus_delete(self, request, public_id): + """Delete a given corpus""" + corpus = MediaCorpus.objects.get(public_id=public_id) + corpus.delete() + return HttpResponseRedirect('/archives/corpus/') + + def related_media_corpus_stream(self, request, corpus_public_id, media_id): + corpus = MediaCorpus.objects.get(public_id=corpus_public_id) + media = MediaCorpusRelated.objects.get(corpus=corpus, id=media_id) + response = HttpResponse(stream_from_file(media.file.path), mimetype=media.mime_type) +# response['Content-Disposition'] = 'attachment' + return response + + @method_decorator(permission_required('telemeta.change_mediacorpus')) + def related_media_edit(self, request, public_id, template): + corpus = MediaCorpus.objects.get(public_id=public_id) + MediaCorpusRelatedFormSet = inlineformset_factory(MediaCorpus, MediaCorpusRelated, form=MediaCorpusRelatedForm) + if request.method == 'POST': + formset = MediaCorpusRelatedFormSet(data=request.POST, files=request.FILES, instance=corpus) + if formset.is_valid(): + formset.save() + corpus.set_revision(request.user) + return HttpResponseRedirect('/archives/corpus/'+public_id) + else: + formset = MediaCorpusRelatedFormSet(instance=corpus) + + return render(request, template, {'corpus': corpus, 'formset': formset,}) +