--- loncom/homework/bridgetask.pm 2006/04/15 01:06:59 1.142 +++ loncom/homework/bridgetask.pm 2006/05/12 04:32:58 1.148 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.142 2006/04/15 01:06:59 albertel Exp $ +# $Id: bridgetask.pm,v 1.148 2006/05/12 04:32:58 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -170,8 +170,8 @@ sub add_grading_button { my (undef,$cid)=&Apache::lonxml::whichuser(); my $cnum=$env{'course.'.$cid.'.num'}; my $cdom=$env{'course.'.$cid.'.domain'}; - my %sections; - my $numsections=&Apache::loncommon::get_sections($cdom,$cnum,\%sections); + my %sections = &Apache::loncommon::get_sections($cdom,$cnum); + my $size=5; if (scalar(keys(%sections)) < 3) { $size=scalar(keys(%sections))+2; @@ -214,7 +214,7 @@ sub add_grading_button { 'gradingdomain'); $result.=&Apache::loncommon::studentbrowser_javascript(); $result.= '

'; - } + } return $result; } @@ -349,12 +349,15 @@ sub webgrade_standard_info { my %lt=&Apache::lonlocal::texthash('done' => 'Next Item', 'stop' => 'Quit Grading', + 'fail' => 'Fail Rest', ); my $result=< + $file_list INFO @@ -381,15 +384,19 @@ sub start_Task { $name = &Apache::structuretags::get_resource_name($parstack,$safeeval); } - my ($result,$form_tag_start)= - &Apache::structuretags::page_start($target,$token,$tagstack,$parstack, - $parser,$safeeval,$name,&style()); - - $result .= '
'."\n"; - + my ($result,$form_tag_start); + if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex' + || $target eq 'edit') { + ($result,$form_tag_start) = + &Apache::structuretags::page_start($target,$token,$tagstack, + $parstack,$parser,$safeeval, + $name,&style($target)); + $result .= '
'."\n"; + } if ($target eq 'web' && $env{'request.state'} ne 'construct') { - if ($Apache::lonhomework::modifygrades) { + if ($Apache::lonhomework::queuegrade + || $Apache::lonhomework::modifygrades) { $result.='
'task', + 'time' => time}); + } elsif (defined($Apache::inputtags::slot_name)) { + &add_to_queue('gradingqueue', + {'type' => 'task', + 'time' => time, + 'slot' => $Apache::inputtags::slot_name}); + } } } elsif ($Apache::lonhomework::results{'INTERNAL_store'}) { &Apache::structuretags::finalize_storage(); @@ -1005,7 +1025,7 @@ sub move_between_queues { } else { $cur_data = ['none']; } - my $result=&add_to_queue($dest_queue,[$cur_data->[0]]); + my $result=&add_to_queue($dest_queue,$cur_data); if ($result ne 'ok') { return $result; } @@ -1104,17 +1124,17 @@ sub check_queue_for_key { if (defined($results{"$todo\0locked"})) { return 'locked'; } - my $slot; - if (ref($results{$todo}) eq 'ARRAY') { - $slot = $results{$todo}[0]; - } elsif (ref($results{$todo}) eq 'HASH') { - $slot = $results{$todo}{'slot'}; - } - if (defined($slot)) { + if (my $slot=&slotted_access($results{$todo})) { my %slot_data=&Apache::lonnet::get_slot($slot); if ($slot_data{'endtime'} > time) { return 'in_progress'; } + } else { + my ($symb) = &decode_queue_key($todo); + my $due_date = &Apache::lonhomework::due_date('0',$symb); + if ($due_date > time) { + return 'in_progress'; + } } return 'enqueued'; } @@ -1174,8 +1194,15 @@ sub show_queue { &Apache::lonlocal::locallocaltime($queue{$key}).""; } elsif ($key!~/(timestamp|locked)$/) { $result.=""; - my $slot=$queue{$key}->[0]; - my %slot_data=&Apache::lonnet::get_slot($slot); + my ($end_time,$slot_text); + if (my $slot=&slotted_access($queue{$key})) { + my %slot_data=&Apache::lonnet::get_slot($slot); + $end_time = $slot_data{'endtime'}; + $slot_text = &mt('Slot: [_1]',$slot); + } else { + $end_time = &Apache::lonhomework::due_date('0',$symb); + $slot_text = ''; + } if ($with_selects) { my $ekey=&Apache::lonnet::escape($key); my ($action,$description,$status)=('select',&mt('Select')); @@ -1193,7 +1220,7 @@ sub show_queue { $seclist.=''; } - if (time > $slot_data{'endtime'}) { + if ($end_time ne '' && time > $end_time) { $result.=(<$status @@ -1210,13 +1237,13 @@ sub show_queue { FORM } else { - $result.=''.&mt("In Progress").'' + $result.=''.&mt("In Progress").' ' } } $result.= "".$fullname->{$uname.':'.$udom}. " ($uname:$udom) "; - $result.='Slot: '.$slot.' End time: '. - &Apache::lonlocal::locallocaltime($slot_data{'endtime'}). + $result.=''.$slot_text.' End time: '. + &Apache::lonlocal::locallocaltime($end_time). ""; } } @@ -1246,13 +1273,19 @@ sub get_queue_counts { } elsif ($key!~/(timestamp|locked)$/) { my ($symb,$uname,$udom) = &decode_queue_key($key); $entries++; - my $slot=$queue{$key}->[0]; - if (!exists($slot_cache{$slot})) { - my %slot_data=&Apache::lonnet::get_slot($slot); - $slot_cache{$slot} = \%slot_data; - } - if (time > $slot_cache{$slot}{'endtime'}) { - $ready_to_grade++; + if (my $slot=&slotted_access($queue{$key})) { + if (!exists($slot_cache{$slot})) { + my %slot_data=&Apache::lonnet::get_slot($slot); + $slot_cache{$slot} = \%slot_data; + } + if (time > $slot_cache{$slot}{'endtime'}) { + $ready_to_grade++; + } + } else { + my $due_date = &Apache::lonhomework::due_date('0',$symb); + if ($due_date ne '' && time > $due_date) { + $ready_to_grade++; + } } } } @@ -1286,6 +1319,22 @@ sub queue_key_locked { return undef; } +sub slotted_access { + my ($queue_entry) = @_; + if (ref($queue_entry) eq 'ARRAY') { + if (defined($queue_entry->[0])) { + return $queue_entry->[0]; + } + return undef; + } elsif (ref($queue_entry) eq 'HASH') { + if (defined($queue_entry->{'slot'})) { + return $queue_entry->{'slot'}; + } + return undef; + } + return undef; +} + sub pick_from_queue_data { my ($queue,$check_section,$queuedata,$cdom,$cnum)=@_; my @possible; # will hold queue entries that are valid to be selected @@ -1300,17 +1349,28 @@ sub pick_from_queue_data { next; } } - my $slot=$queuedata->{$key}[0]; - my %slot_data=&Apache::lonnet::get_slot($slot); - if ($slot_data{'endtime'} > time) { + my $end_time; + if (my $slot=&slotted_access($queuedata->{$key})) { + my %slot_data=&Apache::lonnet::get_slot($slot); + if ($slot_data{'endtime'} < time) { + $end_time = $slot_data{'endtime'}; + } + } else { + my $due_date = &Apache::lonhomework::due_date('0',$symb); + if ($due_date > time) { + $end_time = $due_date; + } + } + if ($end_time ne '') { &Apache::lonxml::debug("not time"); next; } + if (exists($queuedata->{"$key\0locked"})) { &Apache::lonxml::debug("someone already has um."); next; } - push(@possible,[$key,$slot_data{'endtime'}]); + push(@possible,[$key,$end_time]); } if (@possible) { # sort entries in order by slot end time