Stub of html template for project creation containing a group selection
authorverrierj
Fri, 04 Nov 2011 10:31:47 +0100
changeset 231 535ce952e51c
parent 230 39d97d561c60
child 232 2878499a372b
Stub of html template for project creation containing a group selection
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/groups.html
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html
src/ldt/ldt/ldt_utils/views.py
src/ldt/ldt/static/ldt/css/workspace.css
--- a/src/ldt/ldt/ldt_utils/models.py	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/models.py	Fri Nov 04 10:31:47 2011 +0100
@@ -114,7 +114,7 @@
     class Meta:
         ordering = ["title"]
         permissions = (
-                       ('view_content', 'View Content'),
+                       ('view_content', 'Can view Content'),
                        )
     
     def natural_key(self):
@@ -291,11 +291,19 @@
         return locals()
        
     external_id = property(**external_id())
+    
+class MyManager(models.Manager):
+    
+    def get_query_set(self, *args, **kwargs):
+        return super(MyManager, self).get_query_set(*args, **kwargs)
 
 class SafeManager(models.Manager):
     
-    user = None
-    checker = None        
+    def __init__(self, model_name):
+        super(SafeManager, self).__init__()
+        self.user = None
+        self.checker = None 
+        self.model_name = model_name       
     
     def check_perm_for(self, user):
         self.user = user
@@ -312,7 +320,7 @@
         if not self.has_user():
             raise AttributeError("A user has to be chosen to check permissions.")
         
-        res = get_objects_for_user(self.user, 'ldt_utils.view_project')
+        res = get_objects_for_user(self.user, 'ldt_utils.view_%s' % self.model_name)
             
         return res
 
@@ -335,12 +343,12 @@
     state = models.IntegerField(choices=STATE_CHOICES, default=1)
     description = models.TextField(null=True, blank=True)
     objects = models.Manager()
-    objects_safe = SafeManager()
+    objects_safe = SafeManager('project')
     
     class Meta:
         ordering = ["title"]
         permissions = (
-                       ('view_project', 'View Project'),
+                       ('view_project', 'Can view project'),
                        )
 
     
@@ -393,11 +401,11 @@
         project.changed_by = user.username
         project.state = 1
         project.save()
+        assign('view_project', user, project)
+        assign('change_project', user, project)
         for content in contents:
             project.contents.add(content)
         project.save()
-        assign('view_project', user, project)
-        assign('change_project', user, project)
         return create_ldt(project, user)
 
     def copy_project(self, user, title, description=''):
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/create_ldt.html	Fri Nov 04 10:31:47 2011 +0100
@@ -21,32 +21,80 @@
 			width:390px;
 			height: 100px;
 		}
-	
+		
+		#lefttable {
+            float: left;
+        }
+        
+        #righttable {
+        }
+        
+        .choice {
+            font-weight: bold;
+        }
+        
+        .permission {
+            cursor: pointer;
+            text-decoration: none;
+            color: black;
+        }
+        
+        .permcol {
+            width: 100px;
+        }
+        	
 	</style>
 {% endblock %}
 
 {% block js_declaration %}
 	{{ block.super }}
 	<script type="text/javascript">
