Index: openacs-4/packages/lab-report-central/catalog/lab-report-central.en_US.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/catalog/lab-report-central.en_US.ISO-8859-1.xml,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/lab-report-central/catalog/lab-report-central.en_US.ISO-8859-1.xml	30 Apr 2006 09:27:41 -0000	1.3
+++ openacs-4/packages/lab-report-central/catalog/lab-report-central.en_US.ISO-8859-1.xml	30 Apr 2006 12:01:30 -0000	1.4
@@ -6,6 +6,7 @@
   <msg key="add_instructor_to_list">Add instructor to list</msg>
   <msg key="add_lab">Add Lab</msg>
   <msg key="add_section">Add Section</msg>
+  <msg key="add_student">Add Student</msg>
   <msg key="add_template">Add Template</msg>
   <msg key="add_template_to_list">Add template to list</msg>
   <msg key="admin">Admin</msg>
@@ -15,9 +16,11 @@
   <msg key="create_section">Create Section</msg>
   <msg key="create_template">Create Template</msg>
   <msg key="delete">Delete</msg>
+  <msg key="delete_section">Delete Section</msg>
   <msg key="description">Description</msg>
   <msg key="edit">Edit</msg>
   <msg key="edit_lab">Edit Lab</msg>
+  <msg key="edit_section">Edit Section</msg>
   <msg key="edit_template">Edit Template</msg>
   <msg key="help_enter_lab_description">Enter lab description.</msg>
   <msg key="help_enter_lab_end_date">Enter the last day of the lab.</msg>
@@ -52,6 +55,7 @@
   <msg key="report_templates">Report Templates</msg>
   <msg key="section">Section</msg>
   <msg key="sections">Sections</msg>
+  <msg key="students">Students</msg>
   <msg key="template">Template</msg>
   <msg key="template_sections">Template Sections</msg>
   <msg key="templates">Templates</msg>
@@ -61,6 +65,8 @@
   <msg key="view_report_templates">View Report Templates</msg>
   <msg key="want_to_delete_instructor">Continue with deleting the instructor?</msg>
   <msg key="want_to_delete_lab">Continue with deleting the lab?</msg>
+  <msg key="want_to_delete_section">Continue with deleting the last section?</msg>
   <msg key="want_to_delete_template">Continue with removing the report template?</msg>
+  <msg key="want_to_remove_student">Continue with removing student from the lab?</msg>
   <msg key="want_to_remove_template">Continue with removing report template from lab?</msg>
 </message_catalog>
Index: openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-create.sql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-create.sql	30 Apr 2006 09:27:41 -0000	1.3
+++ openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-create.sql	30 Apr 2006 12:01:30 -0000	1.4
@@ -150,7 +150,18 @@
 				on delete cascade
 );
 
+create table lrc_lab_student_map (
+	lab_id			integer
+				constraint lrc_lab_student_map_lab_id_fk
+				references lrc_lab (lab_id)
+				on delete cascade,
+	user_id			integer
+				constraint lrc_lab_student_map_user_id_fk
+				references users (user_id)
+				on delete cascade
+);
 
+
 --
 -- Create functions
 --
Index: openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-drop.sql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-drop.sql	30 Apr 2006 09:27:41 -0000	1.3
+++ openacs-4/packages/lab-report-central/sql/postgresql/lab-report-central-drop.sql	30 Apr 2006 12:01:30 -0000	1.4
@@ -74,6 +74,7 @@
 drop table lrc_template;
 drop table lrc_groups;
 drop table lrc_lab_template_map;
+drop table lrc_lab_student_map;
 
 delete from acs_objects where object_type='lrc_lab';
 delete from acs_objects where object_type='lrc_template';
Index: openacs-4/packages/lab-report-central/tcl/install-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/tcl/install-procs.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/lab-report-central/tcl/install-procs.tcl	24 Apr 2006 11:27:04 -0000	1.1
+++ openacs-4/packages/lab-report-central/tcl/install-procs.tcl	30 Apr 2006 12:01:31 -0000	1.2
@@ -21,11 +21,10 @@
 }
 
 ad_proc -private lab_report_central::install::create_instructor_group {} {
-    Creates the lab group types.
+    Creates the lab group instructor type.
 } {
     set magic_name "instructors"
     set group_id [group::new -group_name "[_ lab-report-central.instructor]"]
 
     db_dml insert {}
 }
