From 6c66d0750a604ead361efdbf1e2738bd9f53606e Mon Sep 17 00:00:00 2001 From: olivier <> Date: Sun, 11 Apr 2010 14:41:21 +0000 Subject: [PATCH] add user authentication, disable admin panel for anonymous users, allow to enable/disable audio export with a configuration option --- INSTALL | 7 +- telemeta/htdocs/css/telemeta.css | 48 ++++++++++- telemeta/locale/fr/LC_MESSAGES/django.mo | Bin 9438 -> 9782 bytes telemeta/locale/fr/LC_MESSAGES/django.po | 77 +++++++++++------- telemeta/templates/telemeta/login.html | 1 + telemeta/templates/telemeta_default/base.html | 16 +++- .../templates/telemeta_default/login.html | 26 ++++++ .../telemeta_default/mediaitem_detail.html | 4 +- telemeta/urls.py | 7 +- telemeta/web/base.py | 56 +++++++++---- 10 files changed, 190 insertions(+), 52 deletions(-) create mode 100644 telemeta/templates/telemeta/login.html create mode 100644 telemeta/templates/telemeta_default/login.html diff --git a/INSTALL b/INSTALL index 58684223..b782cc15 100644 --- a/INSTALL +++ b/INSTALL @@ -123,6 +123,8 @@ Modifiy the following variables: :DATABASE_*: your database settings (don't forget to create the database if needed) :MEDIA_ROOT: absolute path to the media directory you just created :INSTALLED_APPS: add 'telemeta' + :TEMPLATE_CONTEXT_PROCESSORS: include 'django.core.context_processors.request' and + 'django.core.context_processors.auth' Add the following variables: @@ -131,9 +133,12 @@ Add the following variables: as "Ethnology", etc... :TELEMETA_CACHE_DIR: absolute path to the cache directory that you just created :TELEMETA_GMAP_KEY: your Google Map API key + :TELEMETA_DOWNLOAD_ENABLED: True to enable audio data download -Just paste the two lines below:: +Just paste the lines below:: + LOGIN_URL = '/login' + LOGIN_REDIRECT_URL = '/' TELEMETA_EXPORT_CACHE_DIR = TELEMETA_CACHE_DIR + "/export" CACHE_BACKEND = "file://" + TELEMETA_CACHE_DIR + "/data" diff --git a/telemeta/htdocs/css/telemeta.css b/telemeta/htdocs/css/telemeta.css index 5a92fb66..729100a7 100644 --- a/telemeta/htdocs/css/telemeta.css +++ b/telemeta/htdocs/css/telemeta.css @@ -199,9 +199,9 @@ input[type=reset][disabled] { border-style: solid; color: #999; } -input[type=text], input.textwidget, textarea { border: 1px solid #ccc; } -input[type=text], input.textwidget { padding: .25em .1em } -input[type=text]:focus, input.textwidget:focus, textarea:focus { +input[type=text], input[type=password], input.textwidget, textarea { border: 1px solid #ccc; } +input[type=text], input[type=password], input.textwidget { padding: .25em .1em } +input[type=text]:focus, input[type=password]:focus, input.textwidget:focus, textarea:focus { border-color: #aaa; } option { border-bottom: 1px dotted #d7d7d7; } @@ -237,10 +237,12 @@ label.disabled { color: #d7d7d7 } margin-top: .3em; clear: left; } + #quick_search a { font-size: .8em; font-weight: bold; } + #quick_search input { vertical-align: middle; font-size: .8em; @@ -255,6 +257,46 @@ label.disabled { color: #d7d7d7 } font-weight: bold; } +/* Authentication */ +#auth_info { + position: absolute; + top: 0.2em; + right: 1.1em; + margin-right: 12px; + font-size: .8em; +} + +#auth_info a { + /* font-weight: bold; */ +} + +form.login { + font-size: 0.8em; + float: left; + margin-top: 2em; + margin-bottom: 4em; + padding: .5em; + border: 1px dotted #888; +} + +.login-error { + color: #BB0000; +} + +form.login label { + display: block; + width: 11em; + float: left; + clear: left; + font-weight: bold; + padding-top: 0.3em; +} + +form.login .submit { + float: right; + margin-top: 1em; +} + /* Search form */ #searchform { margin: 15px 0; diff --git a/telemeta/locale/fr/LC_MESSAGES/django.mo b/telemeta/locale/fr/LC_MESSAGES/django.mo index cad407b5613976b99b3b78f4a4cd39849a843567..0868964df5e72573a17f6cc46ff0650b96321020 100644 GIT binary patch delta 4087 zcmXxn4RpW{T1LJoH@BwO~U*K8z zi)~LQpUO-wD)oh^3=Bi<4G(HUqfrwoMfF#iunkwEzJh97zup>0J-7t52kKFoxCb@C zCe(^HqZaTiY681Z6L`m7e;+mR!>E3~LuD{=l7cdjL7p{G9x4O9umJm`1}I1Uewc>p zID&d^fvvAV-M1RGCmuv?%4SSv4mH6qPy>IPswd3f6qLF&@<}#LH&kkiIO)N0)+wj~ zy~vzR6nWGvxAi7le-Sm%0o2|&j1K;e8n_D^MAr+ktG@pd3QA=eY6X)}16L()FlH`l z;6+`B%d{ z8V2BU)WFTC8Scaja5rjz)3&`mzxH%r7V5rS)CBWvy+0~5gHio^kffL?$lOc_m8lhH z+wXrp4O;0A)TY{ndL@TY9e<75bibljoW}dmtH?!~%t+LL(@_(3QTNv&`_43=`rm|w zxC7PikpucZs>YXwZ88=~iP*4U2qXrs|>Tn|Jfh$p)We%#NFzTJ&jGFiw)Vtke>#w0Q@F8k* zA3<&E&#lK%ujnT{L*M^@6g1-weNr>d!eq)(?S-g}3`VWogPPzZ)C#LmsrR8?O$0T8 z+fmOqpeA}RY5^Nj3w;Ll_s6_JK{Gv!dhj#si^os{r&H0c%|*TIp{NxMM|C&>HNaF< zCS263Sb}S?3VW>?wrhxqG-B-~duR~3!*50rf^}zk8%shsg*cNPy zuV5PPvA%_^slSW5{yysYk5K)7iR$M!)CB%0Apd$7+5J=Y#a7e@5$Z_CV=0p7>74cb z>bR76oY1>hr|R%NVjZE^ssTq6+li|Pl4^X!gG2?fib&ol!^B7xILcF)`Kb5kxAieN zkGO%*q?3CB%ZT%cMq(6k8xbRJCUk5h7860@DWc`jUeQF&qr^4Da6+HjSYj=qBTj4~ z9w6=^^d5CwPYfX@5oyGA#I;1rv5>-g;t}FuVmUF67)t19L$KEp$@ilMZLnb~a4aM4 zPL_WMmHDWT(u6lS8e2{T&q-_|w?_D1qQ z3|HE=B0SfYE72h)5H3+l3?y{il_Ghr;yl~d^<_P6%hlErYjXT^s9ZoiWE(@)8}Vvl zg{{|OJK|nq193hvgV1q5!QM49iQ9?I#4JL`0^&*HR#iAINs;^mmRLiLt3X{MI|Lp$q3JR!v_sLw|Q;1 zaO=)f_im}(yTw=Ija0iqhV(S2_vqi|%+hcuppCMhIWvb4~c5lr;^Z6ZXb-I0f@@A)bxfkiW2tj|R9GPsRO6SK%-=!>^*hB7Y%+ zi`-9ymQ?CV_U4o)|f;G+=IS%08RLt=m~U7 zGU(iXnxPXdz=TWPiHa}uh+d5Rh0(D+3Ek_N=*ldMuEHYP>tg#&bjI%>V}||6q{BDy z{>ga#Z#sL0L}bybjCI4$~}v2NfLd2Cz`-} z=*$nI6a5-}{#f+aY}Vfw{^Ej}X0k!8unl^>Cz5O!fG%x0x&o8Xy`PRIbPJl$O!U2Z zvAq;M+|{wYKDr5g?}Y>v_c)2J#2aXaAEGn*7@fgkG=Xo?1Wv^Jf1-(Ju(9@YCNh`M z0bPMobfBT=3XH-69EbLwm`la){X(?k8uZ25*nSy(@OAVIyn`OP&#`Xh&;&EtPzOE( zZ5N>{SAygihM+4u5q+;RWg^U{;(#lWzQRW2FYJiz4`cgFwBtX}vynk>xtNO%+#kJP zj`njMx{`OI6Sx;0cuBm!22c0<{|pspz7t)_UFcGMgf88Ic>gfEmtV!}N2ABk0gj{n z{DCG=j}vQut0qXW-H`*{eR&?@w>uEm6hW+Rn;_&nPF9)0m7nowgl+!e{gu2_h5 zKTybI!esP^XF6kVZOwBuLN8Ge8qm+%R?6+fW;{)28&W?RJ}8EKdt3_IAA5( z;e7OkDr9@Zc65L@u_JzfcKi!^2>n;-b4}282Xu?NVBKLwatP%KD$aNoy2N*5E~c;7 z&~~qD(GFihXR;T4?+BXcQFMS4=<}KFQwg_2ulGa;9EKj&sYtFNQ9;F}UxChOH9C_G z=pJv6zJw0^7CNJS=s<_i4u3|U{~bLGjdN4|v_iM+9Q6IZ=+=!&wG&}F6=yyNJ+=3v zr*%8VS#7XFiOpD%{&-&Nr zLS=klHrl~GXvYtr9X*N;P=jv8%hC6-9&O7=q8~AU*g{-NnC#_*#g(*}P%q*F;vV<^ zW-6-)zsD}y6@({r3el6;K)4z%84L|G$ilja$%DKZtN;XAu6*tRzMgu7ah# z`+pbVzB$u$8AW9wF@jh_Tun?TCKDS8%XP&0#A7xn-BW}|@rGEx5j~9Q@&J`viFw2l z!twtr=Ta*oJXD(rwmU2%(xq#x^vCVQK%$1YgJ?kXAkHH?5tjKxG4T}PfxDJSmkCs^ zPmkY)#)ZUSqJl`5LMnY?V?9nHo``K(9_yZo+X=rFmc>L_T`l#^vFiER7OySBiA3H1 z|2!%l!UqY}|5%&|95LXeFrNm5P6LB#yn{Y|1i3P-Jq8m|4c(DD+ zT|rp3`r*TmTcK1E<#o0A{ips2aShQoUQaV5R&K(Jh%3`K@JYh2wPhGlOEe^g6P9%; z!hJaQ?%2q}sYD5JFVTjWOFT@BCoEOOP@=O9N^jyaVwR0q?o4iIT3Iid(|lX~s*hUq zuPV$QpL`{Ib4FH4*W$9=9%X$>iaQtgNX|IBqJHwb)&&i!I<_BKwV?fkWKnKbqkjPs Cc|XJe diff --git a/telemeta/locale/fr/LC_MESSAGES/django.po b/telemeta/locale/fr/LC_MESSAGES/django.po index 0833e065..f6e1bb28 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: 2010-03-08 18:30+0100\n" +"POT-Creation-Date: 2010-04-11 17:36+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Olivier Guilyardi \n" "Language-Team: LANGUAGE \n" @@ -426,40 +426,49 @@ msgstr "heure" msgid "user" msgstr "utilisateur" -#: templates/telemeta_default/base.html:32 +#: templates/telemeta_default/base.html:37 +msgid "Sign out" +msgstr "Déconnexion" + +#: templates/telemeta_default/base.html:39 +#: templates/telemeta_default/login.html:20 +msgid "Sign in" +msgstr "Connexion" + +#: templates/telemeta_default/base.html:46 #: templates/telemeta_default/search_criteria.html:134 msgid "Search" msgstr "Recherche" -#: templates/telemeta_default/base.html:34 +#: templates/telemeta_default/base.html:48 msgid "Advanced search" msgstr "Recherche avancée" -#: templates/telemeta_default/base.html:41 +#: templates/telemeta_default/base.html:55 msgid "Collections" msgstr "Collections" -#: templates/telemeta_default/base.html:41 +#: templates/telemeta_default/base.html:55 msgid "Items" msgstr "Items" -#: templates/telemeta_default/base.html:41 +#: templates/telemeta_default/base.html:55 msgid "Geo Navigator" msgstr "Géo-Navigateur" -#: templates/telemeta_default/base.html:41 +#: templates/telemeta_default/base.html:55 msgid "Admin" msgstr "Admin" -#: templates/telemeta_default/base.html:61 +#: templates/telemeta_default/base.html:75 msgid "Powered by" msgstr "Propulsé par" -#: templates/telemeta_default/base.html:62 +#: templates/telemeta_default/base.html:76 msgid "By" msgstr "Par" -#: templates/telemeta_default/base.html:66 +#: templates/telemeta_default/base.html:80 msgid "Visit the Telemeta open source project at" msgstr "Visitez le projet libre Telemeta" @@ -468,46 +477,46 @@ msgstr "Visitez le projet libre Telemeta" msgid "Collection" msgstr "Collection" -#: templates/telemeta_default/collection_detail.html:52 +#: templates/telemeta_default/collection_detail.html:53 msgid "Recording year" msgstr "Année d'enregistrement" -#: templates/telemeta_default/collection_detail.html:61 -#: templates/telemeta_default/mediaitem_detail.html:146 +#: templates/telemeta_default/collection_detail.html:63 +#: templates/telemeta_default/mediaitem_detail.html:148 msgid "Geographic and cultural informations" msgstr "Indications géographiques et culturelles" -#: templates/telemeta_default/collection_detail.html:74 +#: templates/telemeta_default/collection_detail.html:76 msgid "Legal mentions" msgstr "Mentions légales" -#: templates/telemeta_default/collection_detail.html:79 +#: templates/telemeta_default/collection_detail.html:81 #: templates/telemeta_default/inc/collection_list.html:17 #: templates/telemeta_default/inc/mediaitem_list.html:16 msgid "Recordist" msgstr "Collecteur" -#: templates/telemeta_default/collection_detail.html:100 -#: templates/telemeta_default/mediaitem_detail.html:211 +#: templates/telemeta_default/collection_detail.html:102 +#: templates/telemeta_default/mediaitem_detail.html:213 msgid "Archiving data" msgstr "Données d'archivage" -#: templates/telemeta_default/collection_detail.html:123 -#: templates/telemeta_default/mediaitem_detail.html:226 +#: templates/telemeta_default/collection_detail.html:125 +#: templates/telemeta_default/mediaitem_detail.html:228 msgid "Technical data" msgstr "Données techniques" -#: templates/telemeta_default/collection_detail.html:128 -#: templates/telemeta_default/mediaitem_detail.html:229 +#: templates/telemeta_default/collection_detail.html:130 +#: templates/telemeta_default/mediaitem_detail.html:231 msgid "Media type" msgstr "Type de media" -#: templates/telemeta_default/collection_detail.html:128 -#: templates/telemeta_default/mediaitem_detail.html:229 +#: templates/telemeta_default/collection_detail.html:130 +#: templates/telemeta_default/mediaitem_detail.html:231 msgid "Audio" msgstr "Audio" -#: templates/telemeta_default/collection_detail.html:133 +#: templates/telemeta_default/collection_detail.html:135 #: templates/telemeta_default/geo_countries.html:14 msgid "Number of items" msgstr "Nombre d'items" @@ -628,25 +637,37 @@ msgstr "Accéder au navigateur géographique" msgid "Musical selection" msgstr "Sélection musicale" +#: templates/telemeta_default/login.html:5 +msgid "User authentication" +msgstr "Identification" + +#: templates/telemeta_default/login.html:8 +msgid "Your username and password didn't match. Please try again." +msgstr "Vos nom d'utilisateur et/ou mot de passe sont incorrects. Essayez à nouveau." + #: templates/telemeta_default/mediaitem_detail.html:5 #: templates/telemeta_default/mediaitem_detail_dc.html:5 msgid "Item" msgstr "Item" -#: templates/telemeta_default/mediaitem_detail.html:137 +#: templates/telemeta_default/mediaitem_detail.html:120 +msgid "Download:" +msgstr "Téléchargement:" + +#: templates/telemeta_default/mediaitem_detail.html:139 msgid "Recording date" msgstr "Date d'enregistrement" -#: templates/telemeta_default/mediaitem_detail.html:149 +#: templates/telemeta_default/mediaitem_detail.html:151 #: templates/telemeta_default/inc/mediaitem_list.html:18 msgid "Location" msgstr "Lieu" -#: templates/telemeta_default/mediaitem_detail.html:164 +#: templates/telemeta_default/mediaitem_detail.html:166 msgid "Musical informations" msgstr "Informations sur la musique" -#: templates/telemeta_default/mediaitem_detail.html:200 +#: templates/telemeta_default/mediaitem_detail.html:202 msgid "General informations" msgstr "Informations générales" diff --git a/telemeta/templates/telemeta/login.html b/telemeta/templates/telemeta/login.html new file mode 100644 index 00000000..e6c64d59 --- /dev/null +++ b/telemeta/templates/telemeta/login.html @@ -0,0 +1 @@ +{% extends "telemeta_default/login.html" %} diff --git a/telemeta/templates/telemeta_default/base.html b/telemeta/templates/telemeta_default/base.html index 36ea1951..034f568b 100644 --- a/telemeta/templates/telemeta_default/base.html +++ b/telemeta/templates/telemeta_default/base.html @@ -26,6 +26,20 @@ {% endblock %} +
+{% if user.is_authenticated %} +{% if user.first_name and user.last_name %} +{{ user.first_name }} {{ user.last_name }} +{% else %} +{{ user.username }} +{% endif %} +| +{% trans "Sign out" %} +{% else %} +{% trans "Sign in" %} +{% endif %} +
+ diff --git a/telemeta/templates/telemeta_default/login.html b/telemeta/templates/telemeta_default/login.html new file mode 100644 index 00000000..e4084254 --- /dev/null +++ b/telemeta/templates/telemeta_default/login.html @@ -0,0 +1,26 @@ +{% extends "telemeta/base.html" %} +{% load i18n %} + +{% block content %} +

{% trans "User authentication" %}

+ +{% if form.errors %} + +{% endif %} + + +

+{{ form.username.label_tag }} +{{ form.username }}
+ +{{ form.password.label_tag }} +{{ form.password }} + +

+ + + + +
+ +{% endblock %} diff --git a/telemeta/templates/telemeta_default/mediaitem_detail.html b/telemeta/templates/telemeta_default/mediaitem_detail.html index 1251eb2f..2e3bb841 100644 --- a/telemeta/templates/telemeta_default/mediaitem_detail.html +++ b/telemeta/templates/telemeta_default/mediaitem_detail.html @@ -115,12 +115,14 @@ load_player({{ item.computed_duration.as_seconds }});
+ {% if audio_export_enabled %}
-

Download: +

{% trans "Download:" %} {% for format in export_formats %} {{ format.name }} {% endfor %}

+ {% endif %} {% endif %} diff --git a/telemeta/urls.py b/telemeta/urls.py index 3ebe7716..336205cd 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -169,5 +169,10 @@ urlpatterns = patterns('', url(r'^page/(?P.*)$', web_view.render_flatpage, name="telemeta-flatpage"), # OAI-PMH Data Provider - url(r'^oai/.*$', web_view.handle_oai_request, name="telemeta-oai") + url(r'^oai/.*$', web_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"), ) diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 5edff21c..8be7cc9b 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -36,13 +36,15 @@ import re import os import sys -from django.template import Context, loader +from django.template import RequestContext, loader from django import template from django.http import HttpResponse from django.http import Http404 from django.shortcuts import render_to_response, redirect from django.views.generic import list_detail from django.conf import settings +from django.contrib import auth +from django.contrib.auth.decorators import login_required import telemeta from telemeta.models import MediaItem, Location, MediaCollection, EthnicGroup @@ -60,6 +62,10 @@ from telemeta.web import pages import datetime from telemeta.util.unaccent import unaccent_icmp +def render(request, template, data = None, mimetype = None): + return render_to_response(template, data, context_instance=RequestContext(request), + mimetype=mimetype) + class WebView(Component): """Provide web UI methods""" @@ -74,13 +80,14 @@ class WebView(Component): ids = [id for id in MediaItem.objects.all().values_list('id', flat=True).order_by('?')[0:4]] items = MediaItem.objects.enriched().filter(pk__in=ids) - context = Context({'page_content': pages.get_page_content(request, 'parts/home', ignore_slash_issue=True), - 'items': items}) + context = RequestContext(request, { + 'page_content': pages.get_page_content(request, 'parts/home', ignore_slash_issue=True), + 'items': items}) return HttpResponse(template.render(context)) def collection_detail(self, request, public_id, template=''): collection = MediaCollection.objects.get(public_id=public_id) - return render_to_response(template, {'collection': collection}) + return render(request, template, {'collection': collection}) def item_detail(self, request, public_id, template='telemeta/mediaitem_detail.html'): @@ -118,10 +125,12 @@ class WebView(Component): for plugin in vamp_plugins: vamp_plugin_list.append(':'.join(plugin[1:])) - return render_to_response(template, + return render(request, template, {'item': item, 'export_formats': formats, 'visualizers': visualizers, 'visualizer_id': visualizer_id, - 'analysers': analyzers, 'vamp_plugins': vamp_plugin_list}) + 'analysers': analyzers, 'vamp_plugins': vamp_plugin_list, + 'audio_export_enabled': getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', False) + }) def item_visualize(self, request, public_id, visualizer_id, width, height): for visualizer in self.visualizers: @@ -147,6 +156,10 @@ class WebView(Component): def item_export(self, request, public_id, extension): """Export a given media item in the specified format (OGG, FLAC, ...)""" + + if extension != 'mp3' and not getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', False): + raise Http404 # FIXME: should be some sort of permissions denied error + for exporter in self.exporters: if exporter.get_file_extension() == extension: break @@ -173,7 +186,7 @@ class WebView(Component): 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_to_response('telemeta/search_criteria.html', { + return render(request, 'telemeta/search_criteria.html', { 'rec_years': rec_years, 'pub_years': pub_years, 'ethnic_groups': MediaItem.objects.all().ethnic_groups(), @@ -284,8 +297,9 @@ class WebView(Component): def __get_admin_context_vars(self): return {"enumerations": self.__get_enumerations_list()} + @login_required def admin_index(self, request): - return render_to_response('telemeta/admin.html', self. __get_admin_context_vars()) + return render(request, 'telemeta/admin.html', self. __get_admin_context_vars()) def __get_enumeration(self, id): from django.db.models import get_models @@ -299,6 +313,7 @@ class WebView(Component): return model + @login_required def edit_enumeration(self, request, enumeration_id): enumeration = self.__get_enumeration(enumeration_id) @@ -309,8 +324,9 @@ class WebView(Component): vars["enumeration_id"] = enumeration._meta.module_name vars["enumeration_name"] = enumeration._meta.verbose_name vars["enumeration_values"] = enumeration.objects.all() - return render_to_response('telemeta/enumeration_edit.html', vars) + return render(request, 'telemeta/enumeration_edit.html', vars) + @login_required def add_to_enumeration(self, request, enumeration_id): enumeration = self.__get_enumeration(enumeration_id) @@ -322,6 +338,7 @@ class WebView(Component): return self.edit_enumeration(request, enumeration_id) + @login_required def update_enumeration(self, request, enumeration_id): enumeration = self.__get_enumeration(enumeration_id) @@ -333,6 +350,7 @@ class WebView(Component): return self.edit_enumeration(request, enumeration_id) + @login_required def edit_enumeration_value(self, request, enumeration_id, value_id): enumeration = self.__get_enumeration(enumeration_id) @@ -343,8 +361,9 @@ class WebView(Component): vars["enumeration_id"] = enumeration._meta.module_name vars["enumeration_name"] = enumeration._meta.verbose_name vars["enumeration_record"] = enumeration.objects.get(id__exact=value_id) - return render_to_response('telemeta/enumeration_edit_value.html', vars) + return render(request, 'telemeta/enumeration_edit_value.html', vars) + @login_required def update_enumeration_value(self, request, enumeration_id, value_id): if request.POST.has_key("save"): @@ -365,7 +384,7 @@ class WebView(Component): raise Http404 template = loader.get_template(template) - context = Context({'collection': collection, 'host': request.META['HTTP_HOST']}) + 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): @@ -375,24 +394,24 @@ class WebView(Component): raise Http404 template = loader.get_template(template) - context = Context({'item': item, 'host': request.META['HTTP_HOST']}) + context = RequestContext(request, {'item': item, 'host': request.META['HTTP_HOST']}) return HttpResponse(template.render(context), mimetype=mimetype) def list_continents(self, request): continents = MediaItem.objects.all().countries(group_by_continent=True) - return render_to_response('telemeta/geo_continents.html', + return render(request, 'telemeta/geo_continents.html', {'continents': continents, 'gmap_key': settings.TELEMETA_GMAP_KEY }) def country_info(self, request, id): country = Location.objects.get(pk=id) - return render_to_response('telemeta/country_info.html', { + return render(request, 'telemeta/country_info.html', { 'country': country, 'continent': country.continents()[0]}) def list_countries(self, request, continent): continent = Location.objects.by_flatname(continent)[0] countries = MediaItem.objects.by_location(continent).countries() - return render_to_response('telemeta/geo_countries.html', { + return render(request, 'telemeta/geo_countries.html', { 'continent': continent, 'countries': countries }) @@ -431,5 +450,8 @@ class WebView(Component): if isinstance(content, pages.PageAttachment): return HttpResponse(content, content.mimetype()) else: - return render_to_response('telemeta/flatpage.html', {'page_content': content }) - + return render(request, 'telemeta/flatpage.html', {'page_content': content }) + + def logout(self, request): + auth.logout(request) + return redirect('telemeta-home') -- 2.39.5