+	function checkbox_selection(id_checkbox, checkbox_type) {
+		var check_all = '{% trans "check all" %}';
+		var uncheck_all = '{% trans "uncheck all" %}';
+		var id_str = "#" + id_checkbox;
+		
+		$(id_str).attr('title', uncheck_all);
+		
+		$(id_str).change(function () {
+			if ($(id_str).is(":checked")) {
+				$(".cellcheckbox input[name=\"" + checkbox_type + "\"]").attr('checked', 'true');
+				$(id_str).attr('title', uncheck_all );
+			} else {
+				$(".cellcheckbox input[name=\"" + checkbox_type + "\"]").removeAttr('checked');
+				$(id_str).attr('title', check_all);
+			}
+		});		
+	}
+	
 	$(document).ready(function() {	
+		
 		$("#close_button").click(function (e) {
 			e.preventDefault();
 			parent.$.nmTop().close();
 		});
-		
-		var check_all = '{% trans "check all" %}';
-		var uncheck_all = '{% trans "uncheck all" %}';
-		
-		$("#check_projects").attr('title', uncheck_all);
-		$("#check_projects").change(function () {
-			if ($("#check_projects").is(":checked")) {
-				$(".cellcheckbox input").attr('checked', 'true');
-				$("#check_projects").attr('title', uncheck_all );
-			} else {
-				$(".cellcheckbox input").removeAttr('checked');
-				$("#check_projects").attr('title', check_all);
-			}
-		});
+
+		checkbox_selection("check_contents", "contents");
+		checkbox_selection("check_groups", "groups");
+
+        $(".permission").click(function () {
+            var name = $(this).attr('value');
+        
+            $("a[value=\"" + name + "\"]").removeClass('choice');
+            $(this).addClass('choice');
+        });
+        
+        $("input[name=\"groups\"]").change(function() {
+            var line = $(this).closest('td').next().next();
+            
+            if (!$(this).is(":checked")) {
+                $(".choice", line).removeClass('choice');
+                $(".choice", line).removeClass('permission');
+            } else {
+                $(".perm_read", line).addClass('choice');
+                $(".perm_read, .perm_write", line).addClass('permission');
+            }
+        });
 				
 	});
 	</script>
