version 1.4, 2005/06/04 08:17:06
|
version 1.5, 2005/08/09 07:34:51
|
Line 134 sub check_for_reservation {
|
Line 134 sub check_for_reservation {
|
return (undef,undef); |
return (undef,undef); |
} |
} |
|
|
|
sub check_for_conflict { |
|
my ($symb,$new_slot_name)=@_; |
|
my $student = &Apache::lonnet::EXT("resource.0.availablestudent", $symb, |
|
$env{'user.domain'}, $env{'user.name'}); |
|
my $course = &Apache::lonnet::EXT("resource.0.available", $symb, |
|
$env{'user.domain'}, $env{'user.name'}); |
|
my @slots = (split(/:/,$student), split(/:/, $course)); |
|
my ($cnum,$cdom)=&get_course(); |
|
my %slots=&Apache::lonnet::get('slots', [@slots], $cdom, $cnum); |
|
foreach my $slot_name (@slots) { |
|
next if (!defined($slots{$slot_name}) || |
|
!ref($slots{$slot_name})); |
|
|
|
next if (!defined($slots{$slot_name}->{'uniqueperiod'}) || |
|
!ref($slots{$slot_name}->{'uniqueperiod'})); |
|
my ($start,$end)=@{$slots{$slot_name}->{'uniqueperiod'}}; |
|
if ($start<time && time < $end) { |
|
return $slot_name; |
|
} |
|
} |
|
return undef; |
|
|
|
} |
|
|
# FIXME - depends on the parameter for the resource to be correct |
# FIXME - depends on the parameter for the resource to be correct |
# tho prevent multiple reservations |
# to prevent multiple reservations |
|
|
sub make_reservation { |
sub make_reservation { |
my ($slot_name,$slot,$symb)=@_; |
my ($slot_name,$slot,$symb)=@_; |
Line 207 sub make_reservation {
|
Line 231 sub make_reservation {
|
return undef; |
return undef; |
} |
} |
|
|
|
sub release_slot { |
|
my ($r,$symb)=@_; |
|
# get parameter string, check for existance, rebuild string with the slot |
|
|
|
# get slot reservations, check if user has one, if so remove reservation |
|
|
|
# store new parameter string |
|
} |
|
|
sub get_slot { |
sub get_slot { |
my ($r,$symb)=@_; |
my ($r,$symb)=@_; |
|
|
|
my $slot_name=&check_for_conflict($symb,$env{'form.slotname'}); |
|
if ($slot_name) { |
|
my %slot=&Apache::lonnet::get_slot($slot_name); |
|
my $description=&get_description($env{'form.slotname'},\%slot); |
|
$r->print("<p>Already have a reservation: $description</p>"); |
|
$r->print('<p><a href="/adm/flip?postdata=return:">'. |
|
&mt('Return to last resource').'</a></p>'); |
|
# FIXME add button to free current reservation adn get new one |
|
return; |
|
} |
my %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); |
my %slot=&Apache::lonnet::get_slot($env{'form.slotname'}); |
my $reserved=&make_reservation($env{'form.slotname'}, |
my $reserved=&make_reservation($env{'form.slotname'}, |
\%slot,$symb); |
\%slot,$symb); |
Line 259 sub allowed_slot {
|
Line 302 sub allowed_slot {
|
my ($slot_name,$slot,$symb)=@_; |
my ($slot_name,$slot,$symb)=@_; |
#already started |
#already started |
if ($slot->{'starttime'} < time) { |
if ($slot->{'starttime'} < time) { |
return 0; |
# all open slot to be schedulable |
|
#return 0; |
} |
} |
|
&Apache::lonxml::debug("$slot_name starttime good"); |
#already ended |
#already ended |
if ($slot->{'endtime'} < time) { |
if ($slot->{'endtime'} < time) { |
return 0; |
return 0; |
} |
} |
|
&Apache::lonxml::debug("$slot_name endtime good"); |
# not allowed to pick this one |
# not allowed to pick this one |
if (defined($slot->{'type'}) |
if (defined($slot->{'type'}) |
&& $slot->{'type'} ne 'schedulable_student') { |
&& $slot->{'type'} ne 'schedulable_student') { |
return 0; |
return 0; |
} |
} |
|
&Apache::lonxml::debug("$slot_name type good"); |
# not allowed for this resource |
# not allowed for this resource |
if (defined($slot->{'symb'}) |
if (defined($slot->{'symb'}) |
&& $slot->{'symb'} ne $symb) { |
&& $slot->{'symb'} ne $symb) { |
return 0; |
return 0; |
} |
} |
|
&Apache::lonxml::debug("$slot_name symb good"); |
return 1; |
return 1; |
} |
} |
|
|
Line 300 sub show_choices {
|
Line 344 sub show_choices {
|
my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); |
my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); |
my $available; |
my $available; |
$r->print('<table border="1">'); |
$r->print('<table border="1">'); |
|
&Apache::lonxml::debug("Checking Slots"); |
|
my ($got_slot)=&check_for_reservation($symb); |
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))) { |
|
|
|
&Apache::lonxml::debug("Checking Slot $slot"); |
next if (!&allowed_slot($slot,$slots{$slot})); |
next if (!&allowed_slot($slot,$slots{$slot})); |
|
|
$available++; |
$available++; |
Line 312 sub show_choices {
|
Line 359 sub show_choices {
|
|
|
my $form=&mt('Unavailable'); |
my $form=&mt('Unavailable'); |
if (&space_available($slot,$slots{$slot},$symb)) { |
if (&space_available($slot,$slots{$slot},$symb)) { |
|
my $text=&mt('Select'); |
|
my $command='get'; |
|
if ($slot eq $got_slot) { |
|
$text=&mt('Free Reservation'); |
|
$command='release'; |
|
} |
my $escsymb=&Apache::lonnet::escape($symb); |
my $escsymb=&Apache::lonnet::escape($symb); |
$form=<<STUFF; |
$form=<<STUFF; |
<form method="POST" action="/adm/slotrequest"> |
<form method="POST" action="/adm/slotrequest"> |
<input type="submit" name="Select" value="Select" /> |
<input type="submit" name="Select" value="$text" /> |
<input type="hidden" name="symb" value="$escsymb" /> |
<input type="hidden" name="symb" value="$escsymb" /> |
<input type="hidden" name="slotname" value="$slot" /> |
<input type="hidden" name="slotname" value="$slot" /> |
<input type="hidden" name="command" value="get" /> |
<input type="hidden" name="command" value="$command" /> |
</form> |
</form> |
STUFF |
STUFF |
} |
} |
Line 331 STUFF
|
Line 384 STUFF
|
} |
} |
|
|
if (!$available) { |
if (!$available) { |
$r->print('<tr><td>No avaliable times. <a href="/adm/flip?postdata=return:">'. |
$r->print('<tr><td>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>'); |
} |
} |
|
|
|
sub show_table { |
|
my ($r,$symb)=@_; |
|
|
|
my ($cnum,$cdom)=&get_course(); |
|
my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); |
|
my $available; |
|
$r->print('<table border="1">'); |
|
foreach my $slot (sort |
|
{ return $slots{$a}->{'starttime'} <=> $slots{$b}->{'starttime'} } |
|
(keys(%slots))) { |
|
if (defined($slots{$slot}->{'type'}) |
|
&& $slots{$slot}->{'type'} ne 'schedulable_student') { |
|
next; |
|
} |
|
my $description=&get_description($slot,$slots{$slot}); |
|
my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, |
|
"^$slot\0"); |
|
my $ids; |
|
foreach my $entry (sort(keys(%consumed))) { |
|
my (undef,$id)=split("\0",$entry); |
|
$ids.= $id.'-> '.$consumed{$entry}->{'name'}.'<br />'; |
|
} |
|
my $start=localtime($slots{$slot}->{'starttime'}); |
|
my $end=localtime($slots{$slot}->{'endtime'}); |
|
$r->print(<<STUFF); |
|
<tr> |
|
<td>$slot</td> |
|
<td>$description</td> |
|
<td>$start</td> |
|
<td>$end</td> |
|
<td>$slots{$slot}->{'maxspace'}</td> |
|
<td>$ids</td> |
|
</tr> |
|
STUFF |
|
} |
|
$r->print('</table>'); |
|
} |
|
|
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
|
|
Line 347 sub handler {
|
Line 438 sub handler {
|
&fail($r,'not_valid'); |
&fail($r,'not_valid'); |
return OK; |
return OK; |
} |
} |
|
|
if ($env{'form.requestattempt'}) { |
if ($env{'form.command'} eq 'showslots') { |
|
&show_table($r,$symb); |
|
} elsif ($env{'form.requestattempt'}) { |
&show_choices($r,$symb); |
&show_choices($r,$symb); |
|
} elsif ($env{'form.command'} eq 'release') { |
|
&release_slot($r,$symb); |
} elsif ($env{'form.command'} eq 'get') { |
} elsif ($env{'form.command'} eq 'get') { |
&get_slot($r,$symb); |
&get_slot($r,$symb); |
} |
} |