--- loncom/homework/bridgetask.pm 2007/04/06 21:22:24 1.230 +++ loncom/homework/bridgetask.pm 2007/08/09 00:59:16 1.237 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.230 2007/04/06 21:22:24 albertel Exp $ +# $Id: bridgetask.pm,v 1.237 2007/08/09 00:59:16 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -244,11 +244,20 @@ sub add_grading_button { my $result="\n\t".''; $result.="\n\t".''; - if (&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) { + my $see_all = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}); + my $see_sec = &Apache::lonnet::allowed('mgq',$env{'request.course.id'}. + '/'.$env{'request.course.sec'}); + + if ($see_all || $see_sec) { my ($entries,$ready,$locks)=&get_queue_counts('gradingqueue'); $result.="\n\t".'
Specify a section: | '. - "\n\t\t\t".''.$sec_select."\n\t\t\t".' | '; + if ($see_all || (!§ion_restricted())) { + $result.="\n\t\t\t".'Specify a section: | '. + "\n\t\t\t".''.$sec_select."\n\t\t\t".' | '; + } else { + $result.="\n\t\t\t".'Grading section: | '. + "\n\t\t\t".''.$env{'request.course.sec'}."\n\t\t\t".' | '; + } $result.="\n\t\t\t".''.' ';
@@ -487,6 +496,7 @@ sub webgrade_standard_info {
'stop' => 'Quit Grading',
'fail' => 'Fail Rest',
'cancel' => 'Cancel',
+ 'submit' => 'Submit Grades',
);
%lt=&Apache::lonlocal::texthash(%lt);
@@ -494,26 +504,35 @@ sub webgrade_standard_info {
INFO
- if (&grade_mode() eq 'regrade') {
+ if ($env{'request.state'} eq 'construct') {
$result.=<
$file_list
INFO
return $result;
+
}
sub done_screen {
my ($version) = @_;
- my $title=&Apache::lonnet::gettitle();
+ my $title=&Apache::lonnet::gettitle($env{'request.uri'});
my @files=split(',',$Apache::lonhomework::history{'resource.'.$version.'.0.bridgetask.portfiles'});
my (undef,undef,$domain,$user)= &Apache::lonnet::whichuser();
my $files = '
'. + &mt('Grading [_1] for [_2] at [_3]', + &Apache::lonnet::gettitle($symb),$uname,$udom).' '; $form_tag_start.= ''; @@ -790,15 +816,20 @@ sub start_Task { $result.=''; } - if ($env{'form.chosensections'}) { - my @chosen_sections= - &Apache::loncommon::get_env_multiple('form.chosensections'); + if ($env{'form.chosensections'} || §ion_restricted()) { + my @chosen_sections = &get_allowed_sections(); foreach my $sec (@chosen_sections) { $result.=''; } } if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); } + } elsif ($target eq 'webgrade' + && $env{'request.state'} eq 'construct') { + $result.=$form_tag_start; + $result.=''; + $result.=&webgrade_standard_info(); } if ($target eq 'webgrade') { $result.="\n".'';
@@ -846,6 +877,12 @@ sub get_key_todo {
my ($target)=@_;
my $todo;
+ if ($env{'request.state'} eq 'construct') {
+ my ($symb,$cid,$udom,$uname) = &Apache::lonnet::whichuser();
+ my $gradingkey=&encode_queue_key($symb,$udom,$uname);
+ return ($gradingkey);
+ }
+
if (defined($env{'form.reviewasubmission'})) {
&Apache::lonxml::debug("review a submission....");
$env{'form.queue'}='reviewqueue';
@@ -876,7 +913,14 @@ sub get_key_todo {
my $cdom = $env{'course.'.$cid.'.domain'};
my $uname = &LONCAPA::clean_username($env{'form.gradinguser'});
my $udom = &LONCAPA::clean_domain($env{'form.gradingdomain'});
-
+
+ if (§ion_restricted()) {
+ my $classlist=&get_limited_classlist();
+ if (!&allow_grade_user($classlist->{$uname.':'.$udom})) {
+ return (undef,'not_allowed',
+ &mt('Requested student ([_1]) is in a section you aren\'t allowed to grade.',$uname.':'.$udom));
+ }
+ }
my $gradingkey=&encode_queue_key($symb,$udom,$uname);
my $queue;
@@ -1038,7 +1082,7 @@ sub end_Task {
}
if (!$previous && $status ne 'SHOW_ANSWER' &&
&show_task($status,$previous)) {
- $result.=&Apache::inputtags::gradestatus('0');
+ $result.=&Apache::inputtags::gradestatus('0',$target,1);
}
$result.='';
@@ -1056,8 +1100,7 @@ DONEBUTTON
if (&show_task($status,$previous) &&
$Apache::lonhomework::history{"resource.$version.0.status"} =~ /^(pass|fail)$/) {
my $bt_status=$Apache::lonhomework::history{"resource.$version.0.status"};
- my $title=&Apache::lonnet::gettitle();
-
+ my $title=&Apache::lonnet::gettitle($env{'request.uri'});
my $start_time;
my $slot_name=
@@ -1493,11 +1536,11 @@ sub get_limited_classlist {
}
}
- if (ref($sections) && !grep('all',@{ $sections })) {
+ if (ref($sections) && !grep {$_ eq 'all'} (@{ $sections })) {
foreach my $student (keys(%$classlist)) {
my $section =
$classlist->{$student}[&Apache::loncoursedata::CL_SECTION()];
- if (! grep($section,@{ $sections })) {
+ if (! grep {$_ eq $section} (@{ $sections })) {
delete($classlist->{$student});
}
}
@@ -1513,8 +1556,7 @@ sub show_queue {
my $cnum=$env{'course.'.$cid.'.num'};
my $cdom=$env{'course.'.$cid.'.domain'};
- my @chosen_sections=
- &Apache::loncommon::get_env_multiple('form.chosensections');
+ my @chosen_sections = &get_allowed_sections();
my $classlist = &get_limited_classlist(\@chosen_sections);
@@ -1534,19 +1576,24 @@ sub show_queue {
}
}
+ $result .=
+ ' '. + &mt('Return to resource').' '. + "\n Current Queue - $queue"; my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); my ($tmp)=%queue; if ($tmp=~/^error: 2 /) { - return "\nCurrent Queue - $queue". + $result.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). ''.&mt('Empty').' | '.
&Apache::loncommon::end_data_table_row().
&Apache::loncommon::end_data_table();
+ return $result;
}
my $title=&Apache::lonnet::gettitle($symb);
- $result.="\nCurrent Queue - $title $queue". + $result.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(); if ($with_selects) { $result.="Status | "; }
@@ -1554,7 +1601,8 @@ sub show_queue {
&Apache::loncommon::end_data_table_header_row();
foreach my $key (sort(keys(%queue))) {
my ($symb,$uname,$udom) = &decode_queue_key($key);
- if (!defined($classlist->{$uname.':'.$udom})) { next; }
+ next if (!defined($classlist->{$uname.':'.$udom}));
+ next if (!&allow_grade_user($classlist->{$uname.':'.$udom}));
my $section = $classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_SECTION()];
@@ -1640,6 +1688,35 @@ FORM
return $result;
}
+sub get_allowed_sections {
+ my @chosen_sections;
+ if (§ion_restricted()) {
+ @chosen_sections = ($env{'request.course.sec'});
+ } else {
+ @chosen_sections =
+ &Apache::loncommon::get_env_multiple('form.chosensections');
+ }
+
+ return @chosen_sections;
+}
+
+sub section_restricted {
+ my $cid =(&Apache::lonnet::whichuser())[1];
+ return (lc($env{'course.'.$cid.'.task_grading'}) eq 'section'
+ && $env{'request.course.sec'} ne '' );
+}
+
+sub allow_grade_user {
+ my ($classlist_entry) = @_;
+
+ if (§ion_restricted()
+ && $env{'request.course.sec'} ne
+ $classlist_entry->[&Apache::loncoursedata::CL_SECTION()]) {
+ return 0;
+ }
+ return 1;
+}
+
sub get_queue_counts {
my ($queue)=@_;
my $result;
@@ -1655,11 +1732,14 @@ sub get_queue_counts {
if ($tmp=~/^error: 2 /) {
return (0,0,0);
}
+
my ($entries,$ready_to_grade,$locks)=(0,0,0);
my %slot_cache;
foreach my $key (sort(keys(%queue))) {
my ($symb,$uname,$udom) = &decode_queue_key($key);
- if (!defined($classlist->{$uname.':'.$udom})) { next; }
+ next if (!defined($classlist->{$uname.':'.$udom}));
+ next if (!&allow_grade_user($classlist->{$uname.':'.$udom}));
+
if ($key=~/locked$/) {
$locks++;
} elsif ($key=~/timestamp$/) {
@@ -1736,7 +1816,8 @@ sub pick_from_queue_data {
if ($key =~ /\0timestamp$/) { next; }
my ($symb,$uname,$udom)=&decode_queue_key($key);
- if (!defined($classlist->{$uname.':'.$udom})) { next; }
+ next if (!defined($classlist->{$uname.':'.$udom}));
+ next if (!&allow_grade_user($classlist->{$uname.':'.$udom}));
if ($check_section) {
my $section =
@@ -1845,7 +1926,7 @@ sub lock_key {
sub get_queue_symb_status {
my ($queue,$symb,$cdom,$cnum) = @_;
if (!defined($cdom) || !defined($cnum)) {
- my (undef,$cid)=&Apache::lonnet::whichuser();
+ my (undef,$cid) =&Apache::lonnet::whichuser();
$cnum=$env{'course.'.$cid.'.num'};
$cdom=$env{'course.'.$cid.'.domain'};
}
@@ -1861,6 +1942,7 @@ sub get_queue_symb_status {
next if ($key=~/timestamp$/);
my ($symb,$uname,$udom) = &decode_queue_key($key);
next if (!defined($classlist->{$uname.':'.$udom}));
+ next if (!&allow_grade_user($classlist->{$uname.':'.$udom}));
push(@users,"$uname:$udom");
}
return @users;
@@ -1947,9 +2029,7 @@ sub get_from_queue {
sub select_user {
my ($symb,$cid)=&Apache::lonnet::whichuser();
- my @chosen_sections=
- &Apache::loncommon::get_env_multiple('form.chosensections');
-
+ my @chosen_sections = &get_allowed_sections();
my $classlist = &get_limited_classlist(\@chosen_sections);
my $result;
@@ -2002,7 +2082,7 @@ sub select_user {
$seclist
- | $classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] ($student) |
+ $classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] ($student) Sec: $classlist->{$student}[&Apache::loncoursedata::CL_SECTION()] |
RESULT
}
@@ -2109,9 +2189,7 @@ sub get_dim_id {
sub get_id {
my ($parstack,$safeeval)=@_;
- my $id=&Apache::lonxml::get_param('id',$parstack,$safeeval);
- if (!$id) { $id=$Apache::lonxml::curdepth; }
- return $id;
+ return &Apache::lonxml::get_id($parstack,$safeeval);
}
sub start_Setup {
@@ -2199,8 +2277,8 @@ sub start_Dimension {
$result.=
&Apache::edit::text_arg('Id:','id',$token,10).' '.
&Apache::edit::select_arg('Passing is Mandatory:','Mandatory',
- [['yes', 'Yes'],
- ['no','No'],],
+ [['Y', 'Yes'],
+ ['N','No'],],
$token).' | '. &Apache::edit::text_arg('Required number of passed optional elements to pass the '.$token->[1].':', 'OptionalRequired',$token,4). @@ -2664,7 +2742,8 @@ sub end_Setup { sub grading_history { my ($version,$dim,$id) = @_; - if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'})) { + if (!&Apache::lonnet::allowed('mgq',$env{'request.course.id'}) + && !&Apache::lonnet::allowed('mgq',$env{'request.course.id'}.'/'.$env{'request.course.sec'})) { return ''; } my ($result,$grader); @@ -2842,8 +2921,8 @@ sub start_Criteria { $result.= &Apache::edit::text_arg('Id:','id',$token,10).' '. &Apache::edit::select_arg('Passing is Mandatory:','Mandatory', - [['yes', 'Yes'], - ['no','No'],], + [['Y', 'Yes'], + ['N','No'],], $token) .' '.&Apache::edit::end_row(). &Apache::edit::start_spanning_row(); |