From 71de57c48cda16c973ec35e4d44b3a670628305a Mon Sep 17 00:00:00 2001 From: yomguy Date: Wed, 30 Nov 2011 10:18:32 +0100 Subject: [PATCH] separate forms, add MediaCollectionRelated (but have to make an abstract object for related media), fix keyword form --- AUTHORS | 2 +- telemeta/forms/__init__.py | 2 + telemeta/forms/media.py | 78 ++++++ telemeta/locale/de/LC_MESSAGES/django.mo | Bin 420 -> 420 bytes telemeta/locale/de/LC_MESSAGES/django.po | 242 ++++++++--------- telemeta/locale/de/LC_MESSAGES/djangojs.mo | Bin 420 -> 420 bytes telemeta/locale/de/LC_MESSAGES/djangojs.po | 2 +- telemeta/locale/fr/LC_MESSAGES/django.mo | Bin 13372 -> 13372 bytes telemeta/locale/fr/LC_MESSAGES/django.po | 246 +++++++++--------- telemeta/locale/fr/LC_MESSAGES/djangojs.mo | Bin 1466 -> 1466 bytes telemeta/locale/fr/LC_MESSAGES/djangojs.po | 2 +- telemeta/models/__init__.py | 14 +- telemeta/models/media.py | 77 +++--- .../telemeta_default/collection_detail.html | 6 + .../telemeta_default/mediaitem_detail.html | 85 +----- .../mediaitem_keywords_edit.html | 10 +- telemeta/templatetags/telemeta_utils.py | 5 +- telemeta/urls.py | 4 +- telemeta/web/base.py | 61 ++++- 19 files changed, 450 insertions(+), 386 deletions(-) create mode 100644 telemeta/forms/__init__.py create mode 100644 telemeta/forms/media.py diff --git a/AUTHORS b/AUTHORS index c284da20..df08d054 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,3 +1,3 @@ -Guillaume Pellerin +Guillaume Pellerin Olivier Guilyardi Riccardo Zaccarelli diff --git a/telemeta/forms/__init__.py b/telemeta/forms/__init__.py new file mode 100644 index 00000000..5fbd2d9d --- /dev/null +++ b/telemeta/forms/__init__.py @@ -0,0 +1,2 @@ + +from media import * diff --git a/telemeta/forms/media.py b/telemeta/forms/media.py new file mode 100644 index 00000000..c8c2633e --- /dev/null +++ b/telemeta/forms/media.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2011 Parisson SARL + +# This software is a computer program whose purpose is to backup, analyse, +# transcode and stream any audio content with its metadata over a web frontend. + +# This software is governed by the CeCILL license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL +# license as circulated by CEA, CNRS and INRIA at the following URL +# "http://www.cecill.info". + +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. + +# In this respect, the user's attention is drawn to the risks associated +# with loading, using, modifying and/or developing or reproducing the +# software by the user in light of its specific status of free software, +# that may mean that it is complicated to manipulate, and that also +# therefore means that it is reserved for developers and experienced +# professionals having in-depth computer knowledge. Users are therefore +# encouraged to load and test the software's suitability as regards their +# requirements in conditions enabling the security of their systems and/or +# data to be ensured and, more generally, to use and operate it in the +# same conditions as regards security. + +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL license and that you accept its terms. +# +# Authors: Guillaume Pellerin + + +from django.forms import ModelForm +from telemeta.models import * + +class MediaCorpusForm(ModelForm): + class Meta: + model = MediaCorpus + +class MediaCollectionForm(ModelForm): + class Meta: + model = MediaCollection + def clean_doctype_code(self): + return self.cleaned_data['doctype_code'] or 0 + +class MediaCollectionRelatedForm(ModelForm): + class Meta: + model = MediaCollectionRelated + +class MediaItemForm(ModelForm): + class Meta: + model = MediaItem + def clean_code(self): + return self.cleaned_data['code'] or None + +class MediaItemRelatedForm(ModelForm): + class Meta: + model = MediaItemRelated + +class MediaItemKeywordForm(ModelForm): + class Meta: + model = MediaItemKeyword + +class MediaItemPerformanceForm(ModelForm): + class Meta: + model = MediaItemPerformance + + def __init__(self, *args, **kwds): + super(MediaItemPerformanceForm, self).__init__(*args, **kwds) + self.fields['instrument'].queryset = Instrument.objects.order_by('name') + self.fields['alias'].queryset = InstrumentAlias.objects.order_by('name') + +class PlaylistForm(ModelForm): + class Meta: + model = Playlist diff --git a/telemeta/locale/de/LC_MESSAGES/django.mo b/telemeta/locale/de/LC_MESSAGES/django.mo index 84867de27c13838234c1c2aec2f0ae9067b2c150..42c881faea60eded6abbf08eaaa15b5fa318172f 100644 GIT binary patch delta 18 ZcmZ3&yo7ne1a?aWLo+KA(~Z-4838p_1up;q delta 18 ZcmZ3&yo7ne1a=DrLvt$=gN@U9838pp1u6gl diff --git a/telemeta/locale/de/LC_MESSAGES/django.po b/telemeta/locale/de/LC_MESSAGES/django.po index 3d493f62..3081f2e4 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-11-28 17:40+0100\n" +"POT-Creation-Date: 2011-11-29 16:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,35 +26,35 @@ msgstr "" msgid "Enter a valid duration in HH:MM[:ss] format." msgstr "" -#: models/enum.py:41 models/enum.py:139 models/media.py:459 +#: models/enum.py:41 models/enum.py:139 models/media.py:485 msgid "value" msgstr "" -#: models/enum.py:57 models/media.py:183 +#: models/enum.py:57 models/media.py:198 msgid "archive format" msgstr "" -#: models/enum.py:64 models/media.py:166 +#: models/enum.py:64 models/media.py:181 msgid "secondary edition" msgstr "" -#: models/enum.py:71 models/media.py:160 +#: models/enum.py:71 models/media.py:175 msgid "mode of acquisition" msgstr "" -#: models/enum.py:78 models/media.py:163 +#: models/enum.py:78 models/media.py:178 msgid "record author" msgstr "" -#: models/enum.py:85 models/media.py:170 +#: models/enum.py:85 models/media.py:185 msgid "record writer" msgstr "" -#: models/enum.py:92 models/media.py:156 +#: models/enum.py:92 models/media.py:171 msgid "legal rights" msgstr "" -#: models/enum.py:99 models/media.py:133 +#: models/enum.py:99 models/media.py:150 msgid "recording context" msgstr "" @@ -62,19 +62,19 @@ msgstr "" msgid "A/D conversion" msgstr "" -#: models/enum.py:113 models/media.py:289 +#: models/enum.py:113 models/media.py:335 msgid "vernacular style" msgstr "" -#: models/enum.py:120 models/media.py:291 +#: models/enum.py:120 models/media.py:337 msgid "generic style" msgstr "" -#: models/enum.py:127 models/media.py:419 +#: models/enum.py:127 models/media.py:456 msgid "keyword" msgstr "" -#: models/enum.py:134 models/media.py:146 +#: models/enum.py:134 models/media.py:161 msgid "publisher / status" msgstr "" @@ -82,12 +82,12 @@ msgstr "" msgid "publisher" msgstr "" -#: models/enum.py:153 models/enum.py:157 models/media.py:282 +#: models/enum.py:153 models/enum.py:157 models/media.py:328 msgid "population / social group" msgstr "" #: models/enum.py:158 models/instrument.py:43 models/instrument.py:53 -#: models/location.py:51 models/location.py:158 models/media.py:458 +#: models/location.py:51 models/location.py:158 models/media.py:484 msgid "name" msgstr "" @@ -136,7 +136,7 @@ msgid "authoritative" msgstr "" #: models/location.py:112 models/location.py:169 models/location.py:184 -#: models/media.py:278 +#: models/media.py:324 msgid "location" msgstr "" @@ -156,308 +156,312 @@ msgstr "" msgid "ancestor location" msgstr "" -#: models/media.py:60 +#: models/media.py:70 msgid "Metadata only" msgstr "" -#: models/media.py:62 +#: models/media.py:72 msgid "Sound and metadata" msgstr "" -#: models/media.py:64 +#: models/media.py:74 msgid "Private data" msgstr "" -#: models/media.py:65 models/media.py:89 models/media.py:153 -#: models/media.py:306 +#: models/media.py:75 models/media.py:98 models/media.py:168 +#: models/media.py:352 msgid "public access" msgstr "" -#: models/media.py:85 models/media.py:128 models/media.py:303 +#: models/media.py:94 models/media.py:145 models/media.py:349 msgid "reference" msgstr "" -#: models/media.py:86 models/media.py:129 models/media.py:269 -#: models/media.py:378 models/media.py:477 models/media.py:492 -#: models/media.py:526 +#: models/media.py:95 models/media.py:146 models/media.py:274 +#: models/media.py:315 models/media.py:418 models/media.py:503 +#: models/media.py:518 models/media.py:549 msgid "title" msgstr "" -#: models/media.py:87 models/media.py:380 models/media.py:493 -#: models/media.py:528 +#: models/media.py:96 models/media.py:276 models/media.py:420 +#: models/media.py:519 models/media.py:551 msgid "description" msgstr "" -#: models/media.py:88 models/media.py:178 models/media.py:300 +#: models/media.py:97 models/media.py:193 models/media.py:346 msgid "code" msgstr "" -#: models/media.py:130 models/media.py:270 +#: models/media.py:120 models/media.py:273 models/media.py:319 +msgid "collection" +msgstr "" + +#: models/media.py:122 +msgid "corpus" +msgstr "" + +#: models/media.py:147 models/media.py:316 msgid "original title / translation" msgstr "" -#: models/media.py:131 +#: models/media.py:148 msgid "depositor / contributor" msgstr "" -#: models/media.py:134 +#: models/media.py:151 msgid "recording year (from)" msgstr "" -#: models/media.py:135 +#: models/media.py:152 msgid "recording year (until)" msgstr "" -#: models/media.py:136 +#: models/media.py:153 msgid "year published" msgstr "" -#: models/media.py:144 models/media.py:271 +#: models/media.py:159 models/media.py:317 msgid "recordist" msgstr "" -#: models/media.py:148 +#: models/media.py:163 msgid "publisher collection" msgstr "" -#: models/media.py:149 +#: models/media.py:164 msgid "publisher serial number" msgstr "" -#: models/media.py:150 +#: models/media.py:165 msgid "author of published notice" msgstr "" -#: models/media.py:151 +#: models/media.py:166 msgid "bibliographic references" msgstr "" -#: models/media.py:152 +#: models/media.py:167 msgid "document type" msgstr "" -#: models/media.py:161 +#: models/media.py:176 msgid "CNRS depositor" msgstr "" -#: models/media.py:164 +#: models/media.py:179 msgid "related documentation" msgstr "" -#: models/media.py:167 +#: models/media.py:182 msgid "copies" msgstr "" -#: models/media.py:168 +#: models/media.py:183 msgid "comment" msgstr "" -#: models/media.py:171 +#: models/media.py:186 msgid "archiver notes" msgstr "" -#: models/media.py:172 +#: models/media.py:187 msgid "items finished" msgstr "" -#: models/media.py:173 +#: models/media.py:188 msgid "recordist identical to depositor" msgstr "" -#: models/media.py:174 +#: models/media.py:189 msgid "published" msgstr "" -#: models/media.py:175 +#: models/media.py:190 msgid "conservation site" msgstr "" -#: models/media.py:179 models/media.py:301 +#: models/media.py:194 models/media.py:347 msgid "old code" msgstr "" -#: models/media.py:180 models/media.py:310 +#: models/media.py:195 models/media.py:356 msgid "approximative duration" msgstr "" -#: models/media.py:181 +#: models/media.py:196 msgid "number of components (medium / piece)" msgstr "" -#: models/media.py:185 +#: models/media.py:200 msgid "digitization" msgstr "" -#: models/media.py:186 +#: models/media.py:201 msgid "status" msgstr "" -#: models/media.py:187 +#: models/media.py:202 msgid "a_informer_07_03" msgstr "" -#: models/media.py:221 +#: models/media.py:236 msgid "states / nations" msgstr "" -#: models/media.py:235 +#: models/media.py:250 msgid "populations / social groups" msgstr "" -#: models/media.py:243 models/media.py:354 +#: models/media.py:258 models/media.py:400 msgid "computed duration" msgstr "" -#: models/media.py:273 -msgid "collection" +#: models/media.py:275 models/media.py:419 models/media.py:550 +#: models/media.py:569 models/media.py:583 +msgid "date" +msgstr "" + +#: models/media.py:277 models/media.py:421 models/media.py:568 +msgid "mime_type" msgstr "" -#: models/media.py:274 +#: models/media.py:278 models/media.py:422 +msgid "url" +msgstr "" + +#: models/media.py:279 models/media.py:423 +msgid "credits" +msgstr "" + +#: models/media.py:280 models/media.py:353 models/media.py:424 +msgid "file" +msgstr "" + +#: models/media.py:320 msgid "recording date (from)" msgstr "" -#: models/media.py:275 +#: models/media.py:321 msgid "recording date (until)" msgstr "" -#: models/media.py:279 +#: models/media.py:325 msgid "location details" msgstr "" -#: models/media.py:280 +#: models/media.py:326 msgid "cultural area" msgstr "" -#: models/media.py:283 +#: models/media.py:329 msgid "language" msgstr "" -#: models/media.py:284 +#: models/media.py:330 msgid "comments / ethnographic context" msgstr "" -#: models/media.py:285 +#: models/media.py:331 msgid "moda_execut" msgstr "" -#: models/media.py:292 +#: models/media.py:338 msgid "author / compositor" msgstr "" -#: models/media.py:295 +#: models/media.py:341 msgid "remarks" msgstr "" -#: models/media.py:296 +#: models/media.py:342 msgid "recordist selection" msgstr "" -#: models/media.py:297 +#: models/media.py:343 msgid "recordist as in collection" msgstr "" -#: models/media.py:302 +#: models/media.py:348 msgid "item number" msgstr "" -#: models/media.py:304 +#: models/media.py:350 msgid "published references" msgstr "" -#: models/media.py:305 +#: models/media.py:351 msgid "copy of" msgstr "" -#: models/media.py:307 models/media.py:384 -msgid "file" -msgstr "" - -#: models/media.py:317 models/media.py:559 +#: models/media.py:363 models/media.py:582 #: templates/telemeta_default/mediaitem_detail.html:192 #: templates/telemeta_default/mediaitem_detail_video.html:192 msgid "keywords" msgstr "" -#: models/media.py:377 models/media.py:418 models/media.py:432 -#: models/media.py:456 models/media.py:476 models/media.py:523 -#: models/media.py:544 +#: models/media.py:417 models/media.py:455 models/media.py:466 +#: models/media.py:482 models/media.py:502 models/media.py:546 +#: models/media.py:567 msgid "item" msgstr "" -#: models/media.py:379 models/media.py:527 models/media.py:546 -#: models/media.py:560 -msgid "date" -msgstr "" - -#: models/media.py:381 models/media.py:545 -msgid "mime_type" -msgstr "" - -#: models/media.py:382 -msgid "url" -msgstr "" - -#: models/media.py:383 -msgid "credits" -msgstr "" - -#: models/media.py:434 +#: models/media.py:468 msgid "composition" msgstr "" -#: models/media.py:436 +#: models/media.py:470 msgid "vernacular name" msgstr "" -#: models/media.py:437 +#: models/media.py:471 msgid "number" msgstr "" -#: models/media.py:438 +#: models/media.py:472 msgid "interprets" msgstr "" -#: models/media.py:457 +#: models/media.py:483 msgid "id" msgstr "" -#: models/media.py:460 +#: models/media.py:486 msgid "unit" msgstr "" -#: models/media.py:478 +#: models/media.py:504 msgid "start" msgstr "" -#: models/media.py:479 +#: models/media.py:505 msgid "end" msgstr "" -#: models/media.py:490 models/media.py:509 models/media.py:524 +#: models/media.py:516 models/media.py:532 models/media.py:547 msgid "public_id" msgstr "" -#: models/media.py:510 +#: models/media.py:533 msgid "playlist" msgstr "" -#: models/media.py:511 +#: models/media.py:534 msgid "resource_type" msgstr "" -#: models/media.py:512 +#: models/media.py:535 msgid "resource_id" msgstr "" -#: models/media.py:525 models/system.py:54 +#: models/media.py:548 models/system.py:54 msgid "time" msgstr "" -#: models/media.py:529 +#: models/media.py:552 msgid "author" msgstr "" -#: models/media.py:547 +#: models/media.py:570 msgid "transcoded" msgstr "" @@ -687,7 +691,7 @@ msgid "Save" msgstr "" #: templates/telemeta_default/collection_detail.html:5 -#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:351 +#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:352 msgid "Collection" msgstr "" @@ -980,7 +984,7 @@ msgstr "" #: templates/telemeta_default/mediaitem_add.html:5 #: templates/telemeta_default/mediaitem_copy.html:5 #: templates/telemeta_default/mediaitem_detail.html:5 -#: templates/telemeta_default/mediaitem_detail_video.html:5 web/base.py:489 +#: templates/telemeta_default/mediaitem_detail_video.html:5 web/base.py:490 msgid "Item" msgstr "" @@ -1122,7 +1126,7 @@ msgstr "" msgid "User Profile" msgstr "" -#: templates/telemeta_default/profile_detail.html:8 web/base.py:1254 +#: templates/telemeta_default/profile_detail.html:8 web/base.py:1255 msgid "User profile" msgstr "" @@ -1234,7 +1238,7 @@ msgstr "" msgid "No item" msgstr "" -#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1284 +#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1285 msgid "Last changes" msgstr "" @@ -1421,11 +1425,11 @@ msgid_plural "%(count)d collections" msgstr[0] "" msgstr[1] "" -#: web/base.py:350 web/base.py:488 web/base.py:779 web/base.py:1253 +#: web/base.py:351 web/base.py:489 web/base.py:780 web/base.py:1254 msgid "Access not allowed" msgstr "" -#: web/base.py:352 web/base.py:490 web/base.py:781 web/base.py:1255 +#: web/base.py:353 web/base.py:491 web/base.py:782 web/base.py:1256 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 84867de27c13838234c1c2aec2f0ae9067b2c150..42c881faea60eded6abbf08eaaa15b5fa318172f 100644 GIT binary patch delta 18 ZcmZ3&yo7ne1a?aWLo+KA(~Z-4838p_1up;q delta 18 ZcmZ3&yo7ne1a=DrLvt$=gN@U9838pp1u6gl diff --git a/telemeta/locale/de/LC_MESSAGES/djangojs.po b/telemeta/locale/de/LC_MESSAGES/djangojs.po index ff0a3c0d..8648c619 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-11-28 17:40+0100\n" +"POT-Creation-Date: 2011-11-29 16:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/telemeta/locale/fr/LC_MESSAGES/django.mo b/telemeta/locale/fr/LC_MESSAGES/django.mo index c65aedfa69decc1bd6590012fad80e55245d109e..064eefc67155d8846411657983f34f1962deecba 100644 GIT binary patch delta 20 bcmdm!u_t502PJk(1w%6{6VuJ#m0Se@T9pTv delta 20 bcmdm!u_t502PJk31w(Ty6NAm)m0Se@T671J diff --git a/telemeta/locale/fr/LC_MESSAGES/django.po b/telemeta/locale/fr/LC_MESSAGES/django.po index c0f6d645..3f7a94db 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-11-28 17:40+0100\n" +"POT-Creation-Date: 2011-11-29 16:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Olivier Guilyardi \n" "Language-Team: LANGUAGE \n" @@ -25,35 +25,35 @@ msgstr "Durée" msgid "Enter a valid duration in HH:MM[:ss] format." msgstr "Entrez une durée valide au format HH:MM[:ss]" -#: models/enum.py:41 models/enum.py:139 models/media.py:459 +#: models/enum.py:41 models/enum.py:139 models/media.py:485 msgid "value" msgstr "valeur" -#: models/enum.py:57 models/media.py:183 +#: models/enum.py:57 models/media.py:198 msgid "archive format" msgstr "format du support" -#: models/enum.py:64 models/media.py:166 +#: models/enum.py:64 models/media.py:181 msgid "secondary edition" msgstr "réédition" -#: models/enum.py:71 models/media.py:160 +#: models/enum.py:71 models/media.py:175 msgid "mode of acquisition" msgstr "mode d'acquisition" -#: models/enum.py:78 models/media.py:163 +#: models/enum.py:78 models/media.py:178 msgid "record author" msgstr "rédacteur fiche" -#: models/enum.py:85 models/media.py:170 +#: models/enum.py:85 models/media.py:185 msgid "record writer" msgstr "saisie fiche" -#: models/enum.py:92 models/media.py:156 +#: models/enum.py:92 models/media.py:171 msgid "legal rights" msgstr "droit d'utilisation" -#: models/enum.py:99 models/media.py:133 +#: models/enum.py:99 models/media.py:150 msgid "recording context" msgstr "contexte d'enregistrement" @@ -61,20 +61,20 @@ msgstr "contexte d'enregistrement" msgid "A/D conversion" msgstr "" -#: models/enum.py:113 models/media.py:289 +#: models/enum.py:113 models/media.py:335 msgid "vernacular style" msgstr "style vernaculaire" -#: models/enum.py:120 models/media.py:291 +#: models/enum.py:120 models/media.py:337 msgid "generic style" msgstr "style générique" -#: models/enum.py:127 models/media.py:419 +#: models/enum.py:127 models/media.py:456 #, fuzzy msgid "keyword" msgstr "Mot-clé" -#: models/enum.py:134 models/media.py:146 +#: models/enum.py:134 models/media.py:161 msgid "publisher / status" msgstr "éditeur / statut" @@ -82,12 +82,12 @@ msgstr "éditeur / statut" msgid "publisher" msgstr "éditeur" -#: models/enum.py:153 models/enum.py:157 models/media.py:282 +#: models/enum.py:153 models/enum.py:157 models/media.py:328 msgid "population / social group" msgstr "population / groupe social" #: models/enum.py:158 models/instrument.py:43 models/instrument.py:53 -#: models/location.py:51 models/location.py:158 models/media.py:458 +#: models/location.py:51 models/location.py:158 models/media.py:484 msgid "name" msgstr "nom" @@ -136,7 +136,7 @@ msgid "authoritative" msgstr "officiel" #: models/location.py:112 models/location.py:169 models/location.py:184 -#: models/media.py:278 +#: models/media.py:324 msgid "location" msgstr "lieu" @@ -156,312 +156,316 @@ msgstr "location aliases" msgid "ancestor location" msgstr "lieu ancêtre" -#: models/media.py:60 +#: models/media.py:70 msgid "Metadata only" msgstr "Métadonnées uniquement" -#: models/media.py:62 +#: models/media.py:72 msgid "Sound and metadata" msgstr "Son et métadonnées" -#: models/media.py:64 +#: models/media.py:74 msgid "Private data" msgstr "Données privées" -#: models/media.py:65 models/media.py:89 models/media.py:153 -#: models/media.py:306 +#: models/media.py:75 models/media.py:98 models/media.py:168 +#: models/media.py:352 msgid "public access" msgstr "accès public" -#: models/media.py:85 models/media.py:128 models/media.py:303 +#: models/media.py:94 models/media.py:145 models/media.py:349 msgid "reference" msgstr "référence" -#: models/media.py:86 models/media.py:129 models/media.py:269 -#: models/media.py:378 models/media.py:477 models/media.py:492 -#: models/media.py:526 +#: models/media.py:95 models/media.py:146 models/media.py:274 +#: models/media.py:315 models/media.py:418 models/media.py:503 +#: models/media.py:518 models/media.py:549 msgid "title" msgstr "titre" -#: models/media.py:87 models/media.py:380 models/media.py:493 -#: models/media.py:528 +#: models/media.py:96 models/media.py:276 models/media.py:420 +#: models/media.py:519 models/media.py:551 msgid "description" msgstr "" -#: models/media.py:88 models/media.py:178 models/media.py:300 +#: models/media.py:97 models/media.py:193 models/media.py:346 msgid "code" msgstr "cote" -#: models/media.py:130 models/media.py:270 +#: models/media.py:120 models/media.py:273 models/media.py:319 +msgid "collection" +msgstr "collection" + +#: models/media.py:122 +msgid "corpus" +msgstr "" + +#: models/media.py:147 models/media.py:316 msgid "original title / translation" msgstr "titre original / traduction" -#: models/media.py:131 +#: models/media.py:148 msgid "depositor / contributor" msgstr "déposant / contributeur" -#: models/media.py:134 +#: models/media.py:151 msgid "recording year (from)" msgstr "année d'enregistrement (depuis)" -#: models/media.py:135 +#: models/media.py:152 msgid "recording year (until)" msgstr "année d'enregistrement (jusqu'à)" -#: models/media.py:136 +#: models/media.py:153 msgid "year published" msgstr "année de parution" -#: models/media.py:144 models/media.py:271 +#: models/media.py:159 models/media.py:317 msgid "recordist" msgstr "collecteur" -#: models/media.py:148 +#: models/media.py:163 msgid "publisher collection" msgstr "collection éditeur" -#: models/media.py:149 +#: models/media.py:164 msgid "publisher serial number" msgstr "numéro dans la série" -#: models/media.py:150 +#: models/media.py:165 msgid "author of published notice" msgstr "auteur de la notice éditée" -#: models/media.py:151 +#: models/media.py:166 msgid "bibliographic references" msgstr "références bibliographiques" -#: models/media.py:152 +#: models/media.py:167 msgid "document type" msgstr "type de document" -#: models/media.py:161 +#: models/media.py:176 msgid "CNRS depositor" msgstr "déposant CNRS" -#: models/media.py:164 +#: models/media.py:179 msgid "related documentation" msgstr "documentation associée" -#: models/media.py:167 +#: models/media.py:182 msgid "copies" msgstr "autres exemplaires" -#: models/media.py:168 +#: models/media.py:183 msgid "comment" msgstr "commentaire" -#: models/media.py:171 +#: models/media.py:186 msgid "archiver notes" msgstr "notes de l'archiviste" -#: models/media.py:172 +#: models/media.py:187 msgid "items finished" msgstr "fiches items faîtes" -#: models/media.py:173 +#: models/media.py:188 msgid "recordist identical to depositor" msgstr "collecteur identique au déposant" -#: models/media.py:174 +#: models/media.py:189 msgid "published" msgstr "édité" -#: models/media.py:175 +#: models/media.py:190 msgid "conservation site" msgstr "lieu de conservation" -#: models/media.py:179 models/media.py:301 +#: models/media.py:194 models/media.py:347 msgid "old code" msgstr "ancienne cote" -#: models/media.py:180 models/media.py:310 +#: models/media.py:195 models/media.py:356 msgid "approximative duration" msgstr "durée approximative" -#: models/media.py:181 +#: models/media.py:196 msgid "number of components (medium / piece)" msgstr "nb de composants (support / pièce)" -#: models/media.py:185 +#: models/media.py:200 msgid "digitization" msgstr "numérisation" -#: models/media.py:186 +#: models/media.py:201 msgid "status" msgstr "etat" -#: models/media.py:187 +#: models/media.py:202 msgid "a_informer_07_03" msgstr "a_informer_07_03" -#: models/media.py:221 +#: models/media.py:236 msgid "states / nations" msgstr "états / nations" -#: models/media.py:235 +#: models/media.py:250 msgid "populations / social groups" msgstr "populations / groupes sociaux" -#: models/media.py:243 models/media.py:354 +#: models/media.py:258 models/media.py:400 msgid "computed duration" msgstr "durée calculée" -#: models/media.py:273 -msgid "collection" -msgstr "collection" +#: models/media.py:275 models/media.py:419 models/media.py:550 +#: models/media.py:569 models/media.py:583 +msgid "date" +msgstr "" + +#: models/media.py:277 models/media.py:421 models/media.py:568 +#, fuzzy +msgid "mime_type" +msgstr "type" + +#: models/media.py:278 models/media.py:422 +msgid "url" +msgstr "" + +#: models/media.py:279 models/media.py:423 +msgid "credits" +msgstr "crédits" -#: models/media.py:274 +#: models/media.py:280 models/media.py:353 models/media.py:424 +msgid "file" +msgstr "fichier" + +#: models/media.py:320 msgid "recording date (from)" msgstr "date d'enregistrement (depuis)" -#: models/media.py:275 +#: models/media.py:321 msgid "recording date (until)" msgstr "date d'enregistrement (jusqu'à)" -#: models/media.py:279 +#: models/media.py:325 msgid "location details" msgstr "précisions lieu" -#: models/media.py:280 +#: models/media.py:326 msgid "cultural area" msgstr "aire culturelle" -#: models/media.py:283 +#: models/media.py:329 msgid "language" msgstr "langue" -#: models/media.py:284 +#: models/media.py:330 msgid "comments / ethnographic context" msgstr "commentaires / contexte ethnographique" -#: models/media.py:285 +#: models/media.py:331 msgid "moda_execut" msgstr "moda_execut" -#: models/media.py:292 +#: models/media.py:338 msgid "author / compositor" msgstr "auteur / compositeur" -#: models/media.py:295 +#: models/media.py:341 msgid "remarks" msgstr "remarques" -#: models/media.py:296 +#: models/media.py:342 msgid "recordist selection" msgstr "sélection collecteur" -#: models/media.py:297 +#: models/media.py:343 msgid "recordist as in collection" msgstr "collecteur identique à la collection" -#: models/media.py:302 +#: models/media.py:348 msgid "item number" msgstr "n° de l'item" -#: models/media.py:304 +#: models/media.py:350 msgid "published references" msgstr "références éditées" -#: models/media.py:305 +#: models/media.py:351 msgid "copy of" msgstr "copie de" -#: models/media.py:307 models/media.py:384 -msgid "file" -msgstr "fichier" - -#: models/media.py:317 models/media.py:559 +#: models/media.py:363 models/media.py:582 #: templates/telemeta_default/mediaitem_detail.html:192 #: templates/telemeta_default/mediaitem_detail_video.html:192 msgid "keywords" msgstr "mots-clés" -#: models/media.py:377 models/media.py:418 models/media.py:432 -#: models/media.py:456 models/media.py:476 models/media.py:523 -#: models/media.py:544 +#: models/media.py:417 models/media.py:455 models/media.py:466 +#: models/media.py:482 models/media.py:502 models/media.py:546 +#: models/media.py:567 msgid "item" msgstr "item" -#: models/media.py:379 models/media.py:527 models/media.py:546 -#: models/media.py:560 -msgid "date" -msgstr "" - -#: models/media.py:381 models/media.py:545 -#, fuzzy -msgid "mime_type" -msgstr "type" - -#: models/media.py:382 -msgid "url" -msgstr "" - -#: models/media.py:383 -msgid "credits" -msgstr "crédits" - -#: models/media.py:434 +#: models/media.py:468 msgid "composition" msgstr "Voix / Instruments" -#: models/media.py:436 +#: models/media.py:470 msgid "vernacular name" msgstr "nom vernaculaire" -#: models/media.py:437 +#: models/media.py:471 msgid "number" msgstr "nombre" -#: models/media.py:438 +#: models/media.py:472 msgid "interprets" msgstr "interprètes" -#: models/media.py:457 +#: models/media.py:483 msgid "id" msgstr "" -#: models/media.py:460 +#: models/media.py:486 msgid "unit" msgstr "unité" -#: models/media.py:478 +#: models/media.py:504 msgid "start" msgstr "début" -#: models/media.py:479 +#: models/media.py:505 msgid "end" msgstr "fin" -#: models/media.py:490 models/media.py:509 models/media.py:524 +#: models/media.py:516 models/media.py:532 models/media.py:547 #, fuzzy msgid "public_id" msgstr "édité" -#: models/media.py:510 +#: models/media.py:533 msgid "playlist" msgstr "liste de lecture" -#: models/media.py:511 +#: models/media.py:534 #, fuzzy msgid "resource_type" msgstr "type de ressource" -#: models/media.py:512 +#: models/media.py:535 #, fuzzy msgid "resource_id" msgstr "ressource" -#: models/media.py:525 models/system.py:54 +#: models/media.py:548 models/system.py:54 msgid "time" msgstr "heure" -#: models/media.py:529 +#: models/media.py:552 msgid "author" msgstr "auteur" -#: models/media.py:547 +#: models/media.py:570 msgid "transcoded" msgstr "" @@ -694,7 +698,7 @@ msgid "Save" msgstr "Enregistrer" #: templates/telemeta_default/collection_detail.html:5 -#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:351 +#: templates/telemeta_default/collection_detail_dc.html:5 web/base.py:352 msgid "Collection" msgstr "Collection" @@ -988,7 +992,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 -#: templates/telemeta_default/mediaitem_detail_video.html:5 web/base.py:489 +#: templates/telemeta_default/mediaitem_detail_video.html:5 web/base.py:490 msgid "Item" msgstr "Item" @@ -1130,7 +1134,7 @@ msgstr "Formation" msgid "User Profile" msgstr "Profil utilisateur" -#: templates/telemeta_default/profile_detail.html:8 web/base.py:1254 +#: templates/telemeta_default/profile_detail.html:8 web/base.py:1255 msgid "User profile" msgstr "Profil utilisateur" @@ -1242,7 +1246,7 @@ msgstr "Etat/Continent" msgid "No item" msgstr "Aucun item" -#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1284 +#: templates/telemeta_default/inc/module_revisions.html:7 web/base.py:1285 msgid "Last changes" msgstr "Dernières modifications" @@ -1435,11 +1439,11 @@ msgid_plural "%(count)d collections" msgstr[0] "%(count)d collection" msgstr[1] "%(count)d collections" -#: web/base.py:350 web/base.py:488 web/base.py:779 web/base.py:1253 +#: web/base.py:351 web/base.py:489 web/base.py:780 web/base.py:1254 msgid "Access not allowed" msgstr "Accès non autorisé" -#: web/base.py:352 web/base.py:490 web/base.py:781 web/base.py:1255 +#: web/base.py:353 web/base.py:491 web/base.py:782 web/base.py:1256 msgid "" "Please login or contact the website administator to get a private access." msgstr "" diff --git a/telemeta/locale/fr/LC_MESSAGES/djangojs.mo b/telemeta/locale/fr/LC_MESSAGES/djangojs.mo index d4e9e4967c423e594355bdbae366d8097b9aff8c..f95620d7a9e5ad34d633bc7648a1cc94405e9f22 100644 GIT binary patch delta 20 ccmdnRy^DLpM<#Yl1w%6{6VuH<{9 delta 20 ccmdnRy^DLpM<#X)1w(Ty6NAk^m<}-k088=*1ONa4 diff --git a/telemeta/locale/fr/LC_MESSAGES/djangojs.po b/telemeta/locale/fr/LC_MESSAGES/djangojs.po index e551f11d..974739cf 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-11-28 17:40+0100\n" +"POT-Creation-Date: 2011-11-29 16:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Guillaume Pellerin \n" "Language-Team: LANGUAGE \n" diff --git a/telemeta/models/__init__.py b/telemeta/models/__init__.py index ee2696bb..015f1b87 100644 --- a/telemeta/models/__init__.py +++ b/telemeta/models/__init__.py @@ -34,12 +34,12 @@ # Author: Olivier Guilyardi # Guillaume Pellerin -from telemeta.models.media import * -from telemeta.models.location import * -from telemeta.models.instrument import * -from telemeta.models.enum import * -from telemeta.models.system import * -from telemeta.models.query import * -from telemeta.models.dublincore import * +from media import * +from location import * +from instrument import * +from enum import * +from system import * +from query import * +from dublincore import * diff --git a/telemeta/models/media.py b/telemeta/models/media.py index 5c272d92..84fcca09 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -1,4 +1,4 @@ - # -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- # Copyright (C) 2007-2010 Samalyse SARL # Copyright (C) 2010-2011 Parisson SARL @@ -48,7 +48,6 @@ from telemeta.models.system import Revision from telemeta.models.query import * from telemeta.models.instrument import * from telemeta.models.enum import * -from django.forms import ModelForm from django.db.models.fields import URLField @@ -112,10 +111,6 @@ class MediaCorpus(MediaResource): class Meta(MetaCore): db_table = 'media_corpus' ordering = ['code'] - -class MediaCorpusForm(ModelForm): - class Meta: - model = MediaCorpus class MediaCorpusCollectionRelation(ModelCore): @@ -268,14 +263,49 @@ class MediaCollection(MediaResource): class Meta(MetaCore): db_table = 'media_collections' ordering = ['code'] + + +class MediaCollectionRelated(MediaResource): + "Collection related media" -class MediaCollectionForm(ModelForm): - class Meta: - model = MediaCollection - def clean_doctype_code(self): - return self.cleaned_data['doctype_code'] or 0 + element_type = 'media' + + collection = ForeignKey('MediaCollection', related_name="related", verbose_name=_('collection')) + title = CharField(_('title')) + date = DateTimeField(_('date'), auto_now=True) + description = TextField(_('description')) + mime_type = CharField(_('mime_type')) + url = CharField(_('url'), max_length=500) + credits = CharField(_('credits')) + file = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename") + + def is_image(self): + is_url_image = False + if self.url: + url_types = ['.png', '.jpg', '.gif', '.jpeg'] + for type in url_types: + if type in self.url: + is_url_image = True + return 'image' in self.mime_type or is_url_image + def save(self, force_insert=False, force_update=False): + super(MediaCollectionRelated, self).save(force_insert, force_update) + + def set_mime_type(self): + if self.file: + self.mime_type = mimetypes.guess_type(self.file.path)[0] + + def __unicode__(self): + if self.title and not re.match('^ *N *$', self.title): + title = self.title + else: + title = unicode(self.item) + return title + + class Meta(MetaCore): + db_table = 'media_collection_related' + class MediaItem(MediaResource): "Describe an item" @@ -378,12 +408,6 @@ class MediaItem(MediaResource): title += ' ' + self.track return title -class MediaItemForm(ModelForm): - class Meta: - model = MediaItem - def clean_code(self): - return self.cleaned_data['code'] or None - class MediaItemRelated(MediaResource): "Item related media" @@ -425,10 +449,7 @@ class MediaItemRelated(MediaResource): class Meta(MetaCore): db_table = 'media_item_related' -class MediaItemRelatedForm(ModelForm): - class Meta: - model = MediaItemRelated - + class MediaItemKeyword(ModelCore): "Item keyword" item = ForeignKey('MediaItem', verbose_name=_('item'), related_name="keyword_relations") @@ -438,9 +459,6 @@ class MediaItemKeyword(ModelCore): db_table = 'media_item_keywords' unique_together = (('item', 'keyword'),) -class MediaItemKeywordForm(ModelForm): - class Meta: - model = MediaItemKeyword class MediaItemPerformance(ModelCore): "Item performance" @@ -456,14 +474,6 @@ class MediaItemPerformance(ModelCore): class Meta(MetaCore): db_table = 'media_item_performances' -class MediaItemPerformanceForm(ModelForm): - class Meta: - model = MediaItemPerformance - - def __init__(self, *args, **kwds): - super(MediaItemPerformanceForm, self).__init__(*args, **kwds) - self.fields['instrument'].queryset = Instrument.objects.order_by('name') - self.fields['alias'].queryset = InstrumentAlias.objects.order_by('name') class MediaItemAnalysis(ModelCore): "Item analysis result computed by TimeSide" @@ -514,9 +524,6 @@ class Playlist(ModelCore): def __unicode__(self): return self.title -class PlaylistForm(ModelForm): - class Meta: - model = Playlist class PlaylistResource(ModelCore): "Playlist components" diff --git a/telemeta/templates/telemeta_default/collection_detail.html b/telemeta/templates/telemeta_default/collection_detail.html index cb29c98e..8793a0cc 100644 --- a/telemeta/templates/telemeta_default/collection_detail.html +++ b/telemeta/templates/telemeta_default/collection_detail.html @@ -189,6 +189,12 @@ {% endwith %} +
+ {% block related %} + {% include "telemeta/inc/collection_related.html" %} + {% endblock related %} +
+ {% endblock infos %} {% endblock %} diff --git a/telemeta/templates/telemeta_default/mediaitem_detail.html b/telemeta/templates/telemeta_default/mediaitem_detail.html index 72d992f0..a7e466d8 100644 --- a/telemeta/templates/telemeta_default/mediaitem_detail.html +++ b/telemeta/templates/telemeta_default/mediaitem_detail.html @@ -275,87 +275,10 @@
- {% block related %} -
-

