add content creation
authorymh <ymh.work@gmail.com>
Mon, 06 Sep 2010 17:00:34 +0200
changeset 41 a5719dcb742a
parent 40 509e30b9f5c9
child 42 71c93982463f
add content creation
sql/update_db_0_10_to_0_11.sql
web/franceculture/settings.py
web/franceculture/templates/franceculture/partial/contentslist.html
web/ldt/ldt_utils/forms.py
web/ldt/ldt_utils/models.py
web/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html
web/ldt/ldt_utils/urls.py
web/ldt/ldt_utils/utils.py
web/ldt/ldt_utils/views.py
web/ldt/settings.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/update_db_0_10_to_0_11.sql	Mon Sep 06 17:00:34 2010 +0200
@@ -0,0 +1,2 @@
+ALTER TABLE ldt_utils_content ALTER COLUMN src DROP NOT NULL;
+ALTER TABLE ldt_utils_content ADD COLUMN content_creation_date timestamp with time zone;
--- a/web/franceculture/settings.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/franceculture/settings.py	Mon Sep 06 17:00:34 2010 +0200
@@ -37,6 +37,7 @@
 
 LANGUAGES = ( 
     ('fr', ugettext('French')),
+    ('en', ugettext('English')),
 )
 
 
--- a/web/franceculture/templates/franceculture/partial/contentslist.html	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/franceculture/templates/franceculture/partial/contentslist.html	Mon Sep 06 17:00:34 2010 +0200
@@ -9,7 +9,7 @@
 	<tfoot class="projectscontentsfooter">
 	  <tr>
 	       <td colspan="2">+</td>
-	       <td>{% trans "Create content" %}</td>
+	       <td><a href="{% url ldt.ldt_utils.views.write_content %}">{% trans "Create content" %}</a></td>
 	  </tr>
 	</tfoot>
     <tbody class="projectscontentsbody">
--- a/web/ldt/ldt_utils/forms.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/ldt_utils/forms.py	Mon Sep 06 17:00:34 2010 +0200
@@ -1,6 +1,11 @@
 from django import forms
 from models import Project, Content
 import uuid
+from utils import generate_uuid
+from django.forms.widgets import Widget
+from django.contrib.admin import widgets as admin_widgets
+from django.core.urlresolvers import reverse
+from ldt.settings import BASE_URL
 
 class LdtImportForm(forms.Form):
     importFile = forms.FileField()
@@ -27,3 +32,37 @@
 
 class CopyProjectForm (forms.Form):
     title = forms.CharField()
+    
+
+class ContentForm(forms.ModelForm):
+
+    #iri_id = forms.CharField(max_length=1024, widget=forms.HiddenInput, initial=generate_uuid)
+    iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False)
+    content_creation_date = forms.SplitDateTimeField(widget=admin_widgets.AdminSplitDateTime, required=False)
+    
+    def clean_iri_id(self):
+        data = self.cleaned_data.get('iri_id')
+        if not data:
+            data = generate_uuid()
+        return data
+    
+    def clean(self):
+        cleaned_data = self.cleaned_data
+        iriurl_data = cleaned_data.get('iriurl')
+        iri_id_data = cleaned_data['iri_id']
+        if not iriurl_data:
+            iriurl_data = "%s/%s.iri" % (iri_id_data, iri_id_data)    
+        cleaned_data['iriurl'] = iriurl_data
+        return cleaned_data
+    
+    class Meta:
+        model = Content
+        exclude = ("creation_date", "update_date", "authors")
+        widgets = {
+                   'iri_id': forms.HiddenInput,
+        }
+        
+    class Media:
+        css = {
+            'all' : ('admin/css/forms.css','admin/css/base.css', 'admin/css/base.css', 'admin/css/widgets.css')
+               }
--- a/web/ldt/ldt_utils/models.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/ldt_utils/models.py	Mon Sep 06 17:00:34 2010 +0200
@@ -2,7 +2,7 @@
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from ldt.core.models import Document, Owner
-from utils import create_ldt, copy_ldt, create_empty_iri, update_iri
+from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
 import lxml.etree
 import os.path
 import uuid
@@ -19,9 +19,9 @@
 
 
 class Content(models.Model):
-    iri_id = models.CharField(max_length=1024, unique=True)
+    iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid)
     iriurl = models.CharField(max_length=1024)
-    src = models.CharField(max_length=1024)
+    src = models.CharField(max_length=1024, null=True, blank=True)
     videopath = models.CharField(max_length=1024, null=True, blank=True)
     creation_date = models.DateTimeField(auto_now_add=True)
     update_date = models.DateTimeField(auto_now=True)
