--- loncom/interface/lonhelper.pm 2003/09/29 16:33:09 1.48 +++ loncom/interface/lonhelper.pm 2004/03/31 05:23:59 1.67 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.48 2003/09/29 16:33:09 bowersj2 Exp $ +# $Id: lonhelper.pm,v 1.67 2004/03/31 05:23:59 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -172,12 +172,20 @@ before parsing XML fragments and B # mod_perl connection. In this code, it was manifesting itself in the existence -# of two seperate file-scoped $helper variables, one set to the value of the +# of two separate file-scoped $helper variables, one set to the value of the # helper in the helper constructor, and one referenced by the handler on the # "$helper->process()" line. Using the debugger, one could actually # see the two different $helper variables, as hashes at completely @@ -257,9 +265,9 @@ sub real_handler { # Send header, don't cache this page if ($r->header_only) { if ($ENV{'browser.mathml'}) { - $r->content_type('text/xml'); + $r->content_type('text/xml; charset=UTF-8'); } else { - $r->content_type('text/html'); + $r->content_type('text/html; charset=UTF-8'); } $r->send_http_header; return OK; @@ -359,9 +367,10 @@ sub end_state { package Apache::lonhelper::helper; use Digest::MD5 qw(md5_hex); -use HTML::Entities; +use HTML::Entities(); use Apache::loncommon; use Apache::File; +use Apache::lonlocal; sub new { my $proto = shift; @@ -453,11 +462,11 @@ sub _saveVars { my $self = shift; my $result = ""; $result .= '\n"; + HTML::Entities::encode($self->{STATE},'<>&"') . "\" />\n"; $result .= '\n"; $result .= '\n"; + HTML::Entities::encode($self->{RETURN_PAGE},'<>&"') . "\" />\n"; return $result; } @@ -523,7 +532,7 @@ sub process { # Phase 1: Post processing for state of previous screen (which is actually # the "current state" in terms of the helper variables), if it wasn't the # beginning state. - if ($self->{STATE} ne "START" || $ENV{"form.SUBMIT"} eq "Next ->") { + if ($self->{STATE} ne "START" || $ENV{"form.SUBMIT"} eq &mt("Next ->")) { my $prevState = $self->{STATES}{$self->{STATE}}; $prevState->postprocess(); } @@ -574,13 +583,19 @@ sub display { } # Phase 4: Display. - my $stateTitle = $state->title(); - my $bodytag = &Apache::loncommon::bodytag("$self->{TITLE}",'',''); + my $stateTitle = &mt($state->title()); + my $helperTitle = &mt($self->{TITLE}); + my $bodytag = &Apache::loncommon::bodytag($helperTitle,'',''); + my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"'); + my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"'); + # FIXME: This should be parameterized, not concatenated - Jeremy + my $loncapaHelper = &mt("LON-CAPA Helper:"); $result .= < - LON-CAPA Helper: $self->{TITLE} + + $loncapaHelper: $helperTitle $bodytag HEADER @@ -607,12 +622,12 @@ HEADER } if ($self->{DONE}) { my $returnPage = $self->{RETURN_PAGE}; - $result .= "End Helper"; + $result .= "" . &mt("End Helper") . ""; } else { $result .= ' '; + $result .= ''; } } @@ -626,12 +641,12 @@ HEADER } if ($self->{DONE}) { my $returnPage = $self->{RETURN_PAGE}; - $result .= "End Helper"; + $result .= "" . &mt('End Helper') . ""; } else { $result .= ' '; + $result .= ''; } } @@ -883,6 +898,7 @@ sub start_defaultvalue { sub end_defaultvalue { return ''; } +# Validators may need to take language specifications sub start_validator { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; @@ -952,11 +968,17 @@ within each other.) This is also a good template for creating your own new states, as it has very little code beyond the state template. +=head3 Localization + +The contents of the message tag will be run through the +normalize_string function and that will be used as a call to &mt. + =cut no strict; @ISA = ("Apache::lonhelper::element"); use strict; +use Apache::lonlocal; BEGIN { &Apache::lonhelper::register('Apache::lonhelper::message', @@ -998,7 +1020,7 @@ sub end_message { sub render { my $self = shift; - return $self->{MESSAGE_TEXT}; + return &mtn($self->{MESSAGE_TEXT}); } # If a NEXTSTATE was given, switch to it sub postprocess { @@ -1100,6 +1122,7 @@ tag is stored in the {VARS} hash. no strict; @ISA = ("Apache::lonhelper::element"); use strict; +use Apache::lonlocal; BEGIN { &Apache::lonhelper::register('Apache::lonhelper::choices', @@ -1241,7 +1264,7 @@ BUTTONS $result .= "\n \n"; $result .= "&"') . "'"; if ($checkedChoices{$choice->[1]}) { $result .= " checked "; @@ -1253,7 +1276,7 @@ BUTTONS $choiceLabel = eval($choiceLabel); $choiceLabel = &$choiceLabel($helper, $self); } - $result .= "/> " . $choiceLabel . "\n"; + $result .= "/> " . &mtn($choiceLabel) . "\n"; } $result .= "\n\n\n"; $result .= $buttons; @@ -1268,8 +1291,8 @@ sub postprocess { my $chosenValue = $ENV{'form.' . $self->{'variable'} . '.forminput'}; if (!defined($chosenValue) && !$self->{'allowempty'}) { - $self->{ERROR_MSG} = "You must choose one or more choices to" . - " continue."; + $self->{ERROR_MSG} = + &mt("You must choose one or more choices to continue."); return 0; } @@ -1312,9 +1335,13 @@ the result is stored in. =cut +# This really ought to be a sibling class to "choice" which is itself +# a child of some abstract class.... *shrug* + no strict; @ISA = ("Apache::lonhelper::element"); use strict; +use Apache::lonlocal; BEGIN { &Apache::lonhelper::register('Apache::lonhelper::dropdown', @@ -1392,7 +1419,7 @@ sub render { $result .= "\n"; @@ -1473,6 +1500,7 @@ Example: no strict; @ISA = ("Apache::lonhelper::element"); use strict; +use Apache::lonlocal; # A localization nightmare use Time::localtime; @@ -1537,7 +1565,7 @@ sub render { } else { $result .= "\n"; + $result .= &mt($months[$i]) . "\n"; } $result .= "\n"; @@ -1567,25 +1595,28 @@ sub render { # Display Hours and Minutes if they are called for if ($self->{'hoursminutes'}) { + # This needs parameterization for times. + my $am = &mt('a.m.'); + my $pm = &mt('p.m.'); # Build hour $result .= " - + + + + +  +
BUTTONS } @@ -2103,17 +2167,20 @@ BUTTONS if (!$self->{'activeonly'} || $classlist->{$_}->[$status] eq 'Active') { push @$choices, [$_, $classlist->{$_}->[$fullname], - $classlist->{$_}->[$section], 'Student']; + $classlist->{$_}->[$section], + $classlist->{$_}->[$status], 'Student']; } } - my $name = $self->{'coursepersonnel'} ? 'Name' : 'Student Name'; + my $name = &mt($self->{'coursepersonnel'} ? 'Name' : 'Student Name'); my $type = 'radio'; if ($self->{'multichoice'}) { $type = 'checkbox'; } $result .= "\n"; $result .= "". - "" . - ""; + "" . + "" . + "" . + ""; my $checked = 0; for my $choice (@$choices) { @@ -2125,13 +2192,18 @@ BUTTONS $checked = 1; } $result .= - " value='" . HTML::Entities::encode($choice->[0] . ':' . $choice->[2]) + " value='" . HTML::Entities::encode($choice->[0] . ':' . $choice->[2] . ':' . $choice->[1] . ':' . $choice->[3],'<>&"') . "' />\n\n\n\n"; + . HTML::Entities::encode($choice->[0],'<>&"') + . "\n"; } $result .= "
$nameSectionRole
" . &mt('Section') . "Status" . &mt("Role") . "
Username:Domain
" - . HTML::Entities::encode($choice->[1]) + . HTML::Entities::encode($choice->[1],'<>&"') . "" - . HTML::Entities::encode($choice->[2]) + . HTML::Entities::encode($choice->[2],'<>&"') + . "" + . HTML::Entities::encode($choice->[3],'<>&"') + . "" + . HTML::Entities::encode($choice->[4],'<>&"') . "" - . HTML::Entities::encode($choice->[3]) . "
\n\n"; @@ -2145,8 +2217,8 @@ sub postprocess { my $result = $ENV{'form.' . $self->{'variable'} . '.forminput'}; if (!$result) { - $self->{ERROR_MSG} = 'You must choose at least one student '. - 'to continue.'; + $self->{ERROR_MSG} = + &mt('You must choose at least one student to continue.'); return 0; } @@ -2212,6 +2284,7 @@ viewing the files. no strict; @ISA = ("Apache::lonhelper::element"); use strict; +use Apache::lonlocal; use Apache::lonpubdir; # for getTitleString @@ -2330,16 +2403,20 @@ sub render { } SCRIPT + my $selectAllFiles = &mt("Select All Files"); + my $unselectAllFiles = &mt("Unselect All Files"); $buttons = <   - - + + BUTTONS + my $selectAllPublished = &mt("Select All Published"); + my $unselectAllPublished= &mt("UnselectAllPublished"); if ($helper->{VARS}->{'construction'}) { $buttons .= < - + +
  BUTTONS } @@ -2421,7 +2498,7 @@ BUTTONS } $result .= '" . "&"'). "'"; if (!$self->{'multichoice'} && $choices == 0) { $result .= ' checked'; @@ -2830,7 +2907,7 @@ the old values taking effect. no strict; @ISA = ("Apache::lonhelper::element"); use strict; - +use Apache::lonlocal; BEGIN { &Apache::lonhelper::register('Apache::lonhelper::final', ('final', 'exitpage')); @@ -2915,7 +2992,8 @@ sub render { } if (!@results) { - $result .= '
  • No changes were made to current settings.
  • '; + $result .= '
  • ' . + &mt('No changes were made to current settings.') . '
  • '; } $result .= ''; @@ -2923,16 +3001,24 @@ sub render { if ($self->{'restartCourse'}) { my $targetURL = '/adm/menu'; + if ($ENV{'course.'.$ENV{'request.course.id'}.'.url'}=~/^uploaded/) { + $targetURL = '/adm/coursedocs'; + } else { + $targetURL = '/adm/navmaps'; + } if ($ENV{'course.'.$ENV{'request.course.id'}.'.clonedfrom'}) { $targetURL = '/adm/parmset?overview=1'; } + my $previous = HTML::Entities::encode(&mt("<- Previous"), '<>&"'); + my $next = HTML::Entities::encode(&mt("Next ->"), '<>&"'); $result .= "
    \n" . "
    \n" . - "" . + "" . "" . "\n" . "\n\n" . + "' value='1' />\n\n" . "
    "; } @@ -3035,7 +3121,7 @@ sub render { } my $result = "
    \n"; - $result .= '

    Confirm that this information is correct, then click "Finish Wizard" to complete setting the parameter.

      '; + $result .= '

      Confirm that this information is correct, then click "Finish Helper" to complete setting the parameter.

        '; # Print the type of manipulation: $result .= '
      • Setting the ' . $dateTypeHash{$vars->{ACTION_TYPE}} . ''; @@ -3080,7 +3166,7 @@ sub render { $result .= "
      • for section $section
      • "; $level -= 3; $result .= "\n"; + HTML::Entities::encode($section,'<>&"') . "' />\n"; } else { # FIXME: This is probably wasteful! Store the name! my $classlist = Apache::loncoursedata::get_classlist(); @@ -3092,9 +3178,9 @@ sub render { $level -= 6; my ($uname, $udom) = split /:/, $vars->{USER_NAME}; $result .= "\n"; + HTML::Entities::encode($uname,'<>&"') . "' />\n"; $result .= "\n"; + HTML::Entities::encode($udom,'<>&"') . "' />\n"; } # Print value