-
Index: openacs-4/packages/lab-report-central/tcl/lab-report-central-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/tcl/lab-report-central-procs-postgresql.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/lab-report-central/tcl/lab-report-central-procs-postgresql.xql	27 Apr 2006 04:34:33 -0000	1.2
+++ openacs-4/packages/lab-report-central/tcl/lab-report-central-procs-postgresql.xql	30 Apr 2006 12:01:31 -0000	1.3
@@ -85,4 +85,35 @@
        WHERE t.template_id NOT IN (select template_id from lrc_lab_template_map where lab_id = :lab_id)
      </querytext>
    </fullquery>
+
+   <fullquery name="lab_student_search">
+     <querytext>
+       select distinct u.first_names || ' ' || u.last_name || ' (' || u.email || ')' as name, u.user_id
+      from   cc_users u
+      where  lower(coalesce(u.first_names || ' ', '')  ||
+             coalesce(u.last_name || ' ', '') ||
+             u.email || ' ' ||
+             coalesce(u.screen_name, '')) like lower('%'||:value||'%')
+       AND u.user_id NOT IN (
+           SELECT user_id
+           FROM lrc_lab_student_map m
+           WHERE m.lab_id = $lab_id
+       )
+       ORDER by name
+     </querytext>
+   </fullquery>
+
+   <fullquery name="lab_report_central::unmapped_students_get_options.students">
+     <querytext>
+       select distinct u.first_names || ' ' || u.last_name || ' (' || u.email || ')' as name, u.user_id
+      from   cc_users u
+      WHERE u.user_id NOT IN (
+           SELECT user_id
+           FROM lrc_lab_student_map m
+           WHERE m.lab_id = :lab_id
+       )
+       ORDER by name
+     </querytext>
+   </fullquery>
+
 </queryset>
Index: openacs-4/packages/lab-report-central/tcl/lab-report-central-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/tcl/lab-report-central-procs.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/lab-report-central/tcl/lab-report-central-procs.tcl	27 Apr 2006 04:34:33 -0000	1.2
+++ openacs-4/packages/lab-report-central/tcl/lab-report-central-procs.tcl	30 Apr 2006 12:01:31 -0000	1.3
@@ -47,3 +47,17 @@
 
     return $templates_list
 }
