From 39493d4f8340b1ed51b242347867e7a26569dd51 Mon Sep 17 00:00:00 2001 From: yomguy Date: Mon, 14 Mar 2011 18:19:20 +0100 Subject: [PATCH] add Search model, adapt Playlist, begin home template, bugfixes, cleanup --- telemeta/admin.py | 1 + telemeta/models/media.py | 22 +++- telemeta/models/system.py | 20 +--- telemeta/templates/telemeta/home.html | 1 + telemeta/templates/telemeta_default/home.html | 104 ++++++++++++++++++ .../telemeta_default/inc/collection_list.html | 2 +- .../telemeta_default/inc/mediaitem_list.html | 8 +- .../telemeta_default/mediaitem_detail.html | 2 - .../telemeta_default/search_results.html | 4 + telemeta/web/base.py | 42 +++++-- 10 files changed, 167 insertions(+), 39 deletions(-) create mode 100644 telemeta/templates/telemeta/home.html create mode 100644 telemeta/templates/telemeta_default/home.html diff --git a/telemeta/admin.py b/telemeta/admin.py index dc803b23..1b4cac92 100644 --- a/telemeta/admin.py +++ b/telemeta/admin.py @@ -7,5 +7,6 @@ admin.site.register(MediaCollection) admin.site.register(MediaItem) admin.site.register(MediaPart) admin.site.register(Playlist) +admin.site.register(PlaylistResource) admin.site.register(Instrument) diff --git a/telemeta/models/media.py b/telemeta/models/media.py index a8c965db..23fff26f 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -347,9 +347,10 @@ class MediaPart(MediaResource): class Playlist(ModelCore): "Item or collection playlist" - #owner_username = ForeignKey('User', related_name="playlists", db_column="owner_username") + element_type = 'playlist' owner_username = ForeignKey(User, related_name="playlists", db_column="owner_username") name = CharField(_('name'), required=True) + is_current = BooleanField(_('current_user_playlist')) class Meta(MetaCore): db_table = 'playlists' @@ -360,7 +361,7 @@ class Playlist(ModelCore): class PlaylistResource(ModelCore): "Playlist components" RESOURCE_TYPE_CHOICES = (('item', 'item'), ('collection', 'collection')) - + element_type = 'playlist_resource' playlist = ForeignKey('Playlist', related_name="resources", verbose_name=_('playlist')) resource_type = CharField(_('resource type'), choices=RESOURCE_TYPE_CHOICES, required=True) resource = IntegerField(_('resource'), required=True) @@ -371,7 +372,7 @@ class PlaylistResource(ModelCore): class MediaInvalidCodeError(Exception): pass -class MediaItemMarker(ModelCore): +class MediaItemMarker(MediaResource): "2D marker object : text value vs. time" element_type = 'marker' @@ -390,4 +391,19 @@ class MediaItemMarker(ModelCore): def __unicode__(self): return self.time + ' : ' + self.description + '(' + self.author + ')' +class Search(ModelCore): + "Keywork search" + + element_type = 'search' + + username = ForeignKey(User, related_name="searches", db_column="username") + keywords = CharField(_('keywords'), required=True) + date = DateField(_('date'), auto_now_add=True) + + class Meta(MetaCore): + db_table = 'searches' + + def __unicode__(self): + return self.keywords + diff --git a/telemeta/models/system.py b/telemeta/models/system.py index 2071fbc6..4f92c58f 100644 --- a/telemeta/models/system.py +++ b/telemeta/models/system.py @@ -39,33 +39,15 @@ from django.core.exceptions import ObjectDoesNotExist from django.utils.translation import ugettext_lazy as _ -#class User(ModelCore): -# "Telemeta user" -# LEVEL_CHOICES = (('user', 'user'), ('maintainer', 'maintainer'), ('admin', 'admin')) -# -# username = CharField(_('username'), primary_key=True, max_length=64, required=True) -# level = CharField(_('level'), choices=LEVEL_CHOICES, max_length=32, required=True) -# first_name = CharField(_('first name')) -# last_name = CharField(_('last name')) -# phone = CharField(_('phone')) -# email = CharField(_('email')) -# -# class Meta(MetaCore): -# db_table = 'users' -# -# def __unicode__(self): -# return self.username - class Revision(ModelCore): "Revision made by user" - ELEMENT_TYPE_CHOICES = (('collection', 'collection'), ('item', 'item'), ('part', 'part')) + ELEMENT_TYPE_CHOICES = (('collection', 'collection'), ('item', 'item'), ('part', 'part'), ('marker', 'marker')) CHANGE_TYPE_CHOICES = (('import', 'import'), ('create', 'create'), ('update', 'update'), ('delete','delete')) element_type = CharField(_('element type'), choices=ELEMENT_TYPE_CHOICES, max_length=16, required=True) element_id = IntegerField(_('element identifier'), required=True) change_type = CharField(_('modification type'), choices=CHANGE_TYPE_CHOICES, max_length=16, required=True) time = DateTimeField(_('time'), auto_now_add=True) - #user = ForeignKey('User', db_column='username', related_name="revisions", verbose_name=_('user')) user = ForeignKey(User, db_column='username', related_name="revisions", verbose_name=_('user')) @classmethod diff --git a/telemeta/templates/telemeta/home.html b/telemeta/templates/telemeta/home.html new file mode 100644 index 00000000..f415f74b --- /dev/null +++ b/telemeta/templates/telemeta/home.html @@ -0,0 +1 @@ +{% extends "telemeta_default/home.html" %} diff --git a/telemeta/templates/telemeta_default/home.html b/telemeta/templates/telemeta_default/home.html new file mode 100644 index 00000000..06dbb8c5 --- /dev/null +++ b/telemeta/templates/telemeta_default/home.html @@ -0,0 +1,104 @@ +{% extends "telemeta/index.html" %} +{% load telemeta_utils %} +{% load i18n %} + +{% block content %} +
+ +
+

