Improve project creation window
authorverrierj
Tue, 22 Nov 2011 17:04:12 +0100
changeset 225 691a394a7afd
parent 223 31cb29055591
child 226 3661b2741f3f
Improve project creation window
src/ldt/ldt/ldt_utils/forms.py
src/ldt/ldt/ldt_utils/models.py
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html
src/ldt/ldt/ldt_utils/views.py
src/ldt/ldt/static/ldt/js/projectscontents.js
--- a/src/ldt/ldt/ldt_utils/forms.py	Thu Nov 10 12:59:41 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/forms.py	Tue Nov 22 17:04:12 2011 +0100
@@ -10,7 +10,7 @@
     flatten = forms.BooleanField(required=False, initial=True)   
     
 class LdtAddForm(forms.ModelForm):
-    title = forms.CharField()
+    title = forms.CharField(required=True)
     contents = forms.ModelMultipleChoiceField(Content.objects.all()) #@UndefinedVariable
     description = forms.CharField(widget=forms.Textarea, required=False)
     # owner = forms.ModelChoiceField(Author.objects.all())
--- a/src/ldt/ldt/ldt_utils/models.py	Thu Nov 10 12:59:41 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/models.py	Tue Nov 22 17:04:12 2011 +0100
@@ -384,22 +384,31 @@
             return False
         
     def save(self):
-        doc = lxml.etree.fromstring(self.ldt)
-        self.contents.clear()
-        medias = doc.xpath('/iri/medias/media')
-                        
-        description = self.get_description(doc)
-        new_desc = clean_description(description)
-        
-        if new_desc:        
-            desc_node = doc.xpath('/iri/project')[0]
-            desc_node.set('abstract', new_desc)
-            self.ldt = lxml.etree.tostring(doc, pretty_print=True)          
-        
-        for media in medias:
-            iri_id = media.get('id')
-            c = Content.objects.get(iri_id=iri_id)
-            self.contents.add(c)
+        if self.ldt:
+            doc = lxml.etree.fromstring(self.ldt)
+            new_contents = []
+            contents = doc.xpath("/iri/medias/media")
+            for elem in contents:
+                id = elem.get("id")
+                new_contents.append(id)
+    
+            for c in self.contents.all():
+                if not c.iri_id in new_contents:
+                    self.contents.remove(c)
+            
+            contents_id = [c.id for c in self.contents.all()]
+            for c in new_contents:
+                if c not in contents_id:
+                    content = Content.objects.get(iri_id=c)
+                    self.contents.add(content)
+                                
+            description = self.get_description(doc)
+            new_desc = clean_description(description)
+            
+            if new_desc:        
+                desc_node = doc.xpath('/iri/project')[0]
+                desc_node.set('abstract', new_desc)
+                self.ldt = lxml.etree.tostring(doc, pretty_print=True)          
             
         super(Project, self).save()
 
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Thu Nov 10 12:59:41 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Tue Nov 22 17:04:12 2011 +0100
@@ -29,11 +29,18 @@
 	{{ block.super }}
 	<script type="text/javascript">
 	$(document).ready(function() {	
+			
+		var form_status = $("input[name=form_status]").val();
+		var redirect_to = '{{ redirect_to }}';
+		if (form_status == "saved" && redirect_to) {
+			parent.location.href = redirect_to;
+			parent.$.nmTop.close();
+		}
+		
 		$("#close_button").click(function (e) {
 			e.preventDefault();
 			parent.$.nmTop().close();
 		});
-		
 		var check_all = '{% trans "check all" %}';
 		var uncheck_all = '{% trans "uncheck all" %}';
 		
@@ -75,14 +82,17 @@
 {% block body %}
 	<div id="add_contribution" class="span-12 last">
 	<div class="projectscontentstitle span-12 last">{% if ldt_id %}{% trans "Update your project" %}{% else %}{% trans "Create your project" %}{% endif %}</div>
-	<form action="{{create_project_action}}" method="POST" {% if target_parent %}target="_parent"{% endif %}>
-	{% csrf_token %} 
+	<form action="{{create_project_action}}" method="POST" >
+	{% csrf_token %}
 	<input type="hidden" name="form_status" value="{{form_status}}" id="project_form_status" />
 	<label for="title">{% trans "Title" %}:</label>
 	{{form.title}}
+	{% for error in form.title.errors %}
+	<span class="error">{{ error }}</span>
+	{% endfor %}
 	<label for="description" class="projectdesc">{% trans "Description :" %}</label>
 	{{form.description}}
-	<label>{% trans "List of contents" %}</label>	
+	<label>{% trans "List of contents" %}</label>
 	<div class="span-12 last projectscontentsdiv" id="ldtcreatecontentslistcontainer">
 		<div class="span-12 last projectscontentstablediv" id="ldtcreatecontentstablediv">
 			<table class="projectscontentstable">
@@ -108,7 +118,6 @@
 				</tbody>
 			</table>			
 		</div>
-
 		
 	</div>
 	
--- a/src/ldt/ldt/ldt_utils/views.py	Thu Nov 10 12:59:41 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py	Tue Nov 22 17:04:12 2011 +0100
@@ -387,6 +387,7 @@
 
 @login_required
 def create_ldt_view(request):
+    redirect_to = ''
     if request.method == "POST" :
         form = LdtAddForm(request.POST)
         form_status = "none"
@@ -394,15 +395,20 @@
         
         if form.is_valid():
             user = request.user
-            Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'], description=form.cleaned_data['description'])
+            project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'], description=form.cleaned_data['description'])
             form_status = "saved"
-            contents = []
+            is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
+            if is_gecko :
+                redirect_to = reverse('index_project_full', args=[project.ldt_id])
+            else:
+                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))  
+                  
     else:
         form = LdtAddForm()
         contents = Content.objects.all() #@UndefinedVariable
         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), 'language_code' : settings.LANGUAGE_CODE[2:]}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status, 'redirect_to': redirect_to, 'create_project_action':reverse(create_ldt_view), 'language_code' : settings.LANGUAGE_CODE[2:]}, context_instance=RequestContext(request))
      
 def created_ldt(request):
     return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))
