]> git.parisson.com Git - telemeta.git/commitdiff
count enumeration value in admin
authornicolas neto <nicolasxv3@gmail.com>
Tue, 4 Jul 2017 15:02:31 +0000 (17:02 +0200)
committernicolas neto <nicolasxv3@gmail.com>
Tue, 4 Jul 2017 15:02:31 +0000 (17:02 +0200)
telemeta/templates/telemeta/collection_enum_list.html [new file with mode: 0644]
telemeta/templates/telemeta/enumeration_edit.html
telemeta/templates/telemeta/media_item_enum_list.html [new file with mode: 0644]
telemeta/urls.py
telemeta/views/admin.py
telemeta/views/collection.py
telemeta/views/item.py

diff --git a/telemeta/templates/telemeta/collection_enum_list.html b/telemeta/templates/telemeta/collection_enum_list.html
new file mode 100644 (file)
index 0000000..a2e091f
--- /dev/null
@@ -0,0 +1,51 @@
+{% extends "telemeta/base.html" %}
+{% load telemeta_tags %}
+{% load i18n %}
+{% load bootstrap_pagination %}
+
+{% block head_title %}{% trans "Collections" %} - {{ block.super }}{% endblock %}
+
+{% block title%}
+<div class='row'>
+<div class="col-md-4">
+ <img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" /> {% trans "Collections" %} ({{ page_obj.start_index }} - {{ page_obj.end_index }} / {{ count }})
+    <br/>{{ enum_name }} / {{ enum_value }}
+</div>
+<div class="col-md-8">
+{% bootstrap_paginate page_obj range=10 show_first_last="True" %}
+</div>
+<div class="col-md-0">&nbsp;</div>
+</div>
+    
+{% endblock %}
+
+{% block title_buttons %}
+
+<!-- Single button -->
+<div class="btn-group">
+  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+    <span class="glyphicon glyphicon-filter"></span> {% trans "Filters" %} <span class="caret"></span>
+  </button>
+  <ul class="dropdown-menu" role="menu">
+    <li><a href="{% url "telemeta-enumeration-list-collection" enum id %}" class="">{% trans "All" context "collection list" %}</a></li>
+    <li><a href="{% url "telemeta-enumeration-list-collections-unpublished" enum id %}">{% trans "Unpublished" context "collection list" %}</a></li>
+    <li><a href="{% url "telemeta-enumeration-list-collections-published" enum id %}">{% trans "Published" context "collection list" %}</a></li>
+    <li><a href="{% url "telemeta-enumeration-list-collections-sound" enum id %}">{% trans "Digitized" context "collection list" %}</a></li>
+  </ul>
+</div>
+    {% if user.is_authenticated and perms.telemeta.add_mediacollection %}
+    <a href="{% url "telemeta-collection-add" %}">
+    <button type="button" class="btn btn-default">
+      <span class="glyphicon glyphicon-plus"></span> <span> {% trans "Add" %}</span>
+    </button>
+    </a>
+    {% endif %}
+{% endblock %}
+
+{% block content %}
+<div class="fullpage">
+{% with object_list as collections %}
+{% include "telemeta/inc/collection_list.html" %}
+{% endwith %}
+</div>
+{% endblock %}
index 96847e2e6bfd0d7e0e6c482c592e9d3263a49726..3a2540e2ab1b536c784f2f1300e8d5b17a4c3978 100644 (file)
@@ -4,52 +4,77 @@
 {% block head_title %}{% trans "Enumeration" %} : {{ enumeration_name|capfirst }} - {{ block.super }}{% endblock %}
 
 {% block title %}
-<h1><img src="{{ STATIC_URL }}telemeta/images/admin_red.png" style="vertical-align:middle" /> <a href="{% url "telemeta-admin-general" %}">{% trans "Administration" %}</a> > <a href="{% url "telemeta-admin-enumerations" %}">{% trans "Enumerations" %}</a></h1>
+    {% if perms.telemeta.change_keyword %}
+        <h1><img src="{{ STATIC_URL }}telemeta/images/admin_red.png" style="vertical-align:middle" /> <a href="{% url "telemeta-admin-general" %}">{% trans "Administration" %}</a> > <a href="{% url "telemeta-admin-enumerations" %}">{% trans "Enumerations" %}</a></h1>
+    {% else %}
+            <h1><img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" /> <a href="{% url "telemeta-admin-enumerations" %}">{% trans "Enumerations" %}</a></h1>
+    {% endif %}
 {% endblock %}
 
 {% block tabcontents %}
- <h4>{{ enumeration_name|capfirst }}</h4>
- <form class="addnew" id="_addenum" method="POST"
-        action="{% url "telemeta-enumeration-add" enumeration_id %}">{% csrf_token %}
-  <fieldset>
-   <legend>{% trans "Add entry" %}</legend>
-   <div class="field">
-    <label>{% trans "Value" %}: <input id="id_value_add" type="text" name="value"></label>
-    <label>{% trans "Notes" %}: <textarea id="id_notes_edit" name="notes" rows="4" cols="40"></textarea></label>
-   </div>
-   <div class="buttons">
-    <br />
-    <a href="#" class="component_icon button icon_add"
-      onclick="document.getElementById('_addenum').submit(); return false;">{% trans "Add" %}</a>
-   </div>
-  </fieldset>
- </form>
- {% if enumeration_values %}
- <form id="_updateenum" method="POST" action="{% url "telemeta-enumeration-update" enumeration_id %}">{% csrf_token %}
-  <table class="listing">
-   <thead>
-    <tr><th class="sel">&nbsp;</th><th>{% trans "Value"%}</th>
-
-    </tr>
-   </thead><tbody>
-    {% for record in enumeration_values %}
-    <tr>
-     <td><input type="checkbox" name="sel" value="{{record.id}}" /></td>
-     <td><a href="{% url "telemeta-enumeration-record-edit" enumeration_id record.id %}">
-        {{record.value}}</a></td>
-    </tr>
-    {% endfor %}
-    </tbody>
-  </table>
-  <div class="buttons">
-   <br />
-   <a href="#" class="component_icon button icon_cancel"
-      onclick="document.getElementById('_updateenum').submit(); return false;">{% trans "Remove selected items" %}</a>
-  </div>
- </form>
- {% else %}
-    <p class="help">{% trans "This enumeration is empty" %}</p>
- {% endif %}
-
-  <br style="clear: right"/>
+    {% if perms.telemeta.change_keyword %}
+        <h4>{{ enumeration_name|capfirst }}</h4>
+        <form class="addnew" id="_addenum" method="POST"
+              action="{% url "telemeta-enumeration-add" enumeration_id %}">{% csrf_token %}
+            <fieldset>
+                <legend>{% trans "Add entry" %}</legend>
+                <div class="field">
+                    <label>{% trans "Value" %}: <input id="id_value_add" type="text" name="value"></label>
+                    <label>{% trans "Notes" %}: <textarea id="id_notes_edit" name="notes" rows="4" cols="40"></textarea></label>
+                </div>
+                <div class="buttons">
+                    <br />
+                    <a href="#" class="component_icon button icon_add"
+                       onclick="document.getElementById('_addenum').submit(); return false;">{% trans "Add" %}</a>
+                </div>
+            </fieldset>
+        </form>
+    {% endif %}
+    {% if enumeration_values %}
+        <form id="_updateenum" method="POST" action="{% url "telemeta-enumeration-update" enumeration_id %}">{% csrf_token %}
+            <table class="listing">
+                <thead>
+                <tr><th class="sel">&nbsp;</th><th>{% trans "Value"%}</th>
+                    <th>nb{{ enumeration_support }}</th>
+                </tr>
+                </thead><tbody>
+            {% for record in enumeration_values %}
+                <tr>
+                    {% if perms.telemeta.change_keyword %}
+                        <td><input type="checkbox" name="sel" value="{{record.id}}" /></td>
+                    {% else %}
+                        <td></td>
+                    {% endif %}
+                    <td><a href="{% url "telemeta-enumeration-record-edit" enumeration_id record.id %}">
+                        {{record.value}}</a></td>
+                    {% if enumeration_id == "contextkeyword" %}
+                        <td><a href="{% url "telemeta-keyword-list-item" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                    {% else %}
+
+                        {% if enumeration_support == "Collection" %}
+                            <td><a href="{% url "telemeta-enumeration-list-collection" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                        {% else %}
+                            <td><a href="{% url "telemeta-enumeration-list-item" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                        {% endif %}
+
+                    {% endif %}
+
+                </tr>
+
+            {% endfor %}
+            </tbody>
+            </table>
+            <div class="buttons">
+                <br />
+                {% if perms.telemeta.change_keyword %}
+                    <a href="#" class="component_icon button icon_cancel"
+                       onclick="document.getElementById('_updateenum').submit(); return false;">{% trans "Remove selected items" %}</a>
+                {% endif %}
+            </div>
+        </form>
+    {% else %}
+        <p class="help">{% trans "This enumeration is empty" %}</p>
+    {% endif %}
+
+    <br style="clear: right"/>
 {% endblock %}