@@ -30,6 +30,7 @@
     external_id = models.CharField(max_length=1024, null=True, blank=True)
     authors = models.ManyToManyField(Author, blank=True)
     duration = models.IntegerField(null=True, blank=True)
+    content_creation_date = models.DateTimeField(null=True, blank=True)
 
     def get_duration(self):
         if self.duration is None:
@@ -47,6 +48,7 @@
         
     #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
     def save(self, *args, **kwargs):
+        
         # create iri file if needed
         created = False
         try:
@@ -67,6 +69,7 @@
                 if os.path.exists(iri_file_path):
                     os.remove(iri_file_path)
             raise e
+        
         # update it 
         super(Content, self).save(*args, **kwargs)
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Mon Sep 06 17:00:34 2010 +0200
@@ -0,0 +1,26 @@
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <script type="text/javascript" src="{{MEDIA_URL}}admin/js/core.js" ></script>
+    <script type="text/javascript" src="{% url jsi18n %}" } ></script>
+	<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+	{{content_form.media }}
+	<script type="text/javascript">
+	window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+    </script>
+</head>
+<body>
+<div id="add_content">
+<div class="title">{% trans "Create content" %}</div>
+<form action="{{create_content_action}}" method="POST">
+{% csrf_token %}
+{{ content_form.as_ul }}
+<input type="submit"/> 
+</form>
+</div>
+</body>
+</html>
--- a/web/ldt/ldt_utils/urls.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/ldt_utils/urls.py	Mon Sep 06 17:00:34 2010 +0200
@@ -22,9 +22,15 @@
     url(r'^cljson/externalid/(?P<id>.*)$', 'views.project_json_externalid'),
 )
 
+urlpatterns += patterns('',
+    url('^jsi18n','django.views.i18n.javascript_catalog', name='jsi18n'),
+)
+
+
 if test_ldt():
     urlpatterns += patterns('ldt.ldt_utils',
         url(r'^space/content/$', 'views.list_content'),
+        url(r'^space/content/create/$', 'views.write_content'),
         url(r'^space/ldt/$', 'views.list_ldt'),
         url(r'^space/ldt/indexproject/(?P<id>.*)$', 'views.indexProject'),
         url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.+)$', 'views.init', name='space_ldt_init'),
--- a/web/ldt/ldt_utils/utils.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py	Mon Sep 06 17:00:34 2010 +0200
@@ -31,6 +31,9 @@
     key = str(bool).lower()
     return __BOOLEAN_DICT.get(key, False)
 
+def generate_uuid():
+    return unicode(uuid.uuid1())
+
 class LdtSearch(object):
 
     def query(self, field, query):
--- a/web/ldt/ldt_utils/views.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/ldt_utils/views.py	Mon Sep 06 17:00:34 2010 +0200
@@ -9,7 +9,7 @@
 from django.utils import simplejson
 from django.utils.html import escape
 from fileimport import *
-from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm
 from ldt.core.models import Owner
 from models import *
 from utils import *
@@ -145,7 +145,7 @@
     }
     return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
 
-
+@login_required
 def create_ldt_view(request):
     if request.method == "POST" :
         form = LdtAddForm(request.POST)
@@ -364,3 +364,30 @@
         form = CopyProjectForm
     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
 
+
+def write_content_base(request):
+        
+    if request.method =="POST":
+        form = ContentForm(request.POST)
+        if form.is_valid():
+            content, created = Content.objects.get_or_create(iri_id = form.cleaned_data['iri_id'], defaults = form.cleaned_data)
+            if not created:
+                form =  ContentForm(request.POST, instance=content)
+                form.save()
+            else:
+                content.save()
+            form = ContentForm(instance=content)
+    else:
+        form = ContentForm()
+    
+    return form
+
+
+def write_content(request):
+    
+    content_form = write_content_base(request)
+    
+    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'create_content_action': reverse(write_content)}, context_instance=RequestContext(request))
+
+
+    
\ No newline at end of file
--- a/web/ldt/settings.py	Wed Sep 01 09:50:05 2010 +0200
+++ b/web/ldt/settings.py	Mon Sep 06 17:00:34 2010 +0200
@@ -13,6 +13,7 @@
 #SERVER_EMAIL = "admin@domain.com"
 
 WEB_URL = getattr(settings, 'WEB_URL', '')
+BASE_URL = getattr(settings, 'BASE_URL', '')
 MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
 MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
 SITE_ID = getattr(settings, 'SITE_ID', 1)