Diff for /loncom/interface/slotrequest.pm between versions 1.76 and 1.88.2.1

version 1.76, 2007/04/10 23:30:41 version 1.88.2.1, 2009/05/17 21:03:16
Line 165  sub check_for_reservation { Line 165  sub check_for_reservation {
 sub get_consumed_uniqueperiods {  sub get_consumed_uniqueperiods {
     my ($slots) = @_;      my ($slots) = @_;
     my $navmap=Apache::lonnavmaps::navmap->new;      my $navmap=Apache::lonnavmaps::navmap->new;
       if (!defined($navmap)) {
           return 'error: Unable to determine current status';
       }
     my @problems = $navmap->retrieveResources(undef,      my @problems = $navmap->retrieveResources(undef,
       sub { $_[0]->is_problem() },1,0);        sub { $_[0]->is_problem() },1,0);
     my %used_slots;      my %used_slots;
Line 214  sub check_for_conflict { Line 217  sub check_for_conflict {
   
     if (!ref($consumed_uniqueperiods)) {      if (!ref($consumed_uniqueperiods)) {
  $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);   $consumed_uniqueperiods = &get_consumed_uniqueperiods($slots);
  if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {          if (ref($consumed_uniqueperiods) eq 'HASH') {
     return 'error: Unable to determine current status';      if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
  }          return 'error: Unable to determine current status';
       }
           } else {
               return 'error: Unable to determine current status';
           }
     }      }
           
     my ($new_uniq_start,$new_uniq_end) = @{$new_slot->{'uniqueperiod'}};      my ($new_uniq_start,$new_uniq_end) = @{$new_slot->{'uniqueperiod'}};
Line 229  sub check_for_conflict { Line 236  sub check_for_conflict {
  }   }
     }      }
     return undef;      return undef;
   
 }  }
   
 sub make_reservation {  sub make_reservation {
Line 241  sub make_reservation { Line 247  sub make_reservation {
    $env{'user.domain'},$env{'user.name'});     $env{'user.domain'},$env{'user.name'});
     &Apache::lonxml::debug("value is  $value<br />");      &Apache::lonxml::debug("value is  $value<br />");
   
     my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");      my $use_slots = &Apache::lonnet::EXT("resource.0.useslots",$symb,
    $env{'user.domain'},$env{'user.name'});
     &Apache::lonxml::debug("use_slots is  $use_slots<br />");      &Apache::lonxml::debug("use_slots is  $use_slots<br />");
   
     if (&Apache::lonnet::error($value)       if (&Apache::lonnet::error($value) 
Line 334  sub remove_registration { Line 341  sub remove_registration {
     my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,      my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
        "^$slot_name\0");         "^$slot_name\0");
     if (&Apache::lonnet::error(%consumed)) {      if (&Apache::lonnet::error(%consumed)) {
  $r->print("<p>".&mt('A network error has occured.').'</p>');   $r->print("<p><span class=\"LC_error\">".&mt('A network error has occurred.').'</span></p>');
  return;   return;
     }      }
     if (!%consumed) {      if (!%consumed) {
  $r->print("<p>".&mt('Slot <tt>[_1]</tt> has no reservations.',   $r->print('<p>'.&mt('Slot [_1] has no reservations.',
     $slot_name)."</p>");      '<tt>'.$slot_name.'</tt>').'</p>');
  return;   return;
     }      }
   
Line 412  sub release_all_slot { Line 419  sub release_all_slot {
  my ($result,$msg) =   my ($result,$msg) =
     &release_reservation($slot_name,$uname,$udom,      &release_reservation($slot_name,$uname,$udom,
  $consumed{$entry}{'symb'},$mgr);   $consumed{$entry}{'symb'},$mgr);
  $r->print("<p>$msg</p>");          if (!$result) {
               $r->print('<p><span class="LC_error">'.&mt($msg).'</span></p>');
           } else {
       $r->print("<p>$msg</p>");
           }
  $r->rflush();   $r->rflush();
     }      }
     $r->print('<p><a href="/adm/slotrequest?command=showslots">'.      $r->print('<p><a href="/adm/slotrequest?command=showslots">'.
Line 438  sub release_slot { Line 449  sub release_slot {
   
     my ($result,$msg) =      my ($result,$msg) =
  &release_reservation($slot_name,$uname,$udom,$symb,$mgr);   &release_reservation($slot_name,$uname,$udom,$symb,$mgr);
     $r->print("<p>$msg</p>");      if (!$result) {
           $r->print('<p><span class="LC_error">'.&mt($msg).'</span></p>');
       } else {
           $r->print("<p>$msg</p>");
       }
           
     if ($mgr eq 'F') {      if ($mgr eq 'F') {
  $r->print('<p><a href="/adm/slotrequest?command=showslots">'.   $r->print('<p><a href="/adm/slotrequest?command=showslots">'.
Line 459  sub release_reservation { Line 474  sub release_reservation {
     return (0,&mt('Not allowed to release Reservation: [_1], as it has already ended.',$description));      return (0,&mt('Not allowed to release Reservation: [_1], as it has already ended.',$description));
  }   }
     }      }
   
       # if the reservation symb is for a map get a resource in that map
       # to check slot parameters on
       my $navmap=Apache::lonnavmaps::navmap->new;
       if (!defined($navmap)) {
           return (0,'error: Unable to determine current status');
       }
       my $passed_resource = $navmap->getBySymb($symb);
       if ($passed_resource->is_map()) {
    my ($a_resource) = 
       $navmap->retrieveResources($passed_resource, 
          sub {$_[0]->is_problem()},0,1);
    $symb = $a_resource->symb();
       }
   
     # get parameter string, check for existance, rebuild string with the slot      # get parameter string, check for existance, rebuild string with the slot
     my @slots = split(/:/,&Apache::lonnet::EXT("resource.0.availablestudent",      my $student = &Apache::lonnet::EXT("resource.0.availablestudent",
        $symb,$udom,$uname));                                         $symb,$udom,$uname);
       my @slots = split(/:/,$student);
   
     my @new_slots;      my @new_slots;
     foreach my $exist_slot (@slots) {      foreach my $exist_slot (@slots) {
Line 482  sub release_reservation { Line 513  sub release_reservation {
  }   }
     }      }
   
     my $use_slots = &Apache::lonnet::EXT("resource.0.useslots");      my $use_slots = &Apache::lonnet::EXT("resource.0.useslots",
    $symb,$udom,$uname);
     &Apache::lonxml::debug("use_slots is  $use_slots<br />");      &Apache::lonxml::debug("use_slots is  $use_slots<br />");
   
     if (&Apache::lonnet::error($use_slots)) {       if (&Apache::lonnet::error($use_slots)) { 
Line 525  sub delete_slot { Line 557  sub delete_slot {
  my $ret = &Apache::lonnet::cput('slots', {$slot_name => \%slot},   my $ret = &Apache::lonnet::cput('slots', {$slot_name => \%slot},
  $cdom, $cnum);   $cdom, $cnum);
  if ($ret eq 'ok') {   if ($ret eq 'ok') {
     $r->print("<p>Slot <tt>$slot_name</tt> marked as deleted.</p>");      $r->print('<p>'.&mt('Slot [_1] marked as deleted.','<tt>'.$slot_name.'</tt>').'</p>');
  } else {   } else {
     $r->print("<p> An error ($ret) occurse when attempting to delete Slot <tt>$slot_name</tt>.</p>");      $r->print('<p><span class="LC_error">'.&mt('An error occurred when attempting to delete slot: [_1]','<tt>'.$slot_name.'</tt>')." ($ret)</span></p>");
  }   }
     } else {      } else {
  if (%consumed) {   if (%consumed) {
     $r->print("<p>Slot <tt>$slot_name</tt> has active reservations.</p>");      $r->print('<p>'.&mt('Slot [_1] has active reservations.','<tt>'.$slot_name.'</tt>').'</p>');
  } else {   } else {
     $r->print("<p>Slot <tt>$slot_name</tt> does not exist.</p>");      $r->print('<p>'.&mt('Slot [_1] does not exist.','<tt>'.$slot_name.'</tt>').'</p>');
  }   }
     }      }
     $r->print('<p><a href="/adm/slotrequest?command=showslots">'.      $r->print('<p><a href="/adm/slotrequest?command=showslots">'.
Line 554  sub get_slot { Line 586  sub get_slot {
     my $slot_name=&check_for_conflict($symb,$env{'form.slotname'},\%slot);      my $slot_name=&check_for_conflict($symb,$env{'form.slotname'},\%slot);
   
     if ($slot_name =~ /^error: (.*)/) {      if ($slot_name =~ /^error: (.*)/) {
  $r->print("<p>An error occured while attempting to make a reservation. ($1)</p>");   $r->print('<p><span class="LC_error">'
                    .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)
                    .'</span></p>');
  &return_link($r);   &return_link($r);
  return 0;   return 0;
     }      }
Line 563  sub get_slot { Line 597  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>Already have a reservation: $description1</p>");   $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 572  sub get_slot { Line 606  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>You can either ");              $r->print('<p>'
     $r->print(<<STUFF);                       .&mt('You can either [_1]Change[_2] your reservation from [_3] to [_4] or'
    <input type="submit" name="change" value="Change" />                           ,'<input type="submit" name="change" value="'
 STUFF                           ,'" />'
     $r->print(' your reservation from <b>'.$description1.'</b> to <b>'.                           ,'<b>'.$description1.'</b>'
       $description2.                           ,'<b>'.$description2.'</b>')
       '</b> <br />or </p>');                       .'<br /></p>'
               );
     &return_link($r);      &return_link($r);
     $r->print(<<STUFF);      $r->print(<<STUFF);
 </form>  </form>
Line 595  STUFF Line 630  STUFF
     if (defined($reserved)) {      if (defined($reserved)) {
  my $retvalue = 0;   my $retvalue = 0;
  if ($slot_name =~ /^error: (.*)/) {   if ($slot_name =~ /^error: (.*)/) {
     $r->print("<p>An error occured while attempting to make a reservation. ($1)</p>");      $r->print('<p><span class="LC_error">'
                        .&mt('An error occurred while attempting to make a reservation. ([_1])',$1)
                        .'</span></p>');
  } elsif ($reserved > -1) {   } elsif ($reserved > -1) {
     $r->print("<p>Success: $description</p>");      $r->print('<p>'.&mt('Success: [_1]',$description).'</p>');
     $retvalue = 1;      $retvalue = 1;
  } elsif ($reserved < 0) {   } elsif ($reserved < 0) {
     $r->print("<p>Already reserved: $description</p>");      $r->print('<p>'.&mt('Already reserved: [_1]',$description).'</p>');
  }   }
  if (!$inhibit_return_link) { &return_link($r); }   if (!$inhibit_return_link) { &return_link($r); }
  return 1;   return 1;
     }      }
   
     my %lt=('request'=>"Availibility list",      my %lt=('request'=>"Availibility list",
     'try'    =>'Try again');      'try'    =>'Try again?',
               'or'     => 'or');
     %lt=&Apache::lonlocal::texthash(%lt);      %lt=&Apache::lonlocal::texthash(%lt);
   
     my $extra_input;      my $extra_input;
Line 615  STUFF Line 653  STUFF
  $extra_input='<input type="hidden" name="releaseslot" value="'.$env{'form.slotname'}.'" />';   $extra_input='<input type="hidden" name="releaseslot" value="'.$env{'form.slotname'}.'" />';
     }      }
   
       $r->print('<p>'.&mt('[_1]Failed[_2] to reserve a slot for [_3].','<span class="LC_warning">','</span>',$description).'</p>');
     $r->print(<<STUFF);      $r->print(<<STUFF);
 <p> <font color="red">Failed</font> to reserve a spot for $description. </p>  
 <p>  <p>
 <form method="post" action="/adm/slotrequest">  <form method="post" action="/adm/slotrequest">
    <input type="submit" name="Try Again" value="$lt{'try'}" />     <input type="submit" name="Try Again" value="$lt{'try'}" />
Line 625  STUFF Line 663  STUFF
    <input type="hidden" name="command" value="$env{'form.command'}" />     <input type="hidden" name="command" value="$env{'form.command'}" />
    $extra_input     $extra_input
 </form>  </form>
 ?  
 </p>  </p>
 <p>  <p>
 or  $lt{'or'}
 <form method="post" action="/adm/slotrequest">  <form method="post" action="/adm/slotrequest">
     <input type="hidden" name="symb" value="$env{'form.symb'}" />      <input type="hidden" name="symb" value="$env{'form.symb'}" />
     <input type="submit" name="requestattempt" value="$lt{'request'}" />      <input type="submit" name="requestattempt" value="$lt{'request'}" />
 </form>  </form>
 </p>  
 or  
 STUFF  STUFF
   
     if (!$inhibit_return_link) { &return_link($r); }      if (!$inhibit_return_link) { 
           $r->print(&mt('or').'</p>');
           &return_link($r);
       } else {
           $r->print('</p>');
       }
     return 0;      return 0;
 }  }
   
Line 646  sub allowed_slot { Line 686  sub allowed_slot {
   
     #already started      #already started
     if ($slot->{'starttime'} < time) {      if ($slot->{'starttime'} < time) {
  # all open slot to be schedulable  
  return 0;   return 0;
     }      }
     &Apache::lonxml::debug("$slot_name starttime good");      &Apache::lonxml::debug("$slot_name starttime good");
Line 719  sub allowed_slot { Line 758  sub allowed_slot {
   
     my $conflict = &check_for_conflict($symb,$slot_name,$slot,$slots,      my $conflict = &check_for_conflict($symb,$slot_name,$slot,$slots,
        $consumed_uniqueperiods);         $consumed_uniqueperiods);
     if ($conflict) {      if ($conflict =~ /^error: /) {
           return 0;
       } elsif ($conflict ne '') {
  if ($slots->{$conflict}{'starttime'} < time) {   if ($slots->{$conflict}{'starttime'} < time) {
     return 0;      return 0;
  }   }
Line 745  sub show_choices { Line 786  sub show_choices {
     my ($cnum,$cdom)=&get_course();      my ($cnum,$cdom)=&get_course();
     my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);      my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum);
     my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);      my $consumed_uniqueperiods = &get_consumed_uniqueperiods(\%slots);
       if (ref($consumed_uniqueperiods) eq 'HASH') {
           if (&Apache::lonnet::error(%$consumed_uniqueperiods)) {
               $r->print('<span class="LC_error">'.
                         &mt('An error occurred determining slot availability').
                         '</span>');
               return;
           }
       } elsif ($consumed_uniqueperiods =~ /^error: /) {
           $r->print('<span class="LC_error">'.
                     &mt('An error occurred determining slot availability').
                     '</span>');
           return;
       }
     my $available;      my $available;
     $r->print('<table border="1">');  
     &Apache::lonxml::debug("Checking Slots");      &Apache::lonxml::debug("Checking Slots");
     my @got_slots=&check_for_reservation($symb,'allslots');      my @got_slots=&check_for_reservation($symb,'allslots');
       if ($got_slots[0] =~ /^error: /) {
           $r->print('<span class="LC_error">'.
                     &mt('An error occurred determining slot availability').
                     '</span>');
           return;
       }
       $r->print('<table border="1">');
     foreach my $slot (sort       foreach my $slot (sort 
       { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }        { return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} }
       (keys(%slots)))  {        (keys(%slots)))  {
Line 773  sub show_choices { Line 833  sub show_choices {
  my $conflict = &check_for_conflict($symb,$slot,$slots{$slot},   my $conflict = &check_for_conflict($symb,$slot,$slots{$slot},
    \%slots,     \%slots,
    $consumed_uniqueperiods);     $consumed_uniqueperiods);
  if ($conflict) {                  if ($conflict) {
     $text=&mt('Change Reservation');                      if ($conflict =~ /^error: /) {
     $command='get';                          $r->print('<tr><td><span class="LC_error" colspan="2">'
  }                                    .&mt('Slot: [_1] has unknown status.',$description)
                                     .'</span></td></tr>');
                       } else {
           $text=&mt('Change Reservation');
           $command='get';
       }
                   }
     }      }
     my $escsymb=&escape($symb);      my $escsymb=&escape($symb);
     $form=<<STUFF;      $form=<<STUFF;
Line 797  STUFF Line 863  STUFF
     }      }
   
     if (!$available) {      if (!$available) {
  $r->print('<tr><td>No available times. <a href="/adm/flip?postdata=return:">'.   $r->print('<tr><td>'.&mt('No available times.').
                     ' <a href="/adm/flip?postdata=return:">'.
   &mt('Return to last resource').'</a></td></tr>');    &mt('Return to last resource').'</a></td></tr>');
     }      }
     $r->print('</table>');      $r->print('</table>');
Line 1109  sub show_table { Line 1176  sub show_table {
  my ($id_count,$ids);   my ($id_count,$ids);
           
  if (exists($show{'scheduled'}) || exists($show{'space'}) ) {   if (exists($show{'scheduled'}) || exists($show{'space'}) ) {
     my @this_slot = grep(/^$slot\0/,keys(%consumed));      my $re_str = "$slot\0";
       my @this_slot = grep(/^\Q$re_str\E/,keys(%consumed));
     $id_count = scalar(@this_slot);      $id_count = scalar(@this_slot);
     if (exists($show{'scheduled'})) {      if (exists($show{'scheduled'})) {
  foreach my $entry (sort { $consumed{$a}{name} cmp    foreach my $entry (sort { $consumed{$a}{name} cmp 
       $consumed{$b}{name} }        $consumed{$b}{name} }
    (keys(%consumed))) {     (@this_slot)) {
     my (undef,$id)=split("\0",$entry);      my (undef,$id)=split("\0",$entry);
     my ($uname,$udom) = split(':',$consumed{$entry}{'name'});      my ($uname,$udom) = split(':',$consumed{$entry}{'name'});
     $ids.= '<nobr>';      $ids.= '<span class="LC_nobreak">';
     foreach my $item (@stu_display_order) {      foreach my $item (@stu_display_order) {
  if ($stu_display{$item}) {   if ($stu_display{$item}) {
     if ($item eq 'fullname') {      if ($item eq 'fullname') {
Line 1128  sub show_table { Line 1196  sub show_table {
  }   }
     }      }
     $ids.=&remove_link($slot,$entry,$uname,$udom,      $ids.=&remove_link($slot,$entry,$uname,$udom,
        $consumed{$entry}{'symb'}).'</nobr><br />';         $consumed{$entry}{'symb'}).'</span><br />';
  }   }
     }      }
  }   }
Line 1283  sub upload_start { Line 1351  sub upload_start {
     $result.='&nbsp;<b>'.      $result.='&nbsp;<b>'.
  &mt('Specify a file containing the slot definitions.').   &mt('Specify a file containing the slot definitions.').
  '</b></td></tr>'."\n";   '</b></td></tr>'."\n";
     $result.='<tr bgcolor=#ffffe6><td>'."\n";      $result.='<tr bgcolor="#ffffe6"><td>'."\n";
     my $upfile_select=&Apache::loncommon::upfile_select_html();      my $upfile_select=&Apache::loncommon::upfile_select_html();
     my $ignore=&mt('Ignore First Line');      my $ignore=&mt('Ignore First Line');
     $result.=<<ENDUPFORM;      $result.=<<ENDUPFORM;
Line 1338  ENDPICK Line 1406  ENDPICK
   
 sub csvuploadmap_footer {  sub csvuploadmap_footer {
     my ($request,$i,$keyfields) =@_;      my ($request,$i,$keyfields) =@_;
       my $buttontext = &mt('Create Slots');
     $request->print(<<ENDPICK);      $request->print(<<ENDPICK);
 </table>  </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="Create Slots" /><br />  <input type="button" onClick="javascript:verify(this.form)" value="$buttontext" /><br />
 </form>  </form>
 ENDPICK  ENDPICK
 }  }
Line 1459  sub csv_upload_assign { Line 1528  sub csv_upload_assign {
     my @slotdata = &Apache::loncommon::upfile_record_sep();      my @slotdata = &Apache::loncommon::upfile_record_sep();
     if ($env{'form.noFirstLine'}) { shift(@slotdata); }      if ($env{'form.noFirstLine'}) { shift(@slotdata); }
     my %fields=&Apache::grades::get_fields();      my %fields=&Apache::grades::get_fields();
     $r->print('<h3>Creating Slots</h3>');      $r->print('<h3>'.&mt('Creating Slots').'</h3>');
     my $cname=$env{'course.'.$env{'request.course.id'}.'.num'};      my $cname=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'};      my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'};
     my $countdone=0;      my $countdone=0;
Line 1546  sub csv_upload_assign { Line 1615  sub csv_upload_assign {
  $r->rflush();   $r->rflush();
  $countdone++;   $countdone++;
     }      }
     $r->print("<p>Created $countdone slots\n</p>");      $r->print('<p>'.&mt('Created [quant,_1,slot]',$countdone)."\n".'</p>');
     foreach my $error (@errors) {      foreach my $error (@errors) {
  $r->print("<p>$error\n</p>");   $r->print('<p><span class="LC_warning">'.$error.'</span></p>'."\n");
     }      }
     &show_table($r,$mgr);      &show_table($r,$mgr);
     return '';      return '';
Line 1636  sub handler { Line 1705  sub handler {
  &release_slot($r,$symb,$env{'form.releaseslot'});   &release_slot($r,$symb,$env{'form.releaseslot'});
     }      }
  } else {   } else {
     $r->print("<p>Unknown command: ".$env{'form.command'}."</p>");      $r->print('<p>'.&mt('Unknown command: [_1]',$env{'form.command'}).'</p>');
  }   }
     }      }
     &end_page($r);      &end_page($r);

Removed from v.1.76  
changed lines
  Added in v.1.88.2.1


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