diff --git a/telemeta/templates/telemeta/media_item_enum_list.html b/telemeta/templates/telemeta/media_item_enum_list.html
new file mode 100644 (file)
index 0000000..728ae4f
--- /dev/null
@@ -0,0 +1,87 @@
+{% extends "telemeta/base.html" %}
+{% load i18n %}
+{% load telemeta_tags %}
+{% load bootstrap_pagination %}
+
+{% block head_title %}{% trans "Media Items" %} {% block instru_name %}{% endblock %}- {{ block.super }}{% endblock %}
+
+{% block title %}
+    <div class='row'>
+        <div class="col-md-5">
+            <img src="{{ STATIC_URL }}telemeta/images/item.png" alt="item"
+                 style="vertical-align:middle"/> {% trans "Items" %}
+
+            {% block instru_name_h %}{% endblock %}({{ page_obj.start_index }} - {{ page_obj.end_index }} / {{ count }})
+            <br/>{{ enum_name }} / {{ enum_value }}
+        </div>
+        <div class="col-md-7">
+            {% bootstrap_paginate page_obj range=10 show_first_last="True" %}
+        </div>
+        <div class="col-md-0">&nbsp;</div>
+    </div>
+{% endblock %}
+{% block title_buttons %}
+    <div class="btn-group">
+        <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+            <span class="glyphicon glyphicon-filter"></span> {% trans "Filters" %} <span class="caret"></span>
+        </button>
+        <ul class="dropdown-menu" role="menu">
+            {% if keyword %}
+                <li><a href="{% block url_all_keyword %}{% url "telemeta-keyword-list-item" enum id %}{% endblock %}" class="">{% trans "All" %}</a>
+                </li>
+                <li><a href="{% block url_unpublished_keyword %}{% url "telemeta-keyword-list-item-unpublished" enum id %}{% endblock %}">{% trans "Unpublished" %}</a>
+                </li>
+                <li><a href="{% block url_published_keyword %}{% url "telemeta-keyword-list-item-published" enum id %}{% endblock %}">{% trans "Published" %}</a>
+                </li>
+                <li><a href="{% block url_sound_keyword %}{% url "telemeta-keyword-list-item-sound" enum id %}{% endblock %}">{% trans "Digitized" context "item list" %}</a>
+                </li>
+            {% else %}
+                <li><a href="{% block url_all %}{% url "telemeta-enumeration-list-item" enum id %}{% endblock %}" class="">{% trans "All" %}</a>
+                </li>
+                <li><a href="{% block url_unpublished %}{% url "telemeta-enumeration-list-item-unpublished" enum id %}{% endblock %}">{% trans "Unpublished" %}</a>
+                </li>
+                <li><a href="{% block url_published %}{% url "telemeta-enumeration-list-item-published" enum id %}{% endblock %}">{% trans "Published" %}</a>
+                </li>
+                <li><a href="{% block url_sound %}{% url "telemeta-enumeration-list-item-sound" enum id %}{% endblock %}">{% trans "Digitized" context "item list" %}</a>
+                </li>
+            {% endif %}
+        </ul>
+
+    </div>
+
+    <div>
+        <label style="display:inline-block;vertical-align:middle">{% trans "results per page" %}:</label>
+        <div style="display:inline-block;vertical-align:middle">
+            <select id="results-per-page" name="results_page">
+                <option {% ifequal results_page 20 %}selected{% endifequal %} value="20">20</option>
+                <option {% ifequal results_page 50 %}selected{% endifequal %} value="50">50</option>
+                <option {% ifequal results_page 100 %}selected{% endifequal %} value="100">100</option>
+                <option {% ifequal results_page 250 %}selected{% endifequal %} value="250">250</option>
+                <option {% ifequal results_page 500 %}selected{% endifequal %} value="500">500</option>
+                <option {% ifequal results_page 1000 %}selected{% endifequal %} value="1000">1000</option>
+                <option {% ifequal results_page 10000 %}selected{% endifequal %} value="10000">10000</option>
+            </select>
+        </div>
+    </div>
+
+{% endblock %}
+
+{% block content %}
+    {% with object_list as items %}
+        <div class="fullpage">
+            {% include "telemeta/inc/mediaitem_list.html" %}
+        </div>
+    {% endwith %}
+{% endblock %}
+
+{% block extra_stylesheets %}
+    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}telemeta/css/jquery-ui.css"/>
+{% endblock %}
+
+
+{% block extra_javascript %}
+
+    <script src="{{ STATIC_URL }}jquery-ui/jquery-ui.min.js" type="text/javascript"></script>
+    <script src="{{ STATIC_URL }}telemeta/js/mediaitem_list.js" type="application/javascript"></script>
+
+{% endblock %}
\ No newline at end of file
index 39c9405488ecd23379d6a89f9659894f4f85cf3d..5d02642c38e38a54f4957c10621d09a200bda85e 100644 (file)
@@ -52,200 +52,218 @@ export_extensions = "|".join(item_view.list_export_extensions())
 
 
 urlpatterns = patterns('',
-    url(r'^$', home_view.home, name="telemeta-home"),
-    url(r'^test', TemplateView.as_view(template_name = "telemeta/hello_world.html")),
-
-    # items
-    url(r'^archives/items/$', ItemListView.as_view(), name="telemeta-items"),
-    url(r'^archives/full_access_items/$', ItemListViewFullAccess.as_view(), name="telemeta-fullaccess-items"),
-    url(r'^archives/items_sound/$', ItemSoundListView.as_view(), name="telemeta-items-sound"),
-    url(r'^archives/items_unpublished/$', ItemUnpublishedListView.as_view(), name="telemeta-items-unpublished"),
-    url(r'^archives/items_published/$', ItemPublishedListView.as_view(), name="telemeta-items-published"),
-
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/$', ItemDetailView.as_view(), name="telemeta-item-detail"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', ItemDetailDCView.as_view(), name="telemeta-item-dublincore"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/dc/xml/$', item_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"),
-    url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')$', item_view.item_export, name="telemeta-item-export"),
-    url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')/isAvailable$', item_view.item_export_available, name="telemeta-item-export-available"),
-                       
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/visualize/(?P<grapher_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', item_view.item_visualize, name="telemeta-item-visualize"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/analyze/xml/$', item_view.item_analyze_xml, name="telemeta-item-analyze-xml"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/item_xspf.xml$', item_view.item_playlist, dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-item-xspf"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', ItemEditView.as_view(), name="telemeta-item-edit"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', ItemCopyView.as_view(), name="telemeta-item-copy"),
-    url(r'^archives/items_add/$', ItemAddView.as_view(), name="telemeta-item-add"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/player/(?P<width>[0-9]+)x(?P<height>[0-9]+)/$', ItemPlayerDefaultView.as_view(), name="telemeta-item-player"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/video-player/(?P<width>[0-9]+)x(?P<height>[0-9]+)/$', ItemVideoPlayerView.as_view(), name="telemeta-item-video-player"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', item_view.item_delete, name="telemeta-item-delete"),
-    url(r'^archives/items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', item_view.related_media_item_stream, name="telemeta-item-related"),
-    url(r'^archives/items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', item_view.related_media_item_download, name="telemeta-item-related-download"),
-    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/markers/json/$', ItemMarkerJsonView.as_view(), name="telemeta-item-markers-json"),
-
-    # Markers
-    url(r'^archives/markers/(?P<marker_id>[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"),
-
-    # Redirections to old URLs
-    url(r'^items/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/items/%(path)s/', permanent= True), name="telemeta-item-redir"),
-    url(r'^collections/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/collections/%(path)s/', permanent= True), name="telemeta-collection-redir"),
-    url(r'^corpus/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/corpus/%(path)s/', permanent= True), name="telemeta-corpus-redir"),
-    url(r'^fonds/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/fonds/%(path)s/', permanent= True), name="telemeta-fonds-redir"),
-
-    # collections
-    url(r'^archives/collections/$', CollectionListView.as_view(), name="telemeta-collections"),
-    url(r'^archives/collections_unpublished/$', CollectionUnpublishedListView.as_view(), name="telemeta-collections-unpublished"),
-    url(r'^archives/collections_published/$', CollectionPublishedListView.as_view(), name="telemeta-collections-published"),
-    url(r'^archives/collections_sound/$', CollectionSoundListView.as_view(), name="telemeta-collections-sound"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/$', CollectionDetailView.as_view(), name="telemeta-collection-detail"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', CollectionDetailViewDC.as_view(), name="telemeta-collection-dublincore"),
-    # url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/collection_xspf.xml$', collection_view.collection_playlist, dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-collection-xspf"),
-    # url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/collection.m3u$', collection_view.collection_playlist, dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"), name="telemeta-collection-m3u"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', CollectionEditView.as_view(), name="telemeta-collection-edit"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', CollectionCopyView.as_view(), name="telemeta-collection-copy"),
-    url(r'^archives/collections_add/$', CollectionAddView.as_view(), name="telemeta-collection-add"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/add_item/$', ItemAddView.as_view(), name="telemeta-collection-additem"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', collection_view.collection_delete, name="telemeta-collection-delete"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', collection_view.related_media_collection_stream, name="telemeta-collection-related"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', collection_view.related_media_collection_download, name="telemeta-collection-related-download"),
-
-    # FIXME: need all paths
-    url(r'^collections/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(), {'url': '/archives/collections/%(path)s/', 'permanent': False}, name="telemeta-collection-redir"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/zip/$', CollectionZipView.as_view(), name="telemeta-collection-zip"),
-    url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/epub/$', CollectionEpubView.as_view(), name="telemeta-collection-epub"),
-
-    # Generic resources
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/$', ResourceListView.as_view(), name="telemeta-resource-list"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/$', ResourceDetailView.as_view(), name="telemeta-resource-detail"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', ResourceEditView.as_view(), name="telemeta-resource-edit"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', ResourceDetailDCView.as_view(), name="telemeta-resource-dublincore"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', ResourceCopyView.as_view(), name="telemeta-resource-copy"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)_add$', ResourceAddView.as_view(), name="telemeta-resource-add"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', ResourceDeleteView.as_view(), name="telemeta-resource-delete"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', resource_view.related_stream, name="telemeta-resource-related"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', resource_view.related_download, name="telemeta-resource-related-download"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/download/$', ResourceEpubView.as_view(), name="telemeta-resource-epub-download"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/list/$', ResourceEpubListView.as_view(), name="telemeta-resource-epub-list"),
-    url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/$', ResourceEpubPasswordView.as_view(), name="telemeta-resource-password-epub"),
-
-    # search
-    # url(r'^archives/$', home_view.search, name="telemeta-archives"),
-    url(r'^search/$', HaystackSearch(), name='haystack_search'),
-    url(r'^search/autocomplete/$', autocomplete),
-    url(r'^search/quick/(?P<type>[A-Za-z0-9._-]+)/$', HaystackSearch(), name='haystack_search_type'),
-    url(r'^search/advance/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search'),
-    url(r'^search/advance/(?P<type>[A-Za-z0-9._-]+)/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search_type'),
-    #url(r'^search/booleaninstru/$', boolean_view.get_boolean_query),
-
-    url(r'^search/playlist_add/(?P<type>[A-Za-z0-9._-]+)/$', NewPlaylistView().display, name='haystack_playlist'),
-    url(r'^search/playlist_confirmation/(?P<type>[A-Za-z0-9._-]+)/$',NewPlaylistView().addToPlaylist, name='add_confirmation'),
-
-    url(r'^complete_location/$', home_view.complete_location, name="telemeta-complete-location"),
-
-    # administration
-    url(r'^admin/$', admin_view.admin_index, name="telemeta-admin"),
-    url(r'^admin/general/$', admin_view.admin_general, name="telemeta-admin-general"),
-    url(r'^admin/enumerations/$', admin_view.admin_enumerations, name="telemeta-admin-enumerations"),
-    url(r'^admin/users/$', admin_view.admin_users, name="telemeta-admin-users"),
-
-    # instruments administration
-    url(r'^admin/instruments/$', instrument_view.edit_instrument , name="telemeta-instrument-edit"),
-    url(r'^admin/instruments/add/$', instrument_view.add_to_instrument, name="telemeta-instrument-add"),
-    url(r'^admin/instruments/update/$', instrument_view.update_instrument, name="telemeta-instrument-update"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/$', instrument_view.edit_instrument_value, name="telemeta-instrument-record-edit"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-published/$', ItemInstrumentPublishedListView.as_view(),name="telemeta-items-instrument-published"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-unpublished/$', ItemInstrumentUnpublishedListView.as_view(),name="telemeta-items-instrument-unpublished"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-sound/$', ItemInstrumentSoundListView.as_view(),name="telemeta-items-instrument-sound"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items/$', ItemInstrumentListView.as_view(), name="telemeta-instrument-item-list"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/update/$', instrument_view.update_instrument_value, name="telemeta-instrument-record-update"),
-    url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/replace/$', instrument_view.replace_instrument_value, name="telemeta-instrument-record-replace"),
-
-    # instruments aliases administration
-    url(r'^admin/instrument_aliases/$', instrument_alias_view.edit_instrument, name="telemeta-instrument-alias-edit"),
-    url(r'^admin/instrument_aliases/add/$', instrument_alias_view.add_to_instrument, name="telemeta-instrument-alias-add"),
-    url(r'^admin/instrument_aliases/update/$', instrument_alias_view.update_instrument, name="telemeta-instrument-alias-update"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/$', instrument_alias_view.edit_instrument_value, name="telemeta-instrument-alias-record-edit"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/update/$', instrument_alias_view.update_instrument_value, name="telemeta-instrument-alias-record-update"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/replace/$', instrument_alias_view.replace_instrument_value, name="telemeta-instrument-alias-record-replace"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-published/$', ItemAliasPublishedListView.as_view(),name="telemeta-items-alias-published"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-unpublished/$', ItemAliasUnpublishedListView.as_view(),name="telemeta-items-alias-unpublished"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-sound/$', ItemAliasSoundListView.as_view(),name="telemeta-items-alias-sound"),
-    url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-items/$', ItemAliasListView.as_view(), name="telemeta-alias-item-list"),
-
-    # enumerations administration
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/$', admin_view.edit_enumeration , name="telemeta-enumeration-edit"),
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/add/$', admin_view.add_to_enumeration, name="telemeta-enumeration-add"),
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/update/$', admin_view.update_enumeration, name="telemeta-enumeration-update"),
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/$', admin_view.edit_enumeration_value, name="telemeta-enumeration-record-edit"),
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/update/$', admin_view.update_enumeration_value, name="telemeta-enumeration-record-update"),
-    url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/replace/$', admin_view.replace_enumeration_value, name="telemeta-enumeration-replace"),
-
-    # Geographic browsing
-    url(r'^geo/$', geo_view.list_continents, name="telemeta-geo-continents"),
-    url(r'^geo/(?P<continent>[a-z_]+)/$', geo_view.list_countries, name="telemeta-geo-countries"),
-    url(r'^geo/collections/(?P<continent>[a-z_]+)/(?P<country>[a-z_]+)/$', GeoCountryCollectionView.as_view(), name="telemeta-geo-country-collections"),
-    url(r'^geo/items/(?P<continent>[a-z_]+)/(?P<country>[a-z_]+)/$', GeoCountryItemView.as_view() , name="telemeta-geo-country-items"),
-    url(r'^geo/country_info/(?P<id>[0-9a-z]+)/$', geo_view.country_info, name="telemeta-country-info"),
-
-    # Flat pages
-    url(r'^pages/(?P<path>.*)$', home_view.render_flatpage, name="telemeta-flatpage"),
-
-    # OAI-PMH Data Provider
-    url(r'^oai/.*$', home_view.handle_oai_request, name="telemeta-oai"),
-
-    # Authentication
-    url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'}, name="telemeta-login"),
-    url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'}, name="telemeta-login"),
-    #url(r'^login/$', 'ipauth.views.login', {'template_name': 'telemeta/login.html'},
-    #    name="telemeta-login"),
-    url(r'^logout/$', home_view.logout, name="telemeta-logout"),
-
-    # Users
-    url(r'^accounts/$', home_view.users, name="telemeta-users"),
-
-    # Desk
-    url(r'^desk/lists/(?:(?P<range_playlist>[0-9]+)/)?$', home_view.lists, name="telemeta-desk-lists"),
-    url(r'^desk/profile/(?P<username>[A-Za-z0-9@+._-]+)/$', profile_view.profile_detail, name="telemeta-desk-profile"),
-    url(r'^desk/home/$', home_view.home, name="telemeta-desk-home"),
-
-    # Profiles
-    url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail, name="telemeta-profile-detail"),
-    url(r'^users/(?P<username>[A-Za-z0-9._-]+)/$', profile_view.profile_detail, name="telemeta-profile-detail-2"),
-    url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/profile/edit/$', profile_view.profile_edit, name="telemeta-profile-edit"),
-    url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/rss/$', UserRevisionsFeed(),  name="telemeta-user-rss"),
-
-    # Registration
-    url(r'^accounts/password_change/$', 'django.contrib.auth.views.password_change', {'template_name': 'telemeta/registration/password_change_form.html'}, name="password_change"),
-    url(r'^accounts/password_change_done/$', 'django.contrib.auth.views.password_change_done', {'template_name': 'telemeta/registration/password_change_done.html'}, name="password_change_done"),
-    url(r'^accounts/password_reset/$', 'django.contrib.auth.views.password_reset', {'template_name': 'telemeta/registration/password_reset_form.html', 'email_template_name': 'registration/password_reset_email.html'}, name="password_reset"),
-    url(r'^accounts/password_reset_done/$', 'django.contrib.auth.views.password_reset_done', {'template_name': 'telemeta/registration/password_reset_done.html'}, name="password_reset_done"),
-    url(r'^accounts/password_reset_confirm/(?P<uidb64>[A-Za-z0-9._-]+)/(?P<token>[A-Za-z0-9._-]+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name': 'telemeta/registration/password_reset_confirm.html'}, name="password_reset_confirm"),
-    url(r'^accounts/password_reset_complete/$', 'django.contrib.auth.views.password_reset_complete', {'template_name': 'telemeta/registration/password_reset_complete.html'}, name="password_reset_complete"),
-
-    # JSON RPC
-    url(r'jsonrpc/$', jsonrpc_site.dispatch, name='jsonrpc_mountpoint'),
-
-    # Playlists
-    url(r'^playlists/(?P<public_id>[a-zA-Z0-9]+)/(?P<resource_type>[a-zA-Z0-9]+)/csv/$', playlist_view.playlist_csv_export, name="telemeta-playlist-csv-export"),
-    url(r'^playlists/playlist_add/$', NewPlaylistView().display, name='playlist'),
-
-    # RSS feeds
-    url(r'^rss/$', LastestRevisionsFeed(), name="telemeta-rss"),
-
-    # Static media
-    # FIXME:need to move export dir from the cache
-    url(r'^media/cache/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.TELEMETA_CACHE_DIR,}),
-
-    url(r'^', include('jqchat.urls')),
-
-    # Timeside
-    #url(r'^timeside/', include('timeside.server.urls')),
-
-)
+                       url(r'^$', home_view.home, name="telemeta-home"),
+                       url(r'^test', TemplateView.as_view(template_name = "telemeta/hello_world.html")),
+
+                       # items
+                       url(r'^archives/items/$', ItemListView.as_view(), name="telemeta-items"),
+                       url(r'^archives/full_access_items/$', ItemListViewFullAccess.as_view(), name="telemeta-fullaccess-items"),
+                       url(r'^archives/items_sound/$', ItemSoundListView.as_view(), name="telemeta-items-sound"),
+                       url(r'^archives/items_unpublished/$', ItemUnpublishedListView.as_view(), name="telemeta-items-unpublished"),
+                       url(r'^archives/items_published/$', ItemPublishedListView.as_view(), name="telemeta-items-published"),
+
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/$', ItemDetailView.as_view(), name="telemeta-item-detail"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', ItemDetailDCView.as_view(), name="telemeta-item-dublincore"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/dc/xml/$', item_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"),
+                       url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')$', item_view.item_export, name="telemeta-item-export"),
+                       url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')/isAvailable$', item_view.item_export_available, name="telemeta-item-export-available"),
+
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/visualize/(?P<grapher_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', item_view.item_visualize, name="telemeta-item-visualize"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/analyze/xml/$', item_view.item_analyze_xml, name="telemeta-item-analyze-xml"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/item_xspf.xml$', item_view.item_playlist, dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-item-xspf"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', ItemEditView.as_view(), name="telemeta-item-edit"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', ItemCopyView.as_view(), name="telemeta-item-copy"),
+                       url(r'^archives/items_add/$', ItemAddView.as_view(), name="telemeta-item-add"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/player/(?P<width>[0-9]+)x(?P<height>[0-9]+)/$', ItemPlayerDefaultView.as_view(), name="telemeta-item-player"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/video-player/(?P<width>[0-9]+)x(?P<height>[0-9]+)/$', ItemVideoPlayerView.as_view(), name="telemeta-item-video-player"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', item_view.item_delete, name="telemeta-item-delete"),
+                       url(r'^archives/items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', item_view.related_media_item_stream, name="telemeta-item-related"),
+                       url(r'^archives/items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', item_view.related_media_item_download, name="telemeta-item-related-download"),
+                       url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/markers/json/$', ItemMarkerJsonView.as_view(), name="telemeta-item-markers-json"),
+
+                       # Markers
+                       url(r'^archives/markers/(?P<marker_id>[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"),
+
+                       # Redirections to old URLs
+                       url(r'^items/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/items/%(path)s/', permanent= True), name="telemeta-item-redir"),
+                       url(r'^collections/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/collections/%(path)s/', permanent= True), name="telemeta-collection-redir"),
+                       url(r'^corpus/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/corpus/%(path)s/', permanent= True), name="telemeta-corpus-redir"),
+                       url(r'^fonds/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(url='/archives/fonds/%(path)s/', permanent= True), name="telemeta-fonds-redir"),
+
+                       # collections
+                       url(r'^archives/collections/$', CollectionListView.as_view(), name="telemeta-collections"),
+                       url(r'^archives/collections_unpublished/$', CollectionUnpublishedListView.as_view(), name="telemeta-collections-unpublished"),
+                       url(r'^archives/collections_published/$', CollectionPublishedListView.as_view(), name="telemeta-collections-published"),
+                       url(r'^archives/collections_sound/$', CollectionSoundListView.as_view(), name="telemeta-collections-sound"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/$', CollectionDetailView.as_view(), name="telemeta-collection-detail"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', CollectionDetailViewDC.as_view(), name="telemeta-collection-dublincore"),
+                       # url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/collection_xspf.xml$', collection_view.collection_playlist, dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"), name="telemeta-collection-xspf"),
+                       # url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/collection.m3u$', collection_view.collection_playlist, dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"), name="telemeta-collection-m3u"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', CollectionEditView.as_view(), name="telemeta-collection-edit"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', CollectionCopyView.as_view(), name="telemeta-collection-copy"),
+                       url(r'^archives/collections_add/$', CollectionAddView.as_view(), name="telemeta-collection-add"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/add_item/$', ItemAddView.as_view(), name="telemeta-collection-additem"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', collection_view.collection_delete, name="telemeta-collection-delete"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', collection_view.related_media_collection_stream, name="telemeta-collection-related"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', collection_view.related_media_collection_download, name="telemeta-collection-related-download"),
+
+                       # FIXME: need all paths
+                       url(r'^collections/(?P<path>[A-Za-z0-9._-s/]+)/$', RedirectView.as_view(), {'url': '/archives/collections/%(path)s/', 'permanent': False}, name="telemeta-collection-redir"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/zip/$', CollectionZipView.as_view(), name="telemeta-collection-zip"),
+                       url(r'^archives/collections/(?P<public_id>[A-Za-z0-9._-]+)/epub/$', CollectionEpubView.as_view(), name="telemeta-collection-epub"),
+
+                       # Generic resources
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/$', ResourceListView.as_view(), name="telemeta-resource-list"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/$', ResourceDetailView.as_view(), name="telemeta-resource-detail"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', ResourceEditView.as_view(), name="telemeta-resource-edit"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/dc/$', ResourceDetailDCView.as_view(), name="telemeta-resource-dublincore"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', ResourceCopyView.as_view(), name="telemeta-resource-copy"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)_add$', ResourceAddView.as_view(), name="telemeta-resource-add"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', ResourceDeleteView.as_view(), name="telemeta-resource-delete"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/view/$', resource_view.related_stream, name="telemeta-resource-related"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/related/(?P<media_id>[A-Za-z0-9._-]+)/download/$', resource_view.related_download, name="telemeta-resource-related-download"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/download/$', ResourceEpubView.as_view(), name="telemeta-resource-epub-download"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/list/$', ResourceEpubListView.as_view(), name="telemeta-resource-epub-list"),
+                       url(r'^archives/(?P<type>[A-Za-z0-9._-]+)/(?P<public_id>[A-Za-z0-9._-]+)/epub/$', ResourceEpubPasswordView.as_view(), name="telemeta-resource-password-epub"),
+
+                       # search
+                       # url(r'^archives/$', home_view.search, name="telemeta-archives"),
+                       url(r'^search/$', HaystackSearch(), name='haystack_search'),
+                       url(r'^search/autocomplete/$', autocomplete),
+                       url(r'^search/quick/(?P<type>[A-Za-z0-9._-]+)/$', HaystackSearch(), name='haystack_search_type'),
+                       url(r'^search/advance/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search'),
+                       url(r'^search/advance/(?P<type>[A-Za-z0-9._-]+)/$', HaystackAdvanceSearch(form_class=HayAdvanceForm, template='search/advanceSearch.html'), name='haystack_advance_search_type'),
+                       #url(r'^search/booleaninstru/$', boolean_view.get_boolean_query),
+
+                       url(r'^search/playlist_add/(?P<type>[A-Za-z0-9._-]+)/$', NewPlaylistView().display, name='haystack_playlist'),
+                       url(r'^search/playlist_confirmation/(?P<type>[A-Za-z0-9._-]+)/$',NewPlaylistView().addToPlaylist, name='add_confirmation'),
+
+                       url(r'^complete_location/$', home_view.complete_location, name="telemeta-complete-location"),
+
+                       # administration
+                       url(r'^admin/$', admin_view.admin_index, name="telemeta-admin"),
+                       url(r'^admin/general/$', admin_view.admin_general, name="telemeta-admin-general"),
+                       url(r'^admin/enumerations/$', admin_view.admin_enumerations, name="telemeta-admin-enumerations"),
+                       url(r'^admin/users/$', admin_view.admin_users, name="telemeta-admin-users"),
+
+                       # instruments administration
+                       url(r'^admin/instruments/$', instrument_view.edit_instrument , name="telemeta-instrument-edit"),
+                       url(r'^admin/instruments/add/$', instrument_view.add_to_instrument, name="telemeta-instrument-add"),
+                       url(r'^admin/instruments/update/$', instrument_view.update_instrument, name="telemeta-instrument-update"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/$', instrument_view.edit_instrument_value, name="telemeta-instrument-record-edit"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-published/$', ItemInstrumentPublishedListView.as_view(),name="telemeta-items-instrument-published"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-unpublished/$', ItemInstrumentUnpublishedListView.as_view(),name="telemeta-items-instrument-unpublished"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items-sound/$', ItemInstrumentSoundListView.as_view(),name="telemeta-items-instrument-sound"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/'+'list-items/$', ItemInstrumentListView.as_view(), name="telemeta-instrument-item-list"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/update/$', instrument_view.update_instrument_value, name="telemeta-instrument-record-update"),
+                       url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/replace/$', instrument_view.replace_instrument_value, name="telemeta-instrument-record-replace"),
+
+                       # instruments aliases administration
+                       url(r'^admin/instrument_aliases/$', instrument_alias_view.edit_instrument, name="telemeta-instrument-alias-edit"),
+                       url(r'^admin/instrument_aliases/add/$', instrument_alias_view.add_to_instrument, name="telemeta-instrument-alias-add"),
+                       url(r'^admin/instrument_aliases/update/$', instrument_alias_view.update_instrument, name="telemeta-instrument-alias-update"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/$', instrument_alias_view.edit_instrument_value, name="telemeta-instrument-alias-record-edit"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/update/$', instrument_alias_view.update_instrument_value, name="telemeta-instrument-alias-record-update"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/replace/$', instrument_alias_view.replace_instrument_value, name="telemeta-instrument-alias-record-replace"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-published/$', ItemAliasPublishedListView.as_view(),name="telemeta-items-alias-published"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-unpublished/$', ItemAliasUnpublishedListView.as_view(),name="telemeta-items-alias-unpublished"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-sound/$', ItemAliasSoundListView.as_view(),name="telemeta-items-alias-sound"),
+                       url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-items/$', ItemAliasListView.as_view(), name="telemeta-alias-item-list"),
+
+                       # enumerations administration
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/$',admin_view.edit_enumeration,name="telemeta-enumeration-edit"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/add/$',admin_view.add_to_enumeration,name="telemeta-enumeration-add"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/update/$', admin_view.update_enumeration,name="telemeta-enumeration-update"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/$',admin_view.edit_enumeration_value, name="telemeta-enumeration-record-edit"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/update/$',admin_view.update_enumeration_value, name="telemeta-enumeration-record-update"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/replace/$',admin_view.replace_enumeration_value, name="telemeta-enumeration-replace"),
+
+                       # Enumeration list collection
+                       url( r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/collection/list/$',CollectionEnumListView.as_view(), name="telemeta-enumeration-list-collection"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/collections_unpublished/list/$',CollectionUnpublishedEnumListView.as_view(),name="telemeta-enumeration-list-collections-unpublished"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/collections_published/list/$',CollectionPublishedEnumListView.as_view(),name="telemeta-enumeration-list-collections-published"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/collections_sound/list/$',CollectionSoundEnumListView.as_view(), name="telemeta-enumeration-list-collections-sound"),
+
+                       # Enumeration list item
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/item/list/$',ItemEnumListView.as_view(), name="telemeta-enumeration-list-item"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/item_unpublished/list/$',ItemUnpublishedEnumListView.as_view(), name="telemeta-enumeration-list-item-unpublished"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/item_published/list/$',ItemPublishedEnumListView.as_view(), name="telemeta-enumeration-list-item-published"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/item_sound/list/$',ItemSoundEnumListView.as_view(), name="telemeta-enumeration-list-item-sound"),
+
+                       # keyword list
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/keyword_item/list/$',ItemKeywordListView.as_view(), name="telemeta-keyword-list-item"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/keyword_item_unpublished/list/$',ItemKeywordPublishedListView.as_view(), name="telemeta-keyword-list-item-unpublished"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/keyword_item_published/list/$',ItemKeywordUnpublishedListView.as_view(), name="telemeta-keyword-list-item-published"),
+                       url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/' + r'(?P<value_id>[0-9]+)/keyword_item_sound/list/$',ItemKeywordSoundListView.as_view(), name="telemeta-keyword-list-item-sound"),
+
+                       # Geographic browsing
+                       url(r'^geo/$', geo_view.list_continents, name="telemeta-geo-continents"),
+                       url(r'^geo/(?P<continent>[a-z_]+)/$', geo_view.list_countries, name="telemeta-geo-countries"),
+                       url(r'^geo/collections/(?P<continent>[a-z_]+)/(?P<country>[a-z_]+)/$', GeoCountryCollectionView.as_view(), name="telemeta-geo-country-collections"),
+                       url(r'^geo/items/(?P<continent>[a-z_]+)/(?P<country>[a-z_]+)/$', GeoCountryItemView.as_view() , name="telemeta-geo-country-items"),
+                       url(r'^geo/country_info/(?P<id>[0-9a-z]+)/$', geo_view.country_info, name="telemeta-country-info"),
+
+                       # Flat pages
+                       url(r'^pages/(?P<path>.*)$', home_view.render_flatpage, name="telemeta-flatpage"),
+
+                       # OAI-PMH Data Provider
+                       url(r'^oai/.*$', home_view.handle_oai_request, name="telemeta-oai"),
+
+                       # Authentication
+                       url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'}, name="telemeta-login"),
+                       url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'telemeta/login.html'}, name="telemeta-login"),
+                       #url(r'^login/$', 'ipauth.views.login', {'template_name': 'telemeta/login.html'},
+                       #    name="telemeta-login"),
+                       url(r'^logout/$', home_view.logout, name="telemeta-logout"),
+
+                       # Users
+                       url(r'^accounts/$', home_view.users, name="telemeta-users"),
+
+                       # Desk
+                       url(r'^desk/lists/(?:(?P<range_playlist>[0-9]+)/)?$', home_view.lists, name="telemeta-desk-lists"),
+                       url(r'^desk/profile/(?P<username>[A-Za-z0-9@+._-]+)/$', profile_view.profile_detail, name="telemeta-desk-profile"),
+                       url(r'^desk/home/$', home_view.home, name="telemeta-desk-home"),
+
+                       # Profiles
+                       url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/profile/$', profile_view.profile_detail, name="telemeta-profile-detail"),
+                       url(r'^users/(?P<username>[A-Za-z0-9._-]+)/$', profile_view.profile_detail, name="telemeta-profile-detail-2"),
+                       url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/profile/edit/$', profile_view.profile_edit, name="telemeta-profile-edit"),
+                       url(r'^accounts/(?P<username>[A-Za-z0-9._-]+)/rss/$', UserRevisionsFeed(),  name="telemeta-user-rss"),
+
+                       # Registration
+                       url(r'^accounts/password_change/$', 'django.contrib.auth.views.password_change', {'template_name': 'telemeta/registration/password_change_form.html'}, name="password_change"),
+                       url(r'^accounts/password_change_done/$', 'django.contrib.auth.views.password_change_done', {'template_name': 'telemeta/registration/password_change_done.html'}, name="password_change_done"),
+                       url(r'^accounts/password_reset/$', 'django.contrib.auth.views.password_reset', {'template_name': 'telemeta/registration/password_reset_form.html', 'email_template_name': 'registration/password_reset_email.html'}, name="password_reset"),
+                       url(r'^accounts/password_reset_done/$', 'django.contrib.auth.views.password_reset_done', {'template_name': 'telemeta/registration/password_reset_done.html'}, name="password_reset_done"),
+                       url(r'^accounts/password_reset_confirm/(?P<uidb64>[A-Za-z0-9._-]+)/(?P<token>[A-Za-z0-9._-]+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name': 'telemeta/registration/password_reset_confirm.html'}, name="password_reset_confirm"),
+                       url(r'^accounts/password_reset_complete/$', 'django.contrib.auth.views.password_reset_complete', {'template_name': 'telemeta/registration/password_reset_complete.html'}, name="password_reset_complete"),
+
+                       # JSON RPC
+                       url(r'jsonrpc/$', jsonrpc_site.dispatch, name='jsonrpc_mountpoint'),
+
+                       # Playlists
+                       url(r'^playlists/(?P<public_id>[a-zA-Z0-9]+)/(?P<resource_type>[a-zA-Z0-9]+)/csv/$', playlist_view.playlist_csv_export, name="telemeta-playlist-csv-export"),
+                       url(r'^playlists/playlist_add/$', NewPlaylistView().display, name='playlist'),
+
+                       # RSS feeds
+                       url(r'^rss/$', LastestRevisionsFeed(), name="telemeta-rss"),
+
+                       # Static media
+                       # FIXME:need to move export dir from the cache
+                       url(r'^media/cache/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.TELEMETA_CACHE_DIR,}),
+
+                       url(r'^', include('jqchat.urls')),
+
+                       # Timeside
+                       #url(r'^timeside/', include('timeside.server.urls')),
+
+                       )
 
 
 if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
     import debug_toolbar
     urlpatterns += patterns('',
-    url(r'^__debug__/', include(debug_toolbar.urls)),
-    # for the graphical browser/web console only, omissible
-    url(r'json/browse/', 'jsonrpc.views.browse', name="jsonrpc_browser"),
-    )
+                            url(r'^__debug__/', include(debug_toolbar.urls)),
+                            # for the graphical browser/web console only, omissible
+                            url(r'json/browse/', 'jsonrpc.views.browse', name="jsonrpc_browser"),
+                            )
index ec579eb69cf1648a700242786cc4d3db7096d7e6..c940931b2e343e841d2bfb1336ae699940057e41 100644 (file)
@@ -77,17 +77,65 @@ class AdminView(object):
 
     @method_decorator(permission_required('telemeta.change_keyword'))
     def edit_enumeration(self, request, enumeration_id):
