]> git.parisson.com Git - telemeta.git/commitdiff
begin resource queryset, add parent links to resource details
authoryomguy <yomguy@parisson.com>
Tue, 7 Feb 2012 16:09:45 +0000 (17:09 +0100)
committeryomguy <yomguy@parisson.com>
Tue, 7 Feb 2012 16:09:45 +0000 (17:09 +0100)
telemeta/models/query.py
telemeta/templates/telemeta/collection_detail.html
telemeta/templates/telemeta/resource_detail.html
telemeta/urls.py
telemeta/views/base.py

index 2c8fe22e0d2cdc7b167bc00e2fb8793da868350e..00162d392199aee593857a4d64e6ec5c2142c98f 100644 (file)
@@ -416,3 +416,28 @@ class LocationManager(CoreManager):
         return self.get_query_set().flatname_map(*args, **kwargs)
     flatname_map.__doc__ = LocationQuerySet.flatname_map.__doc__
 
+
+class MediaResourceQuerySet(CoreQuerySet):
+    "Base class for all media resource query sets"
+
+    def quick_search(self, pattern):
+        "Perform a quick search on code, title and description"
+        pattern = pattern.strip()
+
+        q = ( Q(code__contains=pattern) |
+            word_search_q('title', pattern) |
+            word_search_q('description', pattern))
+
+        return self.filter(q)
+
+
+class MediaResourceManager(CoreManager):
+    "Manage media resource queries"
+
+    def get_query_set(self):
+        "Return media query sets"
+        return MediaItemQuerySet(self.model)
+
+    def quick_search(self, *args, **kwargs):
+        return self.get_query_set().quick_search(*args, **kwargs)
+    quick_search.__doc__ = MediaResourceQuerySet.quick_search.__doc__
index d366290fbef49190ec57e1d5ac9ef3a9e18f33fc..1fd7e72ebf3b6b4b762266e1b87cbd51aafae1c3 100644 (file)
                 <dt>{% trans "Recording period" %}</dt>
                     <dd>{% if collection.recorded_from_year %}{{ collection.recorded_from_year }}{% endif %}{% if collection.recorded_from_year and collection.recorded_to_year %} - {% endif %}{% if  collection.recorded_to_year %}{{ collection.recorded_to_year}}{% endif %}</dd>
                 {% dl_field collection "year_published" placeholder %}
+                {% for parent in parents %}
+                <dt>{% trans parent.element_type|capitalize %}</dt>
+                <dd><a href="{% url telemeta-resource-detail parent.element_type parent.public_id %}">{{ parent.title }}</a></dd>
+                {% endfor %}
             </dl>
         {% endblock general_info %}
         </div>
index 5f07ab7ad0979f918cac452c79dda20d104a3fda..73e9224604c97f26c8355759654b714bfa3222c9 100644 (file)
                {% else %}
                 {% dl_field resource field.name %}
                {% endif %}
-              {% endfor %}  
+              {% endfor %}
+              {% for parent in parents %}
+              <dt>{% trans parent.element_type|capitalize %}</dt>
+              <dd><a href="{% url telemeta-resource-detail parent.element_type parent.public_id %}">{{ parent.title }}</a></dd>
+               {% endfor %}
             </dl>
         {% endblock general_info %}
 
index 24c3420e63cdd41d92124f9cb938e5dec0749ee7..7d0c40962553a2a5c1c2467806900dafaa92187f 100644 (file)
@@ -73,7 +73,7 @@ export_extensions = "|".join(item_view.list_export_extensions())
 htdocs = os.path.dirname(__file__) + '/htdocs'
 
 urlpatterns = patterns('',
-    url(r'^$', general_view.index, name="telemeta-home"),
+    url(r'^$', general_view.home, name="telemeta-home"),
 
     # items
     url(r'^archives/items/$', 'django.views.generic.list_detail.object_list',
@@ -295,7 +295,7 @@ urlpatterns = patterns('',
     # Desk
     url(r'^desk/lists/$', general_view.lists, name="telemeta-desk-lists"),
     url(r'^desk/profile/(?P<username>[A-Za-z0-9._-]+)/$', profile_view.profile_detail, name="telemeta-desk-profile"),
-    url(r'^desk/home/$', general_view.index, name="telemeta-desk-home"),
+    url(r'^desk/home/$', general_view.home, name="telemeta-desk-home"),
 
     # Profiles
     url(r'^users/(?P<username>[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail, name="telemeta-profile-detail"),
index 61cf44dc228712e115bba52b66507a24d9625768..20d4d641890b3ff9df8def57bebb14d6a34af787 100644 (file)
@@ -216,7 +216,7 @@ def auto_code(resources, base_code):
 class GeneralView(object):
     """Provide general web UI methods"""
 
-    def index(self, request):
+    def home(self, request):
         """Render the index page"""
 
         template = loader.get_template('telemeta/home.html')
@@ -419,8 +419,9 @@ class CollectionView(object):
 
         related_media = MediaCollectionRelated.objects.filter(collection=collection)
         check_related_media(related_media)
+        parents = MediaCorpus.objects.filter(children=collection)
 
-        return render(request, template, {'collection': collection, 'playlists': playlists, 'public_access': public_access, 'items': items, 'related_media': related_media})
+        return render(request, template, {'collection': collection, 'playlists': playlists, 'public_access': public_access, 'items': items, 'related_media': related_media, 'parents': parents })
 
     @method_decorator(permission_required('telemeta.change_mediacollection'))
     def collection_edit(self, request, public_id, template='telemeta/collection_edit.html'):
@@ -1414,13 +1415,15 @@ class ResourceView(object):
                 {'model': MediaCorpus,
                 'form' : MediaCorpusForm,
                 'related': MediaCorpusRelated,
-                'related_form': MediaCorpusRelatedForm
+                'related_form': MediaCorpusRelatedForm,
+                'parent': MediaFonds,
                 },
             'fonds':
                 {'model': MediaFonds,
                 'form' : MediaFondsForm,
                 'related': MediaFondsRelated,
-                'related_form': MediaFondsRelatedForm
+                'related_form': MediaFondsRelatedForm,
+                'parent': None,
                 }
             }
 
@@ -1429,6 +1432,7 @@ class ResourceView(object):
         self.form = self.types[type]['form']
         self.related = self.types[type]['related']
         self.related_form = self.types[type]['related_form']
+        self.parent = self.types[type]['parent']
         self.type = type
 
     def detail(self, request, type, public_id, template='telemeta/resource_detail.html'):
@@ -1438,8 +1442,12 @@ class ResourceView(object):
         children = children.order_by('code')
         related_media = self.related.objects.filter(resource=resource)
         check_related_media(related_media)
+        if self.parent:
+            parents = self.parent.objects.filter(children=resource)
+        else:
+            parents = []
 
-        return render(request, template, {'resource': resource, 'type': type, 'children': children, 'related_media': related_media})
+        return render(request, template, {'resource': resource, 'type': type, 'children': children, 'related_media': related_media, 'parents': parents })
 
     @jsonrpc_method('telemeta.change_fonds')
     @jsonrpc_method('telemeta.change_corpus')