--- loncom/homework/bridgetask.pm 2007/02/22 21:40:40 1.226 +++ loncom/homework/bridgetask.pm 2008/10/23 08:05:28 1.242 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: bridgetask.pm,v 1.226 2007/02/22 21:40:40 albertel Exp $ +# $Id: bridgetask.pm,v 1.242 2008/10/23 08:05:28 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,7 +38,6 @@ use Apache::lonlocal; use Apache::lonxml; use Apache::slotrequest(); use Time::HiRes qw( gettimeofday tv_interval ); -use lib '/home/httpd/lib/perl/'; use LONCAPA; @@ -245,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".''."\n\t\t".''; - $result.="\n\t\t\t".''. - "\n\t\t\t".''; + if ($see_all || (!§ion_restricted())) { + $result.="\n\t\t\t".''. + "\n\t\t\t".''; + } else { + $result.="\n\t\t\t".''. + "\n\t\t\t".''; + } $result.="\n\t\t\t".''. &Apache::loncommon::end_data_table_row(). &Apache::loncommon::end_data_table(); + return $result; } my $title=&Apache::lonnet::gettitle($symb); - $result.="\n

Current Queue - $title $queue

". + $result.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(); - if ($with_selects) { $result.=""; } - $result.="". + if ($with_selects) { $result.=''; } + $result.=''. &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()]; @@ -1599,7 +1650,7 @@ sub show_queue { 'start'); } my $me=$env{'user.name'}.':'.$env{'user.domain'}; - $status=&mt('Locked by [_1] [_2]',$locker,$time); + $status=&mt('Locked by [_1] [_2]',''.$locker.'',$time); if ($me eq $locker) { ($action,$description)=('resume',&mt('Resume')); } else { @@ -1634,15 +1685,46 @@ FORM } $result.= ""; - $result.='".&Apache::loncommon::end_data_table_row(); + $result.='' + .&Apache::loncommon::end_data_table_row(); } } $result.= &Apache::loncommon::end_data_table()."
\n"; 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; @@ -1658,11 +1740,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$/) { @@ -1739,7 +1824,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 = @@ -1848,7 +1934,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'}; } @@ -1864,6 +1950,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; @@ -1950,15 +2037,15 @@ 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; if (!(grep(/^all$/,@chosen_sections))) { - $result.='

Showing only sections '.join(', ',@chosen_sections). - '.

'."\n"; + $result.='

' + .&mt('Showing only sections [_1].' + ,''.join(', ',@chosen_sections).'') + .'

'."\n"; } $result.=&Apache::loncommon::start_data_table(); @@ -1994,6 +2081,7 @@ sub select_user { $seclist.=''; } + my $buttontext=&mt('Regrade'); $result.=&Apache::loncommon::start_data_table_row(); $result.=< @@ -2002,10 +2090,10 @@ sub select_user { - + $seclist - + "; + } else { + undef($url); + } + my $name=&Apache::loncommon::plainname($user,$domain); my $msg; if ($env{'form.proctorpassword'}) { - $msg='

'.&mt("Failed to authenticate the proctor.") - .'

'; + $msg.='

' + .&mt("Failed to authenticate the proctor.") + .'

'; } + + my $valid; + my @possible_proctors=split(",",$slot->{'proctor'}); + foreach my $proctor (@possible_proctors) { + if ($proctor =~ /$LONCAPA::username_re:$LONCAPA::domain_re/) { + $valid = 1; + last; + } + } + if (!$valid) { + $msg.='

' + .&mt("No valid proctors are defined.") + .'

