]> git.parisson.com Git - telemeta.git/commitdiff
add copy methods, FIXME: remove copied_from_item item tag from the edit form for...
authoryomguy <yomguy@parisson.com>
Tue, 8 Mar 2011 00:31:53 +0000 (01:31 +0100)
committeryomguy <yomguy@parisson.com>
Tue, 8 Mar 2011 00:31:53 +0000 (01:31 +0100)
21 files changed:
telemeta/models/media.py
telemeta/templates/telemeta/collection_add.html [new file with mode: 0644]
telemeta/templates/telemeta/collection_detail_edit.html [deleted file]
telemeta/templates/telemeta/collection_edit.html [new file with mode: 0644]
telemeta/templates/telemeta/mediaitem_add.html [new file with mode: 0644]
telemeta/templates/telemeta/mediaitem_copy.html [new file with mode: 0644]
telemeta/templates/telemeta/mediaitem_detail_edit.html [deleted file]
telemeta/templates/telemeta/mediaitem_edit.html [new file with mode: 0644]
telemeta/templates/telemeta_default/collection_add.html [new file with mode: 0644]
telemeta/templates/telemeta_default/collection_detail.html
telemeta/templates/telemeta_default/collection_detail_edit.html [deleted file]
telemeta/templates/telemeta_default/collection_edit.html [new file with mode: 0644]
telemeta/templates/telemeta_default/collection_list.html
telemeta/templates/telemeta_default/mediaitem_add.html [new file with mode: 0644]
telemeta/templates/telemeta_default/mediaitem_copy.html [new file with mode: 0644]
telemeta/templates/telemeta_default/mediaitem_detail.html
telemeta/templates/telemeta_default/mediaitem_detail_edit.html [deleted file]
telemeta/templates/telemeta_default/mediaitem_edit.html [new file with mode: 0644]
telemeta/templates/telemeta_default/mediaitem_list.html
telemeta/urls.py
telemeta/web/base.py

index c9a4178ba7341ca9bf54295cfbf03343ade6324b..9f900dc6c32025feb9b57a0c0e3c0d07dd07c9e6 100644 (file)
@@ -74,14 +74,15 @@ class MediaCollection(MediaResource):
     published_code_regex   = '[A-Za-z0-9._-]*'
     unpublished_code_regex = '[A-Za-z0-9._-]*'
     code_regex             = '(?:%s|%s)' % (published_code_regex, unpublished_code_regex)
-
-    reference             = CharField(_('reference'), unique=True, null=True)
-    physical_format       = WeakForeignKey('PhysicalFormat', related_name="collections", 
-                                           verbose_name=_('archive format'))
-    old_code              = CharField(_('old code'), unique=True, null=True)
+    
     code                  = CharField(_('code'), unique=True, required=True)
+    old_code              = CharField(_('old code'), unique=True, null=True)
+    reference             = CharField(_('reference'), unique=True, null=True)
     title                 = CharField(_('title'), required=True)
     alt_title             = CharField(_('original title / translation'))
+    physical_format       = WeakForeignKey('PhysicalFormat', related_name="collections", 
+                                           verbose_name=_('archive format'))
+    
     physical_items_num    = IntegerField(_('number of components (medium / piece)'))
     publishing_status     = WeakForeignKey('PublishingStatus', related_name="collections", 
                                            verbose_name=_('secondary edition'))
