merge context_processors.py and enable upload cancel and remove temp file. Creation of a session temp folder for upload.
--- a/src/ldt/ldt/ldt_utils/contentindexer.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/contentindexer.py Mon May 09 18:57:23 2011 +0200
@@ -1,195 +1,196 @@
-from django.conf import settings
-from django.db.models.signals import post_save
-from django.dispatch import receiver
-from ldt.ldt_utils.models import Segment, Content, Project
-from ldt.ldt_utils.utils import reduce_text_node
-import ldt.indexation
-import lucene
-import lxml.etree
-import urllib #@UnresolvedImport
-# import ldt.utils.log
-
-def Property(func):
- return property(**func())
-
-
-class LdtIndexer(object):
-
- def __init__(self, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
- self.__decoupage_blacklist = decoupage_blackList
- self.__writer = writer
-
- @Property
- def decoupage_blacklist(): #@NoSelf
- doc = """get blacklist""" #@UnusedVariable
-
- def fget(self):
- if self.__decoupage_blacklist is None:
- self.__decoupage_blacklist = ()
- return self.__decoupage_blacklist
-
- def fset(self, value):
- self.__decoupage_blacklist = value
-
- def fdel(self):
- del self.__decoupage_blacklist
-
- return locals()
-
- @Property
- def writer(): #@NoSelf
- def fget(self):
- return self.__writer
- return locals()
-
- def index_all(self):
- raise NotImplemented
-
- def index_ensemble(self, ensemble, content, project=None):
- ensembleId = ensemble.get(u"id", None)
-
- for decoupageNode in ensemble.getchildren():
- if decoupageNode.tag != "decoupage" or decoupageNode.get(u"id", None) in self.decoupage_blacklist:
- continue
-
- decoupId = decoupageNode.get(u"id", None)
- res = decoupageNode.xpath("elements/element")
- for elementNode in res:
-
- elementId = elementNode.get(u"id", None)
- tags = elementNode.get(u"tags", None)
-
- if tags is not None:
- tags.replace(u",", u";")
-
- if tags is None or len(tags) == 0:
- tags = u""
- restagnode = elementNode.xpath("tag/text()", smart_strings=False)
- for tagnode in restagnode:
- tags = tags + u" ; " + tagnode
-
- if tags is None or len(tags) == 0:
- tags = u""
- restagnode = elementNode.xpath("tags/tag/text()", smart_strings=False)
-
- for tagnode in restagnode:
- tags = tags + u" ; " + tagnode
-
- if tags is None:
- tags = u""
- tags = u";".join([tag[0:50] for tag in tags.split(u";")])
-
-
- title = reduce_text_node(elementNode, "title/text()")
- abstract = reduce_text_node(elementNode, "abstract/text()")
-
- author = elementNode.get("author", "")
- start_ts = int(float(elementNode.get("begin", "-1")))
- duration = int(float(elementNode.get("dur", "0")))
- date_str = elementNode.get("date", "")
- ldt_id = u""
- if project:
- ldt_id = project.ldt_id
-
- doc = lucene.Document()
- doc.add(lucene.Field("type_doc", "annotation", lucene.Field.Store.NO, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("project_id", ldt_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
- doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
- doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
- doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
-
- seg = Segment(content=content,
- iri_id=content.iri_id,
- ensemble_id=ensembleId,
- cutting_id=decoupId,
- element_id=elementId,
- tags=tags,
- title=title,
- abstract=abstract,
- duration=duration,
- author=author,
- start_ts=start_ts,
- date=date_str,
- project_obj=project,
- project_id=ldt_id)
- seg.save()
- self.writer.addDocument(doc)
-
-
-
-class ContentIndexer(LdtIndexer):
-
- def __init__(self, contentList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
- super(ContentIndexer, self).__init__(writer, decoupage_blackList)
- self.__contentList = contentList
-
- def index_all(self):
- for content in self.__contentList:
- self.index_content(content)
-
- def index_content(self, content):
- url = content.iri_url()
- filepath = urllib.urlopen(url)
- doc = lxml.etree.parse(filepath) #@UndefinedVariable
-
- self.writer.deleteDocuments(lucene.Term("iri_id", content.iri_id))
- Segment.objects.filter(iri_id=content.iri_id).delete() #@UndefinedVariable
-
- res = doc.xpath("/iri/body/ensembles/ensemble")
-
- for ensemble in res:
- self.index_ensemble(ensemble, content)
-
- self.writer.commit()
-
-
-class ProjectIndexer(LdtIndexer):
-
- def __init__(self, projectList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
- super(ProjectIndexer, self).__init__(writer, decoupage_blackList)
- self.__projectList = projectList
-
- def index_all(self):
- for project in self.__projectList:
- self.index_project(project)
-
- def index_project(self, project):
-
- # pocketfilms.utils.log.debug("Indexing project : "+str(project.iri_id))
- doc = lxml.etree.fromstring(project.ldt) #@UndefinedVariable
-
- self.writer.deleteDocuments(lucene.Term("project_id", project.ldt_id))
- Segment.objects.filter(project_obj__ldt_id=project.ldt_id).delete() #@UndefinedVariable
-
- res = doc.xpath("/iri/annotations/content")
-
- for content in res:
- contentId = content.get(u"id", None)
- content_obj = None
-
- clist = Content.objects.filter(iri_id = contentId) #@UndefinedVariable
- if len(clist) > 0:
- content_obj = clist[0]
-
- for ensemble in content.getchildren():
- self.index_ensemble(ensemble, content_obj, project)
-
- self.writer.commit()
-
-@receiver(post_save, sender=Project)
-def index_project(sender, **kwargs):
- instance = kwargs['instance']
- writer = ldt.indexation.get_writer()
- if instance.state != 2:
- writer.deleteDocuments(lucene.Term("project_id", instance.ldt_id))
- Segment.objects.filter(project_obj__ldt_id=instance.ldt_id).delete() #@UndefinedVariable
- else:
- projectIndexer = ProjectIndexer([instance], writer)
- projectIndexer.index_all()
-
-
+from django.conf import settings
+from django.db.models.signals import post_save
+from django.dispatch import receiver
+from ldt.ldt_utils.models import Segment, Content, Project
+from ldt.ldt_utils.utils import reduce_text_node
+import ldt.indexation
+import lucene
+import lxml.etree
+import urllib #@UnresolvedImport
+# import ldt.utils.log
+
+def Property(func):
+ return property(**func())
+
+
+class LdtIndexer(object):
+
+ def __init__(self, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
+ self.__decoupage_blacklist = decoupage_blackList
+ self.__writer = writer
+
+ @Property
+ def decoupage_blacklist(): #@NoSelf
+ doc = """get blacklist""" #@UnusedVariable
+
+ def fget(self):
+ if self.__decoupage_blacklist is None:
+ self.__decoupage_blacklist = ()
+ return self.__decoupage_blacklist
+
+ def fset(self, value):
+ self.__decoupage_blacklist = value
+
+ def fdel(self):
+ del self.__decoupage_blacklist
+
+ return locals()
+
+ @Property
+ def writer(): #@NoSelf
+ def fget(self):
+ return self.__writer
+ return locals()
+
+ def index_all(self):
+ raise NotImplemented
+
+ def index_ensemble(self, ensemble, content, project=None):
+ ensembleId = ensemble.get(u"id", None)
+
+ for decoupageNode in ensemble.getchildren():
+ if decoupageNode.tag != "decoupage" or decoupageNode.get(u"id", None) in self.decoupage_blacklist:
+ continue
+
+ decoupId = decoupageNode.get(u"id", None)
+ res = decoupageNode.xpath("elements/element")
+ for elementNode in res:
+
+ elementId = elementNode.get(u"id", None)
+ tags = elementNode.get(u"tags", None)
+
+ if tags is not None:
+ tags.replace(u",", u";")
+
+ if tags is None or len(tags) == 0:
+ tags = u""
+ restagnode = elementNode.xpath("tag/text()", smart_strings=False)
+ for tagnode in restagnode:
+ tags = tags + u" ; " + tagnode
+
+ if tags is None or len(tags) == 0:
+ tags = u""
+ restagnode = elementNode.xpath("tags/tag/text()", smart_strings=False)
+
+ for tagnode in restagnode:
+ tags = tags + u" ; " + tagnode
+
+ if tags is None:
+ tags = u""
+ tags = u";".join([tag[0:50] for tag in tags.split(u";")])
+
+
+ title = reduce_text_node(elementNode, "title/text()")
+ abstract = reduce_text_node(elementNode, "abstract/text()")
+
+ author = elementNode.get("author", "")
+ start_ts = int(float(elementNode.get("begin", "-1")))
+ duration = int(float(elementNode.get("dur", "0")))
+ date_str = elementNode.get("date", "")
+ ldt_id = u""
+ if project:
+ ldt_id = project.ldt_id
+
+ doc = lucene.Document()
+ doc.add(lucene.Field("type_doc", "annotation", lucene.Field.Store.NO, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("project_id", ldt_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
+ doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
+ doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+ doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+
+ seg = Segment(content=content,
+ iri_id=content.iri_id,
+ ensemble_id=ensembleId,
+ cutting_id=decoupId,
+ element_id=elementId,
+ tags=tags,
+ title=title,
+ abstract=abstract,
+ duration=duration,
+ author=author,
+ start_ts=start_ts,
+ date=date_str,
+ project_obj=project,
+ project_id=ldt_id)
+ seg.save()
+ self.writer.addDocument(doc)
+
+
+
+class ContentIndexer(LdtIndexer):
+
+ def __init__(self, contentList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
+ super(ContentIndexer, self).__init__(writer, decoupage_blackList)
+ self.__contentList = contentList
+
+ def index_all(self):
+ for content in self.__contentList:
+ self.index_content(content)
+
+ def index_content(self, content):
+ url = content.iri_url()
+ filepath = urllib.urlopen(url)
+ doc = lxml.etree.parse(filepath) #@UndefinedVariable
+
+ self.writer.deleteDocuments(lucene.Term("iri_id", content.iri_id))
+ Segment.objects.filter(iri_id=content.iri_id).delete() #@UndefinedVariable
+
+ res = doc.xpath("/iri/body/ensembles/ensemble")
+
+ for ensemble in res:
+ self.index_ensemble(ensemble, content)
+
+ self.writer.commit()
+
+
+class ProjectIndexer(LdtIndexer):
+
+ def __init__(self, projectList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
+ super(ProjectIndexer, self).__init__(writer, decoupage_blackList)
+ self.__projectList = projectList
+
+ def index_all(self):
+ for project in self.__projectList:
+ self.index_project(project)
+
+ def index_project(self, project):
+
+ # pocketfilms.utils.log.debug("Indexing project : "+str(project.iri_id))
+ doc = lxml.etree.fromstring(project.ldt) #@UndefinedVariable
+
+ self.writer.deleteDocuments(lucene.Term("project_id", project.ldt_id))
+ Segment.objects.filter(project_obj__ldt_id=project.ldt_id).delete() #@UndefinedVariable
+
+ res = doc.xpath("/iri/annotations/content")
+
+ for content in res:
+ contentId = content.get(u"id", None)
+ content_obj = None
+
+ clist = Content.objects.filter(iri_id = contentId) #@UndefinedVariable
+ if len(clist) > 0:
+ content_obj = clist[0]
+
+ for ensemble in content.getchildren():
+ self.index_ensemble(ensemble, content_obj, project)
+
+ self.writer.commit()
+
+@receiver(post_save, sender=Project)
+def index_project(sender, **kwargs):
+ if settings.AUTO_INDEX_AFTER_SAVE:
+ instance = kwargs['instance']
+ writer = ldt.indexation.get_writer()
+ if instance.state != 2:
+ writer.deleteDocuments(lucene.Term("project_id", instance.ldt_id))
+ Segment.objects.filter(project_obj__ldt_id=instance.ldt_id).delete() #@UndefinedVariable
+ else:
+ projectIndexer = ProjectIndexer([instance], writer)
+ projectIndexer.index_all()
+
+
--- a/src/ldt/ldt/ldt_utils/models.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/models.py Mon May 09 18:57:23 2011 +0200
@@ -161,7 +161,7 @@
#TODO: better manage the change in .iri name and error scenario (save in temp file + rename
def save(self, *args, **kwargs):
- #self.sync_iri_file()
+ self.sync_iri_file()
# update it
super(Content, self).save(*args, **kwargs)
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html Mon May 09 18:57:23 2011 +0200
@@ -29,7 +29,7 @@
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
$(document).ready(function() {
- // url_upload, media_prefix, post_added_params, btn_label, success_label
+ // url_upload, media_prefix, post_added_params, btn_label, success_label, wait_label, cancel_label
post_added_params = {"csrfmiddlewaretoken" : "{{csrf_token}}",
"{{cookie_name}}" : "{{session_key}}"};
@@ -37,7 +37,10 @@
"{{LDT_MEDIA_PREFIX}}",
post_added_params,
'{% trans "Browse" %}',
- '{% trans "File uploaded" %}');
+ '{% trans "File uploaded" %}',
+ '{% trans "Please wait, the upload is not finished yet" %}',
+ '{% trans "Cancel upload" %}',
+ "{% url ldt.ldt_utils.views.removetempfile %}");
});
</script>
--- a/src/ldt/ldt/ldt_utils/urls.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/urls.py Mon May 09 18:57:23 2011 +0200
@@ -49,5 +49,6 @@
url(r'^space/ldt/publish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.publish'),
url(r'^space/ldt/unpublish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.unpublish'),
url(r'^space/upload/$', 'views.upload'),
+ url(r'^space/removetempfile/$', 'views.removetempfile'),
)
--- a/src/ldt/ldt/ldt_utils/views.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/views.py Mon May 09 18:57:23 2011 +0200
@@ -670,7 +670,7 @@
if cleaned_data['src'].startswith("rtmp://") or cleaned_data['src'].startswith("http://"):
cleaned_data['videopath'] = ''
media, created = Media.objects.get_or_create(src=cleaned_data['src'], defaults=cleaned_data) #@UndefinedVariable
- elif media_input_type == "url" or media_input_type == "upload" :
+ elif media_input_type == "url" or media_input_type == "upload" :
# copy file
#complet src
destination_file = None
@@ -697,8 +697,7 @@
else:
base_basename_filename = base_source_filename[:-1 * (len(extension) + 1)]
i = 0
- init_path = destination_filepath
- init_name = source_filename
+
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)
@@ -713,14 +712,10 @@
chunck = source_file.read(2048)
elif media_input_type == "upload":
- # Since the file names have been 1 iteration too far, we rebuild the existing file name
- if i == 1 :
- base_source_filename = init_name
- destination_filepath = init_path
- else :
- i -= 2
- base_source_filename = "%s.%d.%s" % (base_basename_filename, i, extension)
- destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
+ # The media file has been uploaded in the session temp folder
+ # so we just have to move to the regular folder and rename it.
+ if os.path.exists(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename)):
+ os.rename(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename), os.path.join(settings.STREAM_PATH, base_source_filename))
src_prefix = settings.STREAM_SRC_PREFIX.rstrip("/")
@@ -766,7 +761,7 @@
setattr(media, attribute, cleaned_data.get(attribute))
mimetype = cleaned_data.get('mimetype_field', None)
if not mimetype:
- mimetype = mimetypes.guess_type(media.src)
+ mimetype = mimetypes.guess_type(media.src)
media.mimetype_field = mimetype
media.save()
@@ -780,7 +775,6 @@
del content_defaults["media_input_type"]
content, created = Content.objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable
if not created:
-
for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
setattr(content, attribute, content_defaults[attribute])
content.save()
@@ -870,30 +864,29 @@
source_filename = source_file.name
# We sanitize the file name : no space, only lower case.
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
- # We search if there is already a file with the same name, and rename the target by name.X.ext
- 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
-
+ # We create the session temp folder if necessary
+ if not os.path.exists(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME])):
+ os.makedirs(os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME]))
+ destination_filepath = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", source_filename)
+ # We delete the existing file if necessary
+ if os.path.exists(destination_filepath):
+ os.remove(destination_filepath)
+
destination_file = open(destination_filepath, "wb")
for chunk in source_file.chunks():
destination_file.write(chunk)
destination_file.close()
-
# indicate that everything is OK for SWFUpload
return HttpResponse("ok", mimetype="text/plain")
else:
return HttpResponse("notok", mimetype="text/plain")
+
+def removetempfile(request):
+ # The filename arrives with a GET var.
+ file_path = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", ldt_utils_path.sanitize_filename(request.GET["filename"]))
+ if os.path.exists(file_path):
+ os.remove(file_path)
+ return HttpResponse("remove ok", mimetype="text/plain")
--- a/src/ldt/ldt/media/js/projectscontents.js Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/media/js/projectscontents.js Mon May 09 18:57:23 2011 +0200
@@ -84,6 +84,30 @@
};
}
+function testCreateAndClose(nm, close_fn) {
+
+ return function(force) {
+ // We get the frames vars
+ f = window.frames[0];
+ form_status = $('#content_form_status',$.nmTop().store.iframe.contents()).val();
+ // If form_status is "saved", we don't have to test anything, the form was was normally submitted.
+ // If was status is "empty" AND an upload from local was done
+ if(form_status!="saved" && f.upload_from_local_done==true && f.remove_temp_file_url){
+ // ERASE FILE
+ //alert("testCreateAndClose : " + "f = " + f + ", status = " + form_status + ", u = " + f.upload_from_local_done + ", s = " + f.submit_asked + ", url = " + f.remove_temp_file_url);
+ $.ajax({
+ type: "GET",
+ url: f.remove_temp_file_url,
+ data: "filename="+ $('#id_media-local_file_name',$.nmTop().store.iframe.contents()).val(),
+ cache: false,
+ success: function(data, status, request){
+ //alert("remove success");
+ }
+ });
+ }
+ close_fn.apply(this);
+ };
+}
function searchCallback(target, container_selector, url, timeout) {
@@ -156,6 +180,12 @@
}
}
});
+ $('.content_link_create',base_node).each(function(i, e) {
+ nm = $(e).data('nmObj');
+ $(e).data('nmObj', $.extend(true, nm, {
+ close: testCreateAndClose(nm, nm.close)
+ }));
+ });
$('.contenttitlelink').each(function(i){
$(this).attr("target","_blank");
@@ -259,7 +289,7 @@
},
afterClose: function(nm) {
searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
- }
+ }
}
});
$('.ldt_link_create',base_node).each(function(i, e) {
@@ -403,9 +433,11 @@
//
// Functions used in the create content view.
//
-function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label) {
+function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label, wait_label, cancel_label, remove_url) {
- var upload_from_local_done = false;
+ window.upload_from_local_done = false;
+ window.submit_asked = false;
+ window.remove_temp_file_url = remove_url;
$("#close_button").click(function (e) {
e.preventDefault();
@@ -425,10 +457,19 @@
// We disable the default submit
$('#my_form').submit(function() {
- if($('#id_content-media_input_type').val()=="upload" && upload_from_local_done==false){
- //alert("1. " + $('#id_content-media_input_type').val() + ", upload_done = " + upload_from_local_done);
- startLocalUpload();
- return false;
+ window.submit_asked = true;
+ if($('#id_content-media_input_type').val()=="upload"){
+ if(window.upload_from_local_done==false){
+ // The form has sent but the uploading has not ended.
+ if($('#upload_progress_info').children().size()>0){
+ $('#progress_info').remove();
+ }
+ $('#upload_progress_info').append('<p id="progress_info"><font color="red"><strong>' + wait_label + '.</strong></font></p>');
+ return false;
+ }
+ else{
+ return true;
+ }
}
else{
//alert("2. " + $('#id_content-media_input_type').val());
@@ -461,26 +502,38 @@
file_upload_limit : "1",
file_queue_limit : "1",
+ upload_error_handler : uploadError,
+ upload_start_handler : function(file) {
+ try {
+ if($('#upload_progress_info').children().size()>0){
+ $('#progress_info').remove();
+ }
+ $('#upload_progress_info').append('<p id="progress_info"><a href="javascript:cancelSwfUpload()">' + cancel_label + '.</a></p>');
+ }
+ catch (ex) {
+ //this.debug(ex);
+ }
+ },
upload_progress_handler : uploadProgress,
- upload_error_handler : uploadError,
- //upload_success_handler : uploadSuccess,
upload_success_handler : function() {
try {
if($('#upload_progress_info').children().size()>0){
$('#progress_info').remove();
}
$('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
- upload_from_local_done = true;
- // Now that the file is uploaded, we submit the form
- $('#my_form').submit();
+ $("#upload_progress_bar > div").css({ 'background': '#90ffa8' });
+ window.upload_from_local_done = true;
+ // Now that the file is uploaded, we submit the form if asked
+ if(window.submit_asked==true){
+ $('#my_form').submit();
+ }
}
catch (ex) {
//this.debug(ex);
}
},
-
file_queued_handler : displayUploadPath,
- //file_dialog_complete_handler: function() { this.startUpload(); },
+ file_dialog_complete_handler: function() { this.startUpload(); },
//upload_complete_handler: function() { this.startUpload(); },
});
}
@@ -504,18 +557,10 @@
//this.debug(ex);
}
}
-function uploadSuccess(success_label) {
- try {
- if($('#upload_progress_info').children().size()>0){
- $('#progress_info').remove();
- }
- $('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
- upload_from_local_done = true;
- // Now that the file is uploaded, we submit the form
- $('#my_form').submit();
- }
- catch (ex) {
- //this.debug(ex);
+function cancelSwfUpload(){
+ swfupload.cancelUpload();
+ if($('#media_field_upload').has($('#cancelupload')).length==0){
+ $('#cancelupload').remove();
}
}
function uploadError(file, errorCode, message) {
--- a/src/ldt/ldt/settings.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/settings.py Mon May 09 18:57:23 2011 +0200
@@ -72,5 +72,5 @@
LDT_MAX_SEARCH_NUMBER = 50
LDT_JSON_DEFAULT_INDENT = 2
+AUTO_INDEX_AFTER_SAVE = getattr(settings, 'AUTO_INDEX_AFTER_SAVE', True)
-
--- a/src/ldt/ldt/utils/context_processors.py Fri May 06 02:10:25 2011 +0200
+++ b/src/ldt/ldt/utils/context_processors.py Mon May 09 18:57:23 2011 +0200
@@ -3,7 +3,7 @@
def ldtcontext(request):
- return {'BASE_URL': settings.BASE_URL, 'MEDIA_URL': settings.MEDIA_URL, 'TC1': 'TC1', \
+ return {'BASE_URL': settings.BASE_URL, 'MEDIA_URL': settings.MEDIA_URL, \
'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'WEB_URL': settings.WEB_URL, \
'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX, 'VERSION': ldt.get_version() }
--- a/web/ldtplatform/config.py.tmpl Fri May 06 02:10:25 2011 +0200
+++ b/web/ldtplatform/config.py.tmpl Mon May 09 18:57:23 2011 +0200
@@ -71,3 +71,6 @@
LDT_JSON_DEFAULT_INDENT = 0
EMPTY_MEDIA_EXTERNALID = None
+
+AUTO_INDEX_AFTER_SAVE = True
+
--- a/web/ldtplatform/settings.py Fri May 06 02:10:25 2011 +0200
+++ b/web/ldtplatform/settings.py Mon May 09 18:57:23 2011 +0200
@@ -177,6 +177,8 @@
SOCIAL_AUTH_COMPLETE_URL_NAME = 'complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'associate_complete'
+AUTO_INDEX_AFTER_SAVE = True
+
from config import *
if not "LOGIN_URL" in locals():
--- a/web/static/ldt/js/projectscontents.js Fri May 06 02:10:25 2011 +0200
+++ b/web/static/ldt/js/projectscontents.js Mon May 09 18:57:23 2011 +0200
@@ -84,6 +84,30 @@
};
}
+function testCreateAndClose(nm, close_fn) {
+
+ return function(force) {
+ // We get the frames vars
+ f = window.frames[0];
+ form_status = $('#content_form_status',$.nmTop().store.iframe.contents()).val();
+ // If form_status is "saved", we don't have to test anything, the form was was normally submitted.
+ // If was status is "empty" AND an upload from local was done
+ if(form_status!="saved" && f.upload_from_local_done==true && f.remove_temp_file_url){
+ // ERASE FILE
+ //alert("testCreateAndClose : " + "f = " + f + ", status = " + form_status + ", u = " + f.upload_from_local_done + ", s = " + f.submit_asked + ", url = " + f.remove_temp_file_url);
+ $.ajax({
+ type: "GET",
+ url: f.remove_temp_file_url,
+ data: "filename="+ $('#id_media-local_file_name',$.nmTop().store.iframe.contents()).val(),
+ cache: false,
+ success: function(data, status, request){
+ //alert("remove success");
+ }
+ });
+ }
+ close_fn.apply(this);
+ };
+}
function searchCallback(target, container_selector, url, timeout) {
@@ -156,6 +180,12 @@
}
}
});
+ $('.content_link_create',base_node).each(function(i, e) {
+ nm = $(e).data('nmObj');
+ $(e).data('nmObj', $.extend(true, nm, {
+ close: testCreateAndClose(nm, nm.close)
+ }));
+ });
$('.contenttitlelink').each(function(i){
$(this).attr("target","_blank");
@@ -259,7 +289,7 @@
},
afterClose: function(nm) {
searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
- }
+ }
}
});
$('.ldt_link_create',base_node).each(function(i, e) {
@@ -403,9 +433,11 @@
//
// Functions used in the create content view.
//
-function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label) {
+function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label, wait_label, cancel_label, remove_url) {
- var upload_from_local_done = false;
+ window.upload_from_local_done = false;
+ window.submit_asked = false;
+ window.remove_temp_file_url = remove_url;
$("#close_button").click(function (e) {
e.preventDefault();
@@ -425,10 +457,19 @@
// We disable the default submit
$('#my_form').submit(function() {
- if($('#id_content-media_input_type').val()=="upload" && upload_from_local_done==false){
- //alert("1. " + $('#id_content-media_input_type').val() + ", upload_done = " + upload_from_local_done);
- startLocalUpload();
- return false;
+ window.submit_asked = true;
+ if($('#id_content-media_input_type').val()=="upload"){
+ if(window.upload_from_local_done==false){
+ // The form has sent but the uploading has not ended.
+ if($('#upload_progress_info').children().size()>0){
+ $('#progress_info').remove();
+ }
+ $('#upload_progress_info').append('<p id="progress_info"><font color="red"><strong>' + wait_label + '.</strong></font></p>');
+ return false;
+ }
+ else{
+ return true;
+ }
}
else{
//alert("2. " + $('#id_content-media_input_type').val());
@@ -461,25 +502,38 @@
file_upload_limit : "1",
file_queue_limit : "1",
+ upload_error_handler : uploadError,
+ upload_start_handler : function(file) {
+ try {
+ if($('#upload_progress_info').children().size()>0){
+ $('#progress_info').remove();
+ }
+ $('#upload_progress_info').append('<p id="progress_info"><a href="javascript:cancelSwfUpload()">' + cancel_label + '.</a></p>');
+ }
+ catch (ex) {
+ //this.debug(ex);
+ }
+ },
upload_progress_handler : uploadProgress,
- upload_error_handler : uploadError,
upload_success_handler : function() {
try {
if($('#upload_progress_info').children().size()>0){
$('#progress_info').remove();
}
$('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
- upload_from_local_done = true;
- // Now that the file is uploaded, we submit the form
- $('#my_form').submit();
+ $("#upload_progress_bar > div").css({ 'background': '#90ffa8' });
+ window.upload_from_local_done = true;
+ // Now that the file is uploaded, we submit the form if asked
+ if(window.submit_asked==true){
+ $('#my_form').submit();
+ }
}
catch (ex) {
//this.debug(ex);
}
},
-
file_queued_handler : displayUploadPath,
- //file_dialog_complete_handler: function() { this.startUpload(); },
+ file_dialog_complete_handler: function() { this.startUpload(); },
//upload_complete_handler: function() { this.startUpload(); },
});
}
@@ -503,18 +557,10 @@
//this.debug(ex);
}
}
-function uploadSuccess(success_label) {
- try {
- if($('#upload_progress_info').children().size()>0){
- $('#progress_info').remove();
- }
- $('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
- upload_from_local_done = true;
- // Now that the file is uploaded, we submit the form
- $('#my_form').submit();
- }
- catch (ex) {
- //this.debug(ex);
+function cancelSwfUpload(){
+ swfupload.cancelUpload();
+ if($('#media_field_upload').has($('#cancelupload')).length==0){
+ $('#cancelupload').remove();
}
}
function uploadError(file, errorCode, message) {