-
-        enumeration  = self.__get_enumeration(enumeration_id)
+        atr = "";
+        print enumeration_id
+        enumeration = self.__get_enumeration(enumeration_id)
         if enumeration == None:
             raise Http404
-
         vars = self.__get_admin_context_vars()
         vars["enumeration_id"] = enumeration._meta.module_name
         vars["enumeration_name"] = enumeration._meta.verbose_name
         vars["enumeration_values"] = enumeration.objects.all()
+        vars["enumeration_support"]=""
+        vars["enumeration_count"] = []
+        f =  MediaCollection._meta.get_all_field_names()
+        for field in f :
+            if field in enumeration._meta.db_table.replace(" ","_"):
+                atr=field;
+        if  enumeration._meta.db_table.replace(" ","_") == "context_keywords":
+            vars["enumeration_support"] = "Item"
+            vars["enumeration_count"] = self.__getCountKeyWord(vars["enumeration_values"])
+        else:
+            if atr == "":
+                vars["enumeration_support"]="Item"
+                vars["enumeration_count"] = self.__getCountItem(enumeration, vars["enumeration_values"])
+            else:
+                vars["enumeration_support"] = "Collection"
+                vars["enumeration_count"] = self.__getCountColl(vars["enumeration_values"],atr)
+
         return render(request, 'telemeta/enumeration_edit.html', vars)
 