diff --git a/telemeta/templates/telemeta/collection_add.html b/telemeta/templates/telemeta/collection_add.html
new file mode 100644 (file)
index 0000000..962155b
--- /dev/null
@@ -0,0 +1 @@
+{% extends "telemeta_default/collection_add.html" %}
diff --git a/telemeta/templates/telemeta/collection_detail_edit.html b/telemeta/templates/telemeta/collection_detail_edit.html
deleted file mode 100644 (file)
index cf00e17..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "telemeta_default/collection_detail_edit.html" %}
diff --git a/telemeta/templates/telemeta/collection_edit.html b/telemeta/templates/telemeta/collection_edit.html
new file mode 100644 (file)
index 0000000..e2b1e09
--- /dev/null
@@ -0,0 +1 @@
+{% extends "telemeta_default/collection_edit.html" %}
diff --git a/telemeta/templates/telemeta/mediaitem_add.html b/telemeta/templates/telemeta/mediaitem_add.html
new file mode 100644 (file)
index 0000000..954910d
--- /dev/null
@@ -0,0 +1 @@
+{% extends "telemeta_default/mediaitem_add.html" %}
diff --git a/telemeta/templates/telemeta/mediaitem_copy.html b/telemeta/templates/telemeta/mediaitem_copy.html
new file mode 100644 (file)
index 0000000..154f7a0
--- /dev/null
@@ -0,0 +1 @@
+{% extends "telemeta_default/mediaitem_copy.html" %}
diff --git a/telemeta/templates/telemeta/mediaitem_detail_edit.html b/telemeta/templates/telemeta/mediaitem_detail_edit.html
deleted file mode 100644 (file)
index eeeec91..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{% extends "telemeta_default/mediaitem_detail_edit.html" %}
diff --git a/telemeta/templates/telemeta/mediaitem_edit.html b/telemeta/templates/telemeta/mediaitem_edit.html
new file mode 100644 (file)
index 0000000..db8aacd
--- /dev/null
@@ -0,0 +1 @@
+{% extends "telemeta_default/mediaitem_edit.html" %}
diff --git a/telemeta/templates/telemeta_default/collection_add.html b/telemeta/templates/telemeta_default/collection_add.html
new file mode 100644 (file)
index 0000000..19b7d71
--- /dev/null
@@ -0,0 +1,33 @@
+{% extends "telemeta/collection_detail.html" %}
+
+{% block submenu %}
+    <div>    
+     {% block tools %}
+     <a href="{% url telemeta-collections %}">
+          <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+     {% endblock tools %}
+    </div>
+{% endblock %}
+
+
+{% block infos %}
+        <div class="infos">
+        <form method="POST" action="">{% csrf_token %}
+        <table>
+        {% for field in form %}
+            {% if not field.html_name == "copied_from_item" %}
+            <tr>
+                <tr><td>{{ field.errors }}</td></tr>
+                <td>{{ field.label_tag }}:</td><td> {{ field }}</td>
+            </tr>
+            {% endif %}
+        {% endfor %}
+        </table>
+        <div align="center">
+         <a href="{% url telemeta-collections %}">
+          <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+         <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save"/>
+        </div>
+        </form>
+        </div>
+{% endblock infos%}
index 7e2dcf4903b0a0dbffa2763944ecc41a8ec17548..8f37a7ce15e15f58fab6bb16c7a2b393c7c232c7 100644 (file)
@@ -16,8 +16,9 @@
     
     {% if user.is_authenticated and perms.telemeta.change_mediacollection %}
      {% block tools %}
-     <a href="{% url telemeta-collection-detail-edit collection.public_id %}">
+     <a href="{% url telemeta-collection-edit collection.public_id %}">
       <img src="images/edit_page.png" alt="EDIT" style="vertical-align:middle" /></a>
+      <a href="{% url telemeta-collection-copy collection.public_id %}">Copy</a>
      {% endblock tools %}
     {% endif %}
     
diff --git a/telemeta/templates/telemeta_default/collection_detail_edit.html b/telemeta/templates/telemeta_default/collection_detail_edit.html
deleted file mode 100644 (file)
index 1a8b17e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends "telemeta/collection_detail.html" %}
-
-{% block tools %}
-    <a href="{% url telemeta-collection-detail collection.public_id %}">
-     <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
-{% endblock %}
-
-{% block infos %}
-        <div class="infos">
-        <form method="POST" action="">{% csrf_token %}
-        <table>
-             {{ form }}
-        </table>
-        <div align="center">
-         <a href="{% url telemeta-collection-detail collection.public_id %}">
-          <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
-         <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save"/>
-        </div>
-        </form>
-        </div>
-{% endblock infos%}
diff --git a/telemeta/templates/telemeta_default/collection_edit.html b/telemeta/templates/telemeta_default/collection_edit.html
new file mode 100644 (file)
index 0000000..dfb3f4e
--- /dev/null
@@ -0,0 +1,28 @@
+{% extends "telemeta/collection_detail.html" %}
+
+{% block tools %}
+    <a href="{% url telemeta-collection-detail collection.public_id %}">
+     <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+{% endblock %}
+
+{% block infos %}
+        <div class="infos">
+        <form method="POST" action="">{% csrf_token %}
+       <table>
+       {% for field in form %}
+        {% if not field.html_name == "copied_from_item" %}
+        <tr>
+            <tr><td>{{ field.errors }}</td></tr>
+            <td>{{ field.label_tag }}:</td><td> {{ field }}</td>
+        </tr>
+        {% endif %}
+       {% endfor %}
+       </table>
+        <div align="center">
+         <a href="{% url telemeta-collection-detail collection.public_id %}">
+          <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+         <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save"/>
+        </div>
+        </form>
+        </div>
+{% endblock infos%}
index f8a9988264f06fa364117360017162312572f7af..d2ba7761d85de3f76e5ccbbb167edecc7beb466f 100644 (file)
@@ -4,6 +4,14 @@
 
 {% block head_title %}{% trans "Media Collections" %} - {{ block.super }}{% endblock %}
 
