# HG changeset patch # User cavaliet # Date 1304960243 -7200 # Node ID 5578dcb54f4d814ec9067135f9b42ac284edf969 # Parent db9549cf9fce7e355743b4ec0221fb5bf7e482a6 merge context_processors.py and enable upload cancel and remove temp file. Creation of a session temp folder for upload. diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/ldt_utils/contentindexer.py --- 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() + + diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/ldt_utils/models.py --- 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) diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html --- 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 %}"); }); diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/ldt_utils/urls.py --- 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[\w-]*)(?:/(?Ptrue|false))?$', 'views.publish'), url(r'^space/ldt/unpublish/(?P[\w-]*)(?:/(?Ptrue|false))?$', 'views.unpublish'), url(r'^space/upload/$', 'views.upload'), + url(r'^space/removetempfile/$', 'views.removetempfile'), ) diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/ldt_utils/views.py --- 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") diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/media/js/projectscontents.js --- 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('

' + wait_label + '.

'); + 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('

' + cancel_label + '.

'); + } + 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('

' + success_label + '.

'); - 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('

' + success_label + '.

'); - 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) { diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/settings.py --- 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) - diff -r db9549cf9fce -r 5578dcb54f4d src/ldt/ldt/utils/context_processors.py --- 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() } diff -r db9549cf9fce -r 5578dcb54f4d web/ldtplatform/config.py.tmpl --- 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 + diff -r db9549cf9fce -r 5578dcb54f4d web/ldtplatform/settings.py --- 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(): diff -r db9549cf9fce -r 5578dcb54f4d web/static/ldt/js/projectscontents.js --- 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('

' + wait_label + '.

'); + 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('

' + cancel_label + '.

'); + } + 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('

' + success_label + '.

'); - 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('

' + success_label + '.

'); - 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) {