+    def __getCountColl(self, values, atr):
+        c = []
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaCollection.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
+
+    def __getCountItem(self, enumeration, values):
+        c = []
+        atr=""
+        f = MediaItem._meta.get_all_field_names()
+        for field in f:
+            if field in enumeration._meta.db_table.replace(" ", "_"):
+                atr = field;
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaItem.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
+
+    def __getCountKeyWord(self, values):
+        c = []
+        atr="keyword_id"
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaItemKeyword.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
+
+
     @method_decorator(permission_required('telemeta.add_keyword'))
     def add_to_enumeration(self, request, enumeration_id):
 
index d440221af4f44b5ddf3bea496ba001056b394fef..decc8bedff04793a20a366e6672fa093929f88fd 100644 (file)
@@ -19,7 +19,7 @@
 
 # Authors: Olivier Guilyardi <olivier@samalyse.com>
 #          Guillaume Pellerin <yomguy@parisson.com>
-
+import telemeta
 
 from telemeta.views.core import *
 from telemeta.views.core import serve_media
@@ -381,3 +381,82 @@ class CollectionEpubView(BaseEpubMixin, View):
     def dispatch(self, *args, **kwargs):
         return super(CollectionEpubView, self).dispatch(*args, **kwargs)
 
+
+class CollectionEnumListView(CollectionListView):
+    template_name = "telemeta/collection_enum_list.html"
+
+
+    def get_context_data(self, **kwargs):
+        context = super(CollectionListView, self).get_context_data(**kwargs)
+        context['enum']=self.request.path[20:-6].split('/')[0]
+        context['id']=self.request.path[20:-6].split('/')[1]
+        context['count'] = self.object_list.count()
+        context['enum_name'] = CollectionEnumListView().get_enumeration(self.request.path.split('/')[3])._meta.verbose_name
+        context['enum_value'] = CollectionEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(id__exact=self.request.path.split('/')[4])
+        return context
+
+    def get_queryset(self):
+        enumeration = self.get_enumeration(self.request.path[20:-6].split('/')[0])
+        queryset= self.get_coll(enumeration.objects.filter(id=self.request.path[20:-6].split('/')[1]).get())
+        return queryset
+
+    def get_coll(self, enum):
+        f = MediaCollection._meta.get_all_field_names()
+        for field in f:
+            if field in enum._meta.db_table.replace(" ", "_"):
+                atr = field;
+        atr = atr
+        lookup = "%s__exact" % atr
+        return MediaCollection.objects.filter(**{lookup: enum.__getattribute__("id")})
+
+    def get_enumeration(self,id):
+        from django.db.models import get_models
+        models = get_models(telemeta.models)
+        for model in models:
+            if model._meta.module_name == id:
+                break
+
+        if model._meta.module_name != id:
+            return None
+        return model
+
+
+class CollectionPublishedEnumListView(CollectionEnumListView):
+
+    def get_queryset(self):
+        c = CollectionEnumListView()
+        #id of value of enumeration
+        i= self.request.path.split('/')[4]
+        enumeration = c.get_enumeration(self.request.path.split('/')[3])
+        queryset = self.get_coll(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_coll(self, enum,c):
+        return c.get_coll(enum).filter(code__contains='_E_')
+
+
+class CollectionUnpublishedEnumListView(CollectionEnumListView):
+
+    def get_queryset(self):
+        c = CollectionEnumListView()
+        #id of value of enumeration
+        i= self.request.path.split('/')[4]
+        enumeration = c.get_enumeration( self.request.path.split('/')[3])
+        queryset = self.get_coll(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_coll(self, enum, c):
+        return c.get_coll(enum).filter(code__contains='_I_')
+
+
+class CollectionSoundEnumListView(CollectionEnumListView):
+    def get_queryset(self):
+        c = CollectionEnumListView()
+        #id of value of enumeration
+        i= self.request.path.split('/')[4]
+        enumeration = c.get_enumeration( self.request.path.split('/')[3])
+        queryset = self.get_coll(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_coll(self, enum,c):
+        return c.get_coll(enum).sound().order_by('code', 'old_code')
index df24ffb5d73441fab0dd6e5ac57e40daf94f9d54..f9903f70eddaf6ef43d1eca755c00b5db104ef99 100644 (file)
@@ -20,6 +20,7 @@
 
 # Authors: Olivier Guilyardi <olivier@samalyse.com>
 #          Guillaume Pellerin <yomguy@parisson.com>
+import telemeta
 
 from telemeta.views.core import *
 from telemeta.views.core import serve_media
@@ -32,7 +33,6 @@ import time
 
 
 class ItemBaseMixin(TelemetaBaseMixin):
-
     graphers = timeside.core.processor.processors(timeside.core.api.IGrapher)
     decoders = timeside.core.processor.processors(timeside.core.api.IDecoder)
     encoders = timeside.core.processor.processors(timeside.core.api.IEncoder)
@@ -45,16 +45,16 @@ class ItemBaseMixin(TelemetaBaseMixin):
     default_grapher_sizes = getattr(settings, 'TIMESIDE_DEFAULT_GRAPHER_SIZES', ['346x130', ])
     auto_zoom = getattr(settings, 'TIMESIDE_AUTO_ZOOM', False)
 
-    public_graphers  = ['waveform_centroid' ,'waveform_simple',
-                        'spectrogram', 'spectrogram_log']
-    
+    public_graphers = ['waveform_centroid', 'waveform_simple',
+                       'spectrogram', 'spectrogram_log']
+
     def get_graphers(self):
         graphers = []
         user = self.request.user
         graphers_access = (user.is_staff
                            or user.is_superuser
                            or user.has_perm('can_run_analysis'))
-           
+
         for grapher in self.graphers:
             if (not graphers_access
                 and grapher.id() not in self.public_graphers):
@@ -297,7 +297,7 @@ class ItemView(ItemBaseMixin):
                 graph = grapher(width=width, height=height)
                 (decoder | graph).run()
                 graph.watermark('timeside', opacity=.6, margin=(5, 5))
-                #f = open(path, 'w')
+                # f = open(path, 'w')
                 graph.render(output=path)
                 # f.close()
                 self.cache_data.add_file(image_file)
@@ -408,7 +408,7 @@ class ItemView(ItemBaseMixin):
             video = item.file.path
             response = serve_media(video, content_type=mime_type)
             # response['Content-Disposition'] = 'attachment'
-            # TF : I don't know why empty attachment was set
+            #  TF : I don't know why empty attachment was set
             # TODO: remove if useless
             if return_availability:
                 data = json.dumps({'available': True})
@@ -420,7 +420,7 @@ class ItemView(ItemBaseMixin):
             video = item.file.path
             response = serve_media(video, content_type=mime_type)
             # response['Content-Disposition'] = 'attachment'
-            # TF : I don't know why empty attachment was set,
+            #  TF : I don't know why empty attachment was set,
             # TODO: remove if useless
             if return_availability:
                 data = json.dumps({'available': True})
@@ -428,7 +428,7 @@ class ItemView(ItemBaseMixin):
             return response
 
         (media, mime_type) = self.item_transcode(item, extension)
-        #media  = None
+        # media  = None
         if media:
             if return_availability:
                 data = json.dumps({'available': True})
@@ -447,7 +447,7 @@ class ItemView(ItemBaseMixin):
             messages.info(request, title)
             response = render(request, 'telemeta/messages.html', {'description': description})
             from django.utils.cache import patch_cache_control
-            #patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
+            # patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
             return response
 
     def item_export_available(self, request, public_id, extension):
@@ -491,7 +491,6 @@ class ItemView(ItemBaseMixin):
 
 
 class ItemListView(ListView):
-
     model = MediaItem
     template_name = "telemeta/mediaitem_list.html"
     queryset = MediaItem.objects.enriched().order_by('code', 'old_code')
@@ -507,11 +506,12 @@ class ItemListView(ListView):
 
 
 class ItemListViewFullAccess(ListView):
-
     model = MediaItem
     template_name = "telemeta/mediaitem_list.html"
     paginate_by = 20
-    queryset = MediaItem.objects.enriched().filter(Q(collection__public_access="full") | Q(public_access="full")).sound().exclude(collection__public_access="none").order_by('code', 'old_code')
+    queryset = MediaItem.objects.enriched().filter(
+        Q(collection__public_access="full") | Q(public_access="full")).sound().exclude(
+        collection__public_access="none").order_by('code', 'old_code')
 
     def get_context_data(self, **kwargs):
         context = super(ItemListViewFullAccess, self).get_context_data(**kwargs)
@@ -520,22 +520,18 @@ class ItemListViewFullAccess(ListView):
 
 
 class ItemUnpublishedListView(ItemListView):
-
     queryset = MediaItem.objects.filter(collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemPublishedListView(ItemListView):
-
     queryset = MediaItem.objects.filter(collection__code__contains='_E_').order_by('code', 'old_code')
 
 
 class ItemSoundListView(ItemListView):
-
     queryset = MediaItem.objects.sound().order_by('code', 'old_code')
 
 
 class ItemInstrumentListView(ItemListView):
-
     template_name = "telemeta/media_item_instrument_list.html"
 
     def get_queryset(self):
@@ -551,25 +547,23 @@ class ItemInstrumentListView(ItemListView):
 
 
 class ItemInstrumentPublishedListView(ItemInstrumentListView):
-
     def get_queryset(self):
-        return super(ItemInstrumentPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by('code', 'old_code')
+        return super(ItemInstrumentPublishedListView, self).get_queryset().filter(
+            collection__code__contains='_E_').order_by('code', 'old_code')
 
 
 class ItemInstrumentUnpublishedListView(ItemInstrumentListView):
-
     def get_queryset(self):
-        return super(ItemInstrumentUnpublishedListView, self).get_queryset().filter(collection__code__contains='_I_').order_by('code', 'old_code')
+        return super(ItemInstrumentUnpublishedListView, self).get_queryset().filter(
+            collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemInstrumentSoundListView(ItemInstrumentListView):
-
     def get_queryset(self):
         return super(ItemInstrumentSoundListView, self).get_queryset().sound().order_by('code', 'old_code')
 
 
 class ItemAliasListView(ItemListView):
-
     template_name = "telemeta/media_item_alias_list.html"
 
     def get_queryset(self):
@@ -585,28 +579,27 @@ class ItemAliasListView(ItemListView):
 
 
 class ItemAliasPublishedListView(ItemAliasListView):
-
     def get_queryset(self):
-        return super(ItemAliasPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by('code', 'old_code')
+        return super(ItemAliasPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by(
+            'code', 'old_code')
 
 
 class ItemAliasUnpublishedListView(ItemAliasListView):
-
     def get_queryset(self):
-        return super(ItemAliasUnpublishedListView, self).get_queryset().filter(collection__code__contains='_I_').order_by('code', 'old_code')
+        return super(ItemAliasUnpublishedListView, self).get_queryset().filter(
+            collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemAliasSoundListView(ItemAliasListView):
-
     def get_queryset(self):
         return super(ItemAliasSoundListView, self).get_queryset().sound().order_by('code', 'old_code')
 
 
 class ItemViewMixin(ItemBaseMixin):
-
     model = MediaItem
     form_class = MediaItemForm
     inlines = [ItemPerformanceInline, ItemKeywordInline, ItemRelatedInline, ItemIdentifierInline]
+
     # inlines = [ItemPerformanceInline, ItemKeywordInline, ItemRelatedInline,
     #             ItemFormatInline, ItemIdentifierInline]
 
@@ -626,7 +619,6 @@ class ItemViewMixin(ItemBaseMixin):
 
 
 class ItemEditView(ItemViewMixin, UpdateWithInlinesView):
-
     template_name = 'telemeta/mediaitem_edit.html'
 
     def get_form_class(self):
@@ -674,7 +666,6 @@ class ItemEditView(ItemViewMixin, UpdateWithInlinesView):
 
 
 class ItemAddView(ItemViewMixin, CreateWithInlinesView):
-
     form_class = MediaItemForm
     template_name = 'telemeta/mediaitem_add.html'
 
@@ -706,7 +697,6 @@ class ItemAddView(ItemViewMixin, CreateWithInlinesView):
 
 
 class ItemCopyView(ItemAddView):
-
     form_class = MediaItemForm
     template_name = 'telemeta/mediaitem_edit.html'
 
@@ -756,7 +746,6 @@ class ItemCopyView(ItemAddView):
 
 
 class ItemDetailView(ItemViewMixin, DetailView):
-
     template_name = 'telemeta/mediaitem_detail.html'
 
     def item_analyze(self, item):
@@ -861,8 +850,8 @@ class ItemDetailView(ItemViewMixin, DetailView):
                     is_transcoded_flag.value = True
                     is_transcoded_flag.save()
 
-#                FIXME: parse tags on first load
-#                tags = decoder.tags
+                    #                FIXME: parse tags on first load
+                    #                tags = decoder.tags
 
         self.mime_type = mime_type
 
@@ -963,28 +952,28 @@ class DublinCoreToFormatMetadata(object):
             'relation': 'TALB',  # album
             'type': 'TCON',  # genre
             'publisher': 'TPUB',  # publisher
-                         'date': 'TDRC',  # year
+            'date': 'TDRC',  # year
             #                         'coverage': 'COMM',  #comment
         },
         'ogg': {
             'creator': 'artist',
             'relation': 'album',
-                        'all': 'all',
+            'all': 'all',
         },
         'flac': {
             'creator': 'artist',
             'relation': 'album',
-                        'all': 'all',
+            'all': 'all',
         },
         'wav': {
             'creator': 'artist',
             'relation': 'album',
-                        'all': 'all',
+            'all': 'all',
         },
         'webm': {
             'creator': 'artist',
             'relation': 'album',
-                        'all': 'all',
+            'all': 'all',
         },
     }
 
@@ -1015,7 +1004,6 @@ class DublinCoreToFormatMetadata(object):
 
 
 class ItemMarkerJsonView(View):
-
     model = MediaItem
 
     def get(self, request, *args, **kwargs):
@@ -1029,20 +1017,176 @@ class ItemMarkerJsonView(View):
             data = ''
         response = HttpResponse(data, content_type='application/json')
         response['Content-Disposition'] = "attachment; filename=%s.%s" % \
-            (item.code, 'json')
+                                          (item.code, 'json')
         return response
 
 
 class ItemPlayerDefaultView(ItemDetailView):
-
     template_name = 'telemeta/mediaitem_player.html'
 
 
 class ItemDetailDCView(ItemDetailView):
-
     template_name = 'telemeta/mediaitem_detail_dc.html'
 
 
 class ItemVideoPlayerView(ItemDetailView):
-
     template_name = 'telemeta/mediaitem_video_player.html'
+
+
+class ItemEnumListView(ItemListView):
+    template_name = 'telemeta/media_item_enum_list.html'
+
+    def get_context_data(self, **kwargs):
+        context = super(ItemListView, self).get_context_data(**kwargs)
+        context['enum'] = self.request.path.split('/')[3]
+        context['id'] = self.request.path.split('/')[4]
+        context['count'] = self.object_list.count()
+        context['keyword'] = False
+        context['enum_name'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3])._meta.verbose_name
+        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(
+            id__exact=self.request.path.split('/')[4])
+        context['url_all'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/item/list"
+        context['url_unpublished'] = "/admin/enumerations/" + context['enum'] + "/" + context[
+            'id'] + "/item_unpublished/list/"
+        context['url_published'] = "/admin/enumerations/" + context['enum'] + "/" + context[
+            'id'] + "/item_published/list/"
+        context['url_sound'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/item_sound/list/"
+        return context
+
+    def get_queryset(self):
+        enumeration = self.get_enumeration(self.request.path.split('/')[3])
+        queryset = self.get_item(enumeration.objects.filter(id=self.request.path.split('/')[4]).get())
+        print type(queryset)
+        return queryset
+
+    def get_item(self, enum):
+        f = MediaItem._meta.get_all_field_names()
+        for field in f:
+            if field in enum._meta.db_table.replace(" ", "_"):
+                atr = field;
+        atr = atr + "_id"
+        lookup = "%s__exact" % atr
+        return MediaItem.objects.filter(**{lookup: enum.__getattribute__("id")})
+
+    def get_enumeration(self, id):
+        from django.db.models import get_models
+        models = get_models(telemeta.models)
+        for model in models:
+            if model._meta.module_name == id:
+                break
+        if model._meta.module_name != id:
+            return None
+        return model
+
+
+class ItemPublishedEnumListView(ItemEnumListView):
+    def get_queryset(self):
+        c = ItemEnumListView()
+        # id of value of enumeration
+        i = self.request.path.split('/')[4]
+        enumeration = c.get_enumeration(self.request.path.split('/')[3])
+        queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_item(self, enum, c):
+        return c.get_item(enum).filter(code__contains='_E_')
+
+
+class ItemUnpublishedEnumListView(ItemEnumListView):
+    def get_queryset(self):
+        c = ItemEnumListView()
+        # id of value of enumeration
+        i = self.request.path.split('/')[4]
+        enumeration = c.get_enumeration(self.request.path.split('/')[3])
+        queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_item(self, enum, c):
+        return c.get_item(enum).filter(code__contains='_I_')
+
+
+class ItemSoundEnumListView(ItemEnumListView):
+    def get_queryset(self):
+        c = ItemEnumListView()
+        # id of value of enumeration
+        i = self.request.path.split('/')[4]
+        enumeration = c.get_enumeration(self.request.path.split('/')[3])
+        queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
+        return queryset
+
+    def get_item(self, enum, c):
+        return c.get_item(enum).sound().order_by('code', 'old_code')
+
+
+class ItemKeywordListView(ItemListView):
+
+    def get_context_data(self, **kwargs):
+        context = super(ItemListView, self).get_context_data(**kwargs)
+        context['enum'] = self.request.path.split('/')[3]
+        context['id'] = self.request.path.split('/')[4]
+        context['count'] = self.object_list.count()
+        context['keyword'] = True
+        context['enum_name'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3])._meta.verbose_name
+        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(
+            id__exact=self.request.path.split('/')[4])
+        context['url_all'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/keyword_item/list"
+        context['url_unpublished'] = "/admin/enumerations/" + context['enum'] + "/" + context[
+            'id'] + "/keyword_item_unpublished/list/"
+        context['url_published'] = "/admin/enumerations/" + context['enum'] + "/" + context[
+            'id'] + "/keyword_item_published/list/"
+        context['url_sound'] = "/admin/enumerations/" + context['enum'] + "/" + context[
+            'id'] + "/keyword_item_published/list/"
+
+        context['argument'] = [context['enum'], context['id']]
+
+        return context
+
+    def get_queryset(self):
+        queryset = self.get_item(self.request.path.split('/')[4])
+        return queryset
+
+    def get_item(self, id):
+        c = []
+        for m in MediaItemKeyword.objects.filter(keyword_id=id):
+            c.append(m.__getattribute__("item_id"))
+        return MediaItem.objects.filter(id__in=c)
+
+    def get_enumeration(self, id):
+        from django.db.models import get_models
+        models = get_models(telemeta.models)
+        for model in models:
+            if model._meta.module_name == id:
+                break
+        if model._meta.module_name != id:
+            return None
+        return model
+
+
+class ItemKeywordPublishedListView(ItemKeywordListView):
+    def get_queryset(self):
+        c = ItemKeywordListView()
+        queryset = self.get_item(self.request.path.split('/')[4], c)
+        return queryset
+
+    def get_item(self, id, c):
+        return c.get_item(id).filter(code__contains='_E_')
+
+
+class ItemKeywordUnpublishedListView(ItemKeywordListView):
+    def get_queryset(self):
+        c = ItemKeywordListView()
+        queryset = self.get_item(self.request.path.split('/')[4], c)
+        return queryset
+
+    def get_item(self, id, c):
+        return c.get_item(id).filter(code__contains='_I_')
+
+
+class ItemKeywordSoundListView(ItemKeywordListView):
+    def get_queryset(self):
+        c = ItemKeywordListView()
+        queryset = self.get_item(self.request.path.split('/')[4], c)
+        return queryset
+
+    def get_item(self, id, c):
+        return c.get_item(id).sound().order_by('code', 'old_code')