--- loncom/interface/loncommon.pm 2003/08/20 18:18:45 1.112
+++ loncom/interface/loncommon.pm 2003/09/17 16:50:58 1.119
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.112 2003/08/20 18:18:45 bowersj2 Exp $
+# $Id: loncommon.pm,v 1.119 2003/09/17 16:50:58 www 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
@@ -346,11 +348,11 @@ sub selectstudent_link {
return '';
}
return "Select User";
+ '","'.$udomele.'");'."'>".&mt('Select User')."";
}
if ($ENV{'request.role'}=~/^(au|dc|su)/) {
return "Select User";
+ '","'.$udomele.'",1);'."'>".&mt('Select User')."";
}
return '';
}
@@ -382,7 +384,7 @@ ENDSTDBRW
sub selectcourse_link {
my ($form,$unameele,$udomele)=@_;
return "Select Course";
+ '","'.$udomele.'");'."'>".&mt('Select Course')."";
}
=pod
@@ -514,7 +516,7 @@ END
foreach my $value (sort(keys(%$hashref))) {
$result.=" \n";
+ $result.=">".&mt($hashref->{$value}->{'text'})."\n";
}
$result .= "\n";
my %select2 = %{$hashref->{$firstdefault}->{'select2'}};
@@ -524,7 +526,7 @@ END
foreach my $value (sort(keys(%select2))) {
$result.=" \n";
+ $result.=">".&mt($select2{$value})."\n";
}
$result .= "\n";
# return $debug;
@@ -624,8 +626,6 @@ sub helpLatexCheatsheet {
Translate $text to allow it to be output as a 'comma seperated values'
format.
-=back
-
=cut
sub csv_translate {
@@ -635,6 +635,91 @@ sub csv_translate {
return $text;
}
+=pod
+
+=item * change_content_javascript():
+
+This and the next function allow you to create small sections of an
+otherwise static HTML page that you can update on the fly with
+Javascript, even in Netscape 4.
+
+The Javascript fragment returned by this function (no EscriptE tag)
+must be written to the HTML page once. It will prove the Javascript
+function "change(name, content)". Calling the change function with the
+name of the section
+you want to update, matching the name passed to C, and
+the new content you want to put in there, will put the content into
+that area.
+
+B: Netscape 4 only reserves enough space for the changable area
+to contain room for the original contents. You need to "make space"
+for whatever changes you wish to make, and be B to check your
+code in Netscape 4. This feature in Netscape 4 is B powerful;
+it's adequate for updating a one-line status display, but little more.
+This script will set the space to 100% width, so you only need to
+worry about height in Netscape 4.
+
+Modern browsers are much less limiting, and if you can commit to the
+user not using Netscape 4, this feature may be used freely with
+pretty much any HTML.
+
+=cut
+
+sub change_content_javascript {
+ # If we're on Netscape 4, we need to use Layer-based code
+ if ($ENV{'browser.type'} eq 'netscape' &&
+ $ENV{'browser.version'} =~ /^4\./) {
+ return (<. $name is
+the name you will use to reference the area later; do not repeat the
+same name on a given HTML page more then once. $origContent is what
+the area will originally contain, which can be left blank.
+
+=cut
+
+sub changable_area {
+ my ($name, $origContent) = @_;
+
+ if ($ENV{'browser.type'} eq 'netscape' &&
+ $ENV{'browser.version'} =~ /^4\./) {
+ # If this is netscape 4, we need to use the Layer tag
+ return "$origContent";
+ } else {
+ return "$origContent";
+ }
+}
+
+=pod
+
+=back
+
+=cut
+
###############################################################
## Home server \n";
+ ">".&mt($hash{$_})."\n";
}
$selectform.="";
return $selectform;
@@ -1528,16 +1613,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'}) {
@@ -1548,6 +1625,46 @@ 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]);
+ }
+ }
+ &Apache::lonnet::logthis('Lang: '.join(',',@genlanguages));
+ return @genlanguages;
+}
+
###############################################################
## Student Answer Attempts ##
###############################################################
@@ -1697,7 +1814,7 @@ show a snapshot of what student was look
sub get_student_view {
my ($symb,$username,$domain,$courseid,$target) = @_;
- my ($map,$id,$feedurl) = split(/___/,$symb);
+ my ($map,$id,$feedurl) = &Apache::lonnet::decode_symb($symb);
my (%old,%moreenv);
my @elements=('symb','courseid','domain','username');
foreach my $element (@elements) {
@@ -1733,7 +1850,7 @@ show a snapshot of how student was answe
sub get_student_answers {
my ($symb,$username,$domain,$courseid,%form) = @_;
- my ($map,$id,$feedurl) = split(/___/,$symb);
+ my ($map,$id,$feedurl) = &Apache::lonnet::decode_symb($symb);
my (%old,%moreenv);
my @elements=('symb','courseid','domain','username');
foreach my $element (@elements) {
@@ -1752,6 +1869,30 @@ sub get_student_answers {
=pod
+=item * &submlink()
+
+Inputs: $text $uname $udom $symb
+
+Returns: A link to grades.pm such as to see the SUBM view of a student
+
+=cut
+
+###############################################
+sub submlink {
+ my ($text,$uname,$udom,$symb)=@_;
+ if (!($uname && $udom)) {
+ (my $cursymb, my $courseid,$udom,$uname)=
+ &Apache::lonxml::whichuser($symb);
+ if (!$symb) { $symb=$cursymb; }
+ }
+ if (!$symb) { $symb=&symbread(); }
+ return ''.$text.'';
+}
+##############################################
+
+=pod
+
=back
=cut
@@ -1952,6 +2093,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)/) {
@@ -2459,6 +2601,23 @@ sub csv_samples_select_table {
}
=pod
+
+=item clean_excel_name($name)
+
+Returns a replacement for $name which does not contain any illegal characters.
+
+=cut
+
+sub clean_excel_name {
+ my ($name) = @_;
+ $name =~ s/[:\*\?\/\\]//g;
+ if (length($name) > 31) {
+ $name = substr($name,0,31);
+ }
+ return $name;
+}
+
+=pod
=item * check_if_partid_hidden($id,$symb,$udom,$uname)