--- loncom/interface/slotrequest.pm	2011/12/18 17:15:03	1.111
+++ loncom/interface/slotrequest.pm	2013/01/23 17:48:37	1.117
@@ -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.111 2011/12/18 17:15:03 raeburn Exp $
+# $Id: slotrequest.pm,v 1.117 2013/01/23 17:48:37 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -137,7 +137,7 @@ sub check_for_reservation {
 	return 'error: Unable to determine current status';
     }    
     my @got;
-    my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots);
+    my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime');
     foreach my $slot_name (@sorted_slots) {
 	next if (!defined($slots{$slot_name}) ||
 		 !ref($slots{$slot_name}));
@@ -339,12 +339,12 @@ sub store_slot_parm {
                        context => $env{'form.context'},
                     );
 
-    &Apache::lonnet::instructor_log('slotreservationslog',\%storehash,
-                                    '',$env{'user.name'},$env{'user.domain'},
-                                    $cnum,$cdom);
-    &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash,
-                                    1,$env{'user.name'},$env{'user.domain'},
-                                    $env{'user.name'},$env{'user.domain'});
+    &Apache::lonnet::write_log('course','slotreservationslog',\%storehash,
+                               '',$env{'user.name'},$env{'user.domain'},
+                               $cnum,$cdom);
+    &Apache::lonnet::write_log('course',$cdom.'_'.$cnum.'_slotlog',\%storehash,
+                               1,$env{'user.name'},$env{'user.domain'},
+                               $env{'user.name'},$env{'user.domain'});
 
     return;
 }
@@ -538,10 +538,10 @@ sub release_reservation {
                                action  => 'release',
                                context => $env{'form.context'},
                         );
-            &Apache::lonnet::instructor_log('slotreservationslog',\%storehash,
-                                            1,$uname,$udom,$cnum,$cdom);
-            &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash,
-                                            1,$uname,$udom,$uname,$udom);
+            &Apache::lonnet::write_log('slotreservationslog',\%storehash,
+                                       1,$uname,$udom,$cnum,$cdom);
+            &Apache::lonnet::write_log($cdom.'_'.$cnum.'_slotlog',\%storehash,
+                                       1,$uname,$udom,$uname,$udom);
 	}
     }
 