'; + } + if (!$env{'form.proctordomain'}) { $env{'form.proctordomain'}=$domain; } + my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'}); + $uri = &HTML::Entities::encode($uri,'<>&"'); + my %lt = &Apache::lonlocal::texthash( + 'prva' => "Proctor Validation", + 'yoro' => "Your room's proctor needs to validate your access to this resource.", + 'prus' => "Proctor's Username:", + 'pasw' => "Password:", + 'prdo' => "Proctor's Domain:", + 'vali' => 'Validate', + 'stui' => "Student who should be logged in is:", + 'name' => "Name:", + 'sid' => "Student ID:", + 'unam' => "Username:", + ); my $result= (<Proctor Validation -

Your room's proctor needs to validate your access to this resource.

+

$lt{'prva'}

+

$lt{'yoro'}

$msg -
+
Specify a section: '.$sec_select."\n\t\t\t".''.&mt('Specify a section:').' '.$sec_select."\n\t\t\t".''.&mt('Grading section:').' '.$env{'request.course.sec'}."\n\t\t\t".''.' '; @@ -286,7 +294,7 @@ sub add_grading_button { sub add_request_another_attempt_button { my ($text)=@_; - if (!$text) { $text="Request another attempt"; } + if (!$text) { $text=&mt('Request another attempt'); } my $result; my $symb=&Apache::lonnet::symbread(); # not a slot access based resource @@ -298,13 +306,14 @@ sub add_request_another_attempt_button { my ($slot_name,$slot)=&Apache::slotrequest::check_for_reservation($symb); my $action='get_reservation'; if ($slot_name) { - $text="Change reservation."; + $text=&mt('Change reservation.'); $action='change_reservation'; my $description=&Apache::slotrequest::get_description($slot_name, $slot); - $result.=(< Will be next available: $description

-STUFF + $result.='

' + .&mt('Will be next available:') + .' '.$description + .'

'; } if ($env{'request.enc'}) { $symb=&Apache::lonenc::encrypted($symb); } @@ -314,7 +323,7 @@ STUFF ''."\n\t\t". ''."\n\t\t". ''."\n\t". + $text.'" />'."\n\t". ''."\n"; return $result; } @@ -488,6 +497,7 @@ sub webgrade_standard_info { 'stop' => 'Quit Grading', 'fail' => 'Fail Rest', 'cancel' => 'Cancel', + 'submit' => 'Submit Grades', ); %lt=&Apache::lonlocal::texthash(%lt); @@ -495,26 +505,35 @@ sub webgrade_standard_info {
INFO - if (&grade_mode() eq 'regrade') { + if ($env{'request.state'} eq 'construct') { $result.=< +INFO + } else { + if (&grade_mode() eq 'regrade' && $env{'request.state'} ne 'construct') { + $result.=< INFO - } + } - $result.=< +INFO + } + $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 = '
    '; @@ -522,17 +541,19 @@ sub done_screen { foreach my $file (@files) { my $url="/uploaded/$domain/$user/portfolio$file"; if (! &Apache::lonnet::stat_file($url)) { - $file = &mt(' Nonexistent file: '. - '[_1]',$file); - $msg .= "

    Submitted non-existant file $file

    \n"; + $file = '' + .&mt('[_1]Nonexistent file:[_2]' + ,' ' + ,' '.$file.''); + $msg .= "

    ".&mt('Submitted non-existent file [_1]',$file)."

    \n"; } else { $file = ''.$file.''; - $msg .= "

    Submitted file $file

    \n"; + $msg .= "

    ".&mt('Submitted file [_1]',$file)."

    \n"; } $files .= '
  • '.$file.'
  • '; } $files.='
'; - my $subject = "Submission message for $title"; + my $subject = &mt('Submission message for [_1]',$title); my ($message_status,$comment_status); my $setting = $env{'course.'.$env{'request.course.id'}.'.task_messages'}; $setting =~ s/^\s*(\S*)\s*$/$1/; @@ -551,16 +572,14 @@ sub done_screen { $comment_status = '

'.&mt('Message sent to instructor: [_1]', $comment_status).'

'; } - return <$title -

Files submitted: $files

-

You are now done with this Bridge Task

-
-

Logout

-

Change to a different course

-$message_status -$comment_status -DONESCREEN + return "

$title

" + .'

'.&mt('Files submitted: [_1]',$files).'

' + .'

'.&mt('You are now done with this Bridge Task').'

' + .'
' + .'

'.&mt('Logout').'

' +.'

'.&mt('Change to a different course').'

' +.$message_status +.$comment_status; } @@ -601,7 +620,8 @@ sub start_Task { if ($env{'request.enc'}) { $uri=&Apache::lonenc::encrypted($uri); } $result.=$uri.'">'.&add_grading_button()."\n"; my $symb=&Apache::lonnet::symbread(); - 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'})) { $result.='
'. ''. ''. @@ -611,16 +631,18 @@ sub start_Task { my $target_id = &Apache::lonstathelpers::make_target_id({symb => $symb, part => '0'}); - $result.=''. - ''. - ''. - ''. - '
'; + if (!§ion_restricted()) { + $result.='
'. + ''. + ''. + ''. + '
'; + } } } } - if ($target eq 'web' && $env{'request.state'} eq 'construct') { + if ($target =~/(web|webgrade)/ && $env{'request.state'} eq 'construct') { $form_tag_start.=&Apache::structuretags::problem_web_to_edit_header($env{'form.rndseed'}); } if ($target eq 'web' @@ -724,8 +746,12 @@ sub start_Task { if ($todo) { &setup_env_for_other_user($todo,$safeeval); my ($symb,$uname,$udom)=&decode_queue_key($todo); - $result.="\n".'
Found '. - &Apache::lonnet::gettitle($symb).' for '.$uname.' at '.$udom.'
'; + if ($env{'request.state'} eq 'construct') { + $symb = $env{'request.uri'}; + } + $result.="\n".'

'. + &mt('Grading [_1] for [_2] at [_3]', + &Apache::lonnet::gettitle($symb),$uname,$udom).'

'; $form_tag_start.= ''; @@ -791,15 +817,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".'
'; @@ -847,6 +878,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'; @@ -877,7 +914,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; @@ -1039,7 +1083,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.=''; @@ -1047,18 +1091,18 @@ sub end_Task { if (!$previous && $status ne 'SHOW_ANSWER' && &show_task($status,$previous)) { my $action = &Apache::lonenc::check_encrypt($env{'request.uri'}); + my $donetext = &mt('Done'); $result.=< - + 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= @@ -1084,13 +1128,15 @@ DONEBUTTON "

\n"; if ($bt_status eq 'pass') { - $status.='

You passed the '.$title.' given on '. - $start_time.'

'; + $status.='

' + .&mt('You passed the [_1] given on [_2].',$title,$start_time) + .'

'; $status.=$question_status; } if ($bt_status eq 'fail') { - $status.='

You did not pass the '.$title.' given on '. - $start_time.'

'; + $status.='

' + .&mt('You did not pass the [_1] given on [_2].',$title,$start_time) + .'

'; $status.=$question_status; if (!$previous) { $status.=&add_request_another_attempt_button(); @@ -1280,7 +1326,7 @@ DONEBUTTON } } if (exists($Apache::lonhomework::results{'INTERNAL_store'})) { - # instance generation occured and hasn't yet been stored + # instance generation occurred and hasn't yet been stored &Apache::structuretags::finalize_storage(); } } elsif ($target eq 'webgrade') { @@ -1332,9 +1378,7 @@ DONEBUTTON $result.=&Apache::response::meta_stores_write('status','string', 'Bridge Task Status'); } elsif ($target eq 'edit') { - &Apache::structuretags::reset_problem_globals('Task'); - undef($Apache::lonhomework::parsing_a_task); - return ('','no'); + $result.= &Apache::structuretags::problem_edit_footer(); } &Apache::structuretags::reset_problem_globals('Task'); undef($Apache::lonhomework::parsing_a_task); @@ -1496,11 +1540,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}); } } @@ -1516,14 +1560,15 @@ 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); if (!(grep(/^all$/,@chosen_sections))) { - $result.='

Showing only sections '.join(', ',@chosen_sections). - '.

'."\n"; + $result.='

' + .&mt('Showing only sections [_1].' + ,''.join(', ',@chosen_sections).'') + ."

\n"; } my ($view,$view_section); @@ -1537,27 +1582,33 @@ sub show_queue { } } + $result .= + '

'. + &mt('Return to resource').'


'. + "\n

".&mt('Current Queue - [_1]',$queue)."

"; my $regexp="^$symb\0"; my %queue=&Apache::lonnet::dump($queue,$cdom,$cnum,$regexp); my ($tmp)=%queue; if ($tmp=~/^error: 2 /) { - return "\n

Current Queue - $queue

". + $result.= &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_row(). '
'.&mt('Empty').'Statususerdata'.&mt('Status').''.&mt('User').''.&mt('Data').'".$classlist->{$uname.':'.$udom}[&Apache::loncoursedata::CL_FULLNAME()]. " ($uname:$udom) '.$slot_text.' End time: '. - &Apache::lonlocal::locallocaltime($end_time). - "'.$slot_text.' ' + .&mt('End time: [_1]' + ,&Apache::lonlocal::locallocaltime($end_time)) + .'$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] ($student)$classlist->{$student}[&Apache::loncoursedata::CL_FULLNAME()] ($student) Sec: $classlist->{$student}[&Apache::loncoursedata::CL_SECTION()] RESULT } @@ -2078,13 +2166,8 @@ sub start_ClosingParagraph { } elsif ($target eq 'webgrade') { &Apache::lonxml::startredirection(); } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/closingparagraph", - $parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/closingparagraph', - $parser); } return $result; } @@ -2099,6 +2182,14 @@ sub end_ClosingParagraph { return $result; } +sub insert_ClosingParagraph { + return ' + + + +'; +} + sub get_dim_id { if (@Apache::bridgetask::dimension) { return $Apache::bridgetask::dimension[-1]; @@ -2109,9 +2200,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 +2288,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). @@ -2225,12 +2314,8 @@ sub start_QuestionText { my $dim = &get_dim_id(); $dimension{$dim}{'questiontext'}=$text; } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/questiontext",$parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/questiontext', - $parser); } return $result; } @@ -2239,6 +2324,14 @@ sub end_QuestionText { return ''; } +sub insert_QuestionText { + return ' + + + +'; +} + sub get_instance { my ($dim)=@_; my $rand_alg=&Apache::lonnet::get_rand_alg(); @@ -2350,10 +2443,14 @@ sub end_Dimension { ('sub' x $dimension{$dim}{'depth'}).'question'; $ucquestion =~ s/^(.)/uc($1)/e; if ($dim_status eq 'pass') { - $dim_info.='

'.$ucquestion.' : you passed this '.$mandatory.' '.$question.'

'; + $dim_info.='

'.$ucquestion.' : ' + .&mt('you passed this [_1] [_2]',$mandatory,$question) + .'

'; } if ($dim_status eq 'fail') { - $dim_info.='

'.$ucquestion.' : you did not pass this '.$mandatory.' '.$question.'

'; + $dim_info.='

'.$ucquestion.' : ' + .&mt('you did not pass this [_1] [_2]',$mandatory,$question) + .'

'; } my %counts = &get_counts($dim,$instance,$parstack, $safeeval); @@ -2552,16 +2649,11 @@ sub question_status_message { } $status .= '.'; if ($counts->{'opt'}) { - $status .= ' You were required to pass '.$counts->{'opt_req'}. - ' optional '; - if ($counts->{'opt_dim'} + $counts->{'man_dim'} < 1) { - $status .= - ($counts->{'opt_req'} == 1?'criterion':'criteria'); - } else { - $status .= - 'component'.($counts->{'opt_req'} == 1?'':'s'); - } - $status .= '.'; + if ($counts->{'opt_dim'} + $counts->{'man_dim'} < 1) { + $status .= ' '.&mt('You were required to pass [quant,_1,optional criterion,optional criteria].',$counts->{'opt_req'}); + } else { + $status .= ' '.&mt('You were required to pass [quant,_1,optional component].',$counts->{'opt_req'}); + } } return $status; } @@ -2660,7 +2752,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); @@ -2707,12 +2800,8 @@ sub start_IntroParagraph { } } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/introparagraph",$parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/introparagraph', - $parser); } return $result; } @@ -2724,6 +2813,14 @@ sub end_IntroParagraph { } } +sub insert_IntroParagraph { + return ' + + + +'; +} + sub start_Instance { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $dim = &get_dim_id(); @@ -2780,12 +2877,8 @@ sub start_InstanceText { my $instance_id=$Apache::bridgetask::instance{$dim}[-1]; $dimension{$dim}{$instance_id.'.text'}=$text; } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/instancetext",$parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/instancetext', - $parser); } return $result; } @@ -2794,6 +2887,14 @@ sub end_InstanceText { return ''; } +sub insert_InstanceText { + return ' + + + +'; +} + sub start_Criteria { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; @@ -2826,41 +2927,12 @@ sub start_Criteria { push(@{$dimension{$dim}{'criterias'}},$id); } } elsif ($target eq 'edit') { - if (0) { - $result = &Apache::edit::tag_start($target,$token); - my $text=&Apache::lonxml::get_all_text("/criteria",$parser); - &Apache::lonnet::logthis("get_all_text criteria \n$text"); - my $local_parser = HTML::LCParser->new(\$text); - $local_parser->xml_mode(1); - $local_parser->marked_sections(1); - while (1) { - my $criteria_text = - &Apache::lonxml::get_all_text('gradernote',$local_parser); - $result.= - &Apache::edit::editfield($token->[1],$criteria_text,'',80,4); - - # check for a next might be end - my $token = $local_parser->get_token(); - # is the end - last if (!$token); - my $gradernote = &Apache::lonxml::get_all_text('/gradernote', - $local_parser); - # purge the end tag - my $token = $local_parser->get_token(); - $gradernote = ''.$gradernote.''; - @Apache::scripttag::parser_env = @_; - $result .= - &Apache::edit::end_row().&Apache::edit::start_spanning_row(). - &Apache::scripttag::xmlparse($gradernote). - &Apache::edit::end_row().&Apache::edit::start_spanning_row(); - } - } $result .=&Apache::edit::tag_start($target,$token); $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(); @@ -2960,6 +3032,15 @@ sub end_Criteria { } elsif ($target eq 'modified') { } } +sub insert_Criteria { + return ' + + + + + +'; +} sub start_CriteriaText { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; @@ -2967,12 +3048,8 @@ sub start_CriteriaText { if ($target eq 'grade' || $target eq 'web' || $target eq 'webgrade') { } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/criteriatext",$parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/criteriatext', - $parser); } return $result; } @@ -2981,6 +3058,14 @@ sub end_CriteriaText { return ''; } +sub insert_CriteriaText { + return ' + + + +'; +} + sub start_GraderNote { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -2988,12 +3073,8 @@ sub start_GraderNote { $result = '
'. &mt('Note to graders:').''; } elsif ($target eq 'edit') { - my $bodytext=&Apache::lonxml::get_all_text("/gradernote",$parser); $result = &Apache::edit::tag_start($target,$token); - $result.= &Apache::edit::editfield($token->[1],$bodytext,'',80,4); } elsif ($target eq 'modified') { - $result = $token->[4].&Apache::edit::modifiedfield('/gradernote', - $parser); } elsif ($target eq 'web' || $target eq 'grade') { my $note=&Apache::lonxml::get_all_text('/gradernote',$parser,$style); } @@ -3009,46 +3090,90 @@ sub end_GraderNote { return; } +sub insert_GraderNote { + return ' + + + +'; +} sub proctor_validation_screen { my ($slot) = @_; my (undef,undef,$domain,$user) = &Apache::lonnet::whichuser(); my $url=&Apache::lonnet::studentphoto($domain,$user,'jpg'); + if ($url ne '/adm/lonKaputt/lonlogo_broken.gif') { + $url = "
- - - + + +
Proctor's Username:
Password:
Proctor's Domain:
$lt{'prus'}
$lt{'pasw'}
$lt{'prdo'}
-
+
- - - - - + + + + + $url
Student who should be logged in is:
Name:$name
Student ID:$env{'environment.id'}
Usename$user:$domain
$lt{'stui'}
$lt{'name'}$name
$lt{'sid'}$env{'environment.id'}
$lt{'unam'}$user:$domain
ENDCHECKOUT + return $result; }