]> git.parisson.com Git - telemeta.git/commitdiff
separate forms, add MediaCollectionRelated (but have to make an abstract object for...
authoryomguy <yomguy@parisson.com>
Wed, 30 Nov 2011 09:18:32 +0000 (10:18 +0100)
committeryomguy <yomguy@parisson.com>
Wed, 30 Nov 2011 09:18:32 +0000 (10:18 +0100)
19 files changed:
AUTHORS
telemeta/forms/__init__.py [new file with mode: 0644]
telemeta/forms/media.py [new file with mode: 0644]
telemeta/locale/de/LC_MESSAGES/django.mo
telemeta/locale/de/LC_MESSAGES/django.po
telemeta/locale/de/LC_MESSAGES/djangojs.mo
telemeta/locale/de/LC_MESSAGES/djangojs.po
telemeta/locale/fr/LC_MESSAGES/django.mo
telemeta/locale/fr/LC_MESSAGES/django.po
telemeta/locale/fr/LC_MESSAGES/djangojs.mo
telemeta/locale/fr/LC_MESSAGES/djangojs.po
telemeta/models/__init__.py
telemeta/models/media.py
telemeta/templates/telemeta_default/collection_detail.html
telemeta/templates/telemeta_default/mediaitem_detail.html
telemeta/templates/telemeta_default/mediaitem_keywords_edit.html
telemeta/templatetags/telemeta_utils.py
telemeta/urls.py
telemeta/web/base.py

diff --git a/AUTHORS b/AUTHORS
index c284da206b419d631f3f610bc1c6fce32411cb59..df08d054676b8bc0afe41b29e1bb673f8f75b681 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,3 +1,3 @@
-Guillaume Pellerin <yomguy@altern.org>
+Guillaume Pellerin <yomguy@parisson.com>
 Olivier Guilyardi <olivier@samalyse.com>
 Riccardo Zaccarelli <riccardo.zaccarelli@gmail.com>
diff --git a/telemeta/forms/__init__.py b/telemeta/forms/__init__.py
new file mode 100644 (file)
index 0000000..5fbd2d9
--- /dev/null
@@ -0,0 +1,2 @@
+
+from media import *
diff --git a/telemeta/forms/media.py b/telemeta/forms/media.py
new file mode 100644 (file)
index 0000000..c8c2633
--- /dev/null
@@ -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 <yomguy@parisson.com>
+
+
+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
index 84867de27c13838234c1c2aec2f0ae9067b2c150..42c881faea60eded6abbf08eaaa15b5fa318172f 100644 (file)
Binary files a/telemeta/locale/de/LC_MESSAGES/django.mo and b/telemeta/locale/de/LC_MESSAGES/django.mo differ
index 3d493f62eaa181ba7b2bd511afc71f441000778e..3081f2e4761054c378e0d47d16425c58bf11b273 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""
index 84867de27c13838234c1c2aec2f0ae9067b2c150..42c881faea60eded6abbf08eaaa15b5fa318172f 100644 (file)
Binary files a/telemeta/locale/de/LC_MESSAGES/djangojs.mo and b/telemeta/locale/de/LC_MESSAGES/djangojs.mo differ
index ff0a3c0d1b1f39799d54512ddbbb9aacdbb67928..8648c6195e193ea2a6e04b2934430fbfda059134 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
index c65aedfa69decc1bd6590012fad80e55245d109e..064eefc67155d8846411657983f34f1962deecba 100644 (file)
Binary files a/telemeta/locale/fr/LC_MESSAGES/django.mo and b/telemeta/locale/fr/LC_MESSAGES/django.mo differ
index c0f6d64517d1c5f2d62dabfd28c12b4c4fefdb03..3f7a94dba3e6837a113b27b4d6f5c7061e9285f0 100644 (file)
@@ -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 <olivier samalyse com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""
index d4e9e4967c423e594355bdbae366d8097b9aff8c..f95620d7a9e5ad34d633bc7648a1cc94405e9f22 100644 (file)
Binary files a/telemeta/locale/fr/LC_MESSAGES/djangojs.mo and b/telemeta/locale/fr/LC_MESSAGES/djangojs.mo differ
index e551f11dad488176a3cedd768fc6a6e306ae4f33..974739cfbda89976fdf9f3b06961534436a93e78 100644 (file)
@@ -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 <yomguy@parisson.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
index ee2696bbf84f8ede712ecb4a6d0c91b57675ac85..015f1b878ba03cab464d8405afd0d810d87125b4 100644 (file)
 # Author: Olivier Guilyardi <olivier@samalyse.com>
 #         Guillaume Pellerin <yomguy@parisson.com>
 
-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 *
 
 
index 5c272d9262f46b92e30f73d9e6101c20600cf521..84fcca098437b234857a49dad3d228dab10711a0 100644 (file)
@@ -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"
index cb29c98e0f19796114590ad092da8774e50f0b93..8793a0cc773ad8cf955a5933a1f276370d18a495 100644 (file)
         {% endwith %}
         </div>
         
+        <div class="extraInfos">
+            {% block related %}
+                {% include "telemeta/inc/collection_related.html" %}
+            {% endblock related %}
+        </div>
+
         {% endblock infos %}
     </div>
 {% endblock %}
index 72d992f035872cb8375d25c291d6e555c2f2ad88..a7e466d89034cc3304ee0008a040c8e10b023d6c 100644 (file)
 </div> <!-- with-rightcol -->
 
 <div class="extraInfos">
-        {% block related %}
-        <div>
-            <h4><a href="#">{% trans "Related media" %}</a></h4>
-            {% if related_media %}
-            <div>
-                <table class="instruments" width="100%">
-                    <thead>
-                        <tr>
-                            <td>{% trans "Media" %}</td>
-                            <td>{% trans "Preview" %}</td>
-                        </tr>
-                    </thead>
-                    <tbody>
-                        {% for media in related_media %}
-                        <tr>
-                            <td style="font-size: 1em;">
-                            <dl class="listing">
-                                <dt>{% trans "Title" %}</dt>
-                                <dd>
-                                    {% if media.url %}
-                                        <a href="{{ media.url }}" target="_blank">
-                                        {% if media.title %}
-                                            {{ media.title }}</a>
-                                        {% else %}
-                                            {{ media.url|get_filename }}</a>
-                                        {% endif %}
-                                    {% else %}
-                                        <a href="{% url telemeta-item-related item.public_id media.id %}" target="_blank">
-                                        {% if media.title %}
-                                            {{ media.title }}</a>
-                                        {% else %}
-                                            {{ media.file|get_filename }}</a>
-                                        {% endif %} 
-                                    {% endif %}
-                                </dd>
-                                <dt>{% trans "Description" %}</dt>
-                                <dd>{{ media.description|html_line_break|safe }}</dd>
-                                <dt>{% trans "Credits" %}</dt>
-                                <dd>{{ media.credits }}</dd>
-                                {% dl_field media "mime_type" %}
-                                <dt>{% trans "URL" %}</dt>
-                                <dd>
-                                {% if media.url %}
-                                    <a href="{{ media.url }}" target="_blank">{{ media.url }}</a>
-                                {% else %}
-                                    <a href="{% url telemeta-item-related item.public_id media.id %}" target="_blank">
-                                        {% url telemeta-item-related item.public_id media.id %}
-                                    </a>
-                                {% endif %}
-                                </dd>
-                            </dl>
-                            </td>
-
-                            <td style="padding-bottom: 1em;">{% if media.is_image %}
-                                  {% if media.url %}
-                                   <a href="{{ media.url }}">
-                                   <img src="{{ media.url }}" style="max-width: 420px; max-height: 200px;" /></a>
-                                  {% else %}
-                                   <a href="{% url telemeta-item-related item.public_id media.id %}">
-                                   <img src="{% url telemeta-item-related item.public_id media.id %}" style="max-width: 420px; max-height: 200px;" /></a>
-                                   {% endif %}
-                                {% else %}
-                                {% if media.url %}
-                                 {% if "youtube" in media.url %}
-                                 <iframe width="251" height="200" src="{{ media.url|get_youtube }}" frameborder="0" allowfullscreen></iframe>
-                                 {% endif %}
-                                {% endif %}
-                                {% endif %}
-                            </td>
-                        </tr>
-                        {% endfor %}
-                    </tbody>
-                </table>
-            </div>
-            {% endif %}
-            {% if user.is_authenticated and perms.telemeta.change_mediaitem %}
-                <br /><a href="{% url telemeta-item-related_edit item.public_id %}" class="component_icon button icon_edit">{% trans "Edit"%} {% trans "related media"%}</a>
-            {% endif %}
-        </div>
-        {% endblock related %}
-    </div>
+    {% block related %}
+        {% include "telemeta/inc/mediaitem_related.html" %}
+    {% endblock related %}
+</div>
 
 {% endblock %}
 
index 7b63cc740d9abbfa22281a0fd06efe59cb6cb4c3..9e2ca7d6e0338c48e4ac63ba7d0fa2562ad8d1bc 100644 (file)
         <tr><td><b>{% trans "Keyword" %} :</b><td></td></tr>
         {% for field in form %}
         <tr>
-        {% if not "media_item" in field.html_name %}
-            {% if "id" in field.html_name %}
-                <td>{{ field.label_tag.as_hidden }}</td><td>{{ field.as_hidden }}</td>
-            {% else %}
-                <td>{{ field.label_tag }}: </td><td>{{ field }}</td>
-            {% endif %}
-        {% else %}
+        {% if "item" in field.html_name or "id" in field.html_name %}
             <td>{{ field.label_tag.as_hidden }}</td><td>{{ field.as_hidden }}</td>
+        {% else %}
+            <td>{{ field.label_tag }}: </td><td>{{ field }}</td>
         {% endif %}
         </tr>
         {% endfor %}
index ddc7329f19bb66ad28f46a9ea8657b2b8a2a6114..9667237750704f2ba9d73ddb787fc4f019dc1cdd 100644 (file)
@@ -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
index 103415bb03e77eac204716368e9274628a6baaa9..d582a893d34e477ded23b1f452a8cd126e3957a4 100644 (file)
@@ -113,7 +113,7 @@ urlpatterns = patterns('',
     url(r'^items/(?P<public_id>[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<public_id>[A-Za-z0-9._-]+)/delete/$', item_view.item_delete, name="telemeta-item-delete"),
-    url(r'^items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)$', item_view.related_media_stream, name="telemeta-item-related"),
+    url(r'^items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)$', item_view.related_media_item_stream, name="telemeta-item-related"),
     url(r'^items/(?P<public_id>[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<marker_id>[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"),
@@ -149,6 +149,8 @@ urlpatterns = patterns('',
     url(r'^collections/(?P<public_id>[A-Za-z0-9._-]+)/add_item/$', item_view.item_add,
         dict(template='telemeta/mediaitem_add.html'), name="telemeta-collection-additem"),
     url(r'^collections/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', collection_view.collection_delete, name="telemeta-collection-delete"),
+    url(r'^collections/(?P<collection_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)$', collection_view.related_media_collection_stream, name="telemeta-collection-related"),
+    url(r'^collections/(?P<public_id>[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"),
index b143d225d2217c689192a1c818b47ffb45eead8b..f5889e216398d06c2147d7c4f5b1a3fac5ecf4c9 100644 (file)
@@ -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)