+
+ad_proc lab_report_central::unmapped_students_get_options {
+    -lab_id
+} {
+    Retrieves an options list of users that aren't mapped to the
+    given lab.
+
+    @param lab_id Lab ID.
+} {
+    set users_list [db_list_of_lists students {}]
+    set users_list [concat [list [list Search ":search:"]] $users_list]
+
+    return $users_list
+}
Index: openacs-4/packages/lab-report-central/www/attach-student-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/Attic/attach-student-postgresql.xql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/lab-report-central/www/attach-student-postgresql.xql	30 Apr 2006 12:01:31 -0000	1.1
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+
+<queryset>
+   <rdbms><type>postgresql</type><version>7.4</version></rdbms>
+
+   <fullquery name="lab_name">
+     <querytext>
+       SELECT name
+       FROM lrc_lab
+       WHERE lab_id = :lab_id
+     </querytext>
+   </fullquery>
+
+   <fullquery name="attach_student">
+     <querytext>
+       INSERT INTO lrc_lab_student_map (lab_id, user_id)
+       VALUES (:lab_id, :student_id)
+     </querytext>
+   </fullquery>
+
+</queryset>
Index: openacs-4/packages/lab-report-central/www/attach-student.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/Attic/attach-student.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/lab-report-central/www/attach-student.adp	30 Apr 2006 12:01:31 -0000	1.1
@@ -0,0 +1,6 @@
+<master src="resources/main-portal">
+<property name="title">@page_title;noquote@</property>
+<property name="context">@context;noquote@</property>
+<property name="focus">attach_student.name</property>
+
+<formtemplate id="attach_student"></formtemplate>
Index: openacs-4/packages/lab-report-central/www/attach-student.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/Attic/attach-student.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/lab-report-central/www/attach-student.tcl	30 Apr 2006 12:01:31 -0000	1.1
@@ -0,0 +1,48 @@
+ad_page_contract {
+    Add a student to a lab.
+
+    @author Nick Carroll (nick.c@rroll.net)
+    @creation-date 2006-04-18
+    @cvs-id $Id: attach-student.tcl,v 1.1 2006/04/30 12:01:31 ncarroll Exp $
+} {
+    lab_id:integer
+    return_url:optional
+}
+
+auth::require_login
+
+set package_id [ad_conn package_id]
+set user_id [ad_conn user_id]
+set peeraddr [ad_conn peeraddr]
+
+permission::require_permission -party_id $user_id -object_id $package_id \
+    -privilege lab_report_central_admin
+
+if { ![info exists return_url] } {
+    set return_url [export_vars -url -base lab {lab_id}]
+}
+
+set lab_name [db_string lab_name {} -default ""]
+
+set page_title [_ lab-report-central.add_student]
+set context [list [list [export_vars -url -base lab {lab_id}] $lab_name] \
+		 $page_title]
+
+ad_form -name attach_student -cancel_url $return_url -form {
+    {lab_id:integer(hidden) {value $lab_id}}
+    {return_url:text(hidden) {value $return_url}}
+    {student_id:search
+	{result_datatype integer}
+ 	{label "[_ lab-report-central.student]" }
+ 	{help_text "[_ lab-report-central.help_select_student_to_attach]"}
+ 	{options "[lab_report_central::unmapped_students_get_options \
+		      -lab_id $lab_id]"}
+	{search_query {[db_map dbqd.lab-report-central.tcl.lab-report-central-procs.lab_student_search]}}
+    }
+} -after_submit {
+    # Map student to lab.
+    db_dml attach_student {}
+
+    ad_returnredirect $return_url
+    ad_script_abort
+}
Index: openacs-4/packages/lab-report-central/www/detach-student-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/detach-student-postgresql.xql,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/lab-report-central/www/detach-student-postgresql.xql	30 Apr 2006 12:01:31 -0000	1.1
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+
+<queryset>
+   <rdbms><type>postgresql</type><version>7.4</version></rdbms>
+
+   <fullquery name="detach_student">
+     <querytext>
+       DELETE FROM lrc_lab_student_map
+       WHERE user_id = :student_id
+       AND lab_id = :lab_id
+     </querytext>
+   </fullquery>
+
+</queryset>
Index: openacs-4/packages/lab-report-central/www/detach-student.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/detach-student.tcl,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/lab-report-central/www/detach-student.tcl	30 Apr 2006 12:01:31 -0000	1.1
@@ -0,0 +1,28 @@
+ad_page_contract {
+    Detaches the given student from the given lab.
+
+    @author Nick Carroll (nick.c@rroll.net)
+    @creation-date 2006-04-30
+    @cvs-id $Id: detach-student.tcl,v 1.1 2006/04/30 12:01:31 ncarroll Exp $
+} {
+    lab_id:integer
+    student_id:integer
+    return_url:optional
+}
+
+set user_id [ad_conn user_id]
+set package_id [ad_conn package_id]
+
+permission::require_permission -party_id $user_id -object_id $package_id \
+    -privilege lab_report_central_admin
+
+if { ![info exists return_url] } {
+    set return_url [export_vars -url -base lab {lab_id}]
+}
+
+db_transaction {
+    db_dml detach_student {}
+}
+
+ad_returnredirect $return_url
+ad_script_abort
Index: openacs-4/packages/lab-report-central/www/lab-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/lab-postgresql.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/lab-report-central/www/lab-postgresql.xql	27 Apr 2006 04:34:34 -0000	1.2
+++ openacs-4/packages/lab-report-central/www/lab-postgresql.xql	30 Apr 2006 12:01:31 -0000	1.3
@@ -24,4 +24,12 @@
      </querytext>
    </fullquery>
 
+   <fullquery name="select_students">
+     <querytext>
+       SELECT u.user_id AS student_id, u.first_names, u.last_name, u.email
+       FROM cc_users u, lrc_lab_student_map m
+       WHERE u.user_id = m.user_id
+       AND m.lab_id = :lab_id
+     </querytext>
+   </fullquery>
 </queryset>
