--- a/web/ldt/ldt_utils/views.py Wed Sep 29 10:10:07 2010 +0200
+++ b/web/ldt/ldt_utils/views.py Tue Oct 12 03:23:33 2010 +0200
@@ -1,37 +1,40 @@
-import django.core.urlresolvers
-from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
-from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
+from Ft.Xml import MarkupWriter
+from contentindexer import *
+from django.conf import settings
+from django.contrib.auth.decorators import login_required
+from django.core import serializers
+from django.core.urlresolvers import reverse
+from django.forms.util import ErrorList
+from django.http import HttpResponse, HttpResponseRedirect, \
+ HttpResponseForbidden
+from django.shortcuts import render_to_response, get_object_or_404, \
+ get_list_or_404
from django.template import RequestContext
-from django.core.urlresolvers import reverse
-from django.contrib.auth.decorators import login_required
-from django.conf import settings
-from django.core import serializers
from django.utils import simplejson
from django.utils.html import escape
+from django.utils.translation import ugettext as _, ungettext
from fileimport import *
-from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm, MediaForm
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, \
+ CopyProjectForm, ContentForm, MediaForm
from ldt.core.models import Owner
from models import *
-from utils import *
-from contentindexer import *
from projectserializer import *
from string import Template
-from Ft.Xml import MarkupWriter
+from urllib2 import urlparse
+from utils import *
+import base64
import cgi
+import django.core.urlresolvers
+import ldt.auth as ldt_auth
+import ldt.utils.path as ldt_utils_path
+import logging
+import lucene
+import tempfile
+import urllib2
import uuid
-import base64
-import lucene
import xml.dom
import xml.dom.ext
import xml.dom.minidom
-import tempfile
-import urllib2
-from urllib2 import urlparse
-from jogging import logging
-import ldt.utils.path
-import ldt.auth as ldt_auth
-from django.utils.translation import ugettext as _
-
def searchForm(request):
@@ -159,11 +162,15 @@
if form.is_valid():
user = request.user
Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
- return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+ form_status = "saved"
+ contents=[]
+ #return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
else:
form = LdtAddForm()
- contents = Content.objects.all()
- return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
+ contents = Content.objects.all()
+ form_status = "none"
+
+ return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
def created_ldt(request):
return render_to_response('ldt/ldt_utils/done.html', context_instance=RequestContext(request))
@@ -358,7 +365,42 @@
return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
else:
form = AddProjectForm()
- return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'iri_id':iri_id, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
+ return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
+
+@login_required
+def update_project(request, ldt_id):
+
+ project = get_object_or_404(Project, ldt_id=ldt_id)
+ contents = project.contents.all()
+ if request.method == "POST" :
+ submit_action = request.REQUEST.get("submit_button",False)
+ if submit_action == "prepare_delete":
+ errors = []
+ if project.state == 2:
+ errors.append(_("the project %(title)s is published. please unpublish before deleting.")%{'title':project.title})
+ message = _("can not delete the project. Please correct the following error")
+ title = _('title error deleting project')
+ else:
+ message = _("please confirm deleting project %(title)s")%{'title':project.title}
+ title = _("confirm deletion")
+ return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title}, context_instance=RequestContext(request))
+ elif submit_action == "delete":
+ if project.state != 2:
+ project.delete()
+ form_status= 'deleted'
+ form = AddProjectForm()
+ else:
+ form_status= 'saved'
+ form = AddProjectForm(request.POST)
+ if form.is_valid():
+ project.title=form.cleaned_data['title']
+ project.save()
+ else:
+ form = AddProjectForm({'title':unicode(project.title)})
+ form_status= 'none'
+
+ return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project",args=[ldt_id])}, context_instance=RequestContext(request))
+
@login_required
def copy_project(request, ldt_id):
@@ -377,6 +419,7 @@
def write_content_base(request, iri_id=None):
+ logging.debug(repr(request))
if iri_id:
instance_content = Content.objects.get(iri_id=iri_id)
instance_media = instance_content.media_obj
@@ -408,59 +451,70 @@
elif media_input_type == "link":
media = content_form.cleaned_data["media_obj"]
created = False
- elif media_input_type == "url" or media_input_type == "upload" or media_input_type == "create":
+ elif media_input_type == "create":
+ del cleaned_data["media_file"]
+ if not cleaned_data['videopath']:
+ cleaned_data['videopath'] = settings.STREAM_URL
+ media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data)
+ elif media_input_type == "url" or media_input_type == "upload" :
# copy file
#complet src
destination_file = None
source_file = None
destination_file_path = None
- if media_input_type != "create":
- try:
- if media_input_type == "url":
- url = cleaned_data["external_src_url"]
- source_file = urllib2.urlopen(url)
- source_filename = source_file.info().get('Content-Disposition', None)
- if not source_filename:
- source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1]
- elif media_input_type == "upload":
- source_file = request.FILES['media-media_file']
- source_filename = source_file.name
-
- source_filename = ldt.utils.path.sanitize_filename(source_filename)
- destination_filepath = os.path.join(settings.STREAM_PATH, source_filename)
- base_source_filename = source_filename
- extension = base_source_filename.split(".")[-1]
- if extension == base_source_filename:
- extension = ""
- base_basename_filename = base_source_filename
- else:
- base_basename_filename = base_source_filename[:-1 *(len(extension)+1)]
- i = 0
- while os.path.exists(destination_filepath):
- base_source_filename = "%s.%d.%s" % (base_basename_filename,i,extension)
- destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
- i += 1
-
- destination_file = open(destination_filepath, "w")
- src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
- if len(src_prefix) > 0:
- cleaned_data["src"] = src_prefix + "/" + base_source_filename
- else:
- cleaned_data["src"] = base_source_filename
+ try:
+ if media_input_type == "url":
+ url = cleaned_data["external_src_url"]
+ source_file = urllib2.urlopen(url)
+ source_filename = source_file.info().get('Content-Disposition', None)
+ if not source_filename:
+ source_filename = urlparse.urlparse(url).path.rstrip("/").split('/')[-1]
+ elif media_input_type == "upload":
+ source_file = request.FILES['media-media_file']
+ source_filename = source_file.name
+
+ source_filename = ldt_utils_path.sanitize_filename(source_filename)
+ destination_filepath = os.path.join(settings.STREAM_PATH, source_filename)
+ base_source_filename = source_filename
+ extension = base_source_filename.split(".")[-1]
+ if extension == base_source_filename:
+ extension = ""
+ base_basename_filename = base_source_filename
+ else:
+ base_basename_filename = base_source_filename[:-1 *(len(extension)+1)]
+ i = 0
+ while os.path.exists(destination_filepath):
+ base_source_filename = "%s.%d.%s" % (base_basename_filename,i,extension)
+ destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
+ i += 1
+ destination_file = open(destination_filepath, "w")
+ src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
+ if len(src_prefix) > 0:
+ cleaned_data["src"] = src_prefix + "/" + base_source_filename
+ else:
+ cleaned_data["src"] = base_source_filename
+
+ chunck = source_file.read(2048)
+ while chunck:
+ destination_file.write(chunck)
chunck = source_file.read(2048)
- while chunck:
- destination_file.write(chunck)
- chunck = source_file.read(2048)
-
- except Exception as inst:
- logging.debug("write_content_base : POST error when processing file:" + str(inst))
- form_status = "error"
- finally:
- if destination_file:
- destination_file.close()
- if source_file:
- source_file.close()
+
+ except Exception as inst:
+ logging.debug("write_content_base : POST error when processing file:" + str(inst))
+ form_status = "error"
+ #set error for form
+ if media_input_type == "url":
+ errors = media_form._errors.setdefault("external_src_url", ErrorList())
+ errors.append(_("Problem when downloading file from url : ")+str(inst))
+ elif media_input_type == "upload":
+ errors = media_form._errors.setdefault("media_file", ErrorList())
+ errors.append(_("Problem when uploading file : ") + str(inst))
+ finally:
+ if destination_file:
+ destination_file.close()
+ if source_file:
+ source_file.close()
if form_status != "error":
#try:
@@ -517,18 +571,61 @@
return content_form, media_form, form_status
-
+@login_required
def write_content(request, iri_id=None):
- logging.debug("write_content : " + str(iri_id) )
- content_form, media_form, form_status = write_content_base(request, iri_id)
-
+ submit_action = request.REQUEST.get("submit_button",False)
+
+ if submit_action == "prepare_delete":
+ errors, titles = prepare_delete_content(request, iri_id)
+ if errors and len(errors) > 0:
+ message = ungettext("There is %(count)d error when deleting content", "There are %(count)d errors when deleting content", len(errors)) % { 'count': len(errors)}
+ title_msg = _('title error deleting content')
+ else:
+ message = _("Confirm delete content %(titles)s") % { 'titles' : ",".join(titles) }
+ title_msg = _("confirm delete content")
+ return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title_msg}, context_instance=RequestContext(request))
+ elif submit_action == "delete":
+ delete_content(request, iri_id)
+ form_status = "deleted"
+ content_form = ContentForm()
+ media_form = MediaForm()
+ else:
+ content_form, media_form, form_status = write_content_base(request, iri_id)
+
if iri_id:
create_content_action = reverse(write_content, kwargs={'iri_id':iri_id})
else:
create_content_action = reverse(write_content)
+
- return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': create_content_action}, context_instance=RequestContext(request))
+ return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': create_content_action, 'iri_id': iri_id}, context_instance=RequestContext(request))
+
+@login_required
+def prepare_delete_content(request, iri_id=None):
+ errors = []
+ titles = []
+ if not iri_id:
+ iri_id = request.REQUEST.get("iri_id", None)
+
+ if iri_id:
+ for content in Content.objects.filter(iri_id=iri_id):
+ titles.append(unicode(content.title))
+ projects = Content.objects.all()[0].project_set.all()
+ projects_nb = len(projects)
+ if projects_nb > 0:
+ project_titles = [lambda p: p.title for p in projects]
+ errors.append(ungettext("Content '%(title)s' is referenced by this project : %(project_titles)s. Please delete it beforehand.", "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. Please delete them beforehand.", projects_nb)%{'title':content.title,'count':projects_nb, 'project_titles': ",".join(project_titles)})
+
+ return errors, titles
+@login_required
+def delete_content(request, iri_id=None):
+ if not iri_id:
+ iri_id = request.REQUEST.get("iri_id", None)
+
+ if iri_id:
+ Content.objects.filter(iri_id=iri_id).delete()
+
\ No newline at end of file