@@ -754,25 +760,28 @@
 
 @login_required
 def create_project(request, iri_id):
-
+    redirect_to = ''
     content = get_object_or_404(Content, iri_id=iri_id)
-    contents = [ content, ]
+    contents = [ content, ]    
+    form_status = "none"
+    
     if request.method == "POST" :
         form = AddProjectForm(request.POST)
         if form.is_valid():
             user = request.user
             project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents, description=form.cleaned_data['description'])
+            form_status = "saved"
             # Modal window is not used with firefox
             is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
             if is_gecko :
-                return HttpResponseRedirect(reverse('index_project_full', args=[project.ldt_id]))
+                redirect_to = reverse('index_project_full', args=[project.ldt_id])
             else:
-                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))
+                return HttpResponseRedirect(reverse('index_project', args=[project.ldt_id]))  
     else:
         form = AddProjectForm()
     # Modal window is not used with firefox, so we ask to submit the form in _parent in firefox case.
     target_parent = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
-    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]), 'target_parent':target_parent}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status': form_status, 'contents':contents, 'redirect_to': redirect_to, 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_id]), 'target_parent':target_parent}, context_instance=RequestContext(request))
 
 @login_required
 def update_project(request, ldt_id):
--- a/src/ldt/ldt/static/ldt/js/projectscontents.js	Thu Nov 10 12:59:41 2011 +0100
+++ b/src/ldt/ldt/static/ldt/js/projectscontents.js	Tue Nov 22 17:04:12 2011 +0100
@@ -436,7 +436,7 @@
     	var w = $(element).innerWidth() + 10;
 	}
     
-    nm.sizes.minH = h;
+    nm.sizes.minH = h + 10;
     nm.sizes.minW = w;
     iframe.height(h);
     iframe.width(w);