From fe378212cafdcb48215f24e4de1b212a686e98a8 Mon Sep 17 00:00:00 2001 From: yomguy Date: Wed, 22 Jun 2011 14:57:07 +0200 Subject: [PATCH] separate all views, fix urls, fix js trans --- telemeta/htdocs/js/locale.js | 32 +- telemeta/locale/de/LC_MESSAGES/django.mo | Bin 420 -> 420 bytes telemeta/locale/de/LC_MESSAGES/django.po | 15 +- telemeta/locale/de/LC_MESSAGES/djangojs.mo | Bin 420 -> 420 bytes telemeta/locale/de/LC_MESSAGES/djangojs.po | 22 +- telemeta/locale/fr/LC_MESSAGES/django.mo | Bin 12944 -> 12944 bytes telemeta/locale/fr/LC_MESSAGES/django.po | 16 +- telemeta/locale/fr/LC_MESSAGES/djangojs.mo | Bin 1158 -> 1166 bytes telemeta/locale/fr/LC_MESSAGES/djangojs.po | 24 +- telemeta/urls.py | 123 +++-- telemeta/web/base.py | 580 ++++++++++----------- 11 files changed, 398 insertions(+), 414 deletions(-) diff --git a/telemeta/htdocs/js/locale.js b/telemeta/htdocs/js/locale.js index 3e61bfc1..f22fa83c 100644 --- a/telemeta/htdocs/js/locale.js +++ b/telemeta/htdocs/js/locale.js @@ -1,3 +1,20 @@ +var localeStrings = { + 'title': gettext('title'), + 'description': gettext('description'), + 'delete the marker permanently?': gettext('delete the marker permanently?'), + 'marker added to the selected playlist': gettext('marker added to the selected playlist'), + 'item added to the selected playlist': gettext('item added to the selected playlist'), + 'collection added to the selected playlist': gettext('collection added to the selected playlist'), + 'there are unsaved or modified markers': gettext('there are unsaved or modified markers'), + 'If you exit the page you will loose your changes' : gettext('If you exit the page you will loose your changes'), + 'author' : gettext('author') +}; + +function gettrans(str){ + var loc = localeStrings; //instantiate once for faster lookup + return str in loc ? loc[str] : str; +} + /* * Copyright (C) 2007-2011 Parisson * Copyright (c) 2011 Riccardo Zaccarelli @@ -24,19 +41,4 @@ * Class for managing translations in telemeta. */ -var localeStrings = { - 'title': gettext('title'), - 'description': gettext('description'), - 'delete the marker permanently?': gettext('delete the marker permanently?'), - 'marker added to the selected playlist': gettext('marker added to the selected playlist'), - 'item added to the selected playlist': gettext('item added to the selected playlist'), - 'collection added to the selected playlist': gettext('collection added to the selected playlist'), - 'there are unsaved or modified markers': gettext('there are unsaved or modified markers'), - 'If you exit the page you will loose your changes' : gettext('If you exit the page you will loose your changes'), - 'author' : gettext('author') -}; -function gettrans(str){ - var loc = localeStrings; //instantiate once for faster lookup - return str in loc ? loc[str] : str; -} diff --git a/telemeta/locale/de/LC_MESSAGES/django.mo b/telemeta/locale/de/LC_MESSAGES/django.mo index 636955b68a8f4a80f8a4d085385ef0ce380cdc8e..e3f75cd76f4e68b395f8b10af959ab81992f5ea3 100644 GIT binary patch delta 15 WcmZ3&yo7neWEK-E6O)b8c^LsHbp)aS delta 15 WcmZ3&yo7neWELYUWAlyEc^LsHZUmwL diff --git a/telemeta/locale/de/LC_MESSAGES/django.po b/telemeta/locale/de/LC_MESSAGES/django.po index 0fabf952..cd9879c0 100644 --- a/telemeta/locale/de/LC_MESSAGES/django.po +++ b/telemeta/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-22 12:37+0200\n" +"POT-Creation-Date: 2011-06-22 14:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -687,7 +687,7 @@ msgid "Save" msgstr "" #: templates/telemeta_default/collection_detail.html:5 -#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:137 +#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:324 msgid "Collection" msgstr "" @@ -967,7 +967,7 @@ msgstr "" #: templates/telemeta_default/mediaitem_add.html:5 #: templates/telemeta_default/mediaitem_copy.html:5 -#: templates/telemeta_default/mediaitem_detail.html:5 web/base.py:245 +#: templates/telemeta_default/mediaitem_detail.html:5 web/base.py:453 msgid "Item" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "" msgid "User Profile" msgstr "" -#: templates/telemeta_default/profile_detail.html:8 web/base.py:1129 +#: templates/telemeta_default/profile_detail.html:8 web/base.py:1154 msgid "User profile" msgstr "" @@ -1151,8 +1151,7 @@ msgstr "" msgid "No item" msgstr "" -#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1098 -#: web/base.py:1209 +#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1185 msgid "Last changes" msgstr "" @@ -1326,11 +1325,11 @@ msgid_plural "%(count)d collections" msgstr[0] "" msgstr[1] "" -#: web/base.py:136 web/base.py:244 web/base.py:496 web/base.py:1128 +#: web/base.py:323 web/base.py:452 web/base.py:683 web/base.py:1153 msgid "Access not allowed" msgstr "" -#: web/base.py:138 web/base.py:246 web/base.py:498 web/base.py:1130 +#: web/base.py:325 web/base.py:454 web/base.py:685 web/base.py:1155 msgid "" "Please login or contact the website administator to get a private access." msgstr "" diff --git a/telemeta/locale/de/LC_MESSAGES/djangojs.mo b/telemeta/locale/de/LC_MESSAGES/djangojs.mo index 3bdb7f26f1e14bbfea9f466b6152b2ff3f82e3dc..e3f75cd76f4e68b395f8b10af959ab81992f5ea3 100644 GIT binary patch delta 21 ccmZ3&yo7l|FPE9Fk&%L-iIs`T#_7C_07K^mx&QzG delta 21 ccmZ3&yo7l|FPEvVk)?u>p_P%@#_7C_07Ml9z5oCK diff --git a/telemeta/locale/de/LC_MESSAGES/djangojs.po b/telemeta/locale/de/LC_MESSAGES/djangojs.po index 2b168120..6dd71416 100644 --- a/telemeta/locale/de/LC_MESSAGES/djangojs.po +++ b/telemeta/locale/de/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-05-29 21:26+0200\n" +"POT-Creation-Date: 2011-06-22 14:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,38 +18,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: htdocs/js/locale.js:28 +#: htdocs/js/locale.js:2 msgid "title" msgstr "" -#: htdocs/js/locale.js:29 +#: htdocs/js/locale.js:3 msgid "description" msgstr "" -#: htdocs/js/locale.js:30 +#: htdocs/js/locale.js:4 msgid "delete the marker permanently?" msgstr "" -#: htdocs/js/locale.js:31 +#: htdocs/js/locale.js:5 msgid "marker added to the selected playlist" msgstr "" -#: htdocs/js/locale.js:32 +#: htdocs/js/locale.js:6 msgid "item added to the selected playlist" msgstr "" -#: htdocs/js/locale.js:33 +#: htdocs/js/locale.js:7 msgid "collection added to the selected playlist" msgstr "" -#: htdocs/js/locale.js:34 -msgid "there is at least one unsaved marker" +#: htdocs/js/locale.js:8 +msgid "there are unsaved or modified markers" msgstr "" -#: htdocs/js/locale.js:35 +#: htdocs/js/locale.js:9 msgid "If you exit the page you will loose your changes" msgstr "" -#: htdocs/js/locale.js:36 +#: htdocs/js/locale.js:10 msgid "author" msgstr "" diff --git a/telemeta/locale/fr/LC_MESSAGES/django.mo b/telemeta/locale/fr/LC_MESSAGES/django.mo index fb39a1c54fd4110fff8649f069e6a82048da864c..26d53884562f5efc96474e1c5f7617dbeb7decea 100644 GIT binary patch delta 17 ZcmbP`Iw5t#ZbcRoD-)B=`xP$=002M+2E_mX delta 17 ZcmbP`Iw5t#ZbcR&D`WG``xP$=002M#2E_mX diff --git a/telemeta/locale/fr/LC_MESSAGES/django.po b/telemeta/locale/fr/LC_MESSAGES/django.po index f370c200..9152948d 100644 --- a/telemeta/locale/fr/LC_MESSAGES/django.po +++ b/telemeta/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-06-22 12:37+0200\n" +"POT-Creation-Date: 2011-06-22 14:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Olivier Guilyardi \n" "Language-Team: LANGUAGE \n" @@ -695,7 +695,7 @@ msgid "Save" msgstr "Enregistrer" #: templates/telemeta_default/collection_detail.html:5 -#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:137 +#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:324 msgid "Collection" msgstr "Collection" @@ -976,7 +976,7 @@ msgstr "Mot de passe oublié" #: templates/telemeta_default/mediaitem_add.html:5 #: templates/telemeta_default/mediaitem_copy.html:5 -#: templates/telemeta_default/mediaitem_detail.html:5 web/base.py:245 +#: templates/telemeta_default/mediaitem_detail.html:5 web/base.py:453 msgid "Item" msgstr "Item" @@ -1064,7 +1064,7 @@ msgstr "Formation" msgid "User Profile" msgstr "Profil utilisateur" -#: templates/telemeta_default/profile_detail.html:8 web/base.py:1129 +#: templates/telemeta_default/profile_detail.html:8 web/base.py:1154 msgid "User profile" msgstr "Profil utilisateur" @@ -1160,8 +1160,7 @@ msgstr "Etat/Continent" msgid "No item" msgstr "Aucun item" -#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1098 -#: web/base.py:1209 +#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1185 msgid "Last changes" msgstr "Dernières modifications" @@ -1341,18 +1340,17 @@ msgid_plural "%(count)d collections" msgstr[0] "%(count)d collection" msgstr[1] "%(count)d collections" -#: web/base.py:136 web/base.py:244 web/base.py:496 web/base.py:1128 +#: web/base.py:323 web/base.py:452 web/base.py:683 web/base.py:1153 msgid "Access not allowed" msgstr "Accès non autorisé" -#: web/base.py:138 web/base.py:246 web/base.py:498 web/base.py:1130 +#: web/base.py:325 web/base.py:454 web/base.py:685 web/base.py:1155 msgid "" "Please login or contact the website administator to get a private access." msgstr "" "Connectez-vous s'il vous plaît ou bien contactez l'administrateur du site " "pour obtenir un accès privé." - #~ msgid "username" #~ msgstr "nom d'utilisateur" diff --git a/telemeta/locale/fr/LC_MESSAGES/djangojs.mo b/telemeta/locale/fr/LC_MESSAGES/djangojs.mo index 8fbb815560e7fd64abb3803c139db5845098bc8e..75dca43e8be0bd7256022fa14ef6752e874c1c68 100644 GIT binary patch delta 240 zcmXBMI|{-;5C-5$e35tv7eoXhg-a0h78X|8EM%1+$>MG{t({nj;t{O0^$0dzz{)F# zjkbb+bYS@A!OY6rc-zUcMMPJJr~;obL%xxH^l^!(3JE`#SW+B5$*1;hR~AP)QDV0Olg*=D4xcs6QSo)oBhKX`@Mj3)(r3p3wlloibu0r@Rt+A@%tkjH7Nl?sME3#J$@v i6J?sh@hVM}!K@!!JLxp5RIw3mBWFTS?^m*k)slY6$1eZ? diff --git a/telemeta/locale/fr/LC_MESSAGES/djangojs.po b/telemeta/locale/fr/LC_MESSAGES/djangojs.po index 052fb472..e2faab1b 100644 --- a/telemeta/locale/fr/LC_MESSAGES/djangojs.po +++ b/telemeta/locale/fr/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-05-29 21:26+0200\n" +"POT-Creation-Date: 2011-06-22 14:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Guillaume Pellerin \n" "Language-Team: LANGUAGE \n" @@ -18,38 +18,38 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1\n" -#: htdocs/js/locale.js:28 +#: htdocs/js/locale.js:2 msgid "title" msgstr "titre" -#: htdocs/js/locale.js:29 +#: htdocs/js/locale.js:3 msgid "description" msgstr "description" -#: htdocs/js/locale.js:30 +#: htdocs/js/locale.js:4 msgid "delete the marker permanently?" msgstr "supprimer le marqueur définitivement ?" -#: htdocs/js/locale.js:31 +#: htdocs/js/locale.js:5 msgid "marker added to the selected playlist" msgstr "marqueur ajouté à la liste de lecture" -#: htdocs/js/locale.js:32 +#: htdocs/js/locale.js:6 msgid "item added to the selected playlist" msgstr "item ajouté à la liste de lecture" -#: htdocs/js/locale.js:33 +#: htdocs/js/locale.js:7 msgid "collection added to the selected playlist" msgstr "collection ajoutée à la liste de lecture" -#: htdocs/js/locale.js:34 -msgid "there is at least one unsaved marker" -msgstr "il y a au moins un marqueur non sauvegardé" +#: htdocs/js/locale.js:8 +msgid "there are unsaved or modified markers" +msgstr "il y a des marqueurs modifiés ou non sauvegardés" -#: htdocs/js/locale.js:35 +#: htdocs/js/locale.js:9 msgid "If you exit the page you will loose your changes" msgstr "Si vous sortez de la page, vous perdrez vos modifications" -#: htdocs/js/locale.js:36 +#: htdocs/js/locale.js:10 msgid "author" msgstr "auteur" diff --git a/telemeta/urls.py b/telemeta/urls.py index f2b9b833..70ee6af7 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -36,7 +36,9 @@ from django.conf.urls.defaults import * from telemeta.models import MediaItem, MediaCollection, MediaItemMarker -from telemeta.web.base import WebView, LastestRevisionsFeed +from telemeta.web.base import GeneralView, AdminView, CollectionView, ItemView, \ + InstrumentView, PlaylistView, ProfileView, GeoView, \ + LastestRevisionsFeed from jsonrpc import jsonrpc_site import os.path import telemeta.config @@ -44,7 +46,14 @@ import telemeta.config telemeta.config.check() # initialization -web_view = WebView() +general_view = GeneralView() +admin_view = AdminView() +collection_view = CollectionView() +item_view = ItemView() +instrument_view = InstrumentView() +playlist_view = PlaylistView() +profile_view = ProfileView() +geo_view = GeoView() # query sets for Django generic views all_items = { 'queryset': MediaItem.objects.enriched().order_by('code', 'old_code') } @@ -56,55 +65,55 @@ all_collections_published = { 'queryset': MediaCollection.objects.filter(code__c # ID's regular expressions -export_extensions = "|".join(web_view.list_export_extensions()) +export_extensions = "|".join(item_view.list_export_extensions()) htdocs = os.path.dirname(__file__) + '/htdocs' urlpatterns = patterns('', - url(r'^$', web_view.index, name="telemeta-home"), + url(r'^$', general_view.index, name="telemeta-home"), # items url(r'^items/$', 'django.views.generic.list_detail.object_list', dict(all_items, paginate_by=20, template_name="telemeta/mediaitem_list.html"), name="telemeta-items"), - url(r'^items/(?P[A-Za-z0-9._-]+)/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._-]+)/$', item_view.item_detail, name="telemeta-item-detail"), - url(r'^items/(?P[A-Za-z0-9._-]+)/dc/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._-]+)/dc/$', item_view.item_detail, {'template': 'telemeta/mediaitem_detail_dc.html'}, name="telemeta-item-dublincore"), - url(r'^items/(?P[A-Za-z0-9._-]+)/dc/xml/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._-]+)/dc/xml/$', item_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"), url(r'^items/download/(?P[A-Za-z0-9._-]+)\.(?P' + export_extensions + ')$', - web_view.item_export, + item_view.item_export, name="telemeta-item-export"), url(r'^items/(?P[A-Za-z0-9._-]+)/visualize/(?P[0-9a-z_]+)/(?P[0-9A-Z]+)x(?P[0-9A-Z]+)/$', - web_view.item_visualize, + item_view.item_visualize, name="telemeta-item-visualize"), url(r'^items/(?P[A-Za-z0-9._-]+)/analyze/xml/$', - web_view.item_analyze_xml, + item_view.item_analyze_xml, name="telemeta-item-analyze-xml"), url(r'^items/(?P[A-Za-z0-9._-]+)/item_xspf.xml$', - web_view.item_playlist, + item_view.item_playlist, dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-item-xspf"), - url(r'^items/(?P[A-Za-z0-9._-]+)/edit/$', web_view.item_edit, + url(r'^items/(?P[A-Za-z0-9._-]+)/edit/$', item_view.item_edit, dict(template='telemeta/mediaitem_edit.html'), name="telemeta-item-edit"), - url(r'^items/(?P[A-Za-z0-9._-]+)/copy/$', web_view.item_copy, + url(r'^items/(?P[A-Za-z0-9._-]+)/copy/$', item_view.item_copy, dict(template='telemeta/mediaitem_copy.html'), name="telemeta-item-copy"), - url(r'^item/add/$', web_view.item_add, + url(r'^item/add/$', item_view.item_add, dict(template='telemeta/mediaitem_add.html'), name="telemeta-item-add"), - url(r'^items/(?P[A-Za-z0-9._-]+)/player/(?P[0-9]+)x(?P[0-9]+)/$', web_view.item_detail, + url(r'^items/(?P[A-Za-z0-9._-]+)/player/(?P[0-9]+)x(?P[0-9]+)/$', item_view.item_detail, dict(template='telemeta/mediaitem_player.html'), name="telemeta-item-player"), - url(r'^items/(?P[A-Za-z0-9._-]+)/performances/$', web_view.item_performances_edit, + url(r'^items/(?P[A-Za-z0-9._-]+)/performances/$', item_view.item_performances_edit, dict(template='telemeta/mediaitem_performances_edit.html'), name="telemeta-item-performances_edit"), - url(r'^items/(?P[A-Za-z0-9._-]+)/keywords/$', web_view.item_keywords_edit, + url(r'^items/(?P[A-Za-z0-9._-]+)/keywords/$', item_view.item_keywords_edit, dict(template='telemeta/mediaitem_keywords_edit.html'), name="telemeta-item-keywords_edit"), - url(r'^items/(?P[A-Za-z0-9._-]+)/delete/$', web_view.item_delete, name="telemeta-item-delete"), + url(r'^items/(?P[A-Za-z0-9._-]+)/delete/$', item_view.item_delete, name="telemeta-item-delete"), # Markers - url(r'^markers/(?P[A-Za-z0-9]+)/$', web_view.item_detail, name="telemeta-item-detail-marker"), + url(r'^markers/(?P[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"), # collections url(r'^collections/$', 'django.views.generic.list_detail.object_list', @@ -116,92 +125,92 @@ urlpatterns = patterns('', url(r'^collections/?page=(?P[0-9]+)$', 'django.views.generic.list_detail.object_list', dict(all_collections, paginate_by=20)), - url(r'^collections/(?P[A-Za-z0-9._-]+)/$', web_view.collection_detail, + url(r'^collections/(?P[A-Za-z0-9._-]+)/$', collection_view.collection_detail, dict(template="telemeta/collection_detail.html"), name="telemeta-collection-detail"), - url(r'^collections/(?P[A-Za-z0-9._-]+)/dc/$', web_view.collection_detail, + url(r'^collections/(?P[A-Za-z0-9._-]+)/dc/$', collection_view.collection_detail, dict(template="telemeta/collection_detail_dc.html"), name="telemeta-collection-dublincore"), url(r'^collections/(?P[A-Za-z0-9._-]+)/collection_xspf.xml$', - web_view.collection_playlist, + collection_view.collection_playlist, dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-collection-xspf"), url(r'^collections/(?P[A-Za-z0-9._-]+)/collection.m3u$', - web_view.collection_playlist, + collection_view.collection_playlist, dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"), name="telemeta-collection-m3u"), - url(r'^collections/(?P[A-Za-z0-9._-]+)/edit/$', web_view.collection_edit, + url(r'^collections/(?P[A-Za-z0-9._-]+)/edit/$', collection_view.collection_edit, dict(template='telemeta/collection_edit.html'), name="telemeta-collection-edit"), - url(r'^collections/(?P[A-Za-z0-9._-]+)/copy/$', web_view.collection_copy, + url(r'^collections/(?P[A-Za-z0-9._-]+)/copy/$', collection_view.collection_copy, dict(template='telemeta/collection_edit.html'), name="telemeta-collection-copy"), - url(r'^collection/add/$', web_view.collection_add, + url(r'^collection/add/$', collection_view.collection_add, dict(template='telemeta/collection_add.html'), name="telemeta-collection-add"), - url(r'^collection/(?P[A-Za-z0-9._-]+)/add_item/$', web_view.item_add, + url(r'^collection/(?P[A-Za-z0-9._-]+)/add_item/$', item_view.item_add, dict(template='telemeta/mediaitem_add.html'), name="telemeta-collection-additem"), # search - url(r'^search/$', web_view.search, name="telemeta-search"), - url(r'^search/collections/$', web_view.search, {'type': 'collections'}, + url(r'^search/$', general_view.search, name="telemeta-search"), + url(r'^search/collections/$', general_view.search, {'type': 'collections'}, name="telemeta-search-collections"), - url(r'^search/items/$', web_view.search, {'type': 'items'}, + url(r'^search/items/$', general_view.search, {'type': 'items'}, name="telemeta-search-items"), - url(r'^search/criteria/$', web_view.edit_search, name="telemeta-search-criteria"), - url(r'^complete_location/$', web_view.complete_location, name="telemeta-complete-location"), + url(r'^search/criteria/$', general_view.edit_search, name="telemeta-search-criteria"), + url(r'^complete_location/$', general_view.complete_location, name="telemeta-complete-location"), # administration - url(r'^admin/$', web_view.admin_index, name="telemeta-admin"), - url(r'^admin/general/$', web_view.admin_general, name="telemeta-admin-general"), - url(r'^admin/enumerations/$', web_view.admin_enumerations, name="telemeta-admin-enumerations"), - url(r'^admin/users/$', web_view.admin_users, name="telemeta-admin-users"), + url(r'^admin/$', admin_view.admin_index, name="telemeta-admin"), + url(r'^admin/general/$', admin_view.admin_general, name="telemeta-admin-general"), + url(r'^admin/enumerations/$', admin_view.admin_enumerations, name="telemeta-admin-enumerations"), + url(r'^admin/users/$', admin_view.admin_users, name="telemeta-admin-users"), # instruments administration url(r'^admin/instruments/$', - web_view.edit_instrument , + instrument_view.edit_instrument , name="telemeta-instrument-edit"), url(r'^admin/instruments/add/$', - web_view.add_to_instrument, + instrument_view.add_to_instrument, name="telemeta-instrument-add"), url(r'^admin/instruments/update/$', - web_view.update_instrument, + instrument_view.update_instrument, name="telemeta-instrument-update"), url(r'^admin/instruments/' + r'(?P[0-9]+)/$', - web_view.edit_instrument_value, + instrument_view.edit_instrument_value, name="telemeta-instrument-record-edit"), url(r'^admin/instruments/' + r'(?P[0-9]+)/update/$', - web_view.update_instrument_value, + instrument_view.update_instrument_value, name="telemeta-instrument-record-update"), # enumerations administration url(r'^admin/enumerations/(?P[0-9a-z]+)/$', - web_view.edit_enumeration , + admin_view.edit_enumeration , name="telemeta-enumeration-edit"), url(r'^admin/enumerations/(?P[0-9a-z]+)/add/$', - web_view.add_to_enumeration, + admin_view.add_to_enumeration, name="telemeta-enumeration-add"), url(r'^admin/enumerations/(?P[0-9a-z]+)/update/$', - web_view.update_enumeration, + admin_view.update_enumeration, name="telemeta-enumeration-update"), url(r'^admin/enumerations/(?P[0-9a-z]+)/' + r'(?P[0-9]+)/$', - web_view.edit_enumeration_value, + admin_view.edit_enumeration_value, name="telemeta-enumeration-record-edit"), url(r'^admin/enumerations/(?P[0-9a-z]+)/' + r'(?P[0-9]+)/update/$', - web_view.update_enumeration_value, + admin_view.update_enumeration_value, name="telemeta-enumeration-record-update"), # Geographic browsing - url(r'^geo/$', web_view.list_continents, name="telemeta-geo-continents"), - url(r'^geo/(?P[a-z_]+)/$', web_view.list_countries, + url(r'^geo/$', geo_view.list_continents, name="telemeta-geo-continents"), + url(r'^geo/(?P[a-z_]+)/$', geo_view.list_countries, name="telemeta-geo-countries"), url(r'^geo/collections/(?P[a-z_]+)/(?P[a-z_]+)/$', - web_view.list_country_collections, + geo_view.list_country_collections, name="telemeta-geo-country-collections"), url(r'^geo/items/(?P[a-z_]+)/(?P[a-z_]+)/$', - web_view.list_country_items, + geo_view.list_country_items, name="telemeta-geo-country-items"), url(r'^geo/country_info/(?P[0-9a-z]+)/$', - web_view.country_info, name="telemeta-country-info"), + geo_view.country_info, name="telemeta-country-info"), # CSS+Images (FIXME: for developement only) url(r'^css/(?P.*)$', 'django.views.static.serve', @@ -221,19 +230,19 @@ urlpatterns = patterns('', name="telemeta-timeside"), # Flat pages - url(r'^pages/(?P.*)$', web_view.render_flatpage, name="telemeta-flatpage"), + url(r'^pages/(?P.*)$', general_view.render_flatpage, name="telemeta-flatpage"), # OAI-PMH Data Provider - url(r'^oai/.*$', web_view.handle_oai_request, name="telemeta-oai"), + url(r'^oai/.*$', general_view.handle_oai_request, name="telemeta-oai"), # Authentication url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'}, name="telemeta-login"), - url(r'^logout/$', web_view.logout, name="telemeta-logout"), + url(r'^logout/$', general_view.logout, name="telemeta-logout"), # Profile - url(r'^accounts/(?P[A-Za-z0-9._-]+)/profile/$', web_view.profile_detail, name="telemeta-profile-detail"), - url(r'^accounts/(?P[A-Za-z0-9._-]+)/profile/edit/$', web_view.profile_edit, name="telemeta-profile-edit"), + url(r'^accounts/(?P[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail, name="telemeta-profile-detail"), + url(r'^accounts/(?P[A-Za-z0-9._-]+)/profile/edit/$', profile_view.profile_edit, name="telemeta-profile-edit"), # Registration url(r'^accounts/password_change/$', 'django.contrib.auth.views.password_change', {'template_name': 'telemeta/registration/password_change_form.html'}, name="telemeta-password-change"), @@ -251,7 +260,7 @@ urlpatterns = patterns('', # url(r'json/browse/', 'jsonrpc.views.browse', name="jsonrpc_browser"), # Playlists - url(r'^playlists/(?P[a-zA-Z0-9]+)/(?P[a-zA-Z0-9]+)/csv/$', web_view.playlist_csv_export, name="telemeta-playlist-csv-export"), + url(r'^playlists/(?P[a-zA-Z0-9]+)/(?P[a-zA-Z0-9]+)/csv/$', playlist_view.playlist_csv_export, name="telemeta-playlist-csv-export"), # RSS feeds url(r'^rss/$', LastestRevisionsFeed(), name="telemeta-rss"), diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 8bf51032..ab2496bd 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -99,16 +99,76 @@ def stream_from_file(__file): break yield __chunk - -class WebView(object): - """Provide web UI methods""" +def get_public_access(access, year_from=None, year_to=None): + # Rolling publishing date : public access is given when time between recorded year + # and current year is over the settings value PUBLIC_ACCESS_PERIOD + if year_from and not year_from == 0: + year = year_from + elif year_to and not year_to == 0: + year = year_to + else: + year = 0 + if access == 'full': + public_access = True + else: + public_access = False + if year and not year == 'None': + year_now = datetime.datetime.now().strftime("%Y") + if int(year_now) - int(year) >= settings.TELEMETA_PUBLIC_ACCESS_PERIOD: + public_access = True + else: + public_access = False + return public_access - graphers = timeside.core.processors(timeside.api.IGrapher) - decoders = timeside.core.processors(timeside.api.IDecoder) - encoders = timeside.core.processors(timeside.api.IEncoder) - analyzers = timeside.core.processors(timeside.api.IAnalyzer) - cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR) - cache_export = TelemetaCache(settings.TELEMETA_EXPORT_CACHE_DIR) +def get_revisions(nb): + last_revisions = Revision.objects.order_by('-time')[0:nb] + revisions = [] + for revision in last_revisions: + if revision.element_type == 'item': + try: + element = MediaItem.objects.get(pk=revision.element_id) + except: + element = None + if revision.element_type == 'collection': + try: + element = MediaCollection.objects.get(pk=revision.element_id) + except: + element = None + if revision.element_type == 'marker': + try: + element = MediaItemMarker.objects.get(pk=revision.element_id) + except: + element = None + if not element == None: + revisions.append({'revision': revision, 'element': element}) + return revisions + +def get_playlists(request, user=None): + if not user: + user = request.user + playlists = [] + if user.is_authenticated(): + user_playlists = Playlist.objects.filter(author=user) + for playlist in user_playlists: + playlist_resources = PlaylistResource.objects.filter(playlist=playlist) + resources = [] + for resource in playlist_resources: + try: + if resource.resource_type == 'item': + element = MediaItem.objects.get(id=resource.resource_id) + if resource.resource_type == 'collection': + element = MediaCollection.objects.get(id=resource.resource_id) + if resource.resource_type == 'marker': + element = MediaItemMarker.objects.get(id=resource.resource_id) + except: + element = None + resources.append({'element': element, 'type': resource.resource_type, 'public_id': resource.public_id }) + playlists.append({'playlist': playlist, 'resources': resources}) + return playlists + + +class GeneralView(object): + """Provide general web UI methods""" def index(self, request): """Render the homepage""" @@ -123,12 +183,139 @@ class WebView(object): return HttpResponse(template.render(context)) else: template='telemeta/home.html' - playlists = self.get_playlists(request) + playlists = get_playlists(request) revisions = get_revisions(15) searches = Search.objects.filter(username=request.user) return render(request, template, {'playlists': playlists, 'searches': searches, 'revisions': revisions,}) + + def edit_search(self, request, criteria=None): + year_min, year_max = MediaCollection.objects.all().recording_year_range() + rec_years = year_min and year_max and range(year_min, year_max + 1) or [] + year_min, year_max = MediaCollection.objects.all().publishing_year_range() + pub_years = year_min and year_max and range(year_min, year_max + 1) or [] + return render(request, 'telemeta/search_criteria.html', { + 'rec_years': rec_years, + 'pub_years': pub_years, + 'ethnic_groups': MediaItem.objects.all().ethnic_groups(), + 'criteria': criteria + }) + + def handle_oai_request(self, request): + host = request.META['HTTP_HOST'] + url = 'http://' + host + request.path + datasource = TelemetaOAIDataSource() + admin = settings.ADMINS[0][1] + provider = oai.DataProvider(datasource, host, url, admin) + args = request.GET.copy() + args.update(request.POST) + return HttpResponse(provider.handle(args), mimetype='text/xml') + def render_flatpage(self, request, path): + try: + content = pages.get_page_content(request, path) + except pages.MalformedPagePath: + return redirect(request.path + '/') + + if isinstance(content, pages.PageAttachment): + return HttpResponse(content, content.mimetype()) + else: + return render(request, 'telemeta/flatpage.html', {'page_content': content }) + + def logout(self, request): + auth.logout(request) + return redirect('telemeta-home') + + def search(self, request, type = None): + """Perform a search through collections and items metadata""" + collections = MediaCollection.objects.enriched() + items = MediaItem.objects.enriched() + input = request.REQUEST + criteria = {} + + switch = { + 'pattern': lambda value: ( + collections.quick_search(value), + items.quick_search(value)), + 'title': lambda value: ( + collections.word_search('title', value), + items.by_title(value)), + 'location': lambda value: ( + collections.by_location(Location.objects.get(name=value)), + items.by_location(Location.objects.get(name=value))), + 'continent': lambda value: ( + collections.by_continent(value), + items.filter(continent = value)), + 'ethnic_group': lambda value: ( + collections.by_ethnic_group(value), + items.filter(ethnic_group = value), + EthnicGroup.objects.get(pk=value)), + 'creator': lambda value: ( + collections.word_search('creator', value), + items.word_search('collection__creator', value)), + 'collector': lambda value: ( + collections.by_fuzzy_collector(value), + items.by_fuzzy_collector(value)), + 'rec_year_from': lambda value: ( + collections.by_recording_year(int(value), int(input.get('rec_year_to', value))), + items.by_recording_date(datetime.date(int(value), 1, 1), + datetime.date(int(input.get('rec_year_to', value)), 12, 31))), + 'rec_year_to': lambda value: (collections, items), + 'pub_year_from': lambda value: ( + collections.by_publish_year(int(value), int(input.get('pub_year_to', value))), + items.by_publish_year(int(value), int(input.get('pub_year_to', value)))), + 'pub_year_to': lambda value: (collections, items), + } + + for key, value in input.items(): + func = switch.get(key) + if func and value and value != "0": + try: + res = func(value) + if len(res) > 2: + collections, items, value = res + else: + collections, items = res + except ObjectDoesNotExist: + collections = collections.none() + items = items.none() + + criteria[key] = value + + if type is None: + if collections.count(): + type = 'collections' + else: + type = 'items' + + if type == 'items': + objects = items + else: + objects = collections + + return list_detail.object_list(request, objects, + template_name='telemeta/search_results.html', paginate_by=20, + extra_context={'criteria': criteria, 'collections_num': collections.count(), + 'items_num': items.count(), 'type' : type}) + + def complete_location(self, request, with_items=True): + input = request.REQUEST + + token = input['q'] + limit = int(input['limit']) + if with_items: + locations = MediaItem.objects.all().locations() + else: + locations = Location.objects.all() + + locations = locations.filter(name__istartswith=token).order_by('name')[:limit] + data = [unicode(l) + " (%d items)" % l.items().count() for l in locations] + + return HttpResponse("\n".join(data)) + +class CollectionView(object): + """Provide Collections web UI methods""" + def collection_detail(self, request, public_id, template='telemeta/collection_detail.html'): collection = MediaCollection.objects.get(public_id=public_id) @@ -139,9 +326,9 @@ class WebView(object): messages.error(request, title) return render(request, 'telemeta/messages.html', {'description' : description}) - public_access = self.get_public_access(collection.public_access, collection.recorded_from_year, + public_access = get_public_access(collection.public_access, collection.recorded_from_year, collection.recorded_to_year) - playlists = self.get_playlists(request) + playlists = get_playlists(request) return render(request, template, {'collection': collection, 'playlists': playlists, 'public_access': public_access}) @method_decorator(permission_required('telemeta.change_mediacollection')) @@ -195,7 +382,28 @@ class WebView(object): form = MediaCollectionForm(instance=collection) return render(request, template, {'collection': collection, "form": form,}) - + + def collection_playlist(self, request, public_id, template, mimetype): + try: + collection = MediaCollection.objects.get(public_id=public_id) + except ObjectDoesNotExist: + raise Http404 + + template = loader.get_template(template) + context = RequestContext(request, {'collection': collection, 'host': request.META['HTTP_HOST']}) + return HttpResponse(template.render(context), mimetype=mimetype) + + +class ItemView(object): + """Provide Collections web UI methods""" + + graphers = timeside.core.processors(timeside.api.IGrapher) + decoders = timeside.core.processors(timeside.api.IDecoder) + encoders = timeside.core.processors(timeside.api.IEncoder) + analyzers = timeside.core.processors(timeside.api.IAnalyzer) + cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR) + cache_export = TelemetaCache(settings.TELEMETA_EXPORT_CACHE_DIR) + def item_previous_next(self, item): # Get previous and next items pks = [] @@ -262,8 +470,8 @@ class WebView(object): previous, next = self.item_previous_next(item) self.item_analyze(item) - playlists = self.get_playlists(request) - public_access = self.get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0], + playlists = get_playlists(request) + public_access = get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0], str(item.recorded_to_date).split('-')[0]) return render(request, template, @@ -273,27 +481,6 @@ class WebView(object): 'previous' : previous, 'next' : next, 'marker': marker_id, 'playlists' : playlists, 'public_access': public_access, 'width': width, 'height': height, }) - - def get_public_access(self, access, year_from=None, year_to=None): - # Rolling publishing date : public access is given when time between recorded year - # and current year is over the settings value PUBLIC_ACCESS_PERIOD - if year_from and not year_from == 0: - year = year_from - elif year_to and not year_to == 0: - year = year_to - else: - year = 0 - if access == 'full': - public_access = True - else: - public_access = False - if year and not year == 'None': - year_now = datetime.datetime.now().strftime("%Y") - if int(year_now) - int(year) >= settings.TELEMETA_PUBLIC_ACCESS_PERIOD: - public_access = True - else: - public_access = False - return public_access @method_decorator(permission_required('telemeta.change_mediaitem')) def item_edit(self, request, public_id, template='telemeta/mediaitem_edit.html'): @@ -488,7 +675,7 @@ class WebView(object): """Export a given media item in the specified format (OGG, FLAC, ...)""" item = MediaItem.objects.get(public_id=public_id) - public_access = self.get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0], + public_access = get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0], str(item.recorded_to_date).split('-')[0]) if (not public_access or not extension in settings.TELEMETA_STREAMING_FORMATS) and \ @@ -554,106 +741,47 @@ class WebView(object): response['Content-Disposition'] = 'attachment' return response - def edit_search(self, request, criteria=None): - year_min, year_max = MediaCollection.objects.all().recording_year_range() - rec_years = year_min and year_max and range(year_min, year_max + 1) or [] - year_min, year_max = MediaCollection.objects.all().publishing_year_range() - pub_years = year_min and year_max and range(year_min, year_max + 1) or [] - return render(request, 'telemeta/search_criteria.html', { - 'rec_years': rec_years, - 'pub_years': pub_years, - 'ethnic_groups': MediaItem.objects.all().ethnic_groups(), - 'criteria': criteria - }) - - def complete_location(self, request, with_items=True): - input = request.REQUEST - - token = input['q'] - limit = int(input['limit']) - if with_items: - locations = MediaItem.objects.all().locations() - else: - locations = Location.objects.all() - - locations = locations.filter(name__istartswith=token).order_by('name')[:limit] - data = [unicode(l) + " (%d items)" % l.items().count() for l in locations] - - return HttpResponse("\n".join(data)) - - def search(self, request, type = None): - """Perform a search through collections and items metadata""" - collections = MediaCollection.objects.enriched() - items = MediaItem.objects.enriched() - input = request.REQUEST - criteria = {} - - switch = { - 'pattern': lambda value: ( - collections.quick_search(value), - items.quick_search(value)), - 'title': lambda value: ( - collections.word_search('title', value), - items.by_title(value)), - 'location': lambda value: ( - collections.by_location(Location.objects.get(name=value)), - items.by_location(Location.objects.get(name=value))), - 'continent': lambda value: ( - collections.by_continent(value), - items.filter(continent = value)), - 'ethnic_group': lambda value: ( - collections.by_ethnic_group(value), - items.filter(ethnic_group = value), - EthnicGroup.objects.get(pk=value)), - 'creator': lambda value: ( - collections.word_search('creator', value), - items.word_search('collection__creator', value)), - 'collector': lambda value: ( - collections.by_fuzzy_collector(value), - items.by_fuzzy_collector(value)), - 'rec_year_from': lambda value: ( - collections.by_recording_year(int(value), int(input.get('rec_year_to', value))), - items.by_recording_date(datetime.date(int(value), 1, 1), - datetime.date(int(input.get('rec_year_to', value)), 12, 31))), - 'rec_year_to': lambda value: (collections, items), - 'pub_year_from': lambda value: ( - collections.by_publish_year(int(value), int(input.get('pub_year_to', value))), - items.by_publish_year(int(value), int(input.get('pub_year_to', value)))), - 'pub_year_to': lambda value: (collections, items), - } - - for key, value in input.items(): - func = switch.get(key) - if func and value and value != "0": - try: - res = func(value) - if len(res) > 2: - collections, items, value = res - else: - collections, items = res - except ObjectDoesNotExist: - collections = collections.none() - items = items.none() - - criteria[key] = value + def item_playlist(self, request, public_id, template, mimetype): + try: + item = MediaItem.objects.get(public_id=public_id) + except ObjectDoesNotExist: + raise Http404 - if type is None: - if collections.count(): - type = 'collections' - else: - type = 'items' + template = loader.get_template(template) + context = RequestContext(request, {'item': item, 'host': request.META['HTTP_HOST']}) + return HttpResponse(template.render(context), mimetype=mimetype) - if type == 'items': - objects = items + @method_decorator(permission_required('telemeta.change_mediaitem')) + def item_performances_edit(self, request, public_id, template): + item = MediaItem.objects.get(public_id=public_id) + PerformanceFormSet = inlineformset_factory(MediaItem, MediaItemPerformance, form=MediaItemPerformanceForm) + if request.method == 'POST': + formset = PerformanceFormSet(data=request.POST, instance=item) + if formset.is_valid(): + formset.save() + return HttpResponseRedirect('/items/'+public_id) else: - objects = collections + formset = PerformanceFormSet(instance=item) + return render(request, template, {'item': item, 'formset': formset,}) + + @method_decorator(permission_required('telemeta.change_mediaitem')) + def item_keywords_edit(self, request, public_id, template): + item = MediaItem.objects.get(public_id=public_id) + FormSet = inlineformset_factory(MediaItem, MediaItemKeyword) + if request.method == 'POST': + formset = FormSet(data=request.POST, instance=item) + if formset.is_valid(): + formset.save() + return HttpResponseRedirect('/items/'+public_id) + else: + formset = FormSet(instance=item) + return render(request, template, {'item': item, 'formset': formset,}) + - return list_detail.object_list(request, objects, - template_name='telemeta/search_results.html', paginate_by=20, - extra_context={'criteria': criteria, 'collections_num': collections.count(), - 'items_num': items.count(), 'type' : type}) - # ADMIN +class AdminView(object): + """Provide Admin web UI methods""" + @method_decorator(permission_required('sites.change_site')) def admin_index(self, request): return render(request, 'telemeta/admin.html', self.__get_admin_context_vars()) @@ -665,12 +793,12 @@ class WebView(object): @method_decorator(permission_required('sites.change_site')) def admin_enumerations(self, request): return render(request, 'telemeta/admin_enumerations.html', self.__get_admin_context_vars()) + @method_decorator(permission_required('sites.change_site')) def admin_users(self, request): users = User.objects.all() return render(request, 'telemeta/admin_users.html', {'users': users}) - # ENUMERATIONS def __get_enumerations_list(self): from django.db.models import get_models models = get_models(telemeta.models) @@ -687,7 +815,7 @@ class WebView(object): def __get_admin_context_vars(self): return {"enumerations": self.__get_enumerations_list()} - + def __get_enumeration(self, id): from django.db.models import get_models models = get_models(telemeta.models) @@ -765,7 +893,9 @@ class WebView(object): return self.edit_enumeration(request, enumeration_id) - # INSTRUMENTS +class InstrumentView(object): + """Provide Instrument web UI methods""" + @method_decorator(permission_required('telemeta.change_instrument')) def edit_instrument(self, request): @@ -807,25 +937,9 @@ class WebView(object): return self.edit_instrument(request) - def collection_playlist(self, request, public_id, template, mimetype): - try: - collection = MediaCollection.objects.get(public_id=public_id) - except ObjectDoesNotExist: - raise Http404 - - template = loader.get_template(template) - context = RequestContext(request, {'collection': collection, 'host': request.META['HTTP_HOST']}) - return HttpResponse(template.render(context), mimetype=mimetype) - - def item_playlist(self, request, public_id, template, mimetype): - try: - item = MediaItem.objects.get(public_id=public_id) - except ObjectDoesNotExist: - raise Http404 - - template = loader.get_template(template) - context = RequestContext(request, {'item': item, 'host': request.META['HTTP_HOST']}) - return HttpResponse(template.render(context), mimetype=mimetype) + +class GeoView(object): + """Provide Geo web UI methods""" def list_continents(self, request): continents = MediaItem.objects.all().countries(group_by_continent=True) @@ -862,32 +976,9 @@ class WebView(object): template_name='telemeta/geo_country_items.html', paginate_by=20, extra_context={'country': country, 'continent': continent}) - def handle_oai_request(self, request): - host = request.META['HTTP_HOST'] - url = 'http://' + host + request.path - datasource = TelemetaOAIDataSource() - admin = settings.ADMINS[0][1] - provider = oai.DataProvider(datasource, host, url, admin) - args = request.GET.copy() - args.update(request.POST) - return HttpResponse(provider.handle(args), mimetype='text/xml') - - def render_flatpage(self, request, path): - try: - content = pages.get_page_content(request, path) - except pages.MalformedPagePath: - return redirect(request.path + '/') - - if isinstance(content, pages.PageAttachment): - return HttpResponse(content, content.mimetype()) - else: - return render(request, 'telemeta/flatpage.html', {'page_content': content }) - - def logout(self, request): - auth.logout(request) - return redirect('telemeta-home') +class MarkerView(object): + """Provide Collections web UI methods""" - #MARKERS @jsonrpc_method('telemeta.add_marker') def add_marker(request, marker): # marker must be a dict @@ -942,7 +1033,9 @@ class WebView(object): marker = MediaItemMarker.objects.get(public_id=public_id) return marker.id - # PLAYLISTS +class PlaylistView(object): + """Provide Collections web UI methods""" + @jsonrpc_method('telemeta.add_playlist') def add_playlist(request, playlist): # playlist must be a dict @@ -961,29 +1054,6 @@ class WebView(object): m = Playlist.objects.get(public_id=public_id) m.delete() - def get_playlists(self, request, user=None): - if not user: - user = request.user - playlists = [] - if user.is_authenticated(): - user_playlists = Playlist.objects.filter(author=user) - for playlist in user_playlists: - playlist_resources = PlaylistResource.objects.filter(playlist=playlist) - resources = [] - for resource in playlist_resources: - try: - if resource.resource_type == 'item': - element = MediaItem.objects.get(id=resource.resource_id) - if resource.resource_type == 'collection': - element = MediaCollection.objects.get(id=resource.resource_id) - if resource.resource_type == 'marker': - element = MediaItemMarker.objects.get(id=resource.resource_id) - except: - element = None - resources.append({'element': element, 'type': resource.resource_type, 'public_id': resource.public_id }) - playlists.append({'playlist': playlist, 'resources': resources}) - return playlists - @jsonrpc_method('telemeta.update_playlist') def update_playlist(request, playlist): if isinstance(playlist, dict): @@ -1056,55 +1126,10 @@ class WebView(object): writer.writerow(data) return response - def rss(self, request): - "Render the RSS feed of last revisions" - rss_item_list = [] - organization = settings.TELEMETA_ORGANIZATION - subjects = settings.TELEMETA_SUBJECTS - rss_host = request.META['HTTP_HOST'] - date_now = datetime.datetime.now() - revisions = self.get_revisions(50) - tags = ['title', 'description', 'comment'] - - for r in revisions: - revision = r['revision'] - element = r['element'] - if element: - link = 'http://' + rss_host + '/' + revision.element_type + 's/' + str(element.public_id) - description = 'modified by ' + revision.user.username + ' on ' + unicode(revision.time) + '

' - dict = element.to_dict() - for tag in dict.keys(): - try: - value = dict[tag] - if value != '': - description += tag + ' : ' + value + '
' - except: - continue - if tag == 'title': - if element.title == '': - title = str(element.public_id) - else: - title = element.title - title = element.element_type + ' : ' + title - - rss_item_list.append(RSSItem( - title = title, - link = link, - description = description.encode('utf-8'), - guid = Guid(link), - pubDate = revision.time,) - ) - - rss = RSS2(title = organization + ' - Telemeta - ' + ugettext('Last changes'), - link = rss_host, - description = ' '.join([subject.decode('utf-8') for subject in subjects]), - lastBuildDate = str(date_now), - items = rss_item_list,) - - feed = rss.to_xml(encoding='utf-8') - response = HttpResponse(feed, mimetype='application/rss+xml') - return response - + +class ProfileView(object): + """Provide Collections web UI methods""" + @method_decorator(login_required) def profile_detail(self, request, username, template='telemeta/profile_detail.html'): user = User.objects.get(username=username) @@ -1112,7 +1137,7 @@ class WebView(object): profile = user.get_profile() except: profile = None - playlists = self.get_playlists(request, user) + playlists = get_playlists(request, user) return render(request, template, {'profile' : profile, 'usr': user, 'playlists': playlists}) def profile_edit(self, request, username, template='telemeta/profile_edit.html'): @@ -1149,56 +1174,7 @@ class WebView(object): forms = [user_form, profile_form] return render(request, template, {'forms': forms, 'usr': user, 'user_hidden_fields': user_hidden_fields}) - @method_decorator(permission_required('telemeta.change_mediaitem')) - def item_performances_edit(self, request, public_id, template): - item = MediaItem.objects.get(public_id=public_id) - PerformanceFormSet = inlineformset_factory(MediaItem, MediaItemPerformance, form=MediaItemPerformanceForm) - if request.method == 'POST': - formset = PerformanceFormSet(data=request.POST, instance=item) - if formset.is_valid(): - formset.save() - return HttpResponseRedirect('/items/'+public_id) - else: - formset = PerformanceFormSet(instance=item) - return render(request, template, {'item': item, 'formset': formset,}) - - @method_decorator(permission_required('telemeta.change_mediaitem')) - def item_keywords_edit(self, request, public_id, template): - item = MediaItem.objects.get(public_id=public_id) - FormSet = inlineformset_factory(MediaItem, MediaItemKeyword) - if request.method == 'POST': - formset = FormSet(data=request.POST, instance=item) - if formset.is_valid(): - formset.save() - return HttpResponseRedirect('/items/'+public_id) - else: - formset = FormSet(instance=item) - return render(request, template, {'item': item, 'formset': formset,}) - -def get_revisions(nb): - last_revisions = Revision.objects.order_by('-time')[0:nb] - revisions = [] - for revision in last_revisions: - if revision.element_type == 'item': - try: - element = MediaItem.objects.get(pk=revision.element_id) - except: - element = None - if revision.element_type == 'collection': - try: - element = MediaCollection.objects.get(pk=revision.element_id) - except: - element = None - if revision.element_type == 'marker': - try: - element = MediaItemMarker.objects.get(pk=revision.element_id) - except: - element = None - if not element == None: - revisions.append({'revision': revision, 'element': element}) - return revisions - class LastestRevisionsFeed(Feed): "the RSS feed of the lastest revisions" -- 2.39.5