Diff for /loncom/interface/slotrequest.pm between versions 1.108 and 1.118

version 1.108, 2010/06/06 02:40:30 version 1.118, 2013/05/21 18:54:15
Line 137  sub check_for_reservation { Line 137  sub check_for_reservation {
  return 'error: Unable to determine current status';   return 'error: Unable to determine current status';
     }          }    
     my @got;      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) {      foreach my $slot_name (@sorted_slots) {
  next if (!defined($slots{$slot_name}) ||   next if (!defined($slots{$slot_name}) ||
  !ref($slots{$slot_name}));   !ref($slots{$slot_name}));
  &Apache::lonxml::debug(time." $slot_name ".   &Apache::lonxml::debug(time." $slot_name ".
        $slots{$slot_name}->{'starttime'}." -- ".         $slots{$slot_name}->{'starttime'}." -- ".
        $slots{$slot_name}->{'startreserve'});         $slots{$slot_name}->{'startreserve'}." -- ".
  if ($slots{$slot_name}->{'endtime'} > time &&                                 $slots{$slot_name}->{'endreserve'});
     $slots{$slot_name}->{'startreserve'} < time) {   if (($slots{$slot_name}->{'endtime'} > time) &&
     # between start of reservation times and end of slot      ($slots{$slot_name}->{'startreserve'} < time) &&
               ((!$slots{$slot_name}->{'endreserve'}) || 
                ($slots{$slot_name}->{'endreserve'} > time))) {
       # between start of reservation time and end of reservation time
               # and before end of slot
     if ($mode eq 'allslots') {      if ($mode eq 'allslots') {
  push(@got,$slot_name);   push(@got,$slot_name);
     } else {      } else {
Line 335  sub store_slot_parm { Line 339  sub store_slot_parm {
                        context => $env{'form.context'},                         context => $env{'form.context'},
                     );                      );
   
     &Apache::lonnet::instructor_log('slotreservationslog',\%storehash,      &Apache::lonnet::write_log('course','slotreservationslog',\%storehash,
                                     '',$env{'user.name'},$env{'user.domain'},                                 '',$env{'user.name'},$env{'user.domain'},
                                     $cnum,$cdom);                                 $cnum,$cdom);
     &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash,      &Apache::lonnet::write_log('course',$cdom.'_'.$cnum.'_slotlog',\%storehash,
                                     1,$env{'user.name'},$env{'user.domain'},                                 1,$env{'user.name'},$env{'user.domain'},
                                     $env{'user.name'},$env{'user.domain'});                                 $env{'user.name'},$env{'user.domain'});
   
     return;      return;
 }  }
Line 534  sub release_reservation { Line 538  sub release_reservation {
                                action  => 'release',                                 action  => 'release',
                                context => $env{'form.context'},                                 context => $env{'form.context'},
                         );                          );
             &Apache::lonnet::instructor_log('slotreservationslog',\%storehash,              &Apache::lonnet::write_log('slotreservationslog',\%storehash,
                                             1,$uname,$udom,$cnum,$cdom);                                         1,$uname,$udom,$cnum,$cdom);
             &Apache::lonnet::instructor_log($cdom.'_'.$cnum.'_slotlog',\%storehash,              &Apache::lonnet::write_log($cdom.'_'.$cnum.'_slotlog',\%storehash,
                                             1,$uname,$udom,$uname,$udom);                                         1,$uname,$udom,$uname,$udom);
  }   }
     }      }
   
Line 562  sub release_reservation { Line 566  sub release_reservation {
     if ($mgr eq 'F') {      if ($mgr eq 'F') {
  $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom");   $msg = &mt('Released Reservation for user: [_1]',"$uname:$udom");
     } else {      } else {
  $msg = &mt('Released Reservation: [_1]',$description);   $msg = '<span style="font-weight: bold;">'.&mt('Released reservation: [_1]',$description).'</span><br /><br />';
           my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
           my $subject = &mt('Reservation change: [_1]',$description);
           my $msgbody = &mt('Reservation released by [_1] for [_2].',$person,$description);
           $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'release');
     }      }
     return (1,$msg);      return (1,$msg);
 }  }