@@ -72,8 +120,9 @@
 {% endblock %}
 
 {% 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>
+	<div id="add_contribution" class="span-23 last">
+	
+	<div class="projectscontentstitle span-23 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 %} 
 	<input type="hidden" name="form_status" value="{{form_status}}" id="project_form_status" />
@@ -81,37 +130,75 @@
 	{{form.title}}
 	<label for="description" class="projectdesc">{% trans "Description :" %}</label>
 	{{form.description}}
-	<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">
-			
-				<tr class="projectscontentsheader last" id="contentslistheader">
-					<td class="cellcheckbox">
-					{% if not ldt_id %}
-						{% if contents|length > 1 %}
-						<input class="selectallprojects" id="check_projects" type="checkbox" checked="true" />	 
-						{% endif %}
-					{% endif %}	
-					</td>				
-					<td class="projectcontentsheadertitle">{% trans "name" %}</td>
-				</tr>
-			
-			    <tbody class="projectscontentsbody">
-			{% for content in contents %}
-				<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
-				    <td class="cellcheckbox"><input type="checkbox" name="contents" value="{{ content.id }}" checked="true" {% if ldt_id %}disabled="disabled"{% endif %} /></td>
-				    <td class="contenttitle">{{ content.title }}</td>
-				</tr>
-			{% endfor %}
-				</tbody>
-			</table>			
+	
+	<div id="lefttable" class="span-11">
+	<label>{% trans "List of contents" %}</label>
+
+		<div class="span-10 last" id="ldtcreatecontentslistcontainer">
+			<div class="span-10 last projectscontentstablediv" id="ldtcreatecontentstablediv">
+				<table class="projectscontentstable">
+				
+					<tr class="projectscontentsheader last" id="contentslistheader">
+						<td class="cellcheckbox">
+						{% if not ldt_id %}
+							{% if contents|length > 1 %}
+							<input class="selectallcontents" id="check_contents" type="checkbox" checked="true" />	 
+							{% endif %}
+						{% endif %}	
+						</td>				
+						<td class="projectcontentsheadertitle">{% trans "name" %}</td>
+					</tr>
+				
+				    <tbody class="projectscontentsbody">
+				{% for content in contents %}
+					<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
+					    <td class="cellcheckbox"><input type="checkbox" name="contents" value="{{ content.id }}" checked="true"  /></td>
+					    <td class="contenttitle">{{ content.title }}</td>
+					</tr>
+				{% endfor %}
+					</tbody>
+				</table>			
+			</div>
 		</div>
-
-		
-	</div>
+	</div>	
+     
+    
+	<div id="righttable" class="span-11">
+	    <label>{% trans "group list"%}</label>
 	
-	<div id="submitcontent-buttons" class="span-12 last">
+        <div class="span-10 last" id="ldtcreatecontentslistcontainer">
+            <div class="span-10 last projectscontentstablediv" id="ldtcreatecontentstablediv">
+                <table class="projectscontentstable">
+                
+                    <tr class="projectscontentsheader last" id="contentslistheader">
+                        <td class="cellcheckbox">
+                        {% if groups|length > 1 %}
+                        	<input class="selectallgroups" id="check_groups" type="checkbox" checked="true"/>
+                        {% endif %}                            
+                        </td>				
+                        <td class="projectcontentsheadertitle">{% trans "nom" %}</td>
+                        <td class="projectcontentsheadertitle permcol" >{% trans "Permissions" %}</td>
+                    </tr>
+                
+                    <tbody class="projectscontentsbody">
+                
+                	{% for group in groups %}
+                    <tr class="imageline projectscontentsoddline">
+                        <td class="cellcheckbox"><input type="checkbox" name="groups" value="{{ group.id }}" checked="true" /></td>
+                        <td class="projecttitle">{{ group.name }}</td>
+                        <td><a value="group_{{group.id}}" class="perm_read permission choice" title="{% trans "This group can read the project" %}">{% trans "perm.read" %}</a> <a value="group_{{group.id}}" class="perm_write permission" title="{% trans "This group can change the project" %}">{% trans "perm.write" %}</a></td>
+                    </tr>
+                	{% endfor %}
+                
+                    </tbody>
+                </table>			
+            </div>		
+        </div>
+       
+    </div>    
+    
+            
+    <div id="submitcontent-buttons" class="span-10 last">
 		<button type="button" id="close_button"  value="close">{% trans 'close_cancel' %}</button>
 		{% if ldt_id %}
 		<button class="button" id="ldt_submit" type="submit" value="prepare_delete" name="submit_button">{% trans "delete_project" %}</button>
@@ -119,9 +206,12 @@
 		{% else %}
 		<button class="button" id="ldt_submit" type="submit" value="create" name="submit_button">{% trans "create_project" %}</button>
 		{% endif %}
-	</div>
-	</form>
-	</div>
+    </div>
+    
+    </form> 
+    </div>
+          
+    </div>    
 		
 {% endblock %}
 
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/groups.html	Fri Nov 04 10:31:47 2011 +0100
@@ -22,10 +22,10 @@
     $(".update_group_projects").click(function(){
         //alert("group id = " + $(this).attr('id') + ", url = " + get_group_projects_url);
         id_group = $(this).attr('id');
-        // Remove the icons from all the lines
-        $(".next_icon").hide();
-        // Display the icon from the good line
-        $(".next_icon",this).show();
+        // Remove icons from all the lines
+        $(".next_icon, td .create_group").hide();
+        // Display icons from the good line
+        $(".next_icon, .create_group",this).show();
         // Show the search textfield and update the id_group in the hidden input
         $('#search_div').show();
         $('#id_group').val(id_group);
@@ -44,8 +44,6 @@
             },
     		error: function(jqXHR, textStatus, errorThrown) {
     			alert(jqXHR.responseText);
-    			resp = $.parseJSON(jqXHR.responseText);
-    			alert(resp.message);
     		}
         });
     });
@@ -91,6 +89,9 @@
 	<div class="span-12 last" id="projectsdiv">
 		<div class="span-12 last titlediv" >
 			<div class="span-8 projectscontentstitle" >{% trans "The group's projects" %}</div>
+			<div class="span-4 last searchfielddiv" id="search_div" style='display:none'>
+			    <div class="searchfield rounded"><input id="searchprojectsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="projectsajaxloader" class="searchajaxloader" src="{{LDT_MEDIA_PREFIX}}/img/ajax-loader-16x16.gif" alt="loader"/><img id="projecsclear" class="searchclear" src="{{LDT_MEDIA_PREFIX}}img/clear-left.png"/></div>
+			</div>
 		</div>
 		<div class="span-12 last projectscontentsdiv" id="projectslistcontainer">
 		{% include "ldt/ldt_utils/partial/projectslist.html" %}
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html	Fri Nov 04 10:31:47 2011 +0100
@@ -25,9 +25,9 @@
         </td>
         <td class="projecttitle">
         {% ifequal project.state 2 %}