+{% block submenu %}
+    <div class="buttons">  
+    {% if user.is_authenticated and perms.telemeta.add_mediacollection %}
+     <button><a href="{% url telemeta-collection-add %}">Add</a></button>
+    {% endif %}
+    </div>
+{% endblock %}
+
 {% block content %}
 <h3>{% trans "Media Collections" %}</h3>
 
diff --git a/telemeta/templates/telemeta_default/mediaitem_add.html b/telemeta/templates/telemeta_default/mediaitem_add.html
new file mode 100644 (file)
index 0000000..b5c1ae3
--- /dev/null
@@ -0,0 +1,49 @@
+{% extends "telemeta/base.html" %}
+{% load telemeta_utils %}
+{% load i18n %}
+
+{% block head_title %}{% trans "Item" %}- {{ block.super }}{% endblock %}
+
+
+{% if item %}
+{% block submenu %}
+<div>
+    {% if perms.telemeta.add_mediaitem %}
+    {% block tools %}
+     <a href="{% url telemeta-item-detail item.public_id %}">
+         <img src="images/edit_cancel.png" /></a>
+    {% endblock tools %}
+    
+    {% endif %}
+</div>
+{% endblock %}
+
+{% block content %}
+<h3><img src="images/item.png" style="vertical-align:middle" /> Item : NEW</h3>
+
+    {% block infos %}
+    <div class="infos">
+     <form method="POST" action="">{% csrf_token %}
+       <table>
+       {% for field in form %}
+        {% if not field.html_name == "copied_from_item" %}
+        <tr>
+            <tr><td>{{ field.errors }}</td></tr>
+            <td>{{ field.label_tag }}:</td><td> {{ field }}</td>
+        </tr>
+        {% endif %}
+       {% endfor %}
+       </table>
+       <div align="center">
+        <a href="{% url telemeta-item-detail item.public_id %}">
+         <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+        <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save" />
+       </div>
+     </form>
+    </div>
+  {% endblock infos %}
+</div> <!-- with-rightcol -->
+{% endblock %}
+{% else %}
+<p>No such item</p>
+{% endif %}
diff --git a/telemeta/templates/telemeta_default/mediaitem_copy.html b/telemeta/templates/telemeta_default/mediaitem_copy.html
new file mode 100644 (file)
index 0000000..0cca0bc
--- /dev/null
@@ -0,0 +1,39 @@
+{% extends "telemeta/mediaitem_detail.html" %}
+{% load telemeta_utils %}
+{% load i18n %}
+
+{% block head_title %}{% trans "Item" %}- {{ block.super }}{% endblock %}
+
+{% block extra_javascript %}
+{% endblock %}
+
+{% block submenu %}
+<div>
+    {% if user.is_authenticated and perms.telemeta.add_mediaitem %}
+    {% block tools %}
+     <a href="{% url telemeta-item-detail item.public_id %}">
+     <img src="images/edit_cancel.png" /></a>
+    {% endblock tools %}
+    {% endif %}
+</div>
+{% endblock %}
+
+{% block content %}
+<h3><img src="images/item.png" style="vertical-align:middle" /> Item : {{ item }}</h3>
+  
+  {% block infos %}    
+    <div class="infos">
+     <form method="POST" action="">{% csrf_token %}
+       <table>
+         {{ form }}
+       </table>
+       <div align="center">
+        <a href="{% url telemeta-item-detail item.public_id %}">
+         <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+        <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save" />
+       </div>
+     </form>
+    </div>
+  {% endblock infos %}
+  
+{% endblock %}
index 24a1270042e2a0b032adabab60cc4b451b432eee..27aef506d41bf20569bb5e4e9b42c8382d049c1a 100644 (file)
@@ -2,21 +2,20 @@
 {% load telemeta_utils %}
 {% load i18n %}
 