Line 629  sub get_slot { Line 637  sub get_slot {
  my $description1=&get_description($slot_name,\%slot);   my $description1=&get_description($slot_name,\%slot);
  %slot=&Apache::lonnet::get_slot($env{'form.slotname'});   %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
  my $description2=&get_description($env{'form.slotname'},\%slot);   my $description2=&get_description($env{'form.slotname'},\%slot);
  $r->print('<p>'.&mt('Already have a reservation: [_1].',$description1).'</p>');  
  if ($slot_name ne $env{'form.slotname'}) {   if ($slot_name ne $env{'form.slotname'}) {
     $r->print(<<STUFF);      $r->print(<<STUFF);
 <form method="post" action="/adm/slotrequest">  <form method="post" action="/adm/slotrequest">
Line 638  sub get_slot { Line 645  sub get_slot {
    <input type="hidden" name="releaseslot" value="$slot_name" />     <input type="hidden" name="releaseslot" value="$slot_name" />
    <input type="hidden" name="command" value="change" />     <input type="hidden" name="command" value="change" />
 STUFF  STUFF
             $r->print('<p>'              $r->print('<p class="LC_error">'.&mt('Reservation currently unchanged').'</p>');
                      .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or'              if ($slot_name ne '') {
                          ,'<input type="submit" name="change" value="'                  $r->print('<p>'.&mt('To complete the transaction you [_1]must confirm[_2] you want to [_3]process the change[_4] to [_5].'
                          ,'" />'                           ,'<b>','</b>','<i>','</i>','<b>'.$description2.'</b>')
                          ,'<b>'.$description1.'</b>'                           .'<br />'
                          ,'<b>'.$description2.'</b>')                           .&mt('Or you can choose to [_1]make no change[_2] and continue[_2] with the reservation you already had: [_3].'
                      .'<br /></p>'                           ,'<i>','</i>','<b>'.$description1.'</b>')
             );                           .'</p><p><span class="LC_nobreak">'
     &return_link($r);                           .'<input type="submit" name="change" value="'.&mt('Process the change').'" />' 
                            .('&nbsp;'x3)
                            .'<input type="submit" name="nochange" value="'.&mt('Make no change').'" />'
                            .'</span></p>');
               }
     $r->print(<<STUFF);      $r->print(<<STUFF);
 </form>  </form>
 STUFF  STUFF
         } else {          } else {
               $r->print('<p>'.&mt('Already have a reservation: [_1].',$description1).'</p>');
     &return_link($r);      &return_link($r);
  }   }
  return 0;   return 0;
Line 667  STUFF Line 679  STUFF
                      .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)                       .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)
                      .'</span></p>');                       .'</span></p>');
  } elsif ($reserved > -1) {   } elsif ($reserved > -1) {
     $r->print('<p>'.&mt('Success: [_1]',$description).'</p>');      $r->print('<p style="font-weight: bold;">'.&mt('Successfully signed up:  [_1]',$description).'</p>');
     $retvalue = 1;      $retvalue = 1;
               my $person = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
               my $subject = &mt('Reservation change: [_1]',$description);
               my $msgbody = &mt('Successful reservation by [_1] for [_2].',$person,$description);
               my $msg = &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'reserve');
               if ($msg) {
                   $r->print($msg);
               }
  } elsif ($reserved < 0) {   } elsif ($reserved < 0) {
     $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>');      $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>');
  }   }