@@ -842,7 +842,7 @@ sub show_choices {
     my ($r,$symb,$formname)=@_;
 
     my ($cnum,$cdom)=&get_course();
-    my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
+    my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom);
     my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
     if (ref($consumed_uniqueperiods) eq 'HASH') {
         if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
@@ -877,11 +877,12 @@ sub show_choices {
         push(@available,$slot);
     }
     if (!@available) {
-        $output = &mt('No available times.');
+        $output = '<div class="LC_info">'.&mt('No available times.');
         if ($env{'form.command'} ne 'manageresv') {
             $output .= ' <a href="/adm/flip?postdata=return:">'.
                        &mt('Return to last resource').'</a>';
         }
+        $output .= '</div>';
         $r->print($output);
         return;
     }
@@ -1058,7 +1059,8 @@ sub show_table {
     my $available;
     if ($mgr eq 'F') {
     # FIXME: This line should be deleted once Slots uses breadcrumbs
-    $r->print(&Apache::loncommon::help_open_topic('Slot About', 'Help on slots'));
+    $r->print('<br />'.&Apache::loncommon::help_open_topic(
+        'Slot About', &mt('Help on slots')));
 
 	$r->print('<div>');
 	$r->print('<form method="post" action="/adm/slotrequest">
@@ -1074,11 +1076,11 @@ sub show_table {
     }
 
     if (!keys(%slots)) {
-        if ($crstype eq 'Community') {
-            $r->print('<div>'.&mt('No slots have been created in this community.').'</div>');
-        } else {
-            $r->print('<div>'.&mt('No slots have been created in this course.').'</div>');
-        }
+        $r->print(
+            '<p class="LC_info">'
+           .&mt('No slots have been created in this '.lc($crstype).'.')
+           .'</p>'
+        );
         return;
     }
     
@@ -1566,6 +1568,8 @@ sub manage_reservations {
                 } elsif ($slot_status == $resource->RESERVABLE) {
                     $msg=&mt('Reservation needed');
                     $get_choices = 1;
+                } elsif ($slot_status == $resource->RESERVABLE_LATER) {
+                    $msg=&mt('Reservation needed: will be reservable later.');
                 } elsif ($slot_status == $resource->NOTRESERVABLE) {
                     $msg=&mt('Reservation needed: none available.');
                 } elsif ($slot_status == $resource->UNKNOWN) {
@@ -2197,7 +2201,7 @@ sub upload_start {
     my ($r)=@_;    
     $r->print(
         &Apache::grades::checkforfile_js()
-       .'<h3>'.&mt('Specify a file containing the slot definitions.').'</h3>'
+       .'<h2>'.&mt('Upload a file containing the slot definitions').'</h2>'
        .'<form method="post" enctype="multipart/form-data"'
        .' action="/adm/slotrequest" name="slotupload">'
        .'<input type="hidden" name="command" value="csvuploadmap" />'
@@ -2231,16 +2235,40 @@ sub csvuploadmap_header {
 
     my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
     my $ignore=&mt('Ignore First Line');
-	my $help_field = &Apache::loncommon::help_open_topic('Slot SelectingField');
+    my $buttontext = &mt('Reverse Association');
+
+    $r->print(
+        '<form method="post" enctype="multipart/form-data" action="/adm/slotrequest" name="slotupload">'
+       .'<h2>'.&mt('Identify fields in uploaded list').'</h2>'
+       .'<div class="LC_columnSection">'
+       .&Apache::loncommon::help_open_topic(
+            'Slot About',&mt('Help on slots'))
+       .' '.&Apache::loncommon::help_open_topic(
+            'Slot SelectingField',&mt('Help on selecting Fields'))
+       ."</div>\n"
+       .'<p class="LC_info">'
+       .&mt('Total number of records found in file: [_1]','<b>'.$distotal.'</b>')
+       ."</p>\n"
+    );
+    if ($distotal == 0) {
+        $r->print('<p class="LC_warning">'.&mt('None found').'</p>');
+    }
+    $r->print(
+        '<p>'
+       .&mt('Enter as many fields as you can.').'<br />'
+       .&mt('The system will inform you and bring you back to this page,[_1]if the data selected is insufficient to create the slots.','<br />')
+       .'</p>'
+    );
+    $r->print(
+        '<div class="LC_left_float">'
+       .'<fieldset><legend>'.&mt('Functions').'</legend>'
+       .'<label><input type="checkbox" name="noFirstLine"'.$checked.' />'.$ignore.'</label>'
+       .' <input type="button" value="'.$buttontext
+           .'" onclick="javascript:this.form.associate.value=\'Reverse Association\';submit(this.form);" />'
+       .'</fieldset></div><br clear="all" />'
+    );
 
     $r->print(<<ENDPICK);
-<form method="post" enctype="multipart/form-data" action="/adm/slotrequest" name="slotupload">
-<h3>Identify fields $help_field</h3>	
-Total number of records found in file: $distotal <hr />
-Enter as many fields as you can. The system will inform you and bring you back
-to this page if the data selected is insufficient to create the slots.<hr />
-<input type="button" value="Reverse Association" onclick="javascript:this.form.associate.value='Reverse Association';submit(this.form);" />
-<label><input type="checkbox" name="noFirstLine"$checked />$ignore</label>
 <input type="hidden" name="associate"  value="" />
 <input type="hidden" name="datatoken"  value="$datatoken" />
 <input type="hidden" name="fileupload" value="$env{'form.fileupload'}" />
@@ -2248,9 +2276,10 @@ to this page if the data selected is ins
 <input type="hidden" name="upfile_associate" 
                                        value="$env{'form.upfile_associate'}" />
 <input type="hidden" name="command"    value="csvuploadassign" />
-<hr />
 <script type="text/javascript" language="Javascript">
+// <![CDATA[
 $javascript
+// ]]>
 </script>
 ENDPICK
     return '';
@@ -2261,7 +2290,6 @@ sub csvuploadmap_footer {
     my ($request,$i,$keyfields) =@_;
     my $buttontext = &mt('Create Slots');
     $request->print(<<ENDPICK);
-</table>
 <input type="hidden" name="nfields" value="$i" />
 <input type="hidden" name="keyfields" value="$keyfields" />
 <input type="button" onclick="javascript:verify(this.form)" value="$buttontext" /><br />
@@ -2494,6 +2522,9 @@ sub csv_upload_assign {
 	$r->rflush();
 	$countdone++;
     }
+    if ($countdone) {
+        &Apache::lonnet::devalidate_slots_cache($cname,$cdom); 
+    }
     $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');
     foreach my $error (@errors) {
 	$r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");
@@ -2587,8 +2618,9 @@ sub handler {
             if (ref($brcrum) eq 'ARRAY') {
                 push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});
             }
-            
         }
+    } else {
+        $brcrum =[];
     }
     &start_page($r,$title,$brcrum);