Image size is checked before save + project image can be set manually
authorverrierj
Thu, 05 Jan 2012 16:00:58 +0100
changeset 333 4ddf8c0eeab4
parent 331 9978257745a5
child 334 b4b11979cd4a
Image size is checked before save + project image can be set manually
src/ldt/ldt/ldt_utils/models.py
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html
src/ldt/ldt/ldt_utils/views/content.py
src/ldt/ldt/ldt_utils/views/lignesdetemps.py
src/ldt/ldt/ldt_utils/views/project.py
src/ldt/ldt/user/forms.py
web/ldtplatform/config.py.tmpl
--- a/src/ldt/ldt/ldt_utils/models.py	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/models.py	Thu Jan 05 16:00:58 2012 +0100
@@ -404,7 +404,7 @@
     stream_mode = property(**stream_mode())
 
     @staticmethod
-    def create_project(user, title, contents, description='', groups=[]):
+    def create_project(user, title, contents, description='', groups=[], set_icon=True):
 #        owner = Owner.objects.get(user=user) #@UndefinedVariable
         owner = user
         project = Project(title=title, owner=owner, description=description)
@@ -418,8 +418,9 @@
                         
         for content in contents:
             project.contents.add(content)
-            
-        project.set_icon()
+        
+        if set_icon:
+            project.set_icon()
         project.save()
                         
         return create_ldt(project, user)
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Thu Jan 05 16:00:58 2012 +0100
@@ -62,7 +62,7 @@
 {% block body %}
 	<div id="add_contribution" class="span-18 last">
 	<div class="projectscontentstitle span-18 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 %}>
+	<form action="{{create_project_action}}" enctype="multipart/form-data" method="POST" {% if target_parent %}target="_parent"{% endif %}>
 	{% csrf_token %} 
 	<input type="hidden" name="form_status" value="{{form_status}}" id="project_form_status" />	
 
@@ -108,6 +108,7 @@
 	</div>		
 	
 	{% include "ldt/ldt_utils/partial/permissions.html" %}
+    {% include "ldt/ldt_utils/partial/picture.html" %}
              
     <div id="submitcontent" class="span-18 last">
                    
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/picture.html	Thu Jan 05 16:00:58 2012 +0100
@@ -32,6 +32,10 @@
 			resize_modal_window(resize_elem);
 		});	
 		
+		if ('{{profile_picture_form.image.errors}}') {
+			$("#choosepicturecontainer").show();
+		}
+		
 	});
 
 </script>
--- a/src/ldt/ldt/ldt_utils/views/content.py	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/content.py	Thu Jan 05 16:00:58 2012 +0100
@@ -68,12 +68,15 @@
 
         content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
         media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
+        picture_form = PictureForm(None, request.POST, request.FILES)
         
         media_valid = media_form.is_valid()
         content_valid = content_form.is_valid()
+        picture_valid = picture_form.is_valid()
+        
         logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid)) #@UndefinedVariable
         
-        if media_valid and content_valid:
+        if media_valid and content_valid and picture_valid:
 
             # see if media must be created
             cleaned_data = {}
@@ -222,13 +225,13 @@
                         setattr(content, attribute, content_defaults[attribute])
                 content.save()
                
-                picture_form = PictureForm(content, request.POST, request.FILES)
-                if picture_form.is_valid():
-                    picture_form.save()    
+                picture_form.model = content
+                picture_form.save()  
 
                 form_status = 'saved'
                 media_form = MediaForm(instance=media, prefix="media")
                 content_form = ContentForm(instance=content, prefix="content")
+                picture_form = PictureForm()
         else:
             form_status = 'error'
     else:
@@ -238,12 +241,13 @@
             initial['is_public'] = instance_content.is_public
         
         content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
-        media_form = MediaForm(prefix="media", instance=instance_media)  
+        media_form = MediaForm(prefix="media", instance=instance_media) 
+        picture_form = PictureForm() 
                 
         if instance_content is not None:
             content_form.media_input_type = "link"
     
-    return content_form, media_form, form_status
+    return content_form, media_form, picture_form, form_status
 
 @login_required
 def write_content(request, iri_id=None):    
@@ -264,8 +268,9 @@
         form_status = "deleted"
         content_form = ContentForm()
         media_form = MediaForm()
+        picture_form = PictureForm()
     else:
-        content_form, media_form, form_status = write_content_base(request, iri_id)
+        content_form, media_form, picture_form, form_status = write_content_base(request, iri_id)
         if iri_id:
             member_list, admin_list = get_userlist_model(Content.objects.get(iri_id=iri_id), request.user)
         
@@ -282,7 +287,7 @@
     
     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,
                                                                     'elem_list': get_userlist(request.user), 'member_list': member_list, 'admin_list': admin_list,  'iri_id': iri_id, 'session_key':session_key,
-                                                                    'cookie_name':cookie_name, 'img_container': img_container}, context_instance=RequestContext(request))
+                                                                    'cookie_name':cookie_name, 'img_container': img_container, 'profile_picture_form': picture_form}, context_instance=RequestContext(request))
 
 @login_required
 def prepare_delete_content(request, iri_id=None): 
--- a/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Thu Jan 05 16:00:58 2012 +0100
@@ -288,7 +288,8 @@
         for c in ldtproject.contents.all():
             if not c.iri_id in new_contents:
                 ldtproject.contents.remove(c)
-                check_icon_project = True
+                if ldtproject.image == c.image:
+                    check_icon_project = True
                 
         contents_id = [c.id for c in ldtproject.contents.all()]
         for c in new_contents:
