src/ldt/ldt/ldt_utils/views.py
changeset 271 99347d5275b6
parent 269 4b8042fc3d33
child 273 23a756e0bfee
--- a/src/ldt/ldt/ldt_utils/views.py	Wed Dec 07 14:53:01 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py	Thu Dec 08 11:49:18 2011 +0100
@@ -166,14 +166,14 @@
         grp = Group.objects.get(id=id_group)
         project_list = get_objects_for_group(grp, 'ldt_utils.view_project').filter(query)
         show_username = True
-    else :
+    else:
         project_list = Project.safe_objects.filter(query) #@UndefinedVariable
     
     project_list = add_change_attr(request.user, project_list)
     # Template depends on the projects's status
-    if status == 2 :
+    if status == 2:
         url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html"
-    else :
+    else:
         url_templ = "ldt/ldt_utils/partial/projectslist.html"
         
     return render_to_response(url_templ,
@@ -181,23 +181,24 @@
                                'is_gecko': is_gecko, 'group_id':id_group},
                               context_instance=RequestContext(request))
 
-def share_filter(request, filter):
-    
+def share_filter(request, filter, use_groups=False):
+    use_groups = boolean_convert(use_groups)
     if not filter or len(filter) == 0:
         raise AttributeError("filter should be a string")
     
-    filter = filter[1:]
-    
+    filter = filter[1:]    
     users = User.objects.filter(username__icontains=filter)[0:20]
-    groups = Group.objects.filter(name__icontains=filter).exclude(name=settings.PUBLIC_GROUP_NAME)[0:20]
     
     resp = []
     for u in users:
         resp.append({'name':u.username, 'id':u.id, 'type': 'user'})
+        
+    if use_groups:
+        groups = Group.objects.filter(name__icontains=filter).exclude(name=settings.PUBLIC_GROUP_NAME)[0:20]
+
+        for g in groups:
+            resp.append({'name': g.name, 'id': g.id, 'type': 'group'})
     
-    for g in groups:
-        resp.append({'name': g.name, 'id': g.id, 'type': 'group'})
-   
     resp = sorted(resp, key=lambda elem: elem['name'].lower())
     
     return render_to_response("ldt/ldt_utils/partial/sharewith.html", {'elem_list' : resp}, context_instance=RequestContext(request))
@@ -970,13 +971,16 @@
                 del(dict[key])
         
         add_prefix(content_instance_val, "content")
-        add_prefix(media_instance_val, "media")        
+        add_prefix(media_instance_val, "media")     
         
         for k in request.POST.keys():
             value = request.POST.get(k)
             content_instance_val[k] = value
             media_instance_val[k] = value
-        
+            
+        content_instance_val['read_list'] = request.POST.getlist('read_list')
+        content_instance_val['write_list'] = request.POST.getlist('write_list')
+            
         content_form = ContentForm(content_instance_val, prefix="content", instance=instance_content)
         media_form = MediaForm(media_instance_val, request.FILES, prefix="media", instance=instance_media)
                 
@@ -1078,6 +1082,7 @@
                         if source_file:
                             source_file.close()
                 
+                
                 if form_status != "error":
                     #try:
                     del cleaned_data["media_file"]
@@ -1099,27 +1104,30 @@
                 mimetype = cleaned_data.get('mimetype_field', None)
                 if not mimetype:
                     mimetype = mimetypes.guess_type(media.src)
-                media.mimetype_field = mimetype   
-                media.save()                
+                media.mimetype_field = mimetype
                 assign('view_media', request.user, media)
-                assign('change_media', request.user, media) 
+                assign('change_media', request.user, media)
+                media.save()                 
             
-            if form_status != "error":     
+            if form_status != "error": 
                 content_defaults = {}
                 content_defaults.update(content_form.cleaned_data)
                 content_defaults['media_obj'] = media
-                del content_defaults["media_input_type"]
-                del content_defaults['groups']
+                
+                for key in ["media_input_type", "groups", "is_public", "read_list", "write_list" ]:
+                    del content_defaults[key]
+                     
                 content, created = Content.safe_objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults) #@UndefinedVariable
                 
                 assign('change_content', request.user, content)
                 assign('view_content', request.user, content)
                 everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
+                        
                 if content_form.cleaned_data['is_public']:
                     assign('view_content', everyone, content)
                 else:
                     remove_perm('view_content', everyone, content)