Line 741  sub allowed_slot { Line 760  sub allowed_slot {
     if ($slot->{'startreserve'} > time) {      if ($slot->{'startreserve'} > time) {
  return 0;   return 0;
     }      }
       # reserve time ended
       if (($slot->{'endreserve'}) &&
           ($slot->{'endreserve'} < time)) {
           return 0;
       }    
     &Apache::lonxml::debug("$slot_name reserve good");      &Apache::lonxml::debug("$slot_name reserve good");
   
     my $userallowed=0;      my $userallowed=0;
Line 818  sub show_choices { Line 842  sub show_choices {
     my ($r,$symb,$formname)=@_;      my ($r,$symb,$formname)=@_;
   
     my ($cnum,$cdom)=&get_course();      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);      my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
     if (ref($consumed_uniqueperiods) eq 'HASH') {      if (ref($consumed_uniqueperiods) eq 'HASH') {
         if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {          if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
Line 853  sub show_choices { Line 877  sub show_choices {
         push(@available,$slot);          push(@available,$slot);
     }      }
     if (!@available) {      if (!@available) {
         $output = &mt('No available times.');          $output = '<div class="LC_info">'.&mt('No available times.');
         if ($env{'form.command'} ne 'manageresv') {          if ($env{'form.command'} ne 'manageresv') {
             $output .= ' <a href="/adm/flip?postdata=return:">'.              $output .= ' <a href="/adm/flip?postdata=return:">'.
                        &mt('Return to last resource').'</a>';                         &mt('Return to last resource').'</a>';
         }          }
           $output .= '</div>';
         $r->print($output);          $r->print($output);
         return;          return;
     }      }
Line 1034  sub show_table { Line 1059  sub show_table {
     my $available;      my $available;
     if ($mgr eq 'F') {      if ($mgr eq 'F') {
     # FIXME: This line should be deleted once Slots uses breadcrumbs      # 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('<div>');
  $r->print('<form method="post" action="/adm/slotrequest">   $r->print('<form method="post" action="/adm/slotrequest">
Line 1050  sub show_table { Line 1076  sub show_table {
     }      }
   
     if (!keys(%slots)) {      if (!keys(%slots)) {
         if ($crstype eq 'Community') {          $r->print(
             $r->print('<div>'.&mt('No slots have been created in this community.').'</div>');              '<p class="LC_info">'
         } else {             .&mt('No slots have been created in this '.lc($crstype).'.')
             $r->print('<div>'.&mt('No slots have been created in this course.').'</div>');             .'</p>'
         }          );
         return;          return;
     }      }
           
Line 1081  sub show_table { Line 1107  sub show_table {
      'starttime'       => 'Start time',       'starttime'       => 'Start time',
      'endtime'         => 'End Time',       'endtime'         => 'End Time',
              'startreserve'    => 'Time students can start reserving',               'startreserve'    => 'Time students can start reserving',
                'endreserve'      => 'Time students can no longer reserve',
                'reservationmsg'  => 'Message triggered by reservation',
      'secret'          => 'Secret Word',       'secret'          => 'Secret Word',
      'space'           => '# of students/max',       'space'           => '# of students/max',
      'ip'              => 'IP or DNS restrictions',       'ip'              => 'IP or DNS restrictions',
Line 1092  sub show_table { Line 1120  sub show_table {
      'proctor'         => 'List of proctors');       'proctor'         => 'List of proctors');
     if ($crstype eq 'Community') {      if ($crstype eq 'Community') {
         $show_fields{'startreserve'} = &mt('Time members can start reserving');          $show_fields{'startreserve'} = &mt('Time members can start reserving');
           $show_fields{'endreserve'} = &mt('Time members can no longer reserve');
         $show_fields{'scheduled'} = &mt('Scheduled Members');          $show_fields{'scheduled'} = &mt('Scheduled Members');
     }      }
     my @show_order=('name','description','type','starttime','endtime',      my @show_order=('name','description','type','starttime','endtime',
     'startreserve','secret','space','ip','symb',      'startreserve','endreserve','reservationmsg','secret','space',
     'allowedsections','allowedusers','uniqueperiod',      'ip','symb','allowedsections','allowedusers','uniqueperiod',
     'scheduled','proctor');      'scheduled','proctor');
     my @show =       my @show = 
  (exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show')   (exists($env{'form.show'})) ? &Apache::loncommon::get_env_multiple('form.show')
Line 1207  sub show_table { Line 1236  sub show_table {
   
     my %name_cache;      my %name_cache;
     my $slotsort = sub {      my $slotsort = sub {
  if ($env{'form.order'}=~/^(type|description|endtime|startreserve|ip|symb|allowedsections|allowedusers)$/) {   if ($env{'form.order'}=~/^(type|description|endtime|startreserve|endreserve|ip|symb|allowedsections|allowedusers|reservationmsg)$/) {
     if (lc($slots{$a}->{$env{'form.order'}})      if (lc($slots{$a}->{$env{'form.order'}})
  ne lc($slots{$b}->{$env{'form.order'}})) {   ne lc($slots{$b}->{$env{'form.order'}})) {
  return (lc($slots{$a}->{$env{'form.order'}})    return (lc($slots{$a}->{$env{'form.order'}}) 
Line 1244  sub show_table { Line 1273  sub show_table {
  if ($tmp =~ /^error: /) { undef(%consumed); }   if ($tmp =~ /^error: /) { undef(%consumed); }
     }      }
   
       my %msgops = &slot_reservationmsg_options();
   
     foreach my $slot (sort $slotsort (keys(%slots)))  {      foreach my $slot (sort $slotsort (keys(%slots)))  {
  if (!&to_show($slot,$slots{$slot},$when,   if (!&to_show($slot,$slots{$slot},$when,
       $env{'form.deleted'},$name_filter)) { next; }        $env{'form.deleted'},$name_filter)) { next; }
           my $reservemsg;
  if (defined($slots{$slot}->{'type'})   if (defined($slots{$slot}->{'type'})
     && $slots{$slot}->{'type'} ne 'schedulable_student') {      && $slots{$slot}->{'type'} eq 'schedulable_student') {
     #next;      $reservemsg = $msgops{$slots{$slot}->{'reservationmsg'}};
  }   }
  my $description=&get_description($slot,$slots{$slot});   my $description=&get_description($slot,$slots{$slot});
  my ($id_count,$ids);   my ($id_count,$ids);
Line 1286  sub show_table { Line 1318  sub show_table {
  &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}):'');   &Apache::lonlocal::locallocaltime($slots{$slot}->{'endtime'}):'');
  my $start_reserve=($slots{$slot}->{'startreserve'}?   my $start_reserve=($slots{$slot}->{'startreserve'}?
    &Apache::lonlocal::locallocaltime($slots{$slot}->{'startreserve'}):'');     &Apache::lonlocal::locallocaltime($slots{$slot}->{'startreserve'}):'');
           my $end_reserve=($slots{$slot}->{'endreserve'}?
                            &Apache::lonlocal::locallocaltime($slots{$slot}->{'endreserve'}):'');
   
  my $unique;   my $unique;
  if (ref($slots{$slot}{'uniqueperiod'})) {   if (ref($slots{$slot}{'uniqueperiod'})) {
Line 1393  LOGLINK Line 1427  LOGLINK
  if (exists($show{'startreserve'})) {   if (exists($show{'startreserve'})) {
     $colspan++;$r->print("<td>$start_reserve</td>\n");      $colspan++;$r->print("<td>$start_reserve</td>\n");
  }   }
           if (exists($show{'endreserve'})) {
               $colspan++;$r->print("<td>$end_reserve</td>\n");
           }
           if (exists($show{'reservationmsg'})) {
               $colspan++;$r->print("<td>$reservemsg</td>\n");
           }
  if (exists($show{'secret'})) {   if (exists($show{'secret'})) {
     $colspan++;$r->print("<td>$slots{$slot}{'secret'}</td>\n");      $colspan++;$r->print("<td>$slots{$slot}{'secret'}</td>\n");
  }   }
Line 1528  sub manage_reservations { Line 1568  sub manage_reservations {
                 } elsif ($slot_status == $resource->RESERVABLE) {                  } elsif ($slot_status == $resource->RESERVABLE) {
                     $msg=&mt('Reservation needed');                      $msg=&mt('Reservation needed');
                     $get_choices = 1;                      $get_choices = 1;
                   } elsif ($slot_status == $resource->RESERVABLE_LATER) {
                       $msg=&mt('Reservation needed: will be reservable later.');
                 } elsif ($slot_status == $resource->NOTRESERVABLE) {                  } elsif ($slot_status == $resource->NOTRESERVABLE) {
                     $msg=&mt('Reservation needed: none available.');                      $msg=&mt('Reservation needed: none available.');
                 } elsif ($slot_status == $resource->UNKNOWN) {                  } elsif ($slot_status == $resource->UNKNOWN) {
Line 2008  sub get_resource_title { Line 2050  sub get_resource_title {
                 $maptitle = $maptitles->{$mapurl};                  $maptitle = $maptitles->{$mapurl};
             } else {              } else {
                 if ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) {                  if ($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) {
                     $maptitle=&mt('Main Course Documents');                      $maptitle=&mt('Main Content');
                 } else {                  } else {
                     $maptitle=&Apache::lonnet::gettitle($mapurl);                      $maptitle=&Apache::lonnet::gettitle($mapurl);
                 }                  }
Line 2119  sub display_filter { Line 2161  sub display_filter {
     return $output;      return $output;
 }  }
   
   sub slot_change_messaging {
       my ($setting,$subject,$msg,$action) = @_;
       my $user = $env{'user.name'};
       my $domain = $env{'user.domain'};
       my ($message_status,$comment_status);
       if ($setting eq 'only_student'
           || $setting eq 'student_and_user_notes_screen') {
           $message_status =
               &Apache::lonmsg::user_normal_msg($user,$domain,$subject,$msg);
           $message_status = '<li>'.&mt('Sent to you: [_1]',
                                       $message_status).' </li>';
       }
       if ($setting eq 'student_and_user_notes_screen') {
           $comment_status =
               &Apache::lonmsg::store_instructor_comment($subject.'<br />'.
                                                         $msg,$user,$domain);
           $comment_status = '<li>'.&mt('Entry added to course record (viewable by instructor): [_1]',
                                       $comment_status).'</li>';
       }
       if ($message_status || $comment_status) {
           my $msgtitle;
           if ($action eq 'reserve') {
               $msgtitle = &mt('Status of messages about saved reservation');
           } elsif ($action eq 'release') {
               $msgtitle = &mt('Status of messages about dropped reservation');
           } elsif ($action eq 'nochange') {
               $msgtitle = &mt('Status of messages about unchanged existing reservation');
           }
           return '<span class="LC_info">'.$msgtitle.'</span>'
                  .'<ul>'
                  .$message_status
                  .$comment_status
                  .'</ul><hr />';
       }
   }
   
 sub upload_start {  sub upload_start {
     my ($r)=@_;          my ($r)=@_;    
     $r->print(      $r->print(
         &Apache::grades::checkforfile_js()          &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"'         .'<form method="post" enctype="multipart/form-data"'
        .' action="/adm/slotrequest" name="slotupload">'         .' action="/adm/slotrequest" name="slotupload">'
        .'<input type="hidden" name="command" value="csvuploadmap" />'         .'<input type="hidden" name="command" value="csvuploadmap" />'
Line 2157  sub csvuploadmap_header { Line 2235  sub csvuploadmap_header {
   
     my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');      my $checked=(($env{'form.noFirstLine'})?' checked="checked"':'');
     my $ignore=&mt('Ignore First Line');      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);      $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="associate"  value="" />
 <input type="hidden" name="datatoken"  value="$datatoken" />  <input type="hidden" name="datatoken"  value="$datatoken" />
 <input type="hidden" name="fileupload" value="$env{'form.fileupload'}" />  <input type="hidden" name="fileupload" value="$env{'form.fileupload'}" />
Line 2174  to this page if the data selected is ins Line 2276  to this page if the data selected is ins
 <input type="hidden" name="upfile_associate"   <input type="hidden" name="upfile_associate" 
                                        value="$env{'form.upfile_associate'}" />                                         value="$env{'form.upfile_associate'}" />
 <input type="hidden" name="command"    value="csvuploadassign" />  <input type="hidden" name="command"    value="csvuploadassign" />
 <hr />  
 <script type="text/javascript" language="Javascript">  <script type="text/javascript" language="Javascript">
   // <![CDATA[
 $javascript  $javascript
   // ]]>
 </script>  </script>
 ENDPICK  ENDPICK
     return '';      return '';
Line 2187  sub csvuploadmap_footer { Line 2290  sub csvuploadmap_footer {
     my ($request,$i,$keyfields) =@_;      my ($request,$i,$keyfields) =@_;
     my $buttontext = &mt('Create Slots');      my $buttontext = &mt('Create Slots');
     $request->print(<<ENDPICK);      $request->print(<<ENDPICK);
 </table>  
 <input type="hidden" name="nfields" value="$i" />  <input type="hidden" name="nfields" value="$i" />
 <input type="hidden" name="keyfields" value="$keyfields" />  <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 />
Line 2289  sub csvupload_fields { Line 2391  sub csvupload_fields {
     ['starttime','Start Time of slot'],      ['starttime','Start Time of slot'],
     ['endtime','End Time of slot'],      ['endtime','End Time of slot'],
     ['startreserve','Reservation Start Time'],      ['startreserve','Reservation Start Time'],
               ['endreserve','Reservation End Time'],
               ['reservationmsg','Message when reservation changed'],
     ['ip','IP or DNS restriction'],      ['ip','IP or DNS restriction'],
     ['proctor','List of proctor ids'],      ['proctor','List of proctor ids'],
     ['description','Slot Description'],      ['description','Slot Description'],
Line 2370  sub csv_upload_assign { Line 2474  sub csv_upload_assign {
     next;      next;
  }   }
   
           if ($entries{$fields{'endreserve'}}) {
               $slot{'endreserve'}=
                   &UnixDate($entries{$fields{'endreserve'}},"%s");
           }
           if (defined($slot{'endreserve'})
               && $slot{'endreserve'} > $slot{'starttime'}) {
               push(@errors,"$name not created -- Slot's reservation end time is after the slot's start time.");
               next;
           }
   
           if ($slot{'type'} eq 'schedulable_student') {
               if ($entries{$fields{'reservationmsg'}}) {
                    if (($entries{$fields{'reservationmsg'}} eq 'only_student') ||
                        ($entries{$fields{'reservationmsg'}} eq 'student_and_user_notes_screen')) {
                         $slot{'reservationmsg'}=$entries{$fields{'reservationmsg'}};
                    } else {
                         unless (($entries{$fields{'reservationmsg'}} eq 'none') ||
                                 ($entries{$fields{'reservationmsg'}} eq '')) {
                             push(@errors,"$name -- Slot's reservationmsg setting ignored - not one of: 'only_student', 'student_and_user_notes_screen', 'none' or ''");
                         }
                    }
               }
           }
   
  foreach my $key ('ip','proctor','description','maxspace',   foreach my $key ('ip','proctor','description','maxspace',
  'secret','symb') {   'secret','symb') {
     if ($entries{$fields{$key}}) {      if ($entries{$fields{$key}}) {
Line 2394  sub csv_upload_assign { Line 2522  sub csv_upload_assign {
  $r->rflush();   $r->rflush();
  $countdone++;   $countdone++;
     }      }
       if ($countdone) {
           &Apache::lonnet::devalidate_slots_cache($cname,$cdom); 
       }
     $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');      $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');
     foreach my $error (@errors) {      foreach my $error (@errors) {
  $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");   $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");
Line 2419  sub slot_command_titles { Line 2550  sub slot_command_titles {
     return %titles;      return %titles;
 }  }
   
   sub slot_reservationmsg_options {
       my %options = &Apache::lonlocal::texthash (
                           only_student  => 'Sent to student',
           student_and_user_notes_screen => 'Sent to student and added to user notes',
                                    none => 'None sent and no record in user notes',
       );
       return %options;
   }
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
   
Line 2478  sub handler { Line 2618  sub handler {
             if (ref($brcrum) eq 'ARRAY') {              if (ref($brcrum) eq 'ARRAY') {
                 push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});                  push(@{$brcrum},{href=>"/adm/slotrequest?command=$env{'form.command'}",text=>$crumb_titles{$env{'form.command'}}});
             }              }
               
         }          }
       } else {
           $brcrum =[];
     }      }
     &start_page($r,$title,$brcrum);      &start_page($r,$title,$brcrum);
   
Line 2548  sub handler { Line 2689  sub handler {
  } elsif ($env{'form.command'} eq 'get') {   } elsif ($env{'form.command'} eq 'get') {
     &get_slot($r,$symb);      &get_slot($r,$symb);
  } elsif ($env{'form.command'} eq 'change') {   } elsif ($env{'form.command'} eq 'change') {
     if (&get_slot($r,$symb,$env{'form.releaseslot'},1)) {              if ($env{'form.nochange'}) {
                   my $slot_name = $env{'form.releaseslot'};
                   my @slots = &check_for_reservation($symb,'allslots');
                   my $msg;
                   if (($slot_name ne '') && (grep(/^\Q$slot_name\E/,@slots))) { 
                        my %slot=&Apache::lonnet::get_slot($env{'form.releaseslot'});
                        my $description=&get_description($slot_name,\%slot);
                        $msg = '<span style="font-weight: bold;">'.
                               &mt('Unchanged reservation: [_1]',$description).'</span><br /><br />';
                        my $person = 
                            &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'});
                        my $subject = &mt('Reservation unchanged: [_1]',$description);
                        my $msgbody = &mt('No change to existing registration by [_1] for [_2].',$person,$description);
                        $msg .= &slot_change_messaging($slot{'reservationmsg'},$subject,$msgbody,'nochange');
                   } else {
                       $msg = '<span class="LC_warning">'.&mt('Reservation no longer reported as available.').'</span>';
                   }
                   $r->print($msg);
                   &return_link($r);
       } elsif (&get_slot($r,$symb,$env{'form.releaseslot'},1)) {
  &release_slot($r,$symb,$env{'form.releaseslot'});   &release_slot($r,$symb,$env{'form.releaseslot'});
     }      }
  } else {   } else {

Removed from v.1.108  
changed lines
  Added in v.1.118


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>