{% trans "Related media" %}

- {% if related_media %} -
- - - - - - - - - {% for media in related_media %} - - - - - - {% endfor %} - -
{% trans "Media" %}{% trans "Preview" %}
-
-
{% trans "Title" %}
-
- {% if media.url %} - - {% if media.title %} - {{ media.title }} - {% else %} - {{ media.url|get_filename }} - {% endif %} - {% else %} - - {% if media.title %} - {{ media.title }} - {% else %} - {{ media.file|get_filename }} - {% endif %} - {% endif %} -
-
{% trans "Description" %}
-
{{ media.description|html_line_break|safe }}
-
{% trans "Credits" %}
-
{{ media.credits }}
- {% dl_field media "mime_type" %} -
{% trans "URL" %}
-
- {% if media.url %} - {{ media.url }} - {% else %} - - {% url telemeta-item-related item.public_id media.id %} - - {% endif %} -
-
-
{% if media.is_image %} - {% if media.url %} - - - {% else %} - - - {% endif %} - {% else %} - {% if media.url %} - {% if "youtube" in media.url %} - - {% endif %} - {% endif %} - {% endif %} -
-
- {% endif %} - {% if user.is_authenticated and perms.telemeta.change_mediaitem %} -
{% trans "Edit"%} {% trans "related media"%} - {% endif %} -
- {% endblock related %} -
+ {% block related %} + {% include "telemeta/inc/mediaitem_related.html" %} + {% endblock related %} + {% endblock %} diff --git a/telemeta/templates/telemeta_default/mediaitem_keywords_edit.html b/telemeta/templates/telemeta_default/mediaitem_keywords_edit.html index 7b63cc74..9e2ca7d6 100644 --- a/telemeta/templates/telemeta_default/mediaitem_keywords_edit.html +++ b/telemeta/templates/telemeta_default/mediaitem_keywords_edit.html @@ -23,14 +23,10 @@ {% trans "Keyword" %} : {% for field in form %} - {% if not "media_item" in field.html_name %} - {% if "id" in field.html_name %} - {{ field.label_tag.as_hidden }}{{ field.as_hidden }} - {% else %} - {{ field.label_tag }}: {{ field }} - {% endif %} - {% else %} + {% if "item" in field.html_name or "id" in field.html_name %} {{ field.label_tag.as_hidden }}{{ field.as_hidden }} + {% else %} + {{ field.label_tag }}: {{ field }} {% endif %} {% endfor %} diff --git a/telemeta/templatetags/telemeta_utils.py b/telemeta/templatetags/telemeta_utils.py index ddc7329f..96672377 100644 --- a/telemeta/templatetags/telemeta_utils.py +++ b/telemeta/templatetags/telemeta_utils.py @@ -331,5 +331,8 @@ def get_filename(object): @register.filter def get_youtube(link): link = link.split('&') - ref = link[0].split('=')[1] + if "=" in link: + ref = link[0].split('=')[1] + else: + ref = link[0].split('/')[-1] return 'http://www.youtube.com/embed/'+ref diff --git a/telemeta/urls.py b/telemeta/urls.py index 103415bb..d582a893 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -113,7 +113,7 @@ urlpatterns = patterns('', 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/$', item_view.item_delete, name="telemeta-item-delete"), - url(r'^items/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)$', item_view.related_media_stream, name="telemeta-item-related"), + url(r'^items/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)$', item_view.related_media_item_stream, name="telemeta-item-related"), url(r'^items/(?P[A-Za-z0-9._-]+)/related_edit/$', item_view.related_media_edit, dict(template='telemeta/mediaitem_related_edit.html'), name="telemeta-item-related_edit"), # Markers url(r'^markers/(?P[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"), @@ -149,6 +149,8 @@ urlpatterns = patterns('', url(r'^collections/(?P[A-Za-z0-9._-]+)/add_item/$', item_view.item_add, dict(template='telemeta/mediaitem_add.html'), name="telemeta-collection-additem"), url(r'^collections/(?P[A-Za-z0-9._-]+)/delete/$', collection_view.collection_delete, name="telemeta-collection-delete"), + url(r'^collections/(?P[A-Za-z0-9._-]+)/related/(?P[A-Za-z0-9._-]+)$', collection_view.related_media_collection_stream, name="telemeta-collection-related"), + url(r'^collections/(?P[A-Za-z0-9._-]+)/related_edit/$', collection_view.related_media_edit, dict(template='telemeta/collection_related_edit.html'), name="telemeta-collection-related_edit"), # search url(r'^search/$', general_view.search, name="telemeta-search"), diff --git a/telemeta/web/base.py b/telemeta/web/base.py index b143d225..f5889e21 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -75,6 +75,7 @@ from telemeta.util.logger import Logger from telemeta.util.unicode import UnicodeWriter from telemeta.cache import TelemetaCache import telemeta.web.pages as pages +from telemeta.forms import * def render(request, template, data = None, mimetype = None): @@ -357,7 +358,24 @@ class CollectionView(object): collection.recorded_to_year) playlists = get_playlists(request) - return render(request, template, {'collection': collection, 'playlists': playlists, 'public_access': public_access, 'items': items}) + related_media = MediaCollectionRelated.objects.filter(collection=collection) + for media in related_media: + if not media.mime_type: + media.set_mime_type() + media.save() + if not media.title and media.url: + try: + from lxml import etree + parser = etree.HTMLParser() + tree = etree.parse(media.url, parser) + title = tree.find(".//title").text + title = title.replace('\n', '').strip() + media.title = title + except: + media.title = media.url + media.save() + + return render(request, template, {'collection': collection, 'playlists': playlists, 'public_access': public_access, 'items': items, 'related_media': related_media}) @method_decorator(permission_required('telemeta.change_mediacollection')) def collection_edit(self, request, public_id, template='telemeta/collection_edit.html'): @@ -428,6 +446,27 @@ class CollectionView(object): collection.delete() return HttpResponseRedirect('/collections/') + def related_media_collection_stream(self, request, collection_public_id, media_id): + collection = MediaCollection.objects.get(public_id=collection_public_id) + media = MediaCollectionRelated.objects.get(collection=collection, id=media_id) + response = HttpResponse(stream_from_file(media.file.path), mimetype=media.mime_type) +# response['Content-Disposition'] = 'attachment' + return response + + @method_decorator(permission_required('telemeta.change_mediacollection')) + def related_media_edit(self, request, public_id, template): + collection = MediaCollection.objects.get(public_id=public_id) + MediaCollectionRelatedFormSet = inlineformset_factory(MediaCollection, MediaCollectionRelated, form=MediaCollectionRelatedForm) + if request.method == 'POST': + formset = MediaCollectionRelatedFormSet(data=request.POST, files=request.FILES, instance=collection) + if formset.is_valid(): + formset.save() + collection.set_revision(request.user) + return HttpResponseRedirect('/collections/'+public_id) + else: + formset = MediaCollectionRelatedFormSet(instance=collection) + + return render(request, template, {'collection': collection, 'formset': formset,}) class ItemView(object): """Provide Collections web UI methods""" @@ -513,21 +552,21 @@ class ItemView(object): str(item.recorded_to_date).split('-')[0]) related_media = MediaItemRelated.objects.filter(item=item) - for file in related_media: - if not file.mime_type: - file.set_mime_type() - file.save() - if not file.title and file.url: + for media in related_media: + if not media.mime_type: + media.set_mime_type() + media.save() + if not media.title and media.url: try: from lxml import etree parser = etree.HTMLParser() - tree = etree.parse(file.url, parser) + tree = etree.parse(media.url, parser) title = tree.find(".//title").text title = title.replace('\n', '').strip() - file.title = title + media.title = title except: - file.title = file.url - file.save() + media.title = media.url + media.save() return render(request, template, {'item': item, 'export_formats': formats, @@ -588,7 +627,7 @@ class ItemView(object): 'previous' : previous, 'next' : next, }) - def related_media_stream(self, request, item_public_id, media_id): + def related_media_item_stream(self, request, item_public_id, media_id): item = MediaItem.objects.get(public_id=item_public_id) media = MediaItemRelated.objects.get(item=item, id=media_id) response = HttpResponse(stream_from_file(media.file.path), mimetype=media.mime_type) -- 2.39.5