admin.site.register(MediaItem)
admin.site.register(MediaPart)
admin.site.register(Playlist)
+admin.site.register(PlaylistResource)
admin.site.register(Instrument)
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'
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)
class MediaInvalidCodeError(Exception):
pass
-class MediaItemMarker(ModelCore):
+class MediaItemMarker(MediaResource):
"2D marker object : text value vs. time"
element_type = 'marker'
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
+
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
--- /dev/null
+{% extends "telemeta_default/home.html" %}
--- /dev/null
+{% extends "telemeta/index.html" %}
+{% load telemeta_utils %}
+{% load i18n %}
+
+{% block content %}
+<div class="home-content">
+
+<div>
+<h3>Playlists</h3>
+ <form method="POST" action="">{% csrf_token %}
+ {% for playlist in playlists %}
+ <li>{{ playlist.name }}</li>
+ <table class="listing" width="50%">
+ <tr>
+ <th class="highlight">{% trans "Title" %}</th>
+ <th>{% trans "Type" %}</th>
+ <th>{% trans "Code" %}</th>
+ <th>{% trans "Recordist" %}</th>
+ <th>{% trans "Year of recording" %}</th>
+ <th>{% trans "Sound" %}</th>
+ </tr>
+
+ {% for resource in playlist.resources %}
+ <tr>
+ {% if resource.type == "item" %}
+ <td><a href="{% url telemeta-item-detail resource.element.public_id %}">{{ resource.element }}</td>
+ {% else %}
+ <td><a href="{% url telemeta-collection-detail resource.element.public_id %}">{{ resource.element }}</td>
+ {% endif %}
+ <td>{{ resource.type }}</td>
+ <td>
+ {{ resource.element.code|default:resource.element.old_code }}
+ </td>
+ <td>{{ resource.element.apparent_collector }}</td>
+
+ <td>
+ {% 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 %}
+ </td>
+ <td>
+ {% if resource.element.file or resource.element.has_mediafile %}
+ <a href="{% url telemeta-item-detail resource.element.public_id %}">
+ <img src="images/text-speak.png" alt="yes" style="vertical-align:middle" /></a>
+ {% endif %}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endfor %}
+ </form>
+</div>
+
+<br />
+<div>
+<h3>Searches</h3>
+ <table class="listing">
+ <tr>
+ <th class="highlight">Date</th>
+ <th>Keywords</th>
+ <th>Link</th>
+ </tr>
+ {% for search in searches %}
+ <tr>
+ <td>type</td>
+ <td>title</td>
+ </tr>
+ {% endfor %}
+ </table>
+
+</div>
+
+<br />
+<div>
+<h3>Last changes</h3>
+ <table class="listing">
+ <tr>
+ <th class="highlight">Date</th>
+ <th>Element</th>
+ <th>Type</th>
+ <th>Change type</th>
+
+ </tr>
+ {% for revision in revisions %}
+ <tr>
+ <td>{{ revision.time }}</td>
+ <td>{{ revision.element_id }}</td>
+ <td>{{ revision.element_type }}</td>
+ <td>{{ revision.change_type }}</td>
+
+ </tr>
+ {% endfor %}
+ </table>
+
+
+
+</div>
+
+</div>
+{% endblock %}
+
</td>
<td>
{% if collection.has_mediafile %}
- <img src="images/text-speak.png" alt="(sound)" style="vertical-align:middle" />
+ <img src="images/text-speak.png" alt="yes" style="vertical-align:middle" />
{% endif %}
</td>
</tr>
{% if has_next %} <a href="?page={{ next }}&{{criteria|build_query_string}}">>></a> {% endif %}
</p>
{% endif %}
+
<table class="listing">
<tr>
<th class="highlight">{% trans "Title" %}</th>
{% endif %}
{% endif %}
</td>
- <td>{% if item.file %}
- <a href="{% url telemeta-item-detail item.public_id %}"><img src="images/text-speak.png" alt="(sound)" style="vertical-align:middle" /></a>
+ <td>
+ {% if item.file %}
+ <a href="{% url telemeta-item-detail item.public_id %}">
+ <img src="images/text-speak.png" alt="yes" style="vertical-align:middle" /></a>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
+
{% else %}
<p>{% trans "No item" %}</p>
{% endif %}
{% block tools %}
<a href="{% url telemeta-item-dublincore item.public_id %}">Dublin Core</a>
{% if user.is_authenticated and perms.telemeta.change_mediaitem %}
-
<a href="{% url telemeta-item-edit item.public_id %}"><img src="images/edit_page.png" style="vertical-align:middle" alt="EDIT" /></a>
<button><a href="{% url telemeta-item-copy item.public_id %}">Copy</a></button>
-
{% endif %}
<a href="{% url telemeta-item-detail previous %}"><img src="images/previous.png" style="vertical-align:middle" alt="PREVIOUS" /></a>
<a href="{% url telemeta-item-detail next %}"><img src="images/next.png" style="vertical-align:middle" alt="NEXT" /></a>
Collections ({{collections_num}})</a></p>
{% with object_list as items %}
+ <div class="fullpage">
{% include "telemeta/inc/mediaitem_list.html" %}
+ </div>
{% endwith %}
{% else %}
<b>Collections ({{collections_num}})</b></p>
{% with object_list as collections %}
+ <div class="fullpage">
{% include "telemeta/inc/collection_list.html" %}
+ </div>
{% endwith %}
{% endifequal %}
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
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})
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)