version 1.141, 2003/11/03 21:29:23
|
version 1.169, 2004/01/02 19:23:47
|
Line 25
|
Line 25
|
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# YEAR=2001 |
|
# 2/13-12/7 Guy Albertelli |
|
# 12/21 Gerd Kortemeyer |
|
# 12/25,12/28 Gerd Kortemeyer |
|
# YEAR=2002 |
|
# 1/4 Gerd Kortemeyer |
|
# 6/24,7/2 H. K. Ng |
|
|
|
# Makes a table out of the previous attempts |
# Makes a table out of the previous attempts |
# Inputs result_from_symbread, user, domain, course_id |
# Inputs result_from_symbread, user, domain, course_id |
Line 73 use HTML::Entities;
|
Line 66 use HTML::Entities;
|
|
|
my $readit; |
my $readit; |
|
|
=pod |
## |
|
## Global Variables |
=head1 Global Variables |
## |
|
|
=cut |
|
|
|
# ----------------------------------------------- Filetypes/Languages/Copyright |
# ----------------------------------------------- Filetypes/Languages/Copyright |
my %language; |
my %language; |
Line 91 my %category_extensions;
|
Line 82 my %category_extensions;
|
my %designhash; |
my %designhash; |
|
|
# ---------------------------------------------- Thesaurus variables |
# ---------------------------------------------- Thesaurus variables |
|
# |
# FIXME: I don't think it's necessary to document these things; |
# %Keywords: |
# they're privately used - Jeremy |
# A hash used by &keyword to determine if a word is considered a keyword. |
|
# $thesaurus_db_file |
=pod |
# Scalar containing the full path to the thesaurus database. |
|
|
=over 4 |
|
|
|
=item * %Keywords |
|
|
|
A hash used by &keyword to determine if a word is considered a keyword. |
|
|
|
=item * $thesaurus_db_file |
|
|
|
Scalar containing the full path to the thesaurus database. |
|
|
|
=back |
|
|
|
=cut |
|
|
|
my %Keywords; |
my %Keywords; |
my $thesaurus_db_file; |
my $thesaurus_db_file; |
|
|
# ----------------------------------------------------------------------- BEGIN |
# |
|
# Initialize values from language.tab, copyright.tab, filetypes.tab, |
# FIXME: I don't think this needs to be documented, it prepares |
# thesaurus.tab, and filecategories.tab. |
# private data structures - Jeremy |
# |
=pod |
|
|
|
=head1 General Subroutines |
|
|
|
=over 4 |
|
|
|
=item * BEGIN() |
|
|
|
Initialize values from language.tab, copyright.tab, filetypes.tab, |
|
thesaurus.tab, and filecategories.tab. |
|
|
|
=back |
|
|
|
=cut |
|
|
|
# ----------------------------------------------------------------------- BEGIN |
|
|
|
BEGIN { |
BEGIN { |
# Variable initialization |
# Variable initialization |
$thesaurus_db_file = $Apache::lonnet::perlvar{'lonTabDir'}."/thesaurus.db"; |
$thesaurus_db_file = $Apache::lonnet::perlvar{'lonTabDir'}."/thesaurus.db"; |
Line 142 BEGIN {
|
Line 102 BEGIN {
|
unless ($readit) { |
unless ($readit) { |
# ------------------------------------------------------------------- languages |
# ------------------------------------------------------------------- languages |
{ |
{ |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. |
my $langtabfile = $Apache::lonnet::perlvar{'lonTabDir'}. |
'/language.tab'); |
'/language.tab'; |
if ($fh) { |
if ( open(my $fh,"<$langtabfile") ) { |
while (<$fh>) { |
while (<$fh>) { |
next if /^\#/; |
next if /^\#/; |
chomp; |
chomp; |
my ($key,$two,$country,$three,$enc,$val,$sup)=(split(/\t/,$_)); |
my ($key,$two,$country,$three,$enc,$val,$sup)=(split(/\t/,$_)); |
$language{$key}=$val.' - '.$enc; |
$language{$key}=$val.' - '.$enc; |
if ($sup) { |
if ($sup) { |
$supported_language{$key}=$sup; |
$supported_language{$key}=$sup; |
} |
} |
} |
} |
} |
close($fh); |
|
} |
} |
} |
# ------------------------------------------------------------------ copyrights |
# ------------------------------------------------------------------ copyrights |
{ |
{ |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonIncludes'}. |
my $copyrightfile = $Apache::lonnet::perlvar{'lonIncludes'}. |
'/copyright.tab'); |
'/copyright.tab'; |
if ($fh) { |
if ( open (my $fh,"<$copyrightfile") ) { |
while (<$fh>) { |
while (<$fh>) { |
next if /^\#/; |
next if /^\#/; |
chomp; |
chomp; |
my ($key,$val)=(split(/\s+/,$_,2)); |
my ($key,$val)=(split(/\s+/,$_,2)); |
$cprtag{$key}=$val; |
$cprtag{$key}=$val; |
} |
} |
} |
close($fh); |
|
} |
} |
} |
|
|
# -------------------------------------------------------------- domain designs |
# -------------------------------------------------------------- domain designs |
Line 178 BEGIN {
|
Line 140 BEGIN {
|
while ($filename=readdir(DIR)) { |
while ($filename=readdir(DIR)) { |
my ($domain)=($filename=~/^(\w+)\./); |
my ($domain)=($filename=~/^(\w+)\./); |
{ |
{ |
my $fh=Apache::File->new($designdir.'/'.$filename); |
my $designfile = $designdir.'/'.$filename; |
if ($fh) { |
if ( open (my $fh,"<$designfile") ) { |
while (<$fh>) { |
while (<$fh>) { |
next if /^\#/; |
next if /^\#/; |
chomp; |
chomp; |
my ($key,$val)=(split(/\=/,$_)); |
my ($key,$val)=(split(/\=/,$_)); |
if ($val) { $designhash{$domain.'.'.$key}=$val; } |
if ($val) { $designhash{$domain.'.'.$key}=$val; } |
} |
} |
} |
close($fh); |
|
} |
} |
} |
|
|
} |
} |
Line 195 BEGIN {
|
Line 158 BEGIN {
|
|
|
# ------------------------------------------------------------- file categories |
# ------------------------------------------------------------- file categories |
{ |
{ |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. |
my $categoryfile = $Apache::lonnet::perlvar{'lonTabDir'}. |
'/filecategories.tab'); |
'/filecategories.tab'; |
if ($fh) { |
if ( open (my $fh,"<$categoryfile") ) { |
while (<$fh>) { |
while (<$fh>) { |
next if /^\#/; |
next if /^\#/; |
chomp; |
chomp; |
my ($extension,$category)=(split(/\s+/,$_,2)); |
my ($extension,$category)=(split(/\s+/,$_,2)); |
push @{$category_extensions{lc($category)}},$extension; |
push @{$category_extensions{lc($category)}},$extension; |
} |
} |
} |
close($fh); |
|
} |
|
|
} |
} |
# ------------------------------------------------------------------ file types |
# ------------------------------------------------------------------ file types |
{ |
{ |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. |
my $typesfile = $Apache::lonnet::perlvar{'lonTabDir'}. |
'/filetypes.tab'); |
'/filetypes.tab'; |
if ($fh) { |
if ( open (my $fh,"<$typesfile") ) { |
while (<$fh>) { |
while (<$fh>) { |
next if (/^\#/); |
next if (/^\#/); |
chomp; |
chomp; |
my ($ending,$emb,$descr)=split(/\s+/,$_,3); |
my ($ending,$emb,$descr)=split(/\s+/,$_,3); |
if ($descr ne '') { |
if ($descr ne '') { |
$fe{$ending}=lc($emb); |
$fe{$ending}=lc($emb); |
$fd{$ending}=$descr; |
$fd{$ending}=$descr; |
} |
} |
} |
} |
} |
close($fh); |
|
} |
} |
} |
&Apache::lonnet::logthis( |
&Apache::lonnet::logthis( |
"<font color=yellow>INFO: Read file types</font>"); |
"<font color=yellow>INFO: Read file types</font>"); |
Line 246 containing javascript with two functions
|
Line 212 containing javascript with two functions
|
C<opensearcher>. Returned string does not contain E<lt>scriptE<gt> |
C<opensearcher>. Returned string does not contain E<lt>scriptE<gt> |
tags. |
tags. |
|
|
=over 4 |
|
|
|
=item * openbrowser(formname,elementname,only,omit) [javascript] |
=item * openbrowser(formname,elementname,only,omit) [javascript] |
|
|
inputs: formname, elementname, only, omit |
inputs: formname, elementname, only, omit |
Line 268 Inputs: formname, elementname
|
Line 232 Inputs: formname, elementname
|
formname and elementname specify the name of the html form and the name |
formname and elementname specify the name of the html form and the name |
of the element the selection from the search results will be placed in. |
of the element the selection from the search results will be placed in. |
|
|
=back |
|
|
|
=cut |
=cut |
|
|
sub browser_and_searcher_javascript { |
sub browser_and_searcher_javascript { |
Line 521 function select1_changed() {
|
Line 483 function select1_changed() {
|
// in with the nuclear |
// in with the nuclear |
for (i=0;i<values.length; i++) { |
for (i=0;i<values.length; i++) { |
$second.options[i] = new Option(values[i]); |
$second.options[i] = new Option(values[i]); |
|
$second.options[i].value = values[i]; |
$second.options[i].text = texts[i]; |
$second.options[i].text = texts[i]; |
if (values[i] == select2def) { |
if (values[i] == select2def) { |
$second.options[i].selected = true; |
$second.options[i].selected = true; |
Line 591 sub help_open_topic {
|
Line 554 sub help_open_topic {
|
my $template = ""; |
my $template = ""; |
my $link; |
my $link; |
|
|
|
$topic=~s/\W/\_/g; |
|
|
if (!$stayOnPage) |
if (!$stayOnPage) |
{ |
{ |
$link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))"; |
$link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))"; |
Line 761 sub get_domains {
|
Line 726 sub get_domains {
|
my @domains; |
my @domains; |
my %seen; |
my %seen; |
foreach (sort values(%Apache::lonnet::hostdom)) { |
foreach (sort values(%Apache::lonnet::hostdom)) { |
push (@domains,$_) unless $seen{$_}++; |
push (@domains,$_) unless $seen{$_}++; |
} |
} |
return @domains; |
return @domains; |
} |
} |
|
|
|
# ------------------------------------------ |
|
|
|
sub domain_select { |
|
my ($name,$value,$multiple)=@_; |
|
my %domains=map { |
|
$_ => $_.' '.$Apache::lonnet::domaindescription{$_} |
|
} &get_domains; |
|
if ($multiple) { |
|
$domains{''}=&mt('Any domain'); |
|
return &multiple_select_form($name,$value,%domains); |
|
} else { |
|
return &select_form($name,$value,%domains); |
|
} |
|
} |
|
|
|
sub multiple_select_form { |
|
my ($name,$value,%hash)=@_; |
|
my %selected = map { $_ => 1 } ref($value)?@{$value}:($value); |
|
my $output=''; |
|
my $size =(scalar keys %hash<4?scalar keys %hash:4); |
|
$output.="\n<select name='$name' size='$size' multiple='1'>"; |
|
foreach (sort keys %hash) { |
|
$output.="<option name='$_'". |
|
($selected{$_}?' selected="1"' :'').">$hash{$_}</option>\n"; |
|
} |
|
$output.="</select>\n"; |
|
return $output; |
|
} |
|
|
#------------------------------------------- |
#------------------------------------------- |
|
|
=pod |
=pod |
Line 797 sub select_form {
|
Line 791 sub select_form {
|
return $selectform; |
return $selectform; |
} |
} |
|
|
|
sub gradeleveldescription { |
|
my $gradelevel=shift; |
|
my %gradelevels=(0 => 'Not specified', |
|
1 => 'Grade 1', |
|
2 => 'Grade 2', |
|
3 => 'Grade 3', |
|
4 => 'Grade 4', |
|
5 => 'Grade 5', |
|
6 => 'Grade 6', |
|
7 => 'Grade 7', |
|
8 => 'Grade 8', |
|
9 => 'Grade 9', |
|
10 => 'Grade 10', |
|
11 => 'Grade 11', |
|
12 => 'Grade 12', |
|
13 => 'Grade 13', |
|
14 => '100 Level', |
|
15 => '200 Level', |
|
16 => '300 Level', |
|
17 => '400 Level', |
|
18 => 'Graduate Level'); |
|
return &mt($gradelevels{$gradelevel}); |
|
} |
|
|
|
sub select_level_form { |
|
my ($deflevel,$name)=@_; |
|
unless ($deflevel) { $deflevel=0; } |
|
my $selectform = "<select name=\"$name\" size=\"1\">\n"; |
|
for (my $i=0; $i<=18; $i++) { |
|
$selectform.="<option value=\"$i\" ". |
|
($i==$deflevel ? 'selected' : ''). |
|
">".&gradeleveldescription($i)."</option>\n"; |
|
} |
|
$selectform.="</select>"; |
|
return $selectform; |
|
} |
|
|
#------------------------------------------- |
#------------------------------------------- |
|
|
Line 913 Outputs:
|
Line 943 Outputs:
|
|
|
=back |
=back |
|
|
|
=back |
|
|
=cut |
=cut |
|
|
############################################################### |
############################################################### |
Line 951 sub decode_user_agent {
|
Line 983 sub decode_user_agent {
|
$clientunicode,$clientos,); |
$clientunicode,$clientos,); |
} |
} |
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |
|
|
|
############################################################### |
############################################################### |
## Authentication changing form generation subroutines ## |
## Authentication changing form generation subroutines ## |
############################################################### |
############################################################### |
Line 997 See loncreateuser.pm for invocation and
|
Line 1023 See loncreateuser.pm for invocation and
|
|
|
=back |
=back |
|
|
|
=back |
|
|
=cut |
=cut |
|
|
#------------------------------------------- |
#------------------------------------------- |
Line 1024 END
|
Line 1052 END
|
$Javascript_toUpperCase = ""; |
$Javascript_toUpperCase = ""; |
} |
} |
|
|
|
my $radioval = "'nochange'"; |
|
my $argfield = 'null'; |
|
if ( grep/^mode$/,(keys %in) ) { |
|
if ($in{'mode'} eq 'modifycourse') { |
|
if ( grep/^curr_authtype$/,(keys %in) ) { |
|
$radioval = "'$in{'curr_authtype'}'"; |
|
} |
|
if ( grep/^curr_autharg$/,(keys %in) ) { |
|
unless ($in{'curr_autharg'} eq '') { |
|
$argfield = "'$in{'curr_autharg'}'"; |
|
} |
|
} |
|
} |
|
} |
|
|
$result.=<<"END"; |
$result.=<<"END"; |
var current = new Object(); |
var current = new Object(); |
current.radiovalue = 'nochange'; |
current.radiovalue = $radioval; |
current.argfield = null; |
current.argfield = $argfield; |
|
|
function changed_radio(choice,currentform) { |
function changed_radio(choice,currentform) { |
var choicearg = choice + 'arg'; |
var choicearg = choice + 'arg'; |
Line 1087 END
|
Line 1130 END
|
|
|
sub authform_authorwarning{ |
sub authform_authorwarning{ |
my $result=''; |
my $result=''; |
$result=<<"END"; |
$result='<i>'. |
<i>As a general rule, only authors or co-authors should be filesystem |
&mt('As a general rule, only authors or co-authors should be '. |
authenticated (which allows access to the server filesystem).</i> |
'filesystem authenticated '. |
END |
'(which allows access to the server filesystem).')."</i>\n"; |
return $result; |
return $result; |
} |
} |
|
|
Line 1100 sub authform_nochange{
|
Line 1143 sub authform_nochange{
|
kerb_def_dom => 'MSU.EDU', |
kerb_def_dom => 'MSU.EDU', |
@_, |
@_, |
); |
); |
my $result=''; |
my $result = &mt('[_1] Do not change login data', |
$result.=<<"END"; |
'<input type="radio" name="login" value="nochange" '. |
<input type="radio" name="login" value="nochange" checked="checked" |
'checked="checked" onclick="'. |
onclick="javascript:changed_radio('nochange',$in{'formname'});" /> |
"javascript:changed_radio('nochange',$in{'formname'});".'" />'); |
Do not change login data |
|
END |
|
return $result; |
return $result; |
} |
} |
|
|
Line 1116 sub authform_kerberos{
|
Line 1157 sub authform_kerberos{
|
kerb_def_auth => 'krb4', |
kerb_def_auth => 'krb4', |
@_, |
@_, |
); |
); |
my $result=''; |
my ($check4,$check5,$krbarg); |
my $check4; |
|
my $check5; |
|
if ($in{'kerb_def_auth'} eq 'krb5') { |
if ($in{'kerb_def_auth'} eq 'krb5') { |
$check5 = " checked=\"on\""; |
$check5 = " checked=\"on\""; |
} else { |
} else { |
$check4 = " checked=\"on\""; |
$check4 = " checked=\"on\""; |
} |
} |
$result.=<<"END"; |
$krbarg = $in{'kerb_def_dom'}; |
<input type="radio" name="login" value="krb" |
|
onclick="javascript:changed_radio('krb',$in{'formname'});" |
my $krbcheck = ""; |
onchange="javascript:changed_radio('krb',$in{'formname'});" /> |
if ( grep/^curr_authtype$/,(keys %in) ) { |
Kerberos authenticated with domain |
if ($in{'curr_authtype'} =~ m/^krb/) { |
<input type="text" size="10" name="krbarg" value="$in{'kerb_def_dom'}" |
$krbcheck = " checked=\"on\""; |
onchange="javascript:changed_text('krb',$in{'formname'});" /> |
if ( grep/^curr_autharg$/,(keys %in) ) { |
<input type="radio" name="krbver" value="4" $check4 />Version 4 |
$krbarg = $in{'curr_autharg'}; |
<input type="radio" name="krbver" value="5" $check5 />Version 5 |
} |
END |
} |
|
} |
|
|
|
my $jscall = "javascript:changed_radio('krb',$in{'formname'});"; |
|
my $result .= &mt |
|
('[_1] Kerberos authenticated with domain [_2] '. |
|
'[_3] Version 4 [_4] Version 5', |
|
'<input type="radio" name="login" value="krb" '. |
|
'onclick="'.$jscall.'" onchange="'.$jscall.'"'.$krbcheck.' />', |
|
'<input type="text" size="10" name="krbarg" '. |
|
'value="'.$krbarg.'" '. |
|
'onchange="'.$jscall.'" />', |
|
'<input type="radio" name="krbver" value="4" '.$check4.' />', |
|
'<input type="radio" name="krbver" value="5" '.$check5.' />'); |
return $result; |
return $result; |
} |
} |
|
|
Line 1143 sub authform_internal{
|
Line 1195 sub authform_internal{
|
kerb_def_dom => 'MSU.EDU', |
kerb_def_dom => 'MSU.EDU', |
@_, |
@_, |
); |
); |
my $result=''; |
|
$result.=<<"END"; |
my $intcheck = ""; |
<input type="radio" name="login" value="int" |
my $intarg = 'value=""'; |
onchange="javascript:changed_radio('int',$args{'formname'});" |
if ( grep/^curr_authtype$/,(keys %args) ) { |
onclick="javascript:changed_radio('int',$args{'formname'});" /> |
if ($args{'curr_authtype'} eq 'int') { |
Internally authenticated (with initial password |
$intcheck = " checked=\"on\""; |
<input type="text" size="10" name="intarg" value="" |
if ( grep/^curr_autharg$/,(keys %args) ) { |
onchange="javascript:changed_text('int',$args{'formname'});" />) |
$intarg = "value=\"$args{'curr_autharg'}\""; |
END |
} |
|
} |
|
} |
|
|
|
my $jscall = "javascript:changed_radio('int',$args{'formname'});"; |
|
my $result.=&mt |
|
('[_1] Internally authenticated (with initial password [_2])', |
|
'<input type="radio" name="login" value="int" '.$intcheck. |
|
' onchange="'.$jscall.'" onclick="'.$jscall.'" />', |
|
'<input type="text" size="10" name="intarg" '.$intarg. |
|
' onchange="'.$jscall.'" />'); |
return $result; |
return $result; |
} |
} |
|
|
Line 1161 sub authform_local{
|
Line 1223 sub authform_local{
|
kerb_def_dom => 'MSU.EDU', |
kerb_def_dom => 'MSU.EDU', |
@_, |
@_, |
); |
); |
my $result=''; |
|
$result.=<<"END"; |
my $loccheck = ""; |
<input type="radio" name="login" value="loc" |
my $locarg = 'value=""'; |
onchange="javascript:changed_radio('loc',$in{'formname'});" |
if ( grep/^curr_authtype$/,(keys %in) ) { |
onclick="javascript:changed_radio('loc',$in{'formname'});" /> |
if ($in{'curr_authtype'} eq 'loc') { |
Local Authentication with argument |
$loccheck = " checked=\"on\""; |
<input type="text" size="10" name="locarg" value="" |
if ( grep/^curr_autharg$/,(keys %in) ) { |
onchange="javascript:changed_text('loc',$in{'formname'});" /> |
$locarg = "value=\"$in{'curr_autharg'}\""; |
END |
} |
|
} |
|
} |
|
|
|
my $jscall = "javascript:changed_radio('loc',$in{'formname'});"; |
|
my $result.=&mt('[_1] Local Authentication with argument [_2]', |
|
'<input type="radio" name="login" value="loc" '.$loccheck. |
|
' onchange="'.$jscall.'" onclick="'.$jscall.'" />', |
|
'<input type="text" size="10" name="locarg" '.$locarg. |
|
' onchange="'.$jscall.'" />'); |
return $result; |
return $result; |
} |
} |
|
|
Line 1179 sub authform_filesystem{
|
Line 1250 sub authform_filesystem{
|
kerb_def_dom => 'MSU.EDU', |
kerb_def_dom => 'MSU.EDU', |
@_, |
@_, |
); |
); |
my $result=''; |
my $jscall = "javascript:changed_radio('fsys',$in{'formname'});"; |
$result.=<<"END"; |
my $result.= &mt |
<input type="radio" name="login" value="fsys" |
('[_1] Filesystem Authenticated (with initial password [_2])', |
onchange="javascript:changed_radio('fsys',$in{'formname'});" |
'<input type="radio" name="login" value="fsys" '. |
onclick="javascript:changed_radio('fsys',$in{'formname'});" /> |
'onchange="'.$jscall.'" onclick="'.$jscall.'" />', |
Filesystem authenticated (with initial password |
'<input type="text" size="10" name="fsysarg" value="" '. |
<input type="text" size="10" name="fsysarg" value="" |
'onchange="'.$jscall.'" />'); |
onchange="javascript:changed_text('fsys',$in{'formname'});">) |
|
END |
|
return $result; |
return $result; |
} |
} |
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |
|
|
|
############################################################### |
############################################################### |
## Get Authentication Defaults for Domain ## |
## Get Authentication Defaults for Domain ## |
############################################################### |
############################################################### |
Line 1351 sub keyword {
|
Line 1414 sub keyword {
|
|
|
=item * get_related_words |
=item * get_related_words |
|
|
Look up a word in the thesaurus. Takes a scalar arguement and returns |
Look up a word in the thesaurus. Takes a scalar argument and returns |
an array of words. If the keyword is not in the thesaurus, an empty array |
an array of words. If the keyword is not in the thesaurus, an empty array |
will be returned. The order of the words returned is determined by the |
will be returned. The order of the words returned is determined by the |
database which holds them. |
database which holds them. |
Line 1487 sub noteswrapper {
|
Line 1550 sub noteswrapper {
|
# ------------------------------------------------------------- Aboutme Wrapper |
# ------------------------------------------------------------- Aboutme Wrapper |
|
|
sub aboutmewrapper { |
sub aboutmewrapper { |
my ($link,$username,$domain)=@_; |
my ($link,$username,$domain,$target)=@_; |
return "<a href='/adm/$domain/$username/aboutme'>$link</a>"; |
return "<a href='/adm/$domain/$username/aboutme'". |
|
($target?" target='$target'":'').">$link</a>"; |
} |
} |
|
|
# ------------------------------------------------------------ Syllabus Wrapper |
# ------------------------------------------------------------ Syllabus Wrapper |
Line 1535 sub languagedescription {
|
Line 1599 sub languagedescription {
|
($supported_language{$code}?' ('.&mt('interface available').')':''); |
($supported_language{$code}?' ('.&mt('interface available').')':''); |
} |
} |
|
|
|
sub plainlanguagedescription { |
|
my $code=shift; |
|
return $language{$code}; |
|
} |
|
|
|
sub supportedlanguagecode { |
|
my $code=shift; |
|
return $supported_language{$code}; |
|
} |
|
|
=pod |
=pod |
|
|
=item * copyrightids() |
=item * copyrightids() |
Line 1556 returns description of a specified copyr
|
Line 1630 returns description of a specified copyr
|
=cut |
=cut |
|
|
sub copyrightdescription { |
sub copyrightdescription { |
return $cprtag{shift(@_)}; |
return &mt($cprtag{shift(@_)}); |
} |
} |
|
|
=pod |
=pod |
Line 1596 sub fileembstyle {
|
Line 1670 sub fileembstyle {
|
return $fe{lc(shift(@_))}; |
return $fe{lc(shift(@_))}; |
} |
} |
|
|
|
|
|
sub filecategoryselect { |
|
my ($name,$value)=@_; |
|
return &select_form($name,$value, |
|
'' => &mt('Any category'), |
|
map { $_,$_ } sort(keys(%category_extensions))); |
|
} |
|
|
=pod |
=pod |
|
|
=item * filedescription() |
=item * filedescription() |
Line 1605 returns description for a specified file
|
Line 1687 returns description for a specified file
|
=cut |
=cut |
|
|
sub filedescription { |
sub filedescription { |
return $fd{lc(shift(@_))}; |
return &mt($fd{lc(shift(@_))}); |
} |
} |
|
|
=pod |
=pod |
Line 1619 extra formatting
|
Line 1701 extra formatting
|
|
|
sub filedescriptionex { |
sub filedescriptionex { |
my $ex=shift; |
my $ex=shift; |
return '.'.$ex.' '.$fd{lc($ex)}; |
return '.'.$ex.' '.&mt($fd{lc($ex)}); |
} |
} |
|
|
# End of .tab access |
# End of .tab access |
Line 1771 sub get_previous_attempt {
|
Line 1853 sub get_previous_attempt {
|
} else { |
} else { |
$value=$returnhash{$version.':'.$_}; |
$value=$returnhash{$version.':'.$_}; |
} |
} |
$prevattempts.='<td>'.$value.' </td>'; |
$prevattempts.='<td>'.&Apache::lonnet::unescape($value).' </td>'; |
} |
} |
} |
} |
} |
} |
Line 1783 sub get_previous_attempt {
|
Line 1865 sub get_previous_attempt {
|
} else { |
} else { |
$value=$lasthash{$_}; |
$value=$lasthash{$_}; |
} |
} |
|
$value=&Apache::lonnet::unescape($value); |
if ($_ =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
if ($_ =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} |
$prevattempts.='<td>'.$value.' </td>'; |
$prevattempts.='<td>'.$value.' </td>'; |
} |
} |
Line 1946 sub maketime {
|
Line 2029 sub maketime {
|
$th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,$th{'dlsav'})); |
$th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,$th{'dlsav'})); |
} |
} |
|
|
|
|
######################################### |
|
# |
|
# Retro-fixing of un-backward-compatible time format |
|
|
|
sub unsqltime { |
|
my $timestamp=shift; |
|
if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) { |
|
$timestamp=&maketime( |
|
'year'=>$1,'month'=>$2,'day'=>$3, |
|
'hours'=>$4,'minutes'=>$5,'seconds'=>$6); |
|
} |
|
return $timestamp; |
|
} |
|
|
|
######################################### |
######################################### |
|
|
sub findallcourses { |
sub findallcourses { |
Line 2032 sub domainlogo {
|
Line 2100 sub domainlogo {
|
my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; |
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort. |
return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort. |
'/adm/lonDomLogos/'.$domain.'.gif" />'; |
'/adm/lonDomLogos/'.$domain.'.gif" alt="'.$domain.'" />'; |
} elsif(exists($Apache::lonnet::domaindescription{$domain})) { |
} elsif(exists($Apache::lonnet::domaindescription{$domain})) { |
return $Apache::lonnet::domaindescription{$domain}; |
return $Apache::lonnet::domaindescription{$domain}; |
} else { |
} else { |
Line 2143 sub bodytag {
|
Line 2211 sub bodytag {
|
my $sidebg=&designparm($function.'.sidebg',$domain); |
my $sidebg=&designparm($function.'.sidebg',$domain); |
# Accessibility font enhance |
# Accessibility font enhance |
unless ($addentries) { $addentries=''; } |
unless ($addentries) { $addentries=''; } |
|
my $addstyle=''; |
if ($ENV{'browser.fontenhance'} eq 'on') { |
if ($ENV{'browser.fontenhance'} eq 'on') { |
$addentries.=' style="font-size: x-large"'; |
$addstyle=' font-size: x-large;'; |
} |
} |
# role and realm |
# role and realm |
my ($role,$realm) |
my ($role,$realm) |
Line 2162 sub bodytag {
|
Line 2231 sub bodytag {
|
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } |
# construct main body tag |
# construct main body tag |
my $bodytag = <<END; |
my $bodytag = <<END; |
|
<style> |
|
h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif } |
|
a:focus { color: red; background: yellow } |
|
</style> |
<body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link" |
<body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link" |
$addentries> |
style="margin-top: 0px;$addstyle" $addentries> |
END |
END |
my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'. |
my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'. |
$lonhttpdPort.$img.'" />'; |
$lonhttpdPort.$img.'" alt="'.$function.'" />'; |
if ($bodyonly) { |
if ($bodyonly) { |
return $bodytag; |
return $bodytag; |
} elsif ($ENV{'browser.interface'} eq 'textual') { |
} elsif ($ENV{'browser.interface'} eq 'textual') { |
Line 2178 END
|
Line 2251 END
|
# No Remote |
# No Remote |
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', |
$forcereg). |
$forcereg). |
'<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td bgcolor="'.$tabbg.'"><font size="+3" color="'.$font.'"><b>'.$title. |
'<table bgcolor="'.$pgbg.'" width="100%" border="0" cellspacing="3" cellpadding="3"><tr><td bgcolor="'.$tabbg.'"><font face="Arial, Helvetica, sans-serif" size="+3" color="'.$font.'"><b>'.$title. |
'</b></font></td></tr></table>'; |
'</b></font></td></tr></table>'; |
} |
} |
|
|
Line 2194 $upperleft</td>
|
Line 2267 $upperleft</td>
|
</tr> |
</tr> |
<tr> |
<tr> |
<td rowspan="3" bgcolor="$tabbg"> |
<td rowspan="3" bgcolor="$tabbg"> |
<font size="5"><b>$title</b></font> |
<font size="5" face="Arial, Helvetica, sans-serif"><b>$title</b></font> |
<td bgcolor="$tabbg" align="right"> |
<td bgcolor="$tabbg" align="right"> |
<font size="2"> |
<font size="2" face="Arial, Helvetica, sans-serif"> |
$ENV{'environment.firstname'} |
$ENV{'environment.firstname'} |
$ENV{'environment.middlename'} |
$ENV{'environment.middlename'} |
$ENV{'environment.lastname'} |
$ENV{'environment.lastname'} |
Line 2205 $upperleft</td>
|
Line 2278 $upperleft</td>
|
</td> |
</td> |
</tr> |
</tr> |
<tr><td bgcolor="$tabbg" align="right"> |
<tr><td bgcolor="$tabbg" align="right"> |
<font size="2">$role</font> |
<font size="2" face="Arial, Helvetica, sans-serif">$role</font> |
</td></tr> |
</td></tr> |
<tr> |
<tr> |
<td bgcolor="$tabbg" align="right"><font size="2">$realm</font> </td></tr> |
<td bgcolor="$tabbg" align="right"><font size="2" face="Arial, Helvetica, sans-serif">$realm</font> </td></tr> |
</table><br> |
</table><br> |
ENDBODY |
ENDBODY |
} |
} |
Line 2385 sub add_to_env {
|
Line 2458 sub add_to_env {
|
|
|
=pod |
=pod |
|
|
|
=item * get_env_multiple($name) |
|
|
|
gets $name from the %ENV hash, it seemlessly handles the cases where multiple |
|
values may be defined and end up as an array ref. |
|
|
|
returns an array of values |
|
|
|
=cut |
|
|
|
sub get_env_multiple { |
|
my ($name) = @_; |
|
my @values; |
|
if (defined($ENV{$name})) { |
|
# exists is it an array |
|
if (ref($ENV{$name})) { |
|
@values=@{ $ENV{$name} }; |
|
} else { |
|
$values[0]=$ENV{$name}; |
|
} |
|
} |
|
return(@values); |
|
} |
|
|
|
|
|
=pod |
|
|
=back |
=back |
|
|
=head1 CSV Upload/Handling functions |
=head1 CSV Upload/Handling functions |
Line 2409 sub upfile_store {
|
Line 2508 sub upfile_store {
|
my $datatoken=$ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
my $datatoken=$ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
'_enroll_'.$ENV{'request.course.id'}.'_'.time.'_'.$$; |
'_enroll_'.$ENV{'request.course.id'}.'_'.time.'_'.$$; |
{ |
{ |
my $fh=Apache::File->new('>'.$r->dir_config('lonDaemons'). |
my $datafile = $r->dir_config('lonDaemons'). |
'/tmp/'.$datatoken.'.tmp'); |
'/tmp/'.$datatoken.'.tmp'; |
print $fh $ENV{'form.upfile'}; |
if ( open(my $fh,">$datafile") ) { |
|
print $fh $ENV{'form.upfile'}; |
|
close($fh); |
|
} |
} |
} |
return $datatoken; |
return $datatoken; |
} |
} |
Line 2430 sub load_tmp_file {
|
Line 2532 sub load_tmp_file {
|
my $r=shift; |
my $r=shift; |
my @studentdata=(); |
my @studentdata=(); |
{ |
{ |
my $fh; |
my $studentfile = $r->dir_config('lonDaemons'). |
if ($fh=Apache::File->new($r->dir_config('lonDaemons'). |
'/tmp/'.$ENV{'form.datatoken'}.'.tmp'; |
'/tmp/'.$ENV{'form.datatoken'}.'.tmp')) { |
if ( open(my $fh,"<$studentfile") ) { |
@studentdata=<$fh>; |
@studentdata=<$fh>; |
} |
close($fh); |
|
} |
} |
} |
$ENV{'form.upfile'}=join('',@studentdata); |
$ENV{'form.upfile'}=join('',@studentdata); |
} |
} |
Line 2508 sub record_sep {
|
Line 2611 sub record_sep {
|
return %components; |
return %components; |
} |
} |
|
|
|
###################################################### |
|
###################################################### |
|
|
=pod |
=pod |
|
|
=item * upfile_select_html() |
=item * upfile_select_html() |
|
|
return HTML code to select file and specify its type |
Return HTML code to select a file from the users machine and specify |
|
the file type. |
|
|
=cut |
=cut |
|
|
|
###################################################### |
|
###################################################### |
sub upfile_select_html { |
sub upfile_select_html { |
return (<<'ENDUPFORM'); |
my %Types = ( |
<input type="file" name="upfile" size="50" /> |
csv => &mt('CSV (comma separated values, spreadsheet)'), |
<br />Type: <select name="upfiletype"> |
space => &mt('Space separated'), |
<option value="csv">CSV (comma separated values, spreadsheet)</option> |
tab => &mt('Tabulator separated'), |
<option value="space">Space separated</option> |
# xml => &mt('HTML/XML'), |
<option value="tab">Tabulator separated</option> |
); |
<option value="xml">HTML/XML</option> |
my $Str = '<input type="file" name="upfile" size="50" />'. |
</select> |
'<br />Type: <select name="upfiletype">'; |
ENDUPFORM |
foreach my $type (sort(keys(%Types))) { |
|
$Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n"; |
|
} |
|
$Str .= "</select>\n"; |
|
return $Str; |
} |
} |
|
|
|
###################################################### |
|
###################################################### |
|
|
=pod |
=pod |
|
|
=item * csv_print_samples($r,$records) |
=item * csv_print_samples($r,$records) |
Line 2538 Apache Request ref, $records is an array
|
Line 2654 Apache Request ref, $records is an array
|
|
|
=cut |
=cut |
|
|
|
###################################################### |
|
###################################################### |
sub csv_print_samples { |
sub csv_print_samples { |
my ($r,$records) = @_; |
my ($r,$records) = @_; |
my (%sone,%stwo,%sthree); |
my (%sone,%stwo,%sthree); |
%sone=&record_sep($$records[0]); |
%sone=&record_sep($$records[0]); |
if (defined($$records[1])) {%stwo=&record_sep($$records[1]);} |
if (defined($$records[1])) {%stwo=&record_sep($$records[1]);} |
if (defined($$records[2])) {%sthree=&record_sep($$records[2]);} |
if (defined($$records[2])) {%sthree=&record_sep($$records[2]);} |
|
# |
$r->print('Samples<br /><table border="2"><tr>'); |
$r->print(&mt('Samples').'<br /><table border="2"><tr>'); |
foreach (sort({$a <=> $b} keys(%sone))) { $r->print('<th>Column '.($_+1).'</th>'); } |
foreach (sort({$a <=> $b} keys(%sone))) { |
|
$r->print('<th>'.&mt('Column [_1]',($_+1)).'</th>'); } |
$r->print('</tr>'); |
$r->print('</tr>'); |
foreach my $hash (\%sone,\%stwo,\%sthree) { |
foreach my $hash (\%sone,\%stwo,\%sthree) { |
$r->print('<tr>'); |
$r->print('<tr>'); |
Line 2560 sub csv_print_samples {
|
Line 2679 sub csv_print_samples {
|
$r->print('</tr></table><br />'."\n"); |
$r->print('</tr></table><br />'."\n"); |
} |
} |
|
|
|
###################################################### |
|
###################################################### |
|
|
=pod |
=pod |
|
|
=item * csv_print_select_table($r,$records,$d) |
=item * csv_print_select_table($r,$records,$d) |
|
|
Prints a table to create associations between values and table columns. |
Prints a table to create associations between values and table columns. |
|
|
$r is an Apache Request ref, |
$r is an Apache Request ref, |
$records is an arrayref from &Apache::loncommon::upfile_record_sep, |
$records is an arrayref from &Apache::loncommon::upfile_record_sep, |
$d is an array of 2 element arrays (internal name, displayed name) |
$d is an array of 2 element arrays (internal name, displayed name) |
|
|
=cut |
=cut |
|
|
|
###################################################### |
|
###################################################### |
sub csv_print_select_table { |
sub csv_print_select_table { |
my ($r,$records,$d) = @_; |
my ($r,$records,$d) = @_; |
my $i=0;my %sone; |
my $i=0;my %sone; |
%sone=&record_sep($$records[0]); |
%sone=&record_sep($$records[0]); |
$r->print('Associate columns with student attributes.'."\n". |
$r->print(&mt('Associate columns with student attributes.')."\n". |
'<table border="2"><tr><th>Attribute</th><th>Column</th></tr>'."\n"); |
'<table border="2"><tr>'. |
|
'<th>'.&mt('Attribute').'</th>'. |
|
'<th>'.&mt('Column').'</th></tr>'."\n"); |
foreach (@$d) { |
foreach (@$d) { |
my ($value,$display)=@{ $_ }; |
my ($value,$display)=@{ $_ }; |
$r->print('<tr><td>'.$display.'</td>'); |
$r->print('<tr><td>'.$display.'</td>'); |
Line 2594 sub csv_print_select_table {
|
Line 2721 sub csv_print_select_table {
|
return $i; |
return $i; |
} |
} |
|
|
|
###################################################### |
|
###################################################### |
|
|
=pod |
=pod |
|
|
=item * csv_samples_select_table($r,$records,$d) |
=item * csv_samples_select_table($r,$records,$d) |
Line 2606 $d is an array of 2 element arrays (inte
|
Line 2736 $d is an array of 2 element arrays (inte
|
|
|
=cut |
=cut |
|
|
|
###################################################### |
|
###################################################### |
sub csv_samples_select_table { |
sub csv_samples_select_table { |
my ($r,$records,$d) = @_; |
my ($r,$records,$d) = @_; |
my %sone; my %stwo; my %sthree; |
my %sone; my %stwo; my %sthree; |
my $i=0; |
my $i=0; |
|
# |
$r->print('<table border=2><tr><th>Field</th><th>Samples</th></tr>'); |
$r->print('<table border=2><tr><th>'. |
|
&mt('Field').'</th><th>'.&mt('Samples').'</th></tr>'); |
%sone=&record_sep($$records[0]); |
%sone=&record_sep($$records[0]); |
if (defined($$records[1])) {%stwo=&record_sep($$records[1]);} |
if (defined($$records[1])) {%stwo=&record_sep($$records[1]);} |
if (defined($$records[2])) {%sthree=&record_sep($$records[2]);} |
if (defined($$records[2])) {%sthree=&record_sep($$records[2]);} |
|
# |
foreach (sort keys %sone) { |
foreach (sort keys %sone) { |
$r->print('<tr><td><select name=f'.$i. |
$r->print('<tr><td><select name="f'.$i.'"'. |
' onchange="javascript:flip(this.form,'.$i.');">'); |
' onchange="javascript:flip(this.form,'.$i.');">'); |
foreach (@$d) { |
foreach (@$d) { |
my ($value,$display)=@{ $_ }; |
my ($value,$display)=@{ $_ }; |
$r->print('<option value='.$value.'>'.$display.'</option>'); |
$r->print('<option value="'.$value.'">'.$display.'</option>'); |
} |
} |
$r->print('</select></td><td>'); |
$r->print('</select></td><td>'); |
if (defined($sone{$_})) { $r->print($sone{$_}."</br>\n"); } |
if (defined($sone{$_})) { $r->print($sone{$_}."</br>\n"); } |
Line 2634 sub csv_samples_select_table {
|
Line 2767 sub csv_samples_select_table {
|
return($i); |
return($i); |
} |
} |
|
|
|
###################################################### |
|
###################################################### |
|
|
=pod |
=pod |
|
|
=item clean_excel_name($name) |
=item clean_excel_name($name) |
Line 2642 Returns a replacement for $name which do
|
Line 2778 Returns a replacement for $name which do
|
|
|
=cut |
=cut |
|
|
|
###################################################### |
|
###################################################### |
sub clean_excel_name { |
sub clean_excel_name { |
my ($name) = @_; |
my ($name) = @_; |
$name =~ s/[:\*\?\/\\]//g; |
$name =~ s/[:\*\?\/\\]//g; |
Line 2688 sub check_if_partid_hidden {
|
Line 2826 sub check_if_partid_hidden {
|
|
|
=pod |
=pod |
|
|
|
=back |
|
|
=head1 cgi-bin script and graphing routines |
=head1 cgi-bin script and graphing routines |
|
|
|
=over 4 |
|
|
=item get_cgi_id |
=item get_cgi_id |
|
|
Inputs: none |
Inputs: none |
Line 2703 the routine &Apache::lonnet::transfer_pr
|
Line 2845 the routine &Apache::lonnet::transfer_pr
|
|
|
############################################################ |
############################################################ |
############################################################ |
############################################################ |
|
my $uniq=0; |
sub get_cgi_id { |
sub get_cgi_id { |
return (time.'_'.int(rand(1000))); |
$uniq=($uniq+1)%100000; |
|
return (time.'_'.$uniq); |
} |
} |
|
|
############################################################ |
############################################################ |
Line 3021 sub DrawXYYGraph {
|
Line 3164 sub DrawXYYGraph {
|
|
|
=pod |
=pod |
|
|
|
=back |
|
|
=head1 Statistics helper routines? |
=head1 Statistics helper routines? |
|
|
Bad place for them but what the hell. |
Bad place for them but what the hell. |
|
|
|
=over 4 |
|
|
=item &chartlink |
=item &chartlink |
|
|
Returns a link to the chart for a specific student. |
Returns a link to the chart for a specific student. |
Line 3041 Inputs:
|
Line 3188 Inputs:
|
|
|
=back |
=back |
|
|
|
=back |
|
|
=cut |
=cut |
|
|
############################################################ |
############################################################ |
Line 3053 sub chartlink {
|
Line 3202 sub chartlink {
|
'">'.$linktext.'</a>'; |
'">'.$linktext.'</a>'; |
} |
} |
|
|
|
####################################################### |
|
####################################################### |
|
|
|
=pod |
|
|
|
=head1 Course Environment Routines |
|
|
|
=over 4 |
|
|
|
=item &restore_course_settings |
|
|
|
=item &store_course_settings |
|
|
|
Restores/Store indicated form parameters from the course environment. |
|
Will not overwrite existing values of the form parameters. |
|
|
|
Inputs: |
|
a scalar describing the data (e.g. 'chart', 'problem_analysis') |
|
|
|
a hash ref describing the data to be stored. For example: |
|
|
|
%Save_Parameters = ('Status' => 'scalar', |
|
'chartoutputmode' => 'scalar', |
|
'chartoutputdata' => 'scalar', |
|
'Section' => 'array', |
|
'StudentData' => 'array', |
|
'Maps' => 'array'); |
|
|
|
Returns: both routines return nothing |
|
|
|
=cut |
|
|
|
####################################################### |
|
####################################################### |
|
sub store_course_settings { |
|
# save to the environment |
|
# appenv the same items, just to be safe |
|
my $courseid = $ENV{'request.course.id'}; |
|
my $coursedom = $ENV{'course.'.$courseid.'.domain'}; |
|
my ($prefix,$Settings) = @_; |
|
my %SaveHash; |
|
my %AppHash; |
|
while (my ($setting,$type) = each(%$Settings)) { |
|
my $basename = 'env.internal.'.$prefix.'.'.$setting; |
|
my $envname = 'course.'.$courseid.'.'.$basename; |
|
if (exists($ENV{'form.'.$setting})) { |
|
# Save this value away |
|
if ($type eq 'scalar' && |
|
(! exists($ENV{$envname}) || |
|
$ENV{$envname} ne $ENV{'form.'.$setting})) { |
|
$SaveHash{$basename} = $ENV{'form.'.$setting}; |
|
$AppHash{$envname} = $ENV{'form.'.$setting}; |
|
} elsif ($type eq 'array') { |
|
my $stored_form; |
|
if (ref($ENV{'form.'.$setting})) { |
|
$stored_form = join(',', |
|
map { |
|
&Apache::lonnet::escape($_); |
|
} sort(@{$ENV{'form.'.$setting}})); |
|
} else { |
|
$stored_form = |
|
&Apache::lonnet::escape($ENV{'form.'.$setting}); |
|
} |
|
# Determine if the array contents are the same. |
|
if ($stored_form ne $ENV{$envname}) { |
|
$SaveHash{$basename} = $stored_form; |
|
$AppHash{$envname} = $stored_form; |
|
} |
|
} |
|
} |
|
} |
|
my $put_result = &Apache::lonnet::put('environment',\%SaveHash, |
|
$coursedom, |
|
$ENV{'course.'.$courseid.'.num'}); |
|
if ($put_result !~ /^(ok|delayed)/) { |
|
&Apache::lonnet::logthis('unable to save form parameters, '. |
|
'got error:'.$put_result); |
|
} |
|
# Make sure these settings stick around in this session, too |
|
&Apache::lonnet::appenv(%AppHash); |
|
return; |
|
} |
|
|
|
sub restore_course_settings { |
|
my $courseid = $ENV{'request.course.id'}; |
|
my ($prefix,$Settings) = @_; |
|
while (my ($setting,$type) = each(%$Settings)) { |
|
next if (exists($ENV{'form.'.$setting})); |
|
my $envname = 'course.'.$courseid.'.env.internal.'.$prefix. |
|
'.'.$setting; |
|
if (exists($ENV{$envname})) { |
|
if ($type eq 'scalar') { |
|
$ENV{'form.'.$setting} = $ENV{$envname}; |
|
} elsif ($type eq 'array') { |
|
$ENV{'form.'.$setting} = [ |
|
map { |
|
&Apache::lonnet::unescape($_); |
|
} split(',',$ENV{$envname}) |
|
]; |
|
} |
|
} |
|
} |
|
} |
|
|
############################################################ |
############################################################ |
############################################################ |
############################################################ |
|
|
|
sub propath { |
|
my ($udom,$uname)=@_; |
|
$udom=~s/\W//g; |
|
$uname=~s/\W//g; |
|
my $subdir=$uname.'__'; |
|
$subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; |
|
my $proname="$Apache::lonnet::perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; |
|
return $proname; |
|
} |
|
|
|
sub icon { |
|
my ($file)=@_; |
|
my $curfext = (split(/\./,$file))[-1]; |
|
my $iconname=$Apache::lonnet::perlvar{'lonIconsURL'}.'/unknown.gif'; |
|
my $embstyle = &Apache::loncommon::fileembstyle($curfext); |
|
if (!(!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn')) { |
|
if (-e $Apache::lonnet::perlvar{'lonDocRoot'}.'/'. |
|
$Apache::lonnet::perlvar{'lonIconsURL'}.'/'. |
|
$curfext.".gif") { |
|
$iconname=$Apache::lonnet::perlvar{'lonIconsURL'}.'/'. |
|
$curfext.".gif"; |
|
} |
|
} |
|
return $iconname; |
|
} |
|
|
=pod |
=pod |
|
|
=back |
=back |