-{% block head_title %}{% trans "Item" %}{{item|prepend:': '}} - {{ block.super }}{% endblock %}
+{% block head_title %}{% trans "Item" %}- {{ block.super }}{% endblock %}
 
 {% block stylesheets %}
 {{ block.super }}
 <link rel="stylesheet" type="text/css" href="{% url telemeta-timeside "css/timeside.css" %}" />
       <link rel="stylesheet" type="text/css" href="{% url telemeta-timeside "skins/lab/style.css" %}" />
       <link rel="stylesheet" type="text/css" href="{% url telemeta-css "player.css" %}" />
-      {% endblock %}
-      {% block extra_javascript %}
+{% endblock %}
 
+{% block extra_javascript %}
 <script src="{% url telemeta-js "wz_jsgraphics.js" %}" type="text/javascript"></script>
 <script src="{% url telemeta-js "soundmanager2.js" %}" type="text/javascript"></script>
 <script src="{% url telemeta-timeside "src/timeside.js" %}" type="text/javascript"></script>
 <script src="{% url telemeta-js "playerUtils.js" %}" type="text/javascript"></script>
-
 <script type="text/javascript">
     soundManager.url = '{% url telemeta-swf "./" %}';
     soundManager.flashVersion = 9;
     set_player_image_url('{% url telemeta-item-visualize item.public_id,visualizer_id,"WIDTH","HEIGHT" %}');
     load_player({{ item.approx_duration.as_seconds }});
 </script>
-
 {% endblock %}
 
-
 {% if item %}
 {% block submenu %}
 <div>
-    <table>
-        <tr>
-            <td align="left">
-                <a href="{% url telemeta-item-dublincore item.public_id %}">Dublin Core</a>
-            </td>
-            <td align="right">
-                {% if user.is_authenticated and perms.telemeta.change_mediaitem %}
-                {% block tools %}
-                <a href="{% url telemeta-item-detail-edit item.public_id %}"><img src="images/edit_page.png" alt="EDIT"></a>
-                {% endblock tools %}
-                {% endif %}
-                <a href="{% url telemeta-item-detail previous %}"><img src="images/previous.png" alt="PREVIOUS"></a>
-                <a href="{% url telemeta-item-detail next %}"><img src="images/next.png" alt="NEXT"></a>
-            </td>
-        </tr>
-    </table>
+    {% block tools %}
+    <a href="{% url telemeta-item-dublincore item.public_id %}">Dublin Core</a>
+    {% if user.is_authenticated and perms.telemeta.change_mediaitem %}
+    
+    <a href="{% url telemeta-item-edit item.public_id %}"><img src="images/edit_page.png" style="vertical-align:middle" alt="EDIT" /></a>
+    <a href="{% url telemeta-item-copy item.public_id %}">Copy</a>
+    
+    {% endif %}
+    <a href="{% url telemeta-item-detail previous %}"><img src="images/previous.png" style="vertical-align:middle" alt="PREVIOUS" /></a>
+    <a href="{% url telemeta-item-detail next %}"><img src="images/next.png" style="vertical-align:middle" alt="NEXT" /></a>
+    {% endblock tools %}
 </div>
 {% endblock %}
 