--- a/src/ldt/ldt/ldt_utils/views/project.py	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/views/project.py	Thu Jan 05 16:00:58 2012 +0100
@@ -14,6 +14,7 @@
 from ldt.ldt_utils.utils import boolean_convert
 from ldt.security.utils import (assign_perm_to_obj, add_change_attr, get_userlist,
                                 get_userlist_model)
+from ldt.user.forms import PictureForm
 import lxml.etree
 
 @login_required
@@ -21,17 +22,21 @@
     redirect_to = ''
     if request.method == "POST" :
         form = LdtAddForm(request.POST)
+        picture_form = PictureForm(None, request.POST, request.FILES)
         form_status = "none"
         contents = Content.safe_objects.all()
-           
-        if form.is_valid():              
+        
+        if form.is_valid() and picture_form.is_valid():              
                      
-            user = request.user 
-                      
+            user = request.user                      
             project = Project.create_project(title=form.cleaned_data['title'], user=user, 
                                              contents=form.cleaned_data['contents'],
-                                             description=form.cleaned_data['description'])
-  
+                                             description=form.cleaned_data['description'],
+                                             set_icon=False)
+            
+            picture_form.model = project
+            picture_form.save()
+            
             if form.cleaned_data["share"]:
                 assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
             form_status = "saved"
@@ -43,12 +48,13 @@
      
     else:
         form = LdtAddForm()
+        picture_form = PictureForm()
         contents = Content.safe_objects.all()             
         form_status = "none"    
     
     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:],
-                                                                'elem_list': get_userlist(request.user)}, context_instance=RequestContext(request))
+                                                                'elem_list': get_userlist(request.user), 'profile_picture_form': picture_form}, context_instance=RequestContext(request))
    
   
 
@@ -62,15 +68,18 @@
     
     if request.method == "POST" :        
         form = AddProjectForm(request.POST)
+        picture_form = PictureForm(None, request.POST, request.FILES)
         
-        if form.is_valid():
+        if form.is_valid() and picture_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" 
-
+            project = Project.create_project(title=form.cleaned_data['title'],
+                                             user=user, contents=contents, 
+                                             description=form.cleaned_data['description'], 
+                                             set_icon=False)
+            picture_form.model = project
+            picture_form.save()
+                                   
+            form_status = "saved"
             if form.cleaned_data["share"]:
                 assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], user)
 
@@ -110,11 +119,13 @@
                 project.delete()
             form_status = 'deleted'
             form = AddProjectForm()
+            picture_form = PictureForm()
         else:
             form_status = 'none' 
             form = AddProjectForm(request.POST)
+            picture_form = PictureForm(None, request.POST, request.FILES)
             
-            if form.is_valid():          
+            if form.is_valid() and picture_form.is_valid():          
                 if project.title != form.cleaned_data['title'] or project.description != form.cleaned_data['description']:
                     project.title = form.cleaned_data['title']
                     project.description = form.cleaned_data['description']
@@ -124,18 +135,22 @@
                     res[0].set("abstract", project.description)
                     project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
                     project.save()                    
-                    
+                 
+                picture_form.model = project
+                picture_form.save()   
                 if form.cleaned_data["share"]:
                     assign_perm_to_obj(project, form.cleaned_data["read_list"], form.cleaned_data["write_list"], request.user)
                 form_status = "saved"
     else:
         form = AddProjectForm({'title':unicode(project.title), 'description':unicode(project.get_description())})
+        picture_form = PictureForm()
         
         form_status = 'none'
        
     return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups, 'elem_list': get_userlist(request.user), 
                                                                 'ldt_id': ldt_id, 'contents':contents, 'member_list': member_list, 'admin_list': admin_list,
-                                                                'create_project_action':reverse("ldt.ldt_utils.views.project.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
+                                                                'create_project_action':reverse("ldt.ldt_utils.views.project.update_project", args=[ldt_id]),
+                                                                'profile_picture_form': picture_form}, context_instance=RequestContext(request))
 
 @login_required
 def copy_project(request, ldt_id, group_id=0): 
--- a/src/ldt/ldt/user/forms.py	Thu Jan 05 14:19:06 2012 +0100
+++ b/src/ldt/ldt/user/forms.py	Thu Jan 05 16:00:58 2012 +0100
@@ -126,6 +126,14 @@
         self.model = model
         super(PictureForm, self).__init__(*args, **kwargs)
         
+    def clean_image(self):
+        image = self.cleaned_data['image']
+                
+        if image and image.size > settings.PROFILE_IMG_MAX_SIZE:
+            raise forms.ValidationError(_("Image size is limited to %s" % settings.PROFILE_IMG_MAX_SIZE))
+    
+        return image
+    
     def save(self):
         
         if not self.cleaned_data['image']:
@@ -138,7 +146,7 @@
         elif class_name == 'Group':
             instance_name = self.model.name
             img_container = self.model.profile
-        elif class_name == 'Content':
+        elif class_name == 'Content' or class_name == 'Project':
             instance_name = self.model.title
             img_container = self.model
             
--- a/web/ldtplatform/config.py.tmpl	Thu Jan 05 14:19:06 2012 +0100
+++ b/web/ldtplatform/config.py.tmpl	Thu Jan 05 16:00:58 2012 +0100
@@ -97,4 +97,5 @@
 DEFAULT_CONTENT_ICON = "thumbnails/contents/content_default_icon.png"
 DEFAULT_PROJECT_ICON = "thumbnails/projects/project_default_icon.png"
 DEFAULT_USER_ICON = "thumbnails/users/user_default_icon.png"
-DEFAULT_GROUP_ICON = "thumbnails/groups/group_default_icon.png"
\ No newline at end of file
+DEFAULT_GROUP_ICON = "thumbnails/groups/group_default_icon.png"
+PROFILE_IMG_MAX_SIZE = 1000000
\ No newline at end of file