-        {% if show_username %}{{ project.owner.username }} : {% endif %} <span class="projectinfos" data-title="{{ project.title }}" data-desc="{{ project.description|linebreaksbr }}" >{{ project.title }}</span>
+        <span class="projectinfos" data-title="{{ project.title }}" data-desc="{{ project.description|linebreaksbr }}" >{% if show_username %}{{ project.owner.username }} : {% endif %}{{ project.title }}</span>
         {% else %}
-        <a class="projecttitlelink" href="{% url ldt.ldt_utils.views.update_project ldt_id=project.ldt_id %}">{% if show_username %}{{ project.owner.username }} : {% endif %}<span class="projectinfos" data-title="{{ project.title }}" data-desc="{{ project.description|linebreaksbr }}" >{{ project.title }}</span></a>
+        <a class="projecttitlelink" href="{% url ldt.ldt_utils.views.update_project ldt_id=project.ldt_id %}"><span class="projectinfos" data-title="{{ project.title }}" data-desc="{{ project.description|linebreaksbr }}" >{% if show_username %}{{ project.owner.username }} : {% endif %}{{ project.title }}</span></a>
         {% endifequal %}
         </td>
     </tr>
--- a/src/ldt/ldt/ldt_utils/views.py	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/ldt_utils/views.py	Fri Nov 04 10:31:47 2011 +0100
@@ -41,7 +41,6 @@
 import re
 import datetime
 
-
 @login_required
 @group_security
 def workspace(request):
@@ -397,6 +396,7 @@
         form = LdtAddForm(request.POST)
         form_status = "none"
         contents = Content.objects.all()
+        groups = request.user.groups.all()
         
         if form.is_valid():
             user = request.user
@@ -406,9 +406,10 @@
     else:
         form = LdtAddForm()
         contents = Content.objects.all() #@UndefinedVariable
+        groups = request.user.groups.all()
         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, 'groups': groups, 'form': form, 'form_status':form_status, '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))
@@ -774,6 +775,7 @@
 
     project = get_object_or_404(Project, ldt_id=ldt_id)
     contents = project.contents.all()
+    groups = request.user.groups.all()
     if request.method == "POST" :
         submit_action = request.REQUEST.get("submit_button", False)
         if submit_action == "prepare_delete":
@@ -808,7 +810,7 @@
         form = AddProjectForm({'title':unicode(project.title), 'description':unicode(project.get_description())})
         form_status = 'none'
         
-    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'groups': groups, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
 
 
 @login_required
@@ -1137,6 +1139,7 @@
 
 
 @login_required
+@group_security
 def get_group_projects(request):
 
     # Get group, user and project_list
@@ -1184,7 +1187,7 @@
     
     group = get_object_or_404(Group, id=group_id)
     
-    user_list = User.objects.exclude(username='AnonymousUser').exclude(id=request.user.id)
+    user_list = User.objects.exclude(id=settings.ANONYMOUS_USER_ID).exclude(id=request.user.id)
     members_list = User.objects.filter(groups__id=group_id)
     form_status = ''    
     
@@ -1213,8 +1216,7 @@
                 group.name = name
                 
                 for user in User.objects.all():
-                    if user in members_list:
-                        
+                    if user in members_list:                        
                         group.user_set.add(user)
                     else:
                         group.user_set.remove(user)
--- a/src/ldt/ldt/static/ldt/css/workspace.css	Fri Oct 28 16:45:37 2011 +0200
+++ b/src/ldt/ldt/static/ldt/css/workspace.css	Fri Nov 04 10:31:47 2011 +0100
@@ -201,6 +201,6 @@
     margin-top: 20px;
 }
 
-.next_icon {
+.next_icon, tr .create_group {
 	display: none;
 }