--- loncom/homework/lonhomework.pm 2007/11/20 17:53:22 1.286 +++ loncom/homework/lonhomework.pm 2008/01/15 03:09:09 1.289 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.286 2007/11/20 17:53:22 albertel Exp $ +# $Id: lonhomework.pm,v 1.289 2008/01/15 03:09:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -137,8 +137,8 @@ sub get_target { if ($env{'form.problemstate'} eq 'WEB_GRADE') { #$env{'form.webgrade'} = 'yes'; return ('grade','webgrade','answer'); - } elsif ( $env{'form.problemmode'} eq &mt('View') || - $env{'form.problemmode'} eq &mt('Discard Edits and View')) { + } elsif (($env{'form.problemmode'} eq 'view') || + ($env{'form.problemmode'} eq 'discard')) { if ( defined($env{'form.submitted'}) && (!defined($env{'form.resetdata'})) && (!defined($env{'form.newrandomization'}))) { @@ -146,10 +146,9 @@ sub get_target { } else { return ('web','answer'); } - } elsif ( $env{'form.problemmode'} eq &mt('Edit') || - $env{'form.problemmode'} eq 'Edit') { + } elsif ($env{'form.problemmode'} eq 'edit') { if ( $env{'form.submitted'} eq 'edit' ) { - if ( $env{'form.submit'} eq &mt('Save and View') ) { + if ( $env{'form.submitbutton'} eq &mt('Save and View') ) { return ('modified','web','answer'); } else { return ('modified','no_output_web','edit'); @@ -292,9 +291,9 @@ sub check_slot_access { } } - my @slots= - (split(':',&Apache::lonnet::EXT("resource.0.availablestudent")), - split(':',&Apache::lonnet::EXT("resource.0.available"))); + my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent"); + my $available = &Apache::lonnet::EXT("resource.0.available"); + my @slots= (split(':',$availablestudent),split(':',$available)); # if (!@slots) { # return ($status,$datemsg); @@ -421,7 +420,8 @@ sub check_access { &Apache::lonxml::debug("symb:".$symb); #if ($env{'request.state'} ne "construct" && $symb ne '') { if ($env{'request.state'} ne "construct") { - my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); + my $idacc = &Apache::lonnet::EXT("resource.$id.acc"); + my $allowed=&check_ip_acc($idacc); if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { $status='INVALID_ACCESS'; $date=&mt("can not be accessed from your location."); @@ -743,20 +743,25 @@ sub handle_save_or_undo { sub analyze_header { my ($request) = @_; + my $js = &Apache::structuretags::setmode_javascript(); my $result = - &Apache::loncommon::start_page('Analyzing a problem',undef); + &Apache::loncommon::start_page('Analyzing a problem',$js); $result .= &Apache::lonxml::message_location().'
'. + ''. &Apache::structuretags::remember_problem_state().'
- - + +
- - +
'; @@ -919,9 +924,9 @@ sub editxmlmode { if (!$error) { $problem=&Apache::lonnet::getfile($file); } } &Apache::lonhomework::showhashsubset(\%env,'^form'); - if ( $env{'form.submit'} eq &mt('Save and View') ) { + if ( $env{'form.submitbutton'} eq &mt('Save and View') ) { &Apache::lonhomework::showhashsubset(\%env,'^form'); - $env{'form.problemmode'}='View'; + $env{'form.problemmode'}='view'; &renderpage($request,$file); } else { my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem); @@ -936,7 +941,8 @@ sub editxmlmode { if ($rows < 20) { $rows = 20; } my $js = &Apache::edit::js_change_detection(). - &Apache::loncommon::resize_textarea_js(); + &Apache::loncommon::resize_textarea_js(). + &Apache::structuretags::setmode_javascript(); my $only_body = ($env{'environment.remote'} eq 'off')? 0 : 1; my $start_page = &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js, @@ -946,7 +952,6 @@ sub editxmlmode { 'onresize' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], 'onload' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], }}); - $result.=$start_page. &renderpage($request,$file,['no_output_web'],1). '
- - - + + +
- - + +

'.&Apache::lonxml::message_location().' @@ -1082,11 +1088,33 @@ sub get_template_list { '/templates/*.'.$glob_extension); @files = map {[$_,&mt(&Apache::lonnet::metadata($_, 'title'))]} (@files); @files = sort {$a->[1] cmp $b->[1]} (@files); + my ($midpoint,$seconddiv,$numfiles); + $numfiles = 0; + foreach my $file (@files) { + next if ($file->[1] !~ /\S/); + $numfiles ++; + } + if ($numfiles > 0) { + $result = '
'; + $midpoint = int($numfiles/2); + if ($numfiles%2) { + $midpoint ++; + } + } + my $count = 0; foreach my $file (@files) { next if ($file->[1] !~ /\S/); $result .= '
'; + $file->[1].'
'."\n"; + $count ++; + if ((!$seconddiv) && ($count >= $midpoint)) { + $result .= '
'."\n".'
'."\n"; + $seconddiv = 1; + } + } + if ($numfiles > 0) { + $result .= '
'."\n".''."\n"; } return $result; } @@ -1146,7 +1174,7 @@ $errormsg sub update_construct_style { if ($env{'request.state'} eq "construct" - && $env{'form.problemmode'} eq &mt('View') + && $env{'form.problemmode'} eq 'view' && defined($env{'form.submitted'}) && !defined($env{'form.resetdata'}) && !defined($env{'form.newrandomization'})) { @@ -1169,13 +1197,6 @@ sub handler { $Apache::lonxml::debug=$env{'user.debug'}; $env{'request.uri'}=$request->uri; &setuppermissions(); - # some times multiple problemmodes are submitted, need to select - # the last one - if ( defined($env{'form.problemmode'}) && ref($env{'form.problemmode'}) ) { - my $mode=$env{'form.problemmode'}->[-1]; - undef $env{'form.problemmode'}; - $env{'form.problemmode'}=$mode; - } my $file=&Apache::lonnet::filelocation("",$request->uri); @@ -1204,12 +1225,11 @@ sub handler { ['problemmode']); if (!(defined $env{'form.problemmode'})) { #first visit to problem in construction space - $env{'form.problemmode'}='View'; + $env{'form.problemmode'}= 'view'; &renderpage($request,$file); - } elsif ($env{'form.problemmode'} eq &mt('EditXML') || - $env{'form.problemmode'} eq 'EditXML') { + } elsif ($env{'form.problemmode'} eq 'editxml') { &editxmlmode($request,$file); - } elsif ($env{'form.problemmode'} eq &mt('Calculate answers')) { + } elsif ($env{'form.problemmode'} eq 'calcanswers') { &analyze($request,$file); } else { &update_construct_style();