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 %}
+
+
+
+
+
+
+
Searches
+
+
+ Date |
+ Keywords |
+ Link |
+
+ {% for search in searches %}
+
+ type |
+ title |
+
+ {% endfor %}
+
+
+
+
+
+
+
Last changes
+
+
+ Date |
+ Element |
+ Type |
+ Change type |
+
+
+ {% for revision in revisions %}
+
+ {{ revision.time }} |
+ {{ revision.element_id }} |
+ {{ revision.element_type }} |
+ {{ revision.change_type }} |
+
+
+ {% endfor %}
+
+
+
+
+
+
+
+{% 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 %}
-
+
{% 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 %}
+
{% trans "Title" %} |
@@ -44,13 +45,16 @@
{% endif %}
{% endif %}
- {% if item.file %}
-
+ |
+ {% if item.file %}
+
+
{% endif %}
|
{% endfor %}
+
{% 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 %}
-
-
{% endif %}
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