--- loncom/interface/slotrequest.pm 2005/10/07 20:00:20 1.20 +++ loncom/interface/slotrequest.pm 2005/11/21 21:20:06 1.35 @@ -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.20 2005/10/07 20:00:20 albertel Exp $ +# $Id: slotrequest.pm,v 1.35 2005/11/21 21:20:06 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -53,11 +53,10 @@ sub fail { } sub start_page { - my ($r)=@_; + my ($r,$title)=@_; my $html=&Apache::lonxml::xmlbegin(); - $r->print($html.'
Remove $name from slot $env{'form.slotname'} for $title
+ + +END_CONFIRM + +} + sub release_slot { - my ($r,$symb,$slot_name,$inhibit_return_link)=@_; + my ($r,$symb,$slot_name,$inhibit_return_link,$mgr)=@_; if ($slot_name eq '') { $slot_name=$env{'form.slotname'}; } my ($cnum,$cdom)=&get_course(); + my ($uname,$udom) = ($env{'user.name'}, $env{'user.domain'}); + if ($mgr eq 'F' + && defined($env{'form.uname'}) && defined($env{'form.udom'})) { + ($uname,$udom) = ($env{'form.uname'}, $env{'form.udom'}); + } + + if ($mgr eq 'F' + && defined($env{'form.symb'})) { + $symb = $env{'form.symb'}; + } + # 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'})); + $symb,$udom,$uname)); + my @new_slots; foreach my $exist_slot (@slots) { if ($exist_slot eq $slot_name) { next; } @@ -254,21 +291,24 @@ sub release_slot { 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'}) ) { + if ( $consumed{$entry}->{'name'} eq ($uname.'@'.$udom) ) { &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'}); + $uname,$udom); my %slot=&Apache::lonnet::get_slot($slot_name); my $description=&get_description($env{'form.slotname'},\%slot); $r->print("Released Reservation: $description
"); + if ($mgr eq 'F') { + $r->print(''. + &mt('Return to slot list').'
'); + } if (!$inhibit_return_link) { $r->print(''. &mt('Return to last resource').'
'); @@ -276,6 +316,38 @@ sub release_slot { return 1; } +sub delete_slot { + my ($r)=@_; + + my $slot_name = $env{'form.slotname'}; + my %slot=&Apache::lonnet::get_slot($slot_name); + + my ($cnum,$cdom)=&get_course(); + my %consumed=&Apache::lonnet::dump('slot_reservations',$cdom,$cnum, + "^$slot_name\0"); + + if (%slot && !%consumed) { + $slot{'type'} = 'deleted'; + my $ret = &Apache::lonnet::cput('slots', {$slot_name => \%slot}, + $cdom, $cnum); + if ($ret eq 'ok') { + $r->print("Slot $slot_name marked as deleted.
"); + } else { + $r->print("An error ($ret) occurse when attempting to delete Slot $slot_name.
"); + } + } else { + if (%consumed) { + $r->print("Slot $slot_name has active reservations.
"); + } else { + $r->print("Slot $slot_name does not exist.
"); + } + } + $r->print(''. + &mt('Return to slot list').'
'); + $r->print(''. + &mt('Return to last resource').'
'); +} + sub get_slot { my ($r,$symb)=@_; @@ -451,6 +523,72 @@ STUFF $r->print(''); } +sub to_show { + my ($slot,$when,$deleted) = @_; + my $time=time; + my $week=60*60*24*7; + if ($deleted eq 'hide' && $slot->{'type'} eq 'deleted') { + return 0; + } + if ($when eq 'any') { + return 1; + } elsif ($when eq 'now') { + if ($time > $slot->{'starttime'} && + $time < $slot->{'endtime'}) { + return 1; + } + return 0; + } elsif ($when eq 'nextweek') { + if ( ($time < $slot->{'starttime'} && + ($time+$week) > $slot->{'starttime'}) + || + ($time < $slot->{'endtime'} && + ($time+$week) > $slot->{'endtime'}) ) { + return 1; + } + return 0; + } elsif ($when eq 'lastweek') { + if ( ($time > $slot->{'starttime'} && + ($time-$week) < $slot->{'starttime'}) + || + ($time > $slot->{'endtime'} && + ($time-$week) < $slot->{'endtime'}) ) { + return 1; + } + return 0; + } elsif ($when eq 'willopen') { + if ($time < $slot->{'starttime'}) { + return 1; + } + return 0; + } elsif ($when eq 'wereopen') { + if ($time > $slot->{'endtime'}) { + return 1; + } + return 0; + } + + return 1; +} + +sub remove_link { + my ($slotname,$entry,$uname,$udom,$symb) = @_; + + $slotname = &Apache::lonnet::escape($slotname); + $entry = &Apache::lonnet::escape($entry); + $uname = &Apache::lonnet::escape($uname); + $udom = &Apache::lonnet::escape($udom); + $symb = &Apache::lonnet::escape($symb); + + my $remove= &mt('Remove'); + + return <<"END_LINK"; + ($remove) +END_LINK + +} + sub show_table { my ($r,$mgr)=@_; @@ -461,27 +599,131 @@ sub show_table { } my $available; if ($mgr eq 'F') { + $r->print('$edit $delete | \n"); + if (exists($show{'name'})) { + $colspan++;$r->print("$slot | "); + } + if (exists($show{'description'})) { + $colspan++;$r->print("$description | \n"); + } + if (exists($show{'type'})) { + $colspan++;$r->print("$slots{$slot}->{'type'} | \n"); + } + if (exists($show{'starttime'})) { + $colspan++;$r->print("$start | \n"); + } + if (exists($show{'endtime'})) { + $colspan++;$r->print("$end | \n"); + } + if (exists($show{'startreserve'})) { + $colspan++;$r->print("$start_reserve | \n"); + } + if (exists($show{'secret'})) { + $colspan++;$r->print("$slots{$slot}{'secret'} | \n"); + } + if (exists($show{'maxspace'})) { + $colspan++;$r->print("$slots{$slot}{'maxspace'} | \n"); + } + if (exists($show{'ip'})) { + $colspan++;$r->print("$slots{$slot}{'ip'} | \n"); + } + if (exists($show{'symb'})) { + $colspan++;$r->print("$title | \n"); + } + if (exists($show{'uniqueperiod'})) { + $colspan++;$r->print("$unique | \n"); + } + $colspan++;$r->print("$ids | \n$edit | -$slot | -$slots{$slot}->{'type'} | -$description | -$start | -$end | -$slots{$slot}->{'maxspace'} | -$ids | -$proctors | -$unique | +$proctors | STUFF + } } $r->print('
Created $countdone slots\n
"); + foreach my $error (@errors) { + $r->print("$error\n
"); + } &show_table($r,$mgr); return ''; } @@ -762,12 +1086,31 @@ sub csv_upload_assign { sub handler { my $r=shift; + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + if ($r->header_only()) { + $r->send_http_header(); + return OK; + } + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); - &start_page($r); + my $vgr=&Apache::lonnet::allowed('vgr',$env{'request.course.id'}); my $mgr=&Apache::lonnet::allowed('mgr',$env{'request.course.id'}); + my $title='Requesting Another Worktime'; + if ($env{'form.command'} =~ /^(showslots|uploadstart|csvuploadmap|csvuploadassign)$/ && $vgr eq 'F') { + $title = 'Managing Slots'; + } + &start_page($r,$title); + if ($env{'form.command'} eq 'showslots' && $vgr eq 'F') { &show_table($r,$mgr); + } elsif ($env{'form.command'} eq 'remove_registration' && $mgr eq 'F') { + &remove_registration($r); + } elsif ($env{'form.command'} eq 'release' && $mgr eq 'F') { + &release_slot($r,undef,undef,undef,$mgr); + } elsif ($env{'form.command'} eq 'delete' && $mgr eq 'F') { + &delete_slot($r); } elsif ($env{'form.command'} eq 'uploadstart' && $mgr eq 'F') { &upload_start($r); } elsif ($env{'form.command'} eq 'csvuploadmap' && $mgr eq 'F') { @@ -783,8 +1126,6 @@ sub handler { } &csv_upload_map($r); } - } elsif ($env{'form.command'} eq 'editslot' && $mgr eq 'F') { - &show_slot_edit($r); } else { my $symb=&Apache::lonnet::unescape($env{'form.symb'}); my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb);