--- loncom/interface/slotrequest.pm	2009/03/29 17:56:43	1.93
+++ loncom/interface/slotrequest.pm	2009/10/31 05:39:25	1.105
@@ -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.93 2009/03/29 17:56:43 raeburn Exp $
+# $Id: slotrequest.pm,v 1.105 2009/10/31 05:39:25 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -707,7 +707,8 @@ $lt{'or'}
 STUFF
 
     if (!$inhibit_return_link) { 
-        $r->print(&mt('or').'</p>').&return_link($r);
+        $r->print(&mt('or').'</p>');
+        &return_link($r);
     } else {
         $r->print('</p>');
     }
@@ -1025,6 +1026,7 @@ sub show_table {
     my ($r,$mgr)=@_;
 
     my ($cnum,$cdom)=&get_course();
+    my $crstype=&Apache::loncommon::course_type($cdom.'_'.$cnum);
     my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
     if ( (keys(%slots))[0] =~ /^error: 2 /) {
 	undef(%slots);
@@ -1084,6 +1086,10 @@ sub show_table {
 	     'uniqueperiod'    => 'Period of time slot is unique',
 	     'scheduled'       => 'Scheduled Students',
 	     'proctor'         => 'List of proctors');
+    if ($crstype eq 'Community') {
+        $show_fields{'startreserve'} = &mt('Time members can start reserving');
+        $show_fields{'scheduled'} = &mt('Scheduled Members');
+    }
     my @show_order=('name','description','type','starttime','endtime',
 		    'startreserve','secret','space','ip','symb',
 		    'allowedsections','allowedusers','uniqueperiod',
@@ -1428,21 +1434,23 @@ STUFF
 }
 
 sub manage_reservations {
-    my ($r,$type) = @_;
+    my ($r,$crstype) = @_;
     my $navmap = Apache::lonnavmaps::navmap->new();
     $r->print('<p>'
              .&mt('Instructors may use a reservation system to place restrictions on when and where assignments can be worked on.')
              .'<br />'
              .&mt('One example is for management of laboratory space, which is only available at certain times, and has a limited number of seats.')
-             .'</p><p>'
-             .&mt('Your reservation status for any such assignments is listed below:')
              .'</p>'
     );
     if (!defined($navmap)) {
-        $r->print('<div class="LC_error">'.
-                  &mt('Unable to retrieve information about course contents').
-                  '</div>');
-        &Apache::lonnet::logthis('Manage Reservations - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+        $r->print('<div class="LC_error">');
+        if ($crstype eq 'Community') {
+            $r->print(&mt('Unable to retrieve information about community contents'));
+        } else {
+            $r->print(&mt('Unable to retrieve information about course contents'));
+        }
+        $r->print('</div>');
+        &Apache::lonnet::logthis('Manage Reservations - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
         return;
     }
     my (%parent,%shownparent,%container,%container_title,%contents);
@@ -1450,7 +1458,11 @@ sub manage_reservations {
     my @backgrounds = ("LC_odd_row","LC_even_row");
     my $numcolors = scalar(@backgrounds);
     my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace_21.gif");
-    $r->print('<table class="LC_data_table LC_tableOfContent">'."\n");
+    my $slotheader = '<p>'.
+                 &mt('Your reservation status for any such assignments is listed below:').
+                 '</p>'.
+                 '<table class="LC_data_table LC_tableOfContent">'."\n";
+    my $shownheader = 0;
     my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
     while (my $resource = $it->next()) {
         if ($resource == $it->BEGIN_MAP()) {
@@ -1545,11 +1557,19 @@ sub manage_reservations {
                     foreach my $item (@maprows) {
                         $rownum ++;
                         my $bgcolor = $backgrounds[$rownum % $numcolors];
+                        if (!$shownheader) {
+                            $r->print($slotheader);
+                            $shownheader = 1;
+                        }
                         $r->print('<tr class="'.$bgcolor.'">'.$item.'</tr>'."\n");
                     }
                 }
                 $rownum ++;
                 my $bgcolor = $backgrounds[$rownum % $numcolors];
+                if (!$shownheader) {
+                    $r->print($slotheader);
+                    $shownheader = 1;
+                }
                 $r->print('<tr class="'.$bgcolor.'"><td>'."\n");
                 for (my $i=0; $i<$depth; $i++) {
                     $r->print('<img src="'.$location.'" alt="" />');
@@ -1584,11 +1604,19 @@ sub manage_reservations {
             }
         }
     }
+    if ($shownheader) {
+        $r->print('</table>');
+    }
     if (!$reservable) {
-        $r->print('<span class="LC_info">'.&mt('No course items currently require a reservation to gain access.').'</span>');
+        $r->print('<span class="LC_info">');
+        if ($crstype eq 'Community') {
+            $r->print(&mt('No community items currently require a reservation to gain access.'));
+        } else {
+            $r->print(&mt('No course items currently require a reservation to gain access.'));
+        }
+        $r->print('</span>');
     }
-    $r->print('</table>'.
-              '<p><a href="/adm/slotrequest?command=showresv">'.
+    $r->print('<p><a href="/adm/slotrequest?command=showresv">'.
               &mt('Reservation History').'</a></p>');
 }
 
@@ -1599,9 +1627,9 @@ sub show_map_row {
         $output .= '<img src="'.$location.'" alt="" />';
     }
     if ($type eq 'page') {
-        $output .= '<img src="/adm/lonIcons/navmap.page.open.gif">&nbsp;'."\n";
+        $output .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";
     } else {
-        $output .= '<img src="/adm/lonIcons/navmap.folder.open.gif">&nbsp;'."\n";
+        $output .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";
     }
     $output .= $title.'</td><td colspan="2">&nbsp;</td>'."\n";
     unshift (@{$maprows},$output);
@@ -1619,12 +1647,21 @@ sub show_reservations {
     my $formname = 'slotlog';
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+    my $crstype = &Apache::loncommon::course_type();
     my %log=&Apache::lonnet::dump('nohist_'.$cdom.'_'.$cnum.'_slotlog',$udom,$uname);
     if ($env{'form.origin'} eq 'aboutme') {
-        $r->print('<div class="LC_fontsize_large">'.
-                  &mt('History of student-schedulable slots for: [_1]',
-                      &Apache::loncommon::plainname($env{'form.uname'},$env{'form.udom'},
-                                                    'firstname')).'</div>');
+        $r->print('<div class="LC_fontsize_large">');
+        my $name = &Apache::loncommon::plainname($env{'form.uname'},$env{'form.udom'},
+                                                    'firstname');
+        if ($crstype eq 'Community') {
+            $r->print(&mt('History of member-reservable slots for: [_1]',
+                          $name));
+        } else {
+            $r->print(&mt('History of student-reservable slots for: [_1]',
+                          $name));
+
+        }
+        $r->print('</div>');
     }
     $r->print('<form action="/adm/slotrequest" method="post" name="'.$formname.'">');
     # set defaults
@@ -1673,7 +1710,7 @@ sub show_reservations {
         }
     }
     my (%titles,%maptitles);
-    my %lt = &reservationlog_contexts();
+    my %lt = &reservationlog_contexts($crstype);
     foreach my $id (sort { $log{$b}{'exe_time'}<=>$log{$a}{'exe_time'} } (keys(%log))) {
         next if (($log{$id}{'exe_time'} < $curr{'log_start_date'}) ||
                  ($log{$id}{'exe_time'} > $curr{'log_end_date'}));
@@ -1735,7 +1772,7 @@ ENDSCRIPT
         }
     } else {
         $r->print('<span class="LC_info">'
-                 .&mt('There are no transactions to display')
+                 .&mt('There are no transactions to display.')
                  .'</span>'
         );
     }
@@ -1753,6 +1790,7 @@ ENDSCRIPT
 sub show_reservations_log {
     my ($r) = @_;
     my $badslot;
+    my $crstype = &Apache::loncommon::course_type();
     if ($env{'form.slotname'} eq '') {
         $r->print('<div class="LC_warning">'.&mt('No slot name provided').'</div>');
         $badslot = 1;
@@ -1763,7 +1801,13 @@ sub show_reservations_log {
             $badslot = 1;
         } elsif ($slot{type} ne 'schedulable_student') {
             my $description = &get_description($env{'form.slotname'},\%slot);
-            $r->print('<div class="LC_warning">'.&mt('Reservation history unavailable for non-student-schedulable slot: [_1].',$description).'</div>');
+            $r->print('<div class="LC_warning">');
+            if ($crstype eq 'Community') {
+                $r->print(&mt('Reservation history unavailable for non-member-reservable slot: [_1].',$description));
+            } else {
+                $r->print(&mt('Reservation history unavailable for non-student-reservable slot: [_1].',$description));
+            }
+            $r->print('</div>');
             $badslot = 1;
         }
     }
@@ -1834,9 +1878,13 @@ sub show_reservations_log {
 
     my %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
     my $description = $slot{'description'};
-    $r->print('<span class="LC_fontsize_large">'.
-              &mt('Reservation changes for student-schedulable slot: [_1]',$description).'</span><br />');
-
+    $r->print('<span class="LC_fontsize_large">');
+    if ($crstype eq 'Community') {
+        $r->print(&mt('Reservation changes for member-reservable slot: [_1]',$description));
+    } else {
+        $r->print(&mt('Reservation changes for student-reservable slot: [_1]',$description));
+    }
+    $r->print('</span><br />');
     $r->print(&display_filter($formname,$cdom,$cnum,\%curr,$version,\@allsymbs));
     my $showntablehdr = 0;
     my $tablehdr = &Apache::loncommon::start_data_table().
@@ -1854,7 +1902,7 @@ sub show_reservations_log {
             $minshown = 1 + ($curr{'page'} - 1) * $curr{'show'};
         }
     }
-    my %lt = &reservationlog_contexts();
+    my %lt = &reservationlog_contexts($crstype);
     my (%titles,%maptitles);
     foreach my $id (sort { $log{$b}{'exe_time'}<=>$log{$a}{'exe_time'} } (keys(%log))) {
         next if (($log{$id}{'exe_time'} < $curr{'log_start_date'}) ||
@@ -1932,7 +1980,7 @@ function chgPage(caller) {
 ENDSCRIPT
         }
     } else {
-        $r->print(&mt('There are no records to display'));
+        $r->print(&mt('There are no records to display.'));
     }
     $r->print('<input type="hidden" name="page" value="'.$curr{'page'}.'" />'.
               '<input type="hidden" name="slotname" value="'.$env{'form.slotname'}.'" />'.
@@ -1974,6 +2022,7 @@ sub get_resource_title {
 }
 
 sub reservationlog_contexts {
+    my ($crstype) = @_;
     my %lt = &Apache::lonlocal::texthash (
                                              any        => 'Any',
                                              user       => 'By student',
@@ -1983,6 +2032,10 @@ sub reservationlog_contexts {
                                              release    => 'Dropped reservation',
                                              usermanage => 'By student', 
                                          );
+    if ($crstype eq 'Community') {
+        $lt{'user'} = &mt('By member');
+        $lt{'usermanage'} = $lt{'user'};
+    }
     return %lt;
 }
 
@@ -2003,7 +2056,8 @@ sub display_filter {
         &Apache::lonhtmlcommon::date_setter($formname,'log_end_date',
                                             $curr->{'log_end_date'},undef,
                                             undef,undef,undef,undef,undef,undef,$nolink);
-    my %lt = &reservationlog_contexts();
+    my $crstype = &Apache::loncommon::course_type();
+    my %lt = &reservationlog_contexts($crstype);
     $output .= '<td valign="top"><b>'.&mt('Window during which changes occurred:').
                '</b><br /><table><tr><td>'.&mt('After:').
                '</td><td>'.$startform.'</td></tr><tr><td>'.&mt('Before:').'</td><td>'.
@@ -2051,36 +2105,41 @@ sub display_filter {
     }
     $output .= '<td>&nbsp;&nbsp;</td><td valign="middle"><input type="submit" value="'.
                &mt('Update Display').'" /></tr></table>'.
-               '<span class="LC_roleslog_note">'.
-               &mt('[_1]Note:[_2] Only changes made from servers running LON-CAPA 2.8.99.0 or later are displayed.');
+               '<p class="LC_info">'.
+               &mt('Only changes made from servers running LON-CAPA [_1] or later are displayed.'
+                  ,'2.9.0');
     if ($version) {
-        $output .= ' '.&mt('This server is version [_3].','<b>','</b>',$version);
+        $output .= ' '.&mt('This LON-CAPA server is version [_1]',$version);
     }
-    $output .= '</span><hr noshade><br />';
+    $output .= '</p><hr /><br />';
     return $output;
 }
 
 sub upload_start {
     my ($r)=@_;    
-    $r->print(&Apache::grades::checkforfile_js());
-    my $result.='<table width=100% border=0><tr bgcolor="#e6ffff"><td>'."\n";
-    $result.='&nbsp;<b>'.
-	&mt('Specify a file containing the slot definitions.').
-	'</b></td></tr>'."\n";
-    $result.='<tr bgcolor="#ffffe6"><td>'."\n";
-    my $upfile_select=&Apache::loncommon::upfile_select_html();
-    my $ignore=&mt('Ignore First Line');
-    $result.=<<ENDUPFORM;
-<form method="post" enctype="multipart/form-data" action="/adm/slotrequest" name="slotupload">
-<input type="hidden" name="command" value="csvuploadmap" />
-$upfile_select
-<br /><input type="button" onClick="javascript:checkUpload(this.form);" value="Upload Data" />
-<label><input type="checkbox" name="noFirstLine" />$ignore</label>
-</form>
-ENDUPFORM
-    $result.='</td></tr></table>'."\n";
-    $result.='</td></tr></table>'."\n";
-    $r->print($result);
+    $r->print(
+        &Apache::grades::checkforfile_js()
+       .'<h3>'.&mt('Specify a file containing the slot definitions.').'</h3>'
+       .'<form method="post" enctype="multipart/form-data"'
+       .' action="/adm/slotrequest" name="slotupload">'
+       .'<input type="hidden" name="command" value="csvuploadmap" />'
+       .&Apache::lonhtmlcommon::start_pick_box()
+       .&Apache::lonhtmlcommon::row_title(&mt('File'))
+       .&Apache::loncommon::upfile_select_html()
+       .&Apache::lonhtmlcommon::row_closure()
+       .&Apache::lonhtmlcommon::row_title(
+            '<label for="noFirstLine">'
+           .&mt('Ignore First Line')
+           .'</label>')
+       .'<input type="checkbox" name="noFirstLine" id="noFirstLine" />'
+       .&Apache::lonhtmlcommon::row_closure(1)
+       .&Apache::lonhtmlcommon::end_pick_box()
+       .'<p>'
+       .'<input type="button" onclick="javascript:checkUpload(this.form);"'
+       .' value="'.&mt('Next').'" />'
+       .'</p>'
+      .'</form>'
+    );
 }
 
 sub csvuploadmap_header {
@@ -2102,8 +2161,8 @@ sub csvuploadmap_header {
 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="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'}" />
@@ -2127,7 +2186,7 @@ sub csvuploadmap_footer {
 </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 />
+<input type="button" onclick="javascript:verify(this.form)" value="$buttontext" /><br />
 </form>
 ENDPICK
 }