--- loncom/homework/structuretags.pm 2009/06/11 16:48:28 1.451 +++ loncom/homework/structuretags.pm 2010/10/28 00:27:56 1.477 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.451 2009/06/11 16:48:28 bisitz Exp $ +# $Id: structuretags.pm,v 1.477 2010/10/28 00:27:56 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -66,7 +66,7 @@ use lib '/home/httpd/lib/perl/'; use LONCAPA; BEGIN { - &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); + &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag')); } sub start_web { @@ -177,12 +177,13 @@ sub page_start { $parstack,$parser,$safeeval); } - $extra_head .= &homework_js(); - - if ($env{'environment.wysiwygeditor'} eq 'on') { - $extra_head .= &Apache::lonhtmlcommon::dragmath_js("FCKEditMathPopup"); - } else { - $extra_head .= &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); + $extra_head .= &homework_js(). + &Apache::lonhtmlcommon::dragmath_js("EditMathPopup"); + if (&Apache::lonhtmlcommon::htmlareabrowser()) { + my %textarea_args = ( + dragmath => 'math', + ); + $extra_head .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args); } my %body_args; @@ -209,22 +210,21 @@ sub page_start { } elsif (!defined($found{'body'}) && $env{'request.state'} eq 'construct') { if ($target eq 'web' || $target eq 'edit') { - if ($env{'environment.remote'} ne 'off') { - $body_args{'only_body'} = 1; - } # Breadcrumbs for Construction Space &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({ 'text' => 'Construction Space', 'href' => &Apache::loncommon::authorspace(), }); + # breadcrumbs (and tools) will be created + # in start_page->bodytag->innerregister + # FIXME Where are we? # &Apache::lonhtmlcommon::add_breadcrumb({ # 'text' => 'Problem Editing', # 'Problem Testing' # 'href' => '', # }); - $pageheader = &Apache::lonhtmlcommon::breadcrumbs() - .&Apache::loncommon::head_subbox( + $pageheader =&Apache::loncommon::head_subbox( &Apache::loncommon::CSTR_pageheader()); } } elsif (!defined($found{'body'})) { @@ -243,8 +243,7 @@ sub page_start { # $body_args{'no_title'} = 1; $body_args{'force_register'} = 1; $body_args{'add_entries'} = \%add_entries; - if ($env{'environment.remote'} eq 'off' - && $env{'request.state'} eq 'construct') { + if ( $env{'request.state'} eq 'construct') { $body_args{'only_body'} = 1; } } @@ -257,11 +256,11 @@ sub page_start { && ($target eq 'web' || $target eq 'webgrade')) { my ($symb,undef,undef,undef,$publicuser)= &Apache::lonnet::whichuser(); - if ($symb eq '' && !$publicuser) { - my $help = &Apache::loncommon::help_open_topic("Ambiguous_Reference"); - $help=&mt("Browsing resource, all submissions are temporary.")."
"; - $page_start .= $help; - } + if ($symb eq '' && !$publicuser) { + $page_start .= '

' + .&mt('Browsing resource, all submissions are temporary.') + .'

'; + } } if (!defined($found{'body'}) && $env{'request.state'} ne 'construct') { @@ -271,7 +270,9 @@ sub page_start { my $form_tag_start; if (!defined($found{'form'})) { $form_tag_start='
'. &problem_edit_buttons().' -
+
'.&Apache::lonxml::message_location().' '. - ''; + $result.=&Apache::edit::end_table(); + + } + return $result; +} + +sub end_startpartmarker { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my @result; + if ($target eq 'edit') { $result[1]='no'; } + return @result; +} + +sub start_endpartmarker { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result=''; + if ($target eq 'edit') { + $result=&Apache::edit::tag_start($target,$token); + $result.=&mt('Marker for the end of a part. Place start marker above to wrap in-between tags into a new part.').''; + $result.=&Apache::edit::end_table(); + + } + return $result; +} + +sub end_endpartmarker { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my @result; + if ($target eq 'edit') { $result[1]='no'; } + return @result; +} + + + + + sub start_part { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; if (!$Apache::lonxml::metamode) { @@ -1769,9 +1835,12 @@ sub start_part { '.disableexampointprint'}) eq 'yes') { $allow_print_points=0; } - if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { $result .= '\fbox{\textit{'.$weight.' pt}}';} + if (($Apache::lonhomework::type eq 'exam') && ($allow_print_points)) { + $result .= '\vskip 10mm\fbox{\textit{'.$weight.' pt}}'; + + } } elsif ($target eq 'web') { - $result.=''; + $result.=''; } } } @@ -1938,6 +2007,9 @@ sub start_problemtype { $result .=&Apache::edit::checked_arg('When used as type(s):','for', [ ['exam','Exam/Quiz Problem'], ['survey','Survey'], + ['surveycred','Survey (with credit)'], + ['anonsurvey','Anonymous Survey'], + ['anonsurveycred','Anonymous Survey (with credit)'], ['problem','Homework Problem'], ['practice','Practice Problem'] ] ,$token); @@ -1978,17 +2050,15 @@ sub end_startouttext { $result.=&Apache::edit::start_table($token)."" .''; - unless ($env{'environment.wysiwygeditor'} eq 'on') { - $result .= '' - .''; - } - $result.='' + .'' + .'' + .'
'; + '
'; } sub problem_edit_footer { return '

