--- loncom/interface/statistics/lonproblemstatistics.pm 2009/03/05 09:12:14 1.117 +++ loncom/interface/statistics/lonproblemstatistics.pm 2013/10/01 17:52:03 1.123 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonproblemstatistics.pm,v 1.117 2009/03/05 09:12:14 bisitz Exp $ +# $Id: lonproblemstatistics.pm,v 1.123 2013/10/01 17:52:03 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,6 +52,7 @@ package Apache::lonproblemstatistics; use strict; use Apache::lonnet; use Apache::loncommon(); +use Apache::lonquickgrades(); use Apache::lonhtmlcommon; use Apache::loncoursedata; use Apache::lonstatistics; @@ -73,6 +74,14 @@ my %SeqStat; # keys are symbs, values ## header for plots created with Graph.pm, both of which more than likely do ## not support localization. ## +## Additional Notes: +## Localization can be done and is done before passing the phrases +## to the output. +## This might conflict with special characters, e.g. German Umlaute or +## chinese characters. Do not use such characters in this case. +## If this failed, consider that the sequence and folder names +## are also passed to the output and would fail the same way. +## # # ## @@ -84,7 +93,7 @@ my %SeqStat; # keys are symbs, values ## title yes any scalar This is what the user sees to identify ## the field. Passed through &mt(). ## long_title yes any scalar Used as graph heading and in excel -## output. NOT translated +## output. Passed through &mt(). ## align no (left|right|center) HTML cell contents alignment ## color yes html color HTML cell background color ## used to visually group statistics @@ -274,7 +283,7 @@ my @Fields = ( sortable => 'yes', graphable => 'yes', long_title => 'Degree of Difficulty'. - '[ 1 - ((#YES+#yes) / Tries) ]', + ' { 1 - ((#YES+#yes) / Tries) }', selectable => 'yes', defaultselected => 'yes', }, @@ -610,8 +619,6 @@ sub CreateInterface { &parse_field_selection(); # my $Str = ''; - $Str .= &Apache::lonhtmlcommon::breadcrumbs('Overall Problem Statistics', - 'Statistics_Overall_Key'); $Str .= '

'; $Str .= &Apache::loncommon::start_data_table(); $Str .= &Apache::loncommon::start_data_table_header_row(); @@ -645,12 +652,6 @@ sub CreateInterface { $Str .= &Apache::loncommon::end_data_table_row(); $Str .= &Apache::loncommon::end_data_table(); # - $Str .= '

' - .&mt('Status: [_1]', - '') - .'

'; - # $Str .= '

