--- loncom/interface/slotrequest.pm	2006/03/07 21:37:29	1.50
+++ loncom/interface/slotrequest.pm	2006/03/30 04:34:32	1.54
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler for requesting to have slots added to a students record
 #
-# $Id: slotrequest.pm,v 1.50 2006/03/07 21:37:29 albertel Exp $
+# $Id: slotrequest.pm,v 1.54 2006/03/30 04:34:32 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -54,14 +54,12 @@ sub fail {
 
 sub start_page {
     my ($r,$title)=@_;
-    my $html=&Apache::lonxml::xmlbegin();
-    $r->print($html.'<head><title>'.&mt($title).'</title></head>');
-    $r->print(&Apache::loncommon::bodytag($title));
+    $r->print(&Apache::loncommon::start_page($title));
 }
 
 sub end_page {
     my ($r)=@_;
-    $r->print(&Apache::loncommon::endbodytag().'</html>');
+    $r->print(&Apache::loncommon::end_page());
 }
 
 =pod
@@ -550,6 +548,12 @@ sub allowed_slot {
     }
     &Apache::lonxml::debug("$slot_name type good");
 
+    # reserve time not yet started
+    if ($slot->{'startreserve'} > time) {
+	return 0;
+    }
+    &Apache::lonxml::debug("$slot_name reserve good");
+
     my $userallowed=0;
     # its for a different set of users
     if (defined($slot->{'allowedsections'})) {
@@ -572,6 +576,12 @@ sub allowed_slot {
 		split(',',$slot->{'allowedusers'}))) {
 	$userallowed=1;
     }
+
+    if (!defined($slot->{'allowedusers'})
+	&& !defined($slot->{'allowedsections'})) {
+	$userallowed=1;
+    }
+
     &Apache::lonxml::debug("$slot_name user is $userallowed");
     return 0 if (!$userallowed);
 
@@ -668,12 +678,27 @@ STUFF
 }
 
 sub to_show {
-    my ($slot,$when,$deleted) = @_;
+    my ($slotname,$slot,$when,$deleted,$name) = @_;
     my $time=time;
     my $week=60*60*24*7;
+
     if ($deleted eq 'hide' && $slot->{'type'} eq 'deleted') {
 	return 0;
     }
+
+    if ($name && $name->{'value'} =~ /\w/) {
+	if ($name->{'type'} eq 'substring') {
+	    if ($slotname !~ /\Q$name->{'value'}\E/) {
+		return 0;
+	    }
+	}
+	if ($name->{'type'} eq 'exact') {
+	    if ($slotname eq $name->{'value'}) {
+		return 0;
+	    }
+	}
+    }
+
     if ($when eq 'any') {
 	return 1;
     } elsif ($when eq 'now') {
@@ -754,10 +779,12 @@ sub show_table {
 	$r->print('</div>');
     }
     
-    my %Saveable_Parameters = ('show'    => 'array',
-			       'when'    => 'scalar',
-			       'order'   => 'scalar',
-			       'deleted' => 'scalar',
+    my %Saveable_Parameters = ('show'              => 'array',
+			       'when'              => 'scalar',
+			       'order'             => 'scalar',
+			       'deleted'           => 'scalar',
+			       'name_filter_type'  => 'scalar',
+			       'name_filter_value' => 'scalar',
 			       );
     &Apache::loncommon::store_course_settings('slotrequest',
 					      \%Saveable_Parameters);
@@ -767,6 +794,7 @@ sub show_table {
     my ($classlist,$section,$fullname)=&Apache::grades::getclasslist('all');
     &Apache::grades::reset_perm();
 
+    # what to display filtering
     my %show_fields=&Apache::lonlocal::texthash(
 	     'name'            => 'Slot Name',
 	     'description'     => 'Description',
@@ -792,6 +820,7 @@ sub show_table {
 	                            : keys(%show_fields);
     my %show =  map { $_ => 1 } (@show);
 
+    #when filtering setup
     my %when_fields=&Apache::lonlocal::texthash(
 	     'now'      => 'Open now',
 	     'nextweek' => 'Open within the next week',
@@ -805,6 +834,7 @@ sub show_table {
     my $when = 	(exists($env{'form.when'})) ? $env{'form.when'}
                                             : 'now';
 
+    #display of students setup
     my %stu_display_fields=
 	&Apache::lonlocal::texthash('username' => 'User name',
 				    'fullname' => 'Full name',
@@ -815,6 +845,22 @@ sub show_table {
 	                                  : keys(%stu_display_fields);
     my %stu_display =  map { $_ => 1 } (@stu_display);
 
+    #name filtering setup
+    my %name_filter_type_fields=
+	&Apache::lonlocal::texthash('substring' => 'Substring',
+				    'exact'     => 'Exact',
+				    #'reg'       => 'Regular Expression',
+				    );
+    my @name_filter_type_order=('substring','exact');
+
+    $name_filter_type_fields{'select_form_order'} = \@name_filter_type_order;
+    my $name_filter_type = 
+	(exists($env{'form.name_filter_type'})) ? $env{'form.name_filter_type'}
+                                                : 'substring';
+    my $name_filter = {'type'  => $name_filter_type,
+		       'value' => $env{'form.name_filter_value'},};
+
+    #deleted slot filtering
     my $hide_radio = 
 	&Apache::lonhtmlcommon::radio('deleted',$env{'form.deleted'},'hide');
     my $show_radio = 
@@ -827,6 +873,7 @@ sub show_table {
       <tr><th>'.&mt('Show').'</th>
           <th>'.&mt('Student Display').'</th>
           <th>'.&mt('Open').'</th>
+          <th>'.&mt('Slot Name Filter').'</th>
           <th>'.&mt('Options').'</th>
       </tr>
       <tr><td>'.&Apache::loncommon::multiple_select_form('show',\@show,6,\%show_fields,\@show_order).
@@ -838,6 +885,14 @@ sub show_table {
            </td>
            <td>'.&Apache::loncommon::select_form($when,'when',%when_fields).
           '</td>
+           <td>'.&Apache::loncommon::select_form($name_filter_type,
+						 'name_filter_type',
+						 %name_filter_type_fields).
+	      '<br />'.
+	      &Apache::lonhtmlcommon::textbox('name_filter_value',
+					      $env{'form.name_filter_value'},
+					      15).
+          '</td>
            <td>
             <table>
               <tr>
@@ -891,7 +946,8 @@ sub show_table {
 	return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'};
     };
     foreach my $slot (sort $slotsort (keys(%slots)))  {
-	if (!&to_show($slots{$slot},$when,$env{'form.deleted'})) { next; }
+	if (!&to_show($slot,$slots{$slot},$when,
+		      $env{'form.deleted'},$name_filter)) { next; }
 	if (defined($slots{$slot}->{'type'})
 	    && $slots{$slot}->{'type'} ne 'schedulable_student') {
 	    #next;
@@ -903,7 +959,9 @@ sub show_table {
 					       "^$slot\0");
 	    my ($tmp)=%consumed;
 	    if ($tmp !~ /^error: /) {
-		foreach my $entry (sort(keys(%consumed))) {
+		foreach my $entry (sort { $consumed{$a}{name} cmp 
+					      $consumed{$b}{name} }
+				   (keys(%consumed))) {
 		    my (undef,$id)=split("\0",$entry);
 		    my ($uname,$udom) = split('@',$consumed{$entry}{'name'});
 		    $ids.= '<nobr>';