'. - - &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()). "\n\n".&Apache::loncommon::end_page(); } @@ -435,12 +434,14 @@ sub problem_web_to_edit_header { my $show_all_foils_text = ($Apache::lonhomework::parsing_a_task) ? - &mt(' Show All Instances') - : &mt(' Show All Foils'); + &mt('Show All Instances') + : &mt('Show All Foils'); - my $show_all= ''; + $show_all.= ' /> '.$show_all_foils_text + .''; @@ -466,6 +467,9 @@ sub problem_web_to_edit_header { ".&option('exam' ,'problemtype').&mt("Exam Problem")." ".&option('problem','problemtype').&mt("Homework Problem")." ".&option('survey' ,'problemtype').&mt("Survey Question")." + ".&option('surveycred' ,'problemtype').&mt("Survey Question (with credit)")." + ".&option('anonsurvey' ,'problemtype').&mt("Anonymous Survey Question")." + ".&option('anonsurveycred' ,'problemtype').&mt("Anonymous Survey Question (with credit)")." ".&option('practice' ,'problemtype').&mt("Practice Problem")." @@ -513,7 +517,7 @@ $show_all -
+
@@ -537,7 +541,7 @@ $show_all $result.='
-
+
'; $result.=''; $result .= ''; $result.='
-
+
'.&Apache::lonxml::message_location().' '; return $result; @@ -624,9 +628,7 @@ sub finalize_storage { $result=&Apache::lonnet::cstore(\%Apache::lonhomework::results, $symb,$courseid,$domain,$name); &Apache::lonxml::debug('Store return message:'.$result); - if ($env{'request.role'} =~/^st/) { - &store_aggregates($symb,$courseid); - } + &store_aggregates($symb,$courseid); } } else { &Apache::lonxml::debug('Nothing to store'); @@ -646,7 +648,7 @@ item store_aggregates() sub store_aggregates { my ($symb,$courseid) = @_; - my %aggregate; + my (%aggregate,%anoncounter); my @parts; my $cdomain = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cname = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -656,28 +658,51 @@ sub store_aggregates { } } foreach my $part (@parts) { - if ($Apache::lonhomework::results{'resource.'.$part.'.award'} - eq 'APPROX_ANS' || - $Apache::lonhomework::results{'resource.'.$part.'.award'} - eq 'EXACT_ANS') { - $aggregate{$symb."\0".$part."\0correct"} = 1; + if ($env{'request.role'} =~/^st/) { + if ($Apache::lonhomework::results{'resource.'.$part.'.award'} + eq 'APPROX_ANS' || + $Apache::lonhomework::results{'resource.'.$part.'.award'} + eq 'EXACT_ANS') { + $aggregate{$symb."\0".$part."\0correct"} = 1; + } + if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) { + $aggregate{$symb."\0".$part."\0users"} = 1; + } else { + my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); + if ($last_reset) { + if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) { + $aggregate{$symb."\0".$part."\0users"} = 1; + } + } + } + $aggregate{$symb."\0".$part."\0attempts"} = 1; } - if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) { - $aggregate{$symb."\0".$part."\0users"} = 1; - } else { - my (undef,$last_reset) = &Apache::grades::get_last_resets($symb,$env{'request.course.id'},[$part]); - if ($last_reset) { - if (&Apache::grades::get_num_tries(\%Apache::lonhomework::history,$last_reset,$part) == 0) { - $aggregate{$symb."\0".$part."\0users"} = 1; + if (($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurvey') || + ($Apache::lonhomework::results{'resource.'.$part.'.type'} eq 'anonsurveycred')) { + $anoncounter{$symb."\0".$part} = 1; + my $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$Apache::lonhomework::results{'resource.'.$part.'.type'}}; + if ($needsrelease) { + my $curr_required = $env{'course.'.$env{'request.course.id'}.'.internal.releaserequired'}; + if ($curr_required eq '') { + &Apache::lonnet::update_released_required($needsrelease); + } else { + my ($currmajor,$currminor) = split(/\./,$curr_required); + my ($needsmajor,$needsminor) = split(/\./,$needsrelease); + if (($currmajor < $needsmajor) || ($currmajor == $needsmajor && $currminor < $needsminor)) { + &Apache::lonnet::update_released_required($needsrelease); + } } } } - $aggregate{$symb."\0".$part."\0attempts"} = 1; } if (keys (%aggregate) > 0) { &Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate, $cdomain,$cname); } + if (keys(%anoncounter) > 0) { + &Apache::lonnet::cinc('nohist_anonsurveys',\%anoncounter, + $cdomain,$cname); + } } sub checkout_msg { @@ -758,6 +783,7 @@ sub init_problem_globals { &Apache::lonhomework::reset_show_problem_status(); $Apache::lonhomework::ignore_response_errors=1; } + @Apache::functionplotresponse::callscripts=(); @Apache::inputtags::responselist = (); @Apache::inputtags::importlist = (); @Apache::inputtags::previous=(); @@ -785,6 +811,7 @@ sub reset_problem_globals { undef($Apache::lonhomework::type); undef($Apache::lonhomework::scantronmode); undef($Apache::lonhomework::ignore_response_errors); + undef(@Apache::functionplotresponse::callscripts); &Apache::lonhomework::reset_show_problem_status(); } @@ -888,17 +915,6 @@ sub start_problem { if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval); } if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { - #handle exam checkout - if ($Apache::lonhomework::type eq 'exam') { - my $token= - $Apache::lonhomework::history{"resource.0.outtoken"}; - if (($env{'form.doescheckout'}) && (!$token)) { - $token=&Apache::lonxml::maketoken(); - $Apache::lonhomework::history{"resource.0.outtoken"}= - $token; - } - $result.=&Apache::lonxml::printtokenheader($target,$token); - } if ($env{'form.markaccess'}) { my @interval=&Apache::lonnet::EXT("resource.0.interval"); &Apache::lonnet::set_first_access($interval[1]); @@ -918,13 +934,14 @@ sub start_problem { value="'.$env{'form.username'}.'" />'; } if ($env{'request.role.adv'}) { - $form_tag_start.= - ' '; } if ($Apache::lonhomework::type eq 'practice') { $form_tag_start.=&practice_problem_header(); @@ -1119,7 +1136,9 @@ sub end_problem { '\textit{'.$duedate_text.'} '.$toc_line; } else { $frontmatter.= $begin_doc.$toc_line; - if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { $frontmatter .= '\fbox{\textit{'.$weight.' pt}}';} + if ($Apache::lonhomework::type eq 'exam' and $allow_print_points==1) { + $frontmatter .= '\fbox{\textit{'.$weight.' pt}}'; + } } } else { $frontmatter .= '\vskip 1mm\textit{'.$duedate_text.'} \\\\\\\\'.$startminipage; @@ -1127,7 +1146,9 @@ sub end_problem { } else { if (not $env{'request.symb'} =~ m/\.page_/) { $frontmatter .= $begin_doc.$toc_line; - if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { $frontmatter .= '\fbox{\textit{'.$weight.' pt}}';} + if (($Apache::lonhomework::type eq 'exam') and ($allow_print_points==1)) { + $frontmatter .= '\fbox{\textit{'.$weight.' pt}}'; + } } else { $frontmatter .= '\vskip 1mm \\\\\\\\'.$startminipage; } @@ -1163,7 +1184,6 @@ sub end_problem { if ($target ne 'tex' && $env{'form.answer_output_mode'} ne 'tex') { $result.=""; - $result.= &Apache::lonhtmlcommon::htmlareaselectactive(&Apache::lonhtmlcommon::get_htmlareafields()); } if ($target eq 'web') { $result.= &Apache::loncommon::end_page({'discussion' => 1}); @@ -1184,6 +1204,9 @@ sub end_problem { } } } + if ($target eq 'web') { + $result.=&Apache::functionplotresponse::init_script(); + } if ($target eq 'grade') { &Apache::lonhomework::showhash(%Apache::lonhomework::results); &finalize_storage(); @@ -1480,7 +1503,7 @@ sub start_instructorcomment { if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze' || $target eq 'webgrade') { - $result=($env{'request.role'}=~/^(in|cc|au|ca|li)/); + $result=($env{'request.role'}=~/^(in|cc|co|au|ca|li)/); if ( (! $result) or ($env{'form.instructor_comments'} eq 'hide')) { my $skip=&Apache::lonxml::get_all_text("/instructorcomment", $parser,$style); @@ -1685,6 +1708,49 @@ sub ordered_show_check { return $in_order_show; } + +sub start_startpartmarker { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result=''; + if ($target eq 'edit') { + $result=&Apache::edit::tag_start($target,$token); + $result.=&mt('Marker for the start of a part. Place end marker below to wrap in-between tags into a new part.').'
".&mt('Text Block')."'.&mt('Delete?').' ' .&Apache::edit::deletelist($target,$token) - .'' - .&Apache::lonhtmlcommon::dragmath_button($areaid,1) - .'' - .&Apache::edit::insertlist($target,$token) - .'' . - &Apache::loncommon::helpLatexCheatsheet(). + .'' + .&Apache::lonhtmlcommon::dragmath_button($areaid,1) + .'' + .&Apache::edit::insertlist($target,$token) + .'' . + &Apache::loncommon::helpLatexCheatsheet(). &Apache::edit::end_row(). &Apache::edit::start_spanning_row()."\n". &Apache::edit::editfield($token->[1],$text,"",80,8,1);