--- loncom/interface/slotrequest.pm 2005/09/09 18:27:56 1.13 +++ loncom/interface/slotrequest.pm 2005/11/21 19:50:36 1.34 @@ -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.13 2005/09/09 18:27:56 albertel Exp $ +# $Id: slotrequest.pm,v 1.34 2005/11/21 19:50:36 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,6 +34,7 @@ use Apache::Constants qw(:common :http : use Apache::loncommon(); use Apache::lonlocal; use Apache::lonnet; +use Date::Manip; sub fail { my ($r,$code)=@_; @@ -52,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; } @@ -253,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').'
'); @@ -275,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)=@_; @@ -450,27 +523,175 @@ STUFF $r->print(''); } +sub to_show { + my ($when,$slot) = @_; + my $time=time; + my $week=60*60*24*7; + if ($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,$symb)=@_; + my ($r,$mgr)=@_; my ($cnum,$cdom)=&get_course(); my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); + if ( (keys(%slots))[0] =~ /^error: 2 /) { + undef(%slots); + } my $available; - $r->print(''."\n"; + $result.=' '. + &mt('Specify a file containing the slot definitions.'). + ' |
'."\n";
+ my $upfile_select=&Apache::loncommon::upfile_select_html();
+ my $ignore=&mt('Ignore First Line');
+ $result.=< + + +ENDUPFORM + $result.=' |
Created $countdone slots\n
"); + foreach my $error (@errors) { + $r->print("$error\n
"); + } + &show_table($r,$mgr); + return ''; +} + sub handler { my $r=shift; - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); - &start_page($r); - my $symb=&Apache::lonnet::unescape($env{'form.symb'}); - my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb); - if ($res !~ /\.task$/) { - &fail($r,'not_valid'); + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + if ($r->header_only()) { + $r->send_http_header(); return OK; } - $env{'request.symb'}=$symb; + + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); + 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,$symb); + &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') { + &csv_upload_map($r); + } elsif ($env{'form.command'} eq 'csvuploadassign' && $mgr eq 'F') { + if ($env{'form.associate'} ne 'Reverse Association') { + &csv_upload_assign($r,$mgr); + } else { + if ( $env{'form.upfile_associate'} ne 'reverse' ) { + $env{'form.upfile_associate'} = 'reverse'; + } else { + $env{'form.upfile_associate'} = 'forward'; + } + &csv_upload_map($r); + } } else { + my $symb=&Apache::lonnet::unescape($env{'form.symb'}); + my (undef,undef,$res)=&Apache::lonnet::decode_symb($symb); + if ($res !~ /\.task$/) { + &fail($r,'not_valid'); + return OK; + } + $env{'request.symb'}=$symb; my ($status) = &Apache::lonhomework::check_task_access('0'); if ($status eq 'CAN_ANSWER' || $status eq 'NEEDS_CHECKIN' ||The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.