Playlists

+
{% csrf_token %} + {% for playlist in playlists %} +
  • {{ playlist.name }}
  • + + + + + + + + + + + {% for resource in playlist.resources %} + + {% if resource.type == "item" %} + + {% else %} + + {% endif %} + + + + + + + + {% endfor %} +
    {% trans "Title" %}{% trans "Type" %}{% trans "Code" %}{% trans "Recordist" %}{% trans "Year of recording" %}{% trans "Sound" %}
    {{ resource.element }}{{ resource.element }}{{ resource.type }} + {{ resource.element.code|default:resource.element.old_code }} + {{ resource.element.apparent_collector }} + {% if resource.element.recorded_from_date %} + {{ resource.element.recorded_from_date.year }} + {% if resource.element.recorded_to_date and not resource.element.recorded_to_date.year|equals:resource.element.recorded_from_date.year %} + - {{ resource.element.recorded_to_date.year }} + {% endif %} + {% endif %} + + {% if resource.element.file or resource.element.has_mediafile %} + + yes + {% endif %} +
    + {% endfor %} +
    +
    + +
    +
    +

    Searches

    + + + + + + + {% for search in searches %} + + + + + {% endfor %} +
    DateKeywordsLink
    typetitle
    + +
    + +
    +
    +

    Last changes

    + + + + + + + + + {% for revision in revisions %} + + + + + + + + {% endfor %} +
    DateElementTypeChange type
    {{ revision.time }}{{ revision.element_id }}{{ revision.element_type }}{{ revision.change_type }}
    + + + +
    + +
    +{% endblock %} + diff --git a/telemeta/templates/telemeta_default/inc/collection_list.html b/telemeta/templates/telemeta_default/inc/collection_list.html index 0beb56b8..f5bb2aea 100644 --- a/telemeta/templates/telemeta_default/inc/collection_list.html +++ b/telemeta/templates/telemeta_default/inc/collection_list.html @@ -38,7 +38,7 @@ {% if collection.has_mediafile %} - (sound) + yes {% endif %} diff --git a/telemeta/templates/telemeta_default/inc/mediaitem_list.html b/telemeta/templates/telemeta_default/inc/mediaitem_list.html index c919b980..40d19111 100644 --- a/telemeta/templates/telemeta_default/inc/mediaitem_list.html +++ b/telemeta/templates/telemeta_default/inc/mediaitem_list.html @@ -9,6 +9,7 @@ {% if has_next %} >> {% endif %}

    {% endif %} + @@ -44,13 +45,16 @@ {% endif %} {% endif %} - {% endfor %}
    {% trans "Title" %}{% if item.file %} - (sound) + + {% if item.file %} + + yes {% endif %}
    + {% else %}

    {% trans "No item" %}

    {% endif %} diff --git a/telemeta/templates/telemeta_default/mediaitem_detail.html b/telemeta/templates/telemeta_default/mediaitem_detail.html index 4eab3a36..070a8d1b 100644 --- a/telemeta/templates/telemeta_default/mediaitem_detail.html +++ b/telemeta/templates/telemeta_default/mediaitem_detail.html @@ -43,10 +43,8 @@ {% block tools %} Dublin Core {% if user.is_authenticated and perms.telemeta.change_mediaitem %} - EDIT - {% endif %} PREVIOUS NEXT diff --git a/telemeta/templates/telemeta_default/search_results.html b/telemeta/templates/telemeta_default/search_results.html index cb13f62f..4973733b 100644 --- a/telemeta/templates/telemeta_default/search_results.html +++ b/telemeta/templates/telemeta_default/search_results.html @@ -51,7 +51,9 @@ Collections ({{collections_num}})

    {% with object_list as items %} +
    {% include "telemeta/inc/mediaitem_list.html" %} +
    {% endwith %} {% else %} @@ -61,7 +63,9 @@ Collections ({{collections_num}})

    {% with object_list as collections %} +
    {% include "telemeta/inc/collection_list.html" %} +
    {% endwith %} {% endifequal %} diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 2909bd8c..4a66a7d4 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -55,7 +55,7 @@ from django.core.context_processors import csrf from django.forms.models import modelformset_factory from django.contrib.auth.models import User -from telemeta.models import MediaItem, Location, MediaCollection, EthnicGroup, MediaCollectionForm, MediaItemForm +from telemeta.models import MediaItem, Location, MediaCollection, EthnicGroup, MediaCollectionForm, MediaItemForm, Playlist, PlaylistResource, Search, Revision from telemeta.models import dublincore, Enumeration, MediaItemMarker, Instrument import telemeta.models import telemeta.interop.oai as oai @@ -103,16 +103,34 @@ class WebView(object): def index(self, request): """Render the homepage""" - - template = loader.get_template('telemeta/index.html') - ids = [id for id in MediaItem.objects.all().values_list('id', flat=True).order_by('?')[0:3]] - items = MediaItem.objects.enriched().filter(pk__in=ids) - - context = RequestContext(request, { - 'page_content': pages.get_page_content(request, 'parts/home', ignore_slash_issue=True), - 'items': items}) - return HttpResponse(template.render(context)) - + if not request.user.is_authenticated(): + template = loader.get_template('telemeta/index.html') + ids = [id for id in MediaItem.objects.all().values_list('id', flat=True).order_by('?')[0:3]] + items = MediaItem.objects.enriched().filter(pk__in=ids) + + context = RequestContext(request, { + 'page_content': pages.get_page_content(request, 'parts/home', ignore_slash_issue=True), + 'items': items}) + return HttpResponse(template.render(context)) + else: + template='telemeta/home.html' + user_playlists = Playlist.objects.filter(owner_username=request.user) + playlists = [] + for playlist in user_playlists: + playlist_resources = PlaylistResource.objects.filter(playlist=playlist) + resources = [] + for resource in playlist_resources: + if resource.resource_type == 'item': + element = MediaItem.objects.get(pk=resource.resource) + if resource.resource_type == 'collection': + element = MediaCollection.objects.get(pk=resource.resource) + resources.append({'element': element, 'type': resource.resource_type}) + playlists.append({'name': playlist.name, 'resources': resources}) + + searches = Search.objects.filter(username=request.user) + revisions = Revision.objects.all().order_by('-time')[0:10] + return render(request, template, {'playlists': playlists, 'searches': searches, 'revisions': revisions}) + def collection_detail(self, request, public_id, template='telemeta/collection_detail.html'): collection = MediaCollection.objects.get(public_id=public_id) return render(request, template, {'collection': collection}) @@ -233,7 +251,7 @@ class WebView(object): analyzers = self.item_analyze(item) if request.method == 'POST': - form = MediaItemForm(request.POST, request.FILES, instance=item) + form = MediaItemForm(data=request.POST, files=request.FILES, instance=item) if form.is_valid(): form.save() return HttpResponseRedirect('/items/'+public_id) -- 2.39.5