diff --git a/telemeta/templates/telemeta_default/mediaitem_detail_edit.html b/telemeta/templates/telemeta_default/mediaitem_detail_edit.html
deleted file mode 100644 (file)
index d74d06f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends "telemeta/mediaitem_detail.html" %}
-
-    {% block tools %}
-     <a href="{% url telemeta-item-detail item.public_id %}">
-         <img src="images/edit_cancel.png" /></a>
-    {% endblock tools %}
-
-  {% block infos %}    
-    <div class="infos">
-     <form method="POST" action="">{% csrf_token %}
-       <table>
-         {{ form }}
-       </table>
-       <div align="center">
-        <a href="{% url telemeta-item-detail item.public_id %}">
-         <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
-        <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save" />
-       </div>
-     </form>
-    </div>
-  {% endblock infos %}
diff --git a/telemeta/templates/telemeta_default/mediaitem_edit.html b/telemeta/templates/telemeta_default/mediaitem_edit.html
new file mode 100644 (file)
index 0000000..60d3bea
--- /dev/null
@@ -0,0 +1,28 @@
+{% extends "telemeta/mediaitem_detail.html" %}
+
+    {% block tools %}
+     <a href="{% url telemeta-item-detail item.public_id %}">
+         <img src="images/edit_cancel.png" /></a>
+    {% endblock tools %}
+
+  {% block infos %}    
+    <div class="infos">
+     <form method="POST" action="">{% csrf_token %}
+      <table>
+       {% for field in form %}
+        {% if not field.html_name == "copied_from_item" %}
+        <tr>
+            <tr><td>{{ field.errors }}</td></tr>
+            <td>{{ field.label_tag }}:</td><td> {{ field }}</td>
+        </tr>
+        {% endif %}
+       {% endfor %}
+       </table>
+       <div align="center">
+        <a href="{% url telemeta-item-detail item.public_id %}">
+         <img src="images/edit_cancel.png" style="vertical-align:middle" /></a>
+        <input type="image" src="images/save_changes.png" style="vertical-align:middle" value="save" />
+       </div>
+     </form>
+    </div>
+  {% endblock infos %}
index b20e8d8c94c7794c92bb62bcc2cf8fcd5b28ffe8..5bbf9228fbccc3392e680f64a2efa9465d88b259 100644 (file)
@@ -4,6 +4,15 @@
 
 {% block head_title %}{% trans "Media Items" %} - {{ block.super }}{% endblock %}
 
+
+{% block submenu %}
+    <div class="buttons">  
+    {% if user.is_authenticated and perms.telemeta.add_mediaitem %}
+     <button><a href="{% url telemeta-item-add %}">Add</a></button>
+    {% endif %}
+    </div>
+{% endblock %}
+
 {% block content %}
 <h3>{% trans "Media Items" %}</h3>
 {% with object_list as items %}
index 218ef40d6555e0dcbc0922e0c88d406063ec465b..e9bac7b3e380034f6ee2a69d4079fe5ad39d7a34 100644 (file)
@@ -84,9 +84,12 @@ urlpatterns = patterns('',
         web_view.item_playlist, 
         dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"),
         name="telemeta-item-xspf"),
