Diff for /loncom/interface/slotrequest.pm between versions 1.110 and 1.119

version 1.110, 2011/01/03 18:04:56 version 1.119, 2014/02/11 19:11:24
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 756  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 833  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 868  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 1049  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 1065  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 1096  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',               'reservationmsg'  => 'Message triggered by reservation',
      'secret'          => 'Secret Word',       'secret'          => 'Secret Word',
      'space'           => '# of students/max',       'space'           => '# of students/max',
Line 1108  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','reservationmsg','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 1198  sub show_table { Line 1211  sub show_table {
            <td valign="top">             <td valign="top">
             <table>              <table>
               <tr>                <tr>
                 <td rowspan="2">Deleted slots:</td>                  <td rowspan="2">'.&mt('Deleted slots:').'</td>
                 <td><label>'.$show_radio.'Show</label></td>                  <td><label>'.$show_radio.&mt('Show').'</label></td>
               </tr>                </tr>
               <tr>                <tr>
                 <td><label>'.$hide_radio.'Hide</label></td>                  <td><label>'.$hide_radio.&mt('Hide').'</label></td>
               </tr>                </tr>
             </table>              </table>
   </td>    </td>
Line 1223  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|reservationmsg)$/) {   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 1305  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 1412  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'})) {          if (exists($show{'reservationmsg'})) {
             $colspan++;$r->print("<td>$reservemsg</td>\n");              $colspan++;$r->print("<td>$reservemsg</td>\n");
         }          }
Line 1550  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 2030  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 2181  sub upload_start { Line 2201  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 2215  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 2232  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 2245  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 2347  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'],              ['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'],
Line 2429  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 ($slot{'type'} eq 'schedulable_student') {
             if ($entries{$fields{'reservationmsg'}}) {              if ($entries{$fields{'reservationmsg'}}) {
                  if (($entries{$fields{'reservationmsg'}} eq 'only_student') ||                   if (($entries{$fields{'reservationmsg'}} eq 'only_student') ||
Line 2467  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 2560  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);
   

Removed from v.1.110  
changed lines
  Added in v.1.119


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