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__
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',
# 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"),
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')
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'):
{'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,
}
}
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'):
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')