]> git.parisson.com Git - telemeta.git/commitdiff
add Search model, adapt Playlist, begin home template, bugfixes, cleanup
authoryomguy <yomguy@parisson.com>
Mon, 14 Mar 2011 17:19:20 +0000 (18:19 +0100)
committeryomguy <yomguy@parisson.com>
Mon, 14 Mar 2011 17:19:20 +0000 (18:19 +0100)
telemeta/admin.py
telemeta/models/media.py
telemeta/models/system.py
telemeta/templates/telemeta/home.html [new file with mode: 0644]
telemeta/templates/telemeta_default/home.html [new file with mode: 0644]
telemeta/templates/telemeta_default/inc/collection_list.html
telemeta/templates/telemeta_default/inc/mediaitem_list.html
telemeta/templates/telemeta_default/mediaitem_detail.html
telemeta/templates/telemeta_default/search_results.html
telemeta/web/base.py

index dc803b23adb51ac9829e599f5edee31a009aff68..1b4cac929d0b76d3e95d80cbca50cb9f42e04375 100644 (file)
@@ -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)
 
index a8c965db9f32dc6e2c2b26c816de029231171dc0..23fff26f0ba4379eba7c11705d307fb58c63797b 100644 (file)
@@ -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
+
 
index 2071fbc67dcef056b278c6d10c2bd3122e409d6d..4f92c58fe9498c3d39b677be77706d189cf95995 100644 (file)
@@ -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 (file)
index 0000000..f415f74
--- /dev/null
@@ -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 (file)
index 0000000..06dbb8c
--- /dev/null
@@ -0,0 +1,104 @@
+{% 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 %}
+
index 0beb56b81985a46807e68786ab25e30be69b3dc1..f5bb2aea7c29ebebe7e9823bfd962946627b909e 100644 (file)
@@ -38,7 +38,7 @@
     </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>
index c919b980c4dfeb32612c5de342184fbe964b69d3..40d191114c0c57f40d0ded95fb4234272bbd4e89 100644 (file)
@@ -9,6 +9,7 @@
 {% if has_next %} <a href="?page={{ next }}&amp;{{criteria|build_query_string}}">&gt;&gt;</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 %}
index 4eab3a36ea7bafa021ea747789b0845fd36e30e1..070a8d1bd24c499d1c1013d3bdf39ff930980064 100644 (file)
     {% 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>
index cb13f62feab81ea71749d65144c6ab074e6a0758..4973733ba419310a304572c5bcb0f6f30bc7dca9 100644 (file)
@@ -51,7 +51,9 @@
     Collections ({{collections_num}})</a></p>
 
   {% with object_list as items %}
+   <div class="fullpage">
       {% include "telemeta/inc/mediaitem_list.html" %}
+   </div>
   {% endwith %}    
 
 {% else %}
@@ -61,7 +63,9 @@
   <b>Collections ({{collections_num}})</b></p>
 
   {% with object_list as collections %}
+   <div class="fullpage">
       {% include "telemeta/inc/collection_list.html" %}
+   </div>
   {% endwith %}
 
 {% endifequal %}
index 2909bd8c63ed0b64c794e78493d0637c6fd92175..4a66a7d440dbe27cd2f097400b941adef538b1c5 100644 (file)
@@ -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)