Diff for /loncom/interface/slotrequest.pm between versions 1.74 and 1.85

version 1.74, 2007/04/10 23:26:49 version 1.85, 2008/12/21 04:14:39
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) {
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 527  sub delete_slot { Line 559  sub delete_slot {
  if ($ret eq 'ok') {   if ($ret eq 'ok') {
     $r->print("<p>Slot <tt>$slot_name</tt> marked as deleted.</p>");      $r->print("<p>Slot <tt>$slot_name</tt> marked as deleted.</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\"> An error ($ret) occurse when attempting to delete Slot <tt>$slot_name</tt>.</span></p>");
  }   }
     } else {      } else {
  if (%consumed) {   if (%consumed) {
Line 548  sub return_link { Line 580  sub return_link {
 }  }
   
 sub get_slot {  sub get_slot {
     my ($r,$symb)=@_;      my ($r,$symb,$conflictable_slot,$inhibit_return_link)=@_;
   
     my %slot=&Apache::lonnet::get_slot($env{'form.slotname'});      my %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
     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;   return 0;
     }      }
     if ($slot_name) {      if ($slot_name && $slot_name ne $conflictable_slot) {
  my %slot=&Apache::lonnet::get_slot($slot_name);   my %slot=&Apache::lonnet::get_slot($slot_name);
  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'});
Line 586  STUFF Line 620  STUFF
         } else {          } else {
     &return_link($r);      &return_link($r);
  }   }
  return;   return 0;
     }      }
   
     my $reserved=&make_reservation($env{'form.slotname'},      my $reserved=&make_reservation($env{'form.slotname'},
    \%slot,$symb);     \%slot,$symb);
     my $description=&get_description($env{'form.slotname'},\%slot);      my $description=&get_description($env{'form.slotname'},\%slot);
     if (defined($reserved)) {      if (defined($reserved)) {
    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>Success: $description</p>");
       $retvalue = 1;
  } elsif ($reserved < 0) {   } elsif ($reserved < 0) {
     $r->print("<p>Already reserved: $description</p>");      $r->print("<p>Already reserved: $description</p>");
  }   }
  &return_link($r);   if (!$inhibit_return_link) { &return_link($r); }
  return;   return 1;
     }      }
   
     my %lt=('request'=>"Availibility list",      my %lt=('request'=>"Availibility list",
     'try'    =>'Try again');      'try'    =>'Try again');
     %lt=&Apache::lonlocal::texthash(%lt);      %lt=&Apache::lonlocal::texthash(%lt);
   
       my $extra_input;
       if ($conflictable_slot) {
    $extra_input='<input type="hidden" name="releaseslot" value="'.$env{'form.slotname'}.'" />';
       }
   
     $r->print(<<STUFF);      $r->print(<<STUFF);
 <p> <font color="red">Failed</font> to reserve a spot for $description. </p>  <p> <span class="LC_warning">Failed</span> 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'}" />
    <input type="hidden" name="symb" value="$env{'form.symb'}" />     <input type="hidden" name="symb" value="$env{'form.symb'}" />
    <input type="hidden" name="slotname" value="$env{'form.slotname'}" />     <input type="hidden" name="slotname" value="$env{'form.slotname'}" />
    <input type="hidden" name="command" value="get" />     <input type="hidden" name="command" value="$env{'form.command'}" />
      $extra_input
 </form>  </form>
 ?  ?
 </p>  </p>
Line 629  or Line 673  or
 or  or
 STUFF  STUFF
   
     &return_link($r);      if (!$inhibit_return_link) { &return_link($r); }
     return;      return 0;
 }  }
   
 sub allowed_slot {  sub allowed_slot {
Line 638  sub allowed_slot { Line 682  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 711  sub allowed_slot { Line 754  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;
       } else {
  if ($slots->{$conflict}{'starttime'} < time) {   if ($slots->{$conflict}{'starttime'} < time) {
     return 0;      return 0;
  }   }
Line 737  sub show_choices { Line 782  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 765  sub show_choices { Line 829  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 1101  sub show_table { Line 1171  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 1120  sub show_table { Line 1191  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 1540  sub csv_upload_assign { Line 1611  sub csv_upload_assign {
     }      }
     $r->print("<p>Created $countdone slots\n</p>");      $r->print("<p>Created $countdone slots\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 1624  sub handler { Line 1695  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 (&release_slot($r,$symb,$env{'form.releaseslot'},1)) {      if (&get_slot($r,$symb,$env{'form.releaseslot'},1)) {
  &get_slot($r,$symb);   &release_slot($r,$symb,$env{'form.releaseslot'});
     }      }
  } else {   } else {
     $r->print("<p>Unknown command: ".$env{'form.command'}."</p>");      $r->print("<p>Unknown command: ".$env{'form.command'}."</p>");

Removed from v.1.74  
changed lines
  Added in v.1.85


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