--- loncom/interface/loncommon.pm 2003/09/11 22:37:54 1.116 +++ loncom/interface/loncommon.pm 2003/10/17 15:13:49 1.132 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.116 2003/09/11 22:37:54 albertel Exp $ +# $Id: loncommon.pm,v 1.132 2003/10/17 15:13:49 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -68,6 +68,8 @@ use POSIX qw(strftime mktime); use Apache::Constants qw(:common :http :methods); use Apache::lonmsg(); use Apache::lonmenu(); +use Apache::lonlocal; + my $readit; =pod @@ -78,6 +80,7 @@ my $readit; # ----------------------------------------------- Filetypes/Languages/Copyright my %language; +my %supported_language; my %cprtag; my %fe; my %fd; my %category_extensions; @@ -144,8 +147,11 @@ BEGIN { while (<$fh>) { next if /^\#/; chomp; - my ($key,$two,$country,$three,$enc,$val)=(split(/\t/,$_)); + my ($key,$two,$country,$three,$enc,$val,$sup)=(split(/\t/,$_)); $language{$key}=$val.' - '.$enc; + if ($sup) { + $supported_language{$key}=$sup; + } } } } @@ -346,17 +352,18 @@ sub selectstudent_link { return ''; } return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele. - '","'.$udomele.'");'."'>Select User</a>"; + '","'.$udomele.'");'."'>".&mt('Select User')."</a>"; } if ($ENV{'request.role'}=~/^(au|dc|su)/) { return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele. - '","'.$udomele.'",1);'."'>Select User</a>"; + '","'.$udomele.'",1);'."'>".&mt('Select User')."</a>"; } return ''; } sub coursebrowser_javascript { - return (<<'ENDSTDBRW'); + my ($domainfilter)=@_; + return (<<ENDSTDBRW); <script type="text/javascript" language="Javascript" > var stdeditbrowser; function opencrsbrowser(formname,uname,udom) { @@ -367,6 +374,12 @@ sub coursebrowser_javascript { url += 'filter='+filter+'&'; } } + var domainfilter='$domainfilter'; + if (domainfilter != null) { + if (domainfilter != '') { + url += 'domainfilter='+domainfilter+'&'; + } + } url += 'form=' + formname + '&cnumelement='+uname+ '&cdomelement='+udom; var title = 'Course_Browser'; @@ -382,7 +395,7 @@ ENDSTDBRW sub selectcourse_link { my ($form,$unameele,$udomele)=@_; return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele. - '","'.$udomele.'");'."'>Select Course</a>"; + '","'.$udomele.'");'."'>".&mt('Select Course')."</a>"; } =pod @@ -514,7 +527,7 @@ END foreach my $value (sort(keys(%$hashref))) { $result.=" <option value=\"$value\" "; $result.=" selected=\"true\" " if ($value eq $firstdefault); - $result.=">$hashref->{$value}->{'text'}</option>\n"; + $result.=">".&mt($hashref->{$value}->{'text'})."</option>\n"; } $result .= "</select>\n"; my %select2 = %{$hashref->{$firstdefault}->{'select2'}}; @@ -524,7 +537,7 @@ END foreach my $value (sort(keys(%select2))) { $result.=" <option value=\"$value\" "; $result.=" selected=\"true\" " if ($value eq $seconddefault); - $result.=">$select2{$value}</option>\n"; + $result.=">".&mt($select2{$value})."</option>\n"; } $result .= "</select>\n"; # return $debug; @@ -762,10 +775,16 @@ See lonrights.pm for an example invocati sub select_form { my ($def,$name,%hash) = @_; my $selectform = "<select name=\"$name\" size=\"1\">\n"; - foreach (sort keys %hash) { + my @keys; + if (exists($hash{'select_form_order'})) { + @keys=@{$hash{'select_form_order'}}; + } else { + @keys=sort(keys(%hash)); + } + foreach (@keys) { $selectform.="<option value=\"$_\" ". ($_ eq $def ? 'selected' : ''). - ">".$hash{$_}."</option>\n"; + ">".&mt($hash{$_})."</option>\n"; } $selectform.="</select>"; return $selectform; @@ -1503,7 +1522,10 @@ returns description of a specified langu =cut sub languagedescription { - return $language{shift(@_)}; + my $code=shift; + return ($supported_language{$code}?'* ':''). + $language{$code}. + ($supported_language{$code}?' ('.&mt('interface available').')':''); } =pod @@ -1611,16 +1633,8 @@ sub fileextensions { sub display_languages { my %languages=(); - if ($ENV{'environment.languages'}) { - foreach (split(/\s*(\,|\;|\:)\s*/,$ENV{'environment.languages'})) { - $languages{$_}=1; - } - } - if ($ENV{'course.'.$ENV{'request.course.id'}.'.languages'}) { - foreach (split(/\s*(\,|\;|\:)\s*/, - $ENV{'course.'.$ENV{'request.course.id'}.'.languages'})) { - $languages{$_}=1; - } + foreach (&preferred_languages()) { + $languages{$_}=1; } &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']); if ($ENV{'form.displaylanguage'}) { @@ -1631,6 +1645,45 @@ sub display_languages { return %languages; } +sub preferred_languages { + my @languages=(); + if ($ENV{'environment.languages'}) { + @languages=split(/\s*(\,|\;|\:)\s*/,$ENV{'environment.languages'}); + } + if ($ENV{'course.'.$ENV{'request.course.id'}.'.languages'}) { + @languages=(@languages,split(/\s*(\,|\;|\:)\s*/, + $ENV{'course.'.$ENV{'request.course.id'}.'.languages'})); + } + my $browser=(split(/\;/,$ENV{'HTTP_ACCEPT_LANGUAGE'}))[0]; + if ($browser) { + @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$browser)); + } + if ($Apache::lonnet::domain_lang_def{$ENV{'user.domain'}}) { + @languages=(@languages, + $Apache::lonnet::domain_lang_def{$ENV{'user.domain'}}); + } + if ($Apache::lonnet::domain_lang_def{$ENV{'request.role.domain'}}) { + @languages=(@languages, + $Apache::lonnet::domain_lang_def{$ENV{'request.role.domain'}}); + } + if ($Apache::lonnet::domain_lang_def{ + $Apache::lonnet::perlvar{'lonDefDomain'}}) { + @languages=(@languages, + $Apache::lonnet::domain_lang_def{ + $Apache::lonnet::perlvar{'lonDefDomain'}}); + } +# turn "en-ca" into "en-ca,en" + my @genlanguages; + foreach (@languages) { + unless ($_=~/\w/) { next; } + push (@genlanguages,$_); + if ($_=~/(\-|\_)/) { + push (@genlanguages,(split(/(\-|\_)/,$_))[0]); + } + } + return @genlanguages; +} + ############################################################### ## Student Answer Attempts ## ############################################################### @@ -2059,6 +2112,7 @@ other decorations will be returned. sub bodytag { my ($title,$function,$addentries,$bodyonly,$domain,$forcereg)=@_; + $title=&mt($title); unless ($function) { $function='student'; if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { @@ -2287,6 +2341,14 @@ sub no_cache { #$r->header_out("Expires" => $date); } +sub content_type { + my ($r,$type,$charset) = @_; + unless ($charset) { + $charset=&Apache::lonlocal::current_encoding; + } + $r->content_type($type.($charset?'; charset='.$charset:'')); +} + =pod =item * add_to_env($name,$value) @@ -2610,6 +2672,62 @@ sub check_if_partid_hidden { return undef; } +############################################################ +############################################################ + +=pod + +=item DrawGraph + +Returns a link to cgi-bin/graph + +=cut + +############################################################ +############################################################ +sub DrawGraph { + my ($Title,$xlabel,$ylabel,$Max,$colors,@Values)=@_; + # + my $identifier = time.'_'.int(rand(1000)); + if (! @Values || ref($Values[0]) ne 'ARRAY') { + return ''; + } + my $NumBars = scalar(@{$Values[0]}); + my %ValuesHash; + my $NumSets=1; + foreach my $array (@Values) { + next if (! ref($array)); + $ValuesHash{'cgi.'.$identifier.'.data.'.$NumSets++} = + join(',',@$array); + } + # + $Title = '' if (! defined($Title)); + $xlabel = '' if (! defined($xlabel)); + $ylabel = '' if (! defined($ylabel)); + $Title = &Apache::lonnet::escape($Title); + $xlabel = &Apache::lonnet::escape($xlabel); + $ylabel = &Apache::lonnet::escape($ylabel); + # + $Max = 1 if ($Max < 1); + if ( int($Max) < $Max ) { + $Max++; + $Max = int($Max); + } + # + &Apache::lonnet::appenv('cgi.'.$identifier.'.title' => $Title, + 'cgi.'.$identifier.'.xlabel' => $xlabel, + 'cgi.'.$identifier.'.ylabel' => $ylabel, + 'cgi.'.$identifier.'.Max' => $Max, + 'cgi.'.$identifier.'.NumBars' => $NumBars, + 'cgi.'.$identifier.'.NumSets' => $NumSets, + 'cgi.'.$identifier.'.Colors' => join(',',@{$colors}), + %ValuesHash); + return '<img src="/cgi-bin/graph.png?'.$identifier.'" border="1" />'; +} + +############################################################ +############################################################ + =pod =back