'; $Str .= ''; @@ -704,6 +705,10 @@ sub BuildProblemStatisticsPage { undef(%SeqStat); # # Finally let the user know we are here + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Overall Problem Statistics', + 'Statistics_Overall_Key')); + &Apache::lonquickgrades::startGradeScreen($r,'statistics'); + my $interface = &CreateInterface($r); $r->print($interface); $r->print(''.' 'x5); $r->rflush(); - $r->print('

'. + $r->print('

'. &Apache::lonstatistics::section_and_enrollment_description(). - '

'); + '

'); my $count = 0; foreach my $seq (@sequences) { my @resources = @@ -762,11 +767,11 @@ sub BuildProblemStatisticsPage { $count += scalar(@resources); } if ($count > 10) { - $r->print('

'. - &mt('Compiling statistics for [_1] problems',$count). - '

'); + $r->print('

'. + &mt('Compiling statistics for [quant,_1,problem]',$count). + '

'); if ($count > 30) { - $r->print('

'.&mt('This will take some time.').'

'); + $r->print('

'.&mt('This will take some time.').'

'); } $r->rflush(); } @@ -798,17 +803,15 @@ sub output_sequence_statistics { $r->print('

'.&mt('Sequence Statistics'). &Apache::loncommon::help_open_topic('Statistics_Sequence'). '

'); - $r->print('
'."\n". - ''."\n". - ''); + $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row()); $r->print(&sequence_html_header()); + $r->print(&Apache::loncommon::end_data_table_header_row()); foreach my $seq (@sequences) { last if ($c->aborted); &compute_sequence_statistics($seq); $r->print(&sequence_html_output($seq)); } - $r->print('
'); - $r->print('
'); + $r->print(&Apache::loncommon::end_data_table()); $r->rflush(); return; } @@ -824,22 +827,22 @@ sub output_sequence_statistics { sub output_html_by_sequence { my ($r) = @_; my $c = $r->connection(); - $r->print(&html_preamble()); + $r->print('
'.&html_preamble()); # foreach my $seq (@sequences) { last if ($c->aborted); $r->print("

".$seq->compTitle."

". - '
'."\n". - ''."\n". - ''. - &statistics_table_header('no container')."\n"); + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + &statistics_table_header('no container'). + &Apache::loncommon::end_data_table_header_row()."\n"); my @Data = &compute_statistics_on_sequence($seq); foreach my $data (@Data) { - $r->print(''.&statistics_html_table_data($data, - 'no container'). - "\n"); + $r->print(&Apache::loncommon::start_data_table_row(). + &statistics_html_table_data($data,'no container'). + &Apache::loncommon::end_data_table_row()."\n"); } - $r->print('
'."\n".'
'."\n"); + $r->print(&Apache::loncommon::end_data_table()."\n"); $r->rflush(); } return; @@ -854,17 +857,17 @@ sub output_html_stats { my $count=0; foreach my $data (@StatsArray) { if ($count++ % 50 == 0) { - $r->print("\n\n"); - $r->print('
'."\n". - ''."\n". - ''. - ''. - &statistics_table_header(). - "\n"); - } - $r->print(''.&statistics_html_table_data($data)."\n"); + $r->print(&Apache::loncommon::end_data_table()); + $r->print(&Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_row(). + &statistics_table_header(). + &Apache::loncommon::end_data_table_row()); + } + $r->print(&Apache::loncommon::start_data_table_row(). + &statistics_html_table_data($data). + &Apache::loncommon::end_data_table_row()); } - $r->print("
\n
\n"); + $r->print(&Apache::loncommon::end_data_table_row()); return; } @@ -881,8 +884,8 @@ sub html_preamble { &Apache::lonlocal::locallocaltime($endtime) ).''; } - $Str .= "

".&mt('Compiled on [_1]', - &Apache::lonlocal::locallocaltime(time))."

"; + $Str .= "

".&mt('Compiled on [_1]', + &Apache::lonlocal::locallocaltime(time))."

"; return $Str; } @@ -900,7 +903,7 @@ sub statistics_html_table_data { foreach my $field (@Fields) { next if ($options =~ /no $field->{'name'}/); next if ($field->{'selected'} ne 'yes'); - $row .= '{'color'}.'"'; if (exists($field->{'align'})) { $row .= ' align="'.$field->{'align'}.'"'; } @@ -1012,15 +1015,15 @@ sub make_single_stat_plot { my $title; my $yaxis; foreach my $field (@Fields) { next if ($field->{'name'} ne $datafield); - $title = $field->{'long_title'}; - $yaxis = $field->{'title'}; + $title = &mt($field->{'long_title'}); + $yaxis = &mt($field->{'title'}); last; } if ($title eq '' || $yaxis eq '') { # datafield is something we do not know enough about to plot - $r->print('

'. + $r->print('

'. &mt('Unable to plot the requested statistic.'). - '

'); + '

'); return; } # @@ -1047,7 +1050,7 @@ sub make_single_stat_plot { } # $r->print("

".&Apache::loncommon::DrawBarGraph($title, - 'Problem Number', + &mt('Problem Number'), $yaxis, $max, undef, # colors @@ -1112,10 +1115,14 @@ sub degrees_plot { my $diffdata .= ''.join(',',@Labels).''.$/. ''.join(',',@Diff).''.$/; # - my $title = 'Degree of Discrimination\nand Degree of Difficulty'; + my $title = &mt('Degree of Discrimination[_1]and Degree of Difficulty','\n'); if ($xmax > 50) { - $title = 'Degree of Discrimination and Degree of Difficulty'; + $title = &mt('Degree of Discrimination and Degree of Difficulty'); } + my %lt = &Apache::lonlocal::texthash( + 'alttag' => 'Degree of Discrimination and Degree of Difficulty Plot', + 'xlabel' => 'Problem Number', + ); # $plot=<<"END"; $title - Problem Number + $lt{'xlabel'} '.join(',',@Mean).''.$/. ''.join(',',@STD).''.$/; # - my $title = 'Mean and S.D. of Tries'; - if ($xmax > 25) { - $title = 'Mean and Standard Deviation of Tries'; + my $title = &mt('Mean and S.D. of Tries'); + if ($xmax > 30) { + $title = &mt('Mean and Standard Deviation of Tries'); } # + my %lt = &Apache::lonlocal::texthash( + 'alttag' => 'Mean and S.D of Tries Plot', + 'xlabel' => 'Problem Number', + 'ylabel' => 'Number of Tries', + ); $plot=<<"END"; $title - Problem Number - Number of Tries + $lt{'xlabel'} + $lt{'ylabel'} '; $Str .= ''."\n"; - $Str .= ''."\n"; + $Str .= ''."\n"; foreach my $field (@Additional_Plots,@Fields) { if (! exists($field->{'graphable'}) || $field->{'graphable'} ne 'yes') { @@ -1271,9 +1284,11 @@ sub plot_dropdown { } $Str .= ''."\n"; + $title = &mt($field->{'long_title'}); + $title = &mt($field->{'title'}) if (!$title); + $Str.= '>'.$title.''."\n"; } $Str .= ''."\n"; return $Str; @@ -1457,7 +1472,7 @@ sub compute_statistics_on_sequence { my @Data; foreach my $res (&Apache::lonstathelpers::get_resources($navmap,$seq)) { foreach my $part (@{$res->parts}) { - next if ($res->is_survey($part)); + next if (($res->is_survey($part)) || ($res->is_anonsurvey($part))) ; # # This is where all the work happens my $data = &get_statistics($seq,$res,$part,scalar(@StatsArray)+1); @@ -1592,7 +1607,6 @@ sub get_statistics { $data->{'sections'}=$sections; $data->{'course'} = $env{'request.course.id'}; my $urlres=(&Apache::lonnet::decode_symb($resource->symb))[2]; - $data->{'urlres'}=$urlres; my %storestats = &LONCAPA::lonmetadata::dynamic_metadata_storage($data); my ($dom,$user) = ($urlres=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)});