Index: openacs-4/packages/lab-report-central/www/lab.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/lab.adp,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/lab-report-central/www/lab.adp	27 Apr 2006 04:34:34 -0000	1.2
+++ openacs-4/packages/lab-report-central/www/lab.adp	30 Apr 2006 12:01:31 -0000	1.3
@@ -29,7 +29,7 @@
 
 <h3>#lab-report-central.lab_report_templates#</h3>
 <div id="lrc-report-container">
-  <if @create_p@>
+  <if @admin_p@>
   <ul>
     <li><a class="button" href="@create_url@">#lab-report-central.attach_template#</a></li>
   </ul>
@@ -41,7 +41,7 @@
       <span class="label">@rt.template_name@</span>
       <span class="options">
       <a class="button" href="@rt.view_url@">#lab-report-central.view#</a>
-      <if @delete_p@><a class="button" href="@rt.delete_url@" onclick="return confirm('#lab-report-central.want_to_remove_template#')">#lab-report-central.remove#</a></if>
+      <if @admin_p@><a class="button" href="@rt.delete_url@" onclick="return confirm('#lab-report-central.want_to_remove_template#')">#lab-report-central.remove#</a></if>
       </span>
       <div class="spacer"></div>
     </li>
@@ -52,3 +52,28 @@
   <ul><li class="notice">#lab-report-central.no_lab_report_templates_added#</li></ul>
   </if>
 </div>
+
+<if @admin_p@>
+<h3>#lab-report-central.students#</h3>
+<div id="lrc-report-container">
+  <ul>
+    <li><a class="button" href="@add_student_url@">#lab-report-central.add_student#</a></li>
+  </ul>
+
+  <multiple name="student">
+  <ul class="report">
+    <li>
+      <span class="label">@student.first_names@ @student.last_name@ (@student.email@)</span>
+      <span class="options">
+      <a class="button" href="@student.rem_student_url@" onclick="return confirm('#lab-report-central.want_to_remove_student#')">#lab-report-central.remove#</a>
+      </span>
+      <div class="spacer"></div>
+    </li>
+  </ul>
+  </multiple>
+
+  <if @student:rowcount@ eq 0>
+  <ul><li class="notice">#lab-report-central.no_students_added#</li></ul>
+  </if>
+</div>
+</if>
Index: openacs-4/packages/lab-report-central/www/lab.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/lab.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/lab-report-central/www/lab.tcl	27 Apr 2006 04:51:00 -0000	1.3
+++ openacs-4/packages/lab-report-central/www/lab.tcl	30 Apr 2006 12:01:31 -0000	1.4
@@ -32,16 +32,14 @@
 
 set create_url [export_vars -url -base attach-template { lab_id }]
 
-set create_p [permission::permission_p -party_id $user_id \
+set admin_p [permission::permission_p -party_id $user_id \
 		  -object_id $package_id \
-		  -privilege lab_report_central_admin_create]
+		  -privilege lab_report_central_admin]
 
-set delete_p [permission::permission_p -party_id $user_id \
-		  -object_id $package_id \
-		  -privilege lab_report_central_admin_delete]
+set add_student_url [export_vars -url -base attach-student {lab_id}]
 
-set modify_p [permission::permission_p -party_id $user_id \
-		  -object_id $package_id \
-		  -privilege lab_report_central_admin_modify]
+db_multirow -extend {rem_student_url} student select_students {} {
+    set rem_student_url [export_vars -url -base detach-student {lab_id student_id}]
+}
 
 ad_return_template
Index: openacs-4/packages/lab-report-central/www/resources/lab-report-central.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lab-report-central/www/resources/lab-report-central.css,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/lab-report-central/www/resources/lab-report-central.css	30 Apr 2006 09:27:41 -0000	1.3
+++ openacs-4/packages/lab-report-central/www/resources/lab-report-central.css	30 Apr 2006 12:01:31 -0000	1.4
@@ -1,3 +1,9 @@
+/* Global styles */
+.spacer {
+	clear: both;
+}
+
+
 /* Action Container */
 #lrc-actions-container {
 	margin: 0px auto;
@@ -234,9 +240,3 @@
 #lrc-section-container ul li.edit {
 	text-align: right;
 }
-
-
-/* Global styles */
-.spacer {
-	clear: both;
-}