-                    assign_perm_to_obj(content, content_form.cleaned_data["read_list"], content_form.cleaned_data["write_list"], request.user)
+                    assign_perm_to_obj(content, content_form.cleaned_data['read_list'], content_form.cleaned_data['write_list'], request.user)
                 if not created:
                     for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
                         setattr(content, attribute, content_defaults[attribute])
@@ -1147,7 +1155,7 @@
 def write_content(request, iri_id=None):    
     submit_action = request.REQUEST.get("submit_button", False) 
     groups = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
-    
+    elem_list = [{'name': u.username, 'id': u.id, 'type': 'user'} for u in User.objects.all()[0:20]]
     
     if submit_action == "prepare_delete": 
         errors, titles = prepare_delete_content(request, iri_id)
@@ -1177,7 +1185,7 @@
     content_form.fields["media_obj"].queryset = Media.safe_objects.all()
     
     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, 'session_key':session_key, 'cookie_name':cookie_name}, context_instance=RequestContext(request))
+                                                                    'elem_list': elem_list, 'iri_id': iri_id, 'session_key':session_key, 'cookie_name':cookie_name}, context_instance=RequestContext(request))
 
 @login_required
 def prepare_delete_content(request, iri_id=None): 
@@ -1289,23 +1297,24 @@
         
         if form.is_valid():          
             name = form.cleaned_data['name']
-            members_list = form.cleaned_data['members_list']
-            admin_list = form.cleaned_data['admin_list']            
+            members_list = form.cleaned_data['read_list']
+            admin_list = form.cleaned_data['write_list']            
             
             group = Group.objects.create(name=name)
             group.save()
             assign('change_group', request.user, group)
             
-            for user in members_list:
-                user.groups.add(group)
-                if user in admin_list:
-                    assign('change_group', user, group)
+            for elem in members_list:
+                if hasattr(elem, 'username'):
+                    elem.groups.add(group)
+                    if elem in admin_list:
+                        assign('change_group', elem, group)
+                        
             request.user.groups.add(group)             
             form_status = 'saved' 
             
     else:
-        form = GroupAddForm()
-        form.fields['members_list'].queryset = user_list       
+        form = GroupAddForm()      
     
     return render_to_response("ldt/ldt_utils/create_group.html", {'form' : form, 'form_status' : form_status, 'elem_list' : user_list}, context_instance=RequestContext(request))
 
@@ -1315,19 +1324,16 @@
         return HttpResponseServerError('<h1>User can not update a group.</h1>')
     
     group = get_object_or_404(Group, id=group_id)
-    member_list = group.user_set.exclude(id=request.user.id)
-    query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
-    user_list = User.objects.exclude(query)[0:20]
-    admin_list = []
-    form_status = ''    
-    
+      
     if not request.user.has_perm('change_group', group):
         form_status = 'saved'
         return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request))
 
-    for u in member_list:
-        if u.has_perm('change_group', group):
-            u.change = True
+    member_list = group.user_set.exclude(id=request.user.id)
+    query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
+    user_list = User.objects.exclude(query)[0:20]
+    user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
+    form_status = ''     
             
     if request.method == "POST":
         form = GroupAddForm(request.POST, instance=group)
@@ -1340,17 +1346,19 @@
         else:            
             if form.is_valid():
                 name = form.cleaned_data['name']
-                new_member_list = form.cleaned_data['members_list']
-                admin_list = form.cleaned_data['admin_list']
+                new_member_list = form.cleaned_data['read_list']
+                admin_list = form.cleaned_data['write_list']
                 group.name = name
-                        
-                for user in new_member_list:                       
+
+                for user in new_member_list:
+                    if not hasattr(user, 'username'):
+                        raise AttributeError('new_member_list should only contain users')                      
                     group.user_set.add(user)
                     if user in admin_list:
                         assign('change_group', user, group)
                     else:
                         remove_perm('change_group', user, group)
-                    
+                        
                 for user in member_list:
                     if user not in new_member_list:
                         group.user_set.remove(user)
@@ -1360,11 +1368,12 @@
                 form_status = 'saved'       
                     
     else:
-        form = GroupAddForm(initial={'name':unicode(group.name), 'members_list':member_list})    
-    
+        form = GroupAddForm(initial={'name':unicode(group.name)})    
+
+    member_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in member_list]
     return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status,
-                                                                  'user_list' : user_list, 'member_list': member_list,
-                                                                  'admin_list' : admin_list}, context_instance=RequestContext(request))
+                                                                  'elem_list' : user_list, 'member_list': member_list,
+                                                                  }, context_instance=RequestContext(request))
 
 @login_required
 def leave_group(request, group_id, redirect=True):