--- loncom/homework/structuretags.pm 2020/10/01 18:54:21 1.512.2.13.4.4 +++ loncom/homework/structuretags.pm 2015/10/05 02:35:40 1.540 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.512.2.13.4.4 2020/10/01 18:54:21 raeburn Exp $ +# $Id: structuretags.pm,v 1.540 2015/10/05 02:35:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,7 +63,6 @@ use Apache::londefdef; use Apache::lonenc(); use Apache::loncommon(); use Time::HiRes qw( gettimeofday tv_interval ); -use HTML::Entities(); use lib '/home/httpd/lib/perl/'; use LONCAPA; @@ -271,7 +270,7 @@ sub homework_js { $jstimeout = 1000 * $timeout; } return &Apache::loncommon::resize_textarea_js(). - &Apache::loncommon::colorfuleditor_js(). + &Apache::loncommon::colorfuleditor_js(). &setmode_javascript(). <<"JS"; @@ -420,13 +417,9 @@ sub page_start { $extra_head .= &homework_js(). &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); if (&Apache::lonhtmlcommon::htmlareabrowser()) { - my %textarea_args; - if (($env{'request.state'} ne 'construct') || - ($env{'environment.nocodemirror'})) { - %textarea_args = ( + my %textarea_args = ( dragmath => 'math', ); - } $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); } my $is_task = ($env{'request.uri'} =~ /\.task$/); @@ -497,7 +490,9 @@ sub page_start { } } if ($needs_upload) { - $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js(); + $extra_head .= &Apache::lonhtmlcommon::file_submissionchk_js() + .''; } } @@ -651,11 +646,10 @@ sub setup_rndseed { unless (defined($questiontype)) { $questiontype = $Apache::lonhomework::type; } - if (($env{'request.state'} eq "construct") - || ($symb eq '') - || ($Apache::lonhomework::type eq 'practice') - || ($Apache::lonhomework::history{'resource.CODE'}) - || (($env{'form.code_for_randomlist'}) && ($target eq 'analyze'))) { + if ($env{'request.state'} eq "construct" + || $symb eq '' + || $Apache::lonhomework::type eq 'practice' + || $Apache::lonhomework::history{'resource.CODE'}) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['rndseed']); $rndseed=$env{'form.rndseed'}; @@ -664,9 +658,7 @@ sub setup_rndseed { if (!$rndseed) { $rndseed=time; } - unless ($env{'form.code_for_randomlist'}) { - $env{'form.rndseed'}=$rndseed; - } + $env{'form.rndseed'}=$rndseed; } if (($env{'request.state'} eq "construct") && ($Apache::lonhomework::type eq 'randomizetry')) { @@ -694,11 +686,7 @@ sub setup_rndseed { $rndseed=join(':',&Apache::lonnet::digest($rndseed)); } } - if (($env{'form.code_for_randomlist'}) && ($target eq 'analyze')) { - $env{'form.CODE'} = $env{'form.code_for_randomlist'}; - $rndseed=&Apache::lonnet::rndseed(); - undef($env{'form.CODE'}); - } elsif ($Apache::lonhomework::history{'resource.CODE'}) { + if ($Apache::lonhomework::history{'resource.CODE'}) { $rndseed=&Apache::lonnet::rndseed(); } $set_safespace = 1; @@ -782,9 +770,7 @@ sub problem_edit_buttons { if ($mode eq 'editxml') { $result.=&problem_edit_action_button('subedit','edit','e','Edit',1); $result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1); - if ($env{'environment.nocodemirror'}) { - $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); - } + $result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1); } else { $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1); $result.=&problem_edit_action_button('subundo','undo','u','Undo',1); @@ -800,9 +786,9 @@ sub problem_edit_header {
'.&mt('Problem Editing').$mode.&Apache::loncommon::help_open_menu('Problem Editing','Problem_Editor_XML_Index',5,'Authoring').' -
'. - ''. - &problem_edit_buttons(); +
'. + ''. + &problem_edit_buttons(); $return .= '
' . &Apache::lonxml::message_location(); $return .= ' @@ -830,7 +816,6 @@ sub problem_edit_header { return $return; } - sub problem_edit_footer { my $resource = $env{'request.ambiguous'}; return '
@@ -906,7 +891,7 @@ sub problem_web_to_edit_header { ".&mt("Problem Type:")." - ENDCHECKOUT @@ -1527,6 +1510,7 @@ sub start_problem { my $status; my $accessmsg; my $resource_due; + my $ipused; my $name= &get_resource_name($parstack,$safeeval); my ($result,$form_tag_start,$slot_name,$slot,$probpartlist); @@ -1535,11 +1519,11 @@ sub start_problem { $target eq 'tex') { if ($env{'form.markaccess'}) { my @interval=&Apache::lonnet::EXT("resource.0.interval"); - my ($timelimit) = ($interval[0] =~ /^(\d+)/); + my ($timelimit) = split(/_/,$interval[0]); &Apache::lonnet::set_first_access($interval[1],$timelimit); } - ($status,$accessmsg,$slot_name,$slot) = + ($status,$accessmsg,$slot_name,$slot,$ipused) = &Apache::lonhomework::check_slot_access('0','problem'); push (@Apache::inputtags::status,$status); } @@ -1630,7 +1614,8 @@ sub start_problem { ( $status eq 'NOTRESERVABLE') || ( $status eq 'RESERVABLE') || ( $status eq 'RESERVABLE_LATER') || - ( $status eq 'INVALID_ACCESS')) { + ( $status eq 'INVALID_ACCESS') || + ( $status eq 'NEED_DIFFERENT_IP')) { my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, $style); if ( $target eq "web" ) { @@ -1663,7 +1648,14 @@ sub start_problem { &Apache::lonnavmaps::timeToHumanString($accessmsg,'start')); } elsif ($status eq 'NOTRESERVABLE') { $msg.=&mt('Not available to make a reservation.'); - } + } elsif ($status eq 'NEED_DIFFERENT_IP') { + if ($ipused) { + $msg.=&mt('You must use the same computer ([_1]) you used when you first accessed this resource using your time/place-based reservation.',"IP: $ipused"); + } else { + $msg.=&mt('Each student must use a different computer to access this resource at this time and/or place.').'
'. + &mt('Somebody else has already used this particular computer for that purpose.'); + } + } $result.=$msg.'
'; } elsif ($target eq 'tex') { my $startminipage = ($env{'form.problem_split'}=~/yes/i)? '' @@ -1683,8 +1675,11 @@ sub start_problem { $result .= &Apache::bridgetask::proctor_validation_screen($slot); } elsif ($target eq 'grade') { - &Apache::bridgetask::proctor_check_auth($slot_name,$slot, - 'problem'); + my $checkinresult = &Apache::bridgetask::proctor_check_auth($slot_name,$slot, + 'problem'); + if ($checkinresult = /^error:/) { + $result .= 'error'; + } } } elsif ($target eq 'web') { if ($status eq 'CAN_ANSWER') { @@ -1694,10 +1689,18 @@ sub start_problem { $Apache::lonhomework::history{'resource.0.checkedin'}; if ($checked_in eq '') { # unproctored slot access, self checkin - &Apache::bridgetask::check_in('problem',undef,undef, - $slot_name); - $checked_in = - $Apache::lonhomework::results{"resource.0.checkedin"}; + my $needsiptied; + if (ref($slot)) { + $needsiptied = $slot->{'iptied'}; + } + my $check = &Apache::bridgetask::check_in('problem',undef,undef, + $slot_name,$needsiptied); + if ($check =~ /^error: /) { + &Apache::lonnet::logthis("Error during self-checkin of problem (symb: $env{'request.symb'}) using slot: $slot_name"); + } else { + $checked_in = + $Apache::lonhomework::results{"resource.0.checkedin"}; + } } if ((ref($slot) eq 'HASH') && ($checked_in ne '')) { if ($slot->{'starttime'} < time()) { @@ -2020,8 +2023,6 @@ sub end_library { && ($#$tagstack eq 0 && $$tagstack[0] eq 'library') && $env{'request.state'} eq "construct") { $result.=''.&Apache::loncommon::end_page({'discussion' => 1}); - } elsif ($target eq 'meta') { - $result.=&Apache::response::meta_response_order(); } if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') { &reset_problem_globals('library'); @@ -2504,12 +2505,7 @@ sub start_randomlist { } if (@randomlist) { my @idx_arr = (0 .. $#randomlist); - if ($env{'form.code_for_randomlist'}) { - &Apache::structuretags::shuffle(\@idx_arr,$target); - undef($env{'form.code_for_randomlist'}); - } else { - &Apache::structuretags::shuffle(\@idx_arr); - } + &Apache::structuretags::shuffle(\@idx_arr); my $bodytext = ''; my $show=$#randomlist; my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval); @@ -2548,10 +2544,10 @@ sub start_randomlist { } sub shuffle { - my ($a,$target) = @_; + my $a=shift; my $i; if (ref($a) eq 'ARRAY' && @$a) { - &Apache::response::pushrandomnumber(undef,$target); + &Apache::response::pushrandomnumber(); for($i=@$a;--$i;) { my $j=int(&Math::Random::random_uniform() * ($i+1)); next if $i == $j; @@ -2909,7 +2905,7 @@ sub start_problemtype { ['hide','Hide']] ,$token); $result .=&Apache::edit::checked_arg('When used as type(s):','for', - [ ['exam','Exam/Quiz Problem'], + [ ['exam','Bubblesheet Exam/Quiz Problem'], ['survey','Survey'], ['surveycred','Survey (with credit)'], ['anonsurvey','Anonymous Survey'], @@ -2957,13 +2953,9 @@ sub end_startouttext { .''.&mt('Delete?').' ' .&Apache::edit::deletelist($target,$token) .'' - .''; - if ($env{'environment.nocodemirror'}) { - $result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1); - } else { - $result.=' '; - } - $result.='' + .'' + .&Apache::lonhtmlcommon::dragmath_button($areaid,1) + .'' .'' .&Apache::edit::insertlist($target,$token) .''