[LON-CAPA-cvs] cvs: loncom /interface slotrequest.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 09 Aug 2005 15:04:50 -0000


albertel		Tue Aug  9 11:04:50 2005 EDT

  Modified files:              
    /loncom/interface	slotrequest.pm 
  Log:
  - can now change a reservation or freee one
  
  
Index: loncom/interface/slotrequest.pm
diff -u loncom/interface/slotrequest.pm:1.5 loncom/interface/slotrequest.pm:1.6
--- loncom/interface/slotrequest.pm:1.5	Tue Aug  9 03:34:51 2005
+++ loncom/interface/slotrequest.pm	Tue Aug  9 11:04:50 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler for requesting to have slots added to a students record
 #
-# $Id: slotrequest.pm,v 1.5 2005/08/09 07:34:51 albertel Exp $
+# $Id: slotrequest.pm,v 1.6 2005/08/09 15:04:50 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -232,12 +232,47 @@
 }
 
 sub release_slot {
-    my ($r,$symb)=@_;
+    my ($r,$symb,$slot_name,$inhibit_return_link)=@_;
+
+    if ($slot_name eq '') { $slot_name=$env{'form.slotname'}; }
+    my ($cnum,$cdom)=&get_course();
+
     # get parameter string, check for existance, rebuild string with the slot
+				       
+    my @slots = split(/:/,&Apache::lonnet::EXT("resource.0.availablestudent",
+					       $symb,$env{'user.domain'},
+					       $env{'user.name'}));
+    my @new_slots;
+    foreach my $exist_slot (@slots) {
+	if ($exist_slot eq $slot_name) { next; }
+	push(@new_slots,$exist_slot);
+    }
+    my $new_param = join(':',@new_slots);
 
     # get slot reservations, check if user has one, if so remove reservation
-
+    my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum,
+				       "^$slot_name\0");
+    foreach my $entry (keys(%consumed)) {
+	if ( $consumed{$entry}->{'name'} eq 
+	     ($env{'user.name'}.'@'.$env{'user.domain'}) ) {
+	    &Apache::lonnet::del('slot_reservations',[$entry],
+				 $cdom,$cnum);
+	}
+    }
     # store new parameter string
+    my $result=&Apache::lonparmset::storeparm_by_symb($symb,
+						      '0_availablestudent',
+						      1, $new_param, 'string',
+						      $env{'user.name'},
+						      $env{'user.domain'});
+    my %slot=&Apache::lonnet::get_slot($slot_name);
+    my $description=&get_description($env{'form.slotname'},\%slot);
+    $r->print("<p>Released Reservation: $description</p>");
+    if ($inhibit_return_link) {
+	$r->print('<p><a href="/adm/flip?postdata=return:">'.
+		  &mt('Return to last resource').'</a></p>');
+    }
+    return 1;
 }
 
 sub get_slot {
@@ -246,11 +281,29 @@
     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:">'.
+	my $description1=&get_description($slot_name,\%slot);
+	%slot=&Apache::lonnet::get_slot($env{'form.slotname'});
+	my $description2=&get_description($env{'form.slotname'},\%slot);
+	$r->print("<p>Already have a reservation: $description1</p>");
+	$r->print(<<STUFF);
+<form method="POST" action="/adm/slotrequest">
+   <input type="hidden" name="symb" value="$env{'form.symb'}" />
+   <input type="hidden" name="slotname" value="$env{'form.slotname'}" />
+   <input type="hidden" name="releaseslot" value="$slot_name" />
+   <input type="hidden" name="command" value="change" />
+STUFF
+	$r->print("<p>You can either ");
+	$r->print(<<STUFF);
+   <input type="submit" name="change" value="Change" />
+STUFF
+	$r->print(' your reservation from <b>'.$description1.'</b> to <b>'.
+		  $description2.
+		  '</b> <br />or <a href="/adm/flip?postdata=return:">'.
 		  &mt('Return to last resource').'</a></p>');
-	# FIXME add button to free current reservation adn get new one
+	$r->print(<<STUFF);
+</form>
+STUFF
+	# FIXME add button to free current reservation and get new one
 	return;
     }
     my %slot=&Apache::lonnet::get_slot($env{'form.slotname'});
@@ -447,6 +500,9 @@
 	&release_slot($r,$symb);
     } elsif ($env{'form.command'} eq 'get') {
 	&get_slot($r,$symb);
+    } elsif ($env{'form.command'} eq 'change') {
+       	&release_slot($r,$symb,$env{'form.releaseslot'},1);
+	&get_slot($r,$symb);
     }
     &end_page($r);
     return OK;