-    url(r'^items/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', 
-        web_view.item_detail_edit,
-        name="telemeta-item-detail-edit"),
+    url(r'^items/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', web_view.item_edit,
+        dict(template='telemeta/mediaitem_edit.html'), name="telemeta-item-edit"),
+    url(r'^items/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', web_view.item_copy,
+        dict(template='telemeta/mediaitem_copy.html'), name="telemeta-item-copy"),
+    url(r'^item/add/$', web_view.item_add,
+        dict(template='telemeta/mediaitem_add.html'), name="telemeta-item-add"),
 
     # collections
     url(r'^collections/$', 'django.views.generic.list_detail.object_list',
@@ -108,8 +111,12 @@ urlpatterns = patterns('',
         web_view.collection_playlist, 
         dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"),
         name="telemeta-collection-m3u"),
-    url(r'^collections/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', web_view.collection_detail_edit,
-        dict(template='telemeta/collection_detail_edit.html'), name="telemeta-collection-detail-edit"),
+    url(r'^collections/(?P<public_id>[A-Za-z0-9._-]+)/edit/$', web_view.collection_edit,
+        dict(template='telemeta/collection_edit.html'), name="telemeta-collection-edit"),
+    url(r'^collections/(?P<public_id>[A-Za-z0-9._-]+)/copy/$', web_view.collection_copy,
+        dict(template='telemeta/collection_edit.html'), name="telemeta-collection-copy"),
+    url(r'^collection/add/$', web_view.collection_add,
+        dict(template='telemeta/collection_add.html'), name="telemeta-collection-add"),
 
     # search
     url(r'^search/$', web_view.search, name="telemeta-search"),
index 6a74fcb27a3c3ebef1d769dc8e5486fa09036dfc..1bb3efb93f4c13cd23179a4d11f431c0fc93850d 100644 (file)
@@ -117,7 +117,7 @@ class WebView(object):
         return render(request, template, {'collection': collection})
 
     @method_decorator(permission_required('telemeta.change_mediacollection'))
-    def collection_detail_edit(self, request, public_id, template='telemeta/collection_detail_edit.html'):
+    def collection_edit(self, request, public_id, template='telemeta/collection_edit.html'):
         collection = MediaCollection.objects.get(public_id=public_id)
         if request.method == 'POST':
             form = MediaCollectionForm(request.POST, request.FILES, instance=collection)
@@ -126,9 +126,33 @@ class WebView(object):
                 return HttpResponseRedirect('/collections/'+public_id)
         else:
             form = MediaCollectionForm(instance=collection)
-        
         return render(request, template, {'collection': collection, "form": form,})
 
+    @method_decorator(permission_required('telemeta.add_mediacollection'))
+    def collection_add(self, request, template='telemeta/collection_add.html'):
+        collection = MediaCollection()
+        if request.method == 'POST':
+            form = MediaCollectionForm(request.POST, request.FILES, instance=collection)
+            if form.is_valid():
+                form.save()
+                return HttpResponseRedirect('/collections/'+form.cleaned_data['code'])
+        else:
+            form = MediaCollectionForm(instance=collection)
+        return render(request, template, {'collection': collection, "form": form,})
+
+    @method_decorator(permission_required('telemeta.add_mediacollection'))
+    def collection_copy(self, request, public_id, template='telemeta/collection_edit.html'):
+        collection = MediaCollection.objects.get(public_id=public_id)
+        new_collection = MediaCollection()
+        if request.method == 'POST':
+            form = MediaCollectionForm(request.POST, request.FILES, instance=new_collection)
+            if form.is_valid():
+                form.save()
+                return HttpResponseRedirect('/collections/'+form.cleaned_data['code'])
+        else:
+            form = MediaCollectionForm(instance=collection)
+        return render(request, template, {'collection': collection, "form": form,})
+        
     def item_previous_next(self, item):
         # Get previous and next items
         pks = []
@@ -188,7 +212,7 @@ class WebView(object):
                     })
 
     @method_decorator(permission_required('telemeta.change_mediaitem'))
-    def item_detail_edit(self, request, public_id, template='telemeta/mediaitem_detail_edit.html'):
+    def item_edit(self, request, public_id, template='telemeta/mediaitem_edit.html'):
         """Show the details of a given item"""
         item = MediaItem.objects.get(public_id=public_id)
         
@@ -222,6 +246,34 @@ class WebView(object):
                     'previous' : previous, 'next' : next, 
                     })
         
+    @method_decorator(permission_required('telemeta.add_mediaitem'))
+    def item_add(self, request, template='telemeta/mediaitem_add.html'):
+        """Show the details of a given item"""
+        item = MediaItem()
+        if request.method == 'POST':
+            form = MediaItemForm(request.POST, request.FILES, instance=item)
+            if form.is_valid():
+                form.save()
+                return HttpResponseRedirect('/items/'+form.cleaned_data['code'])
+        else:
+            form = MediaItemForm(instance=item)
+        return render(request, template, {'item': item, "form": form})
+    
+    
+    @method_decorator(permission_required('telemeta.add_mediaitem'))
+    def item_copy(self, request, public_id, template='telemeta/mediaitem_copy.html'):
+        """Show the details of a given item"""
+        item = MediaItem.objects.get(public_id=public_id)
+        new_item = MediaItem()
+        if request.method == 'POST':
+            form = MediaItemForm(request.POST, request.FILES, instance=new_item)
+            if form.is_valid():
+                form.save()
+                return HttpResponseRedirect('/items/'+form.cleaned_data['code'])
+        else:
+            form = MediaItemForm(instance=item)
+        return render(request, template, {'item': item, "form": form})
+        
     def item_analyze(self, item):
         public_id = str(item.public_id)
         analyze_file = public_id + '.xml'