--- loncom/interface/loncommon.pm 2002/08/22 13:39:42 1.56
+++ loncom/interface/loncommon.pm 2002/10/29 20:57:31 1.71
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.56 2002/08/22 13:39:42 matthew Exp $
+# $Id: loncommon.pm,v 1.71 2002/10/29 20:57:31 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -98,6 +98,10 @@ my %cprtag;
my %fe; my %fd;
my %category_extensions;
+# ---------------------------------------------- Designs
+
+my %designhash;
+
# ---------------------------------------------- Thesaurus variables
=pod
@@ -166,6 +170,30 @@ BEGIN {
}
}
}
+
+# -------------------------------------------------------------- domain designs
+
+ my $filename;
+ my $designdir=$Apache::lonnet::perlvar{'lonTabDir'}.'/lonDomColors';
+ opendir(DIR,$designdir);
+ while ($filename=readdir(DIR)) {
+ my ($domain)=($filename=~/^(\w+)\./);
+ {
+ my $fh=Apache::File->new($designdir.'/'.$filename);
+ if ($fh) {
+ while (<$fh>) {
+ next if /^\#/;
+ chomp;
+ my ($key,$val)=(split(/\=/,$_));
+ if ($val) { $designhash{$domain.'.'.$key}=$val; }
+ }
+ }
+ }
+
+ }
+ closedir(DIR);
+
+
# ------------------------------------------------------------- file categories
{
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}.
@@ -480,7 +508,7 @@ sub help_open_topic {
# Add the graphic
$template .= <<"ENDTEMPLATE";
-
+
ENDTEMPLATE
return $template;
@@ -735,7 +763,7 @@ sub authform_nochange{
my $result='';
$result.=<<"END";
+ onclick="javascript:changed_radio('nochange',$in{'formname'});" />
Do not change login data
END
return $result;
@@ -751,10 +779,12 @@ sub authform_kerberos{
$result.=<<"END";
+ onchange="javascript:changed_radio('krb',$in{'formname'});" />
Kerberos authenticated with domain
+ onchange="javascript:changed_text('krb',$in{'formname'});" />
+Version 4
+Version 5
END
return $result;
}
@@ -769,10 +799,10 @@ sub authform_internal{
$result.=<<"END";
+ onclick="javascript:changed_radio('int',$args{'formname'});" />
Internally authenticated (with initial password
+ onchange="javascript:changed_text('int',$args{'formname'});" />
END
return $result;
}
@@ -787,10 +817,10 @@ sub authform_local{
$result.=<<"END";
+ onclick="javascript:changed_radio('loc',$in{'formname'});" />
Local Authentication with argument
+ onchange="javascript:changed_text('loc',$in{'formname'});" />
END
return $result;
}
@@ -805,7 +835,7 @@ sub authform_filesystem{
$result.=<<"END";
+ onclick="javascript:changed_radio('fsys',$in{'formname'});" />
Filesystem authenticated (with initial password
@@ -930,6 +960,71 @@ sub get_related_words {
## End Thesaurus Functions ##
###############################################################
+# -------------------------------------------------------------- Plaintext name
+
+sub plainname {
+ my ($uname,$udom)=@_;
+ my %names=&Apache::lonnet::get('environment',
+ ['firstname','middlename','lastname','generation'],
+ $udom,$uname);
+ my $name=$names{'firstname'}.' '.$names{'middlename'}.' '.
+ $names{'lastname'}.' '.$names{'generation'};
+ $name=~s/\s+$//;
+ $name=~s/\s+/ /g;
+ return $name;
+}
+
+# -------------------------------------------------------------------- Nickname
+
+
+sub nickname {
+ my ($uname,$udom)=@_;
+ my %names=&Apache::lonnet::get('environment',
+ ['nickname','firstname','middlename','lastname','generation'],$udom,$uname);
+ my $name=$names{'nickname'};
+ if ($name) {
+ $name='"'.$name.'"';
+ } else {
+ $name=$names{'firstname'}.' '.$names{'middlename'}.' '.
+ $names{'lastname'}.' '.$names{'generation'};
+ $name=~s/\s+$//;
+ $name=~s/\s+/ /g;
+ }
+ return $name;
+}
+
+
+# ------------------------------------------------------------------ Screenname
+
+sub screenname {
+ my ($uname,$udom)=@_;
+ my %names=
+ &Apache::lonnet::get('environment',['screenname'],$udom,$uname);
+ return $names{'screenname'};
+}
+
+# ------------------------------------------------------------- Message Wrapper
+
+sub messagewrapper {
+ my ($link,$un,$do)=@_;
+ return
+"$link";
+}
+# ------------------------------------------------------------- Aboutme Wrapper
+
+sub aboutmewrapper {
+ my ($link,$username,$domain)=@_;
+ return "$link";
+}
+
+# ------------------------------------------------------------ Syllabus Wrapper
+
+
+sub syllabuswrapper {
+ my ($link,$un,$do)=@_;
+ return "$link";
+}
+
# ---------------------------------------------------------------- Language IDs
sub languageids {
return sort(keys(%language));
@@ -1059,7 +1154,7 @@ sub get_previous_attempt {
}
sub get_student_view {
- my ($symb,$username,$domain,$courseid) = @_;
+ my ($symb,$username,$domain,$courseid,$target) = @_;
my ($map,$id,$feedurl) = split(/___/,$symb);
my (%old,%moreenv);
my @elements=('symb','courseid','domain','username');
@@ -1067,6 +1162,7 @@ sub get_student_view {
$old{$element}=$ENV{'form.grade_'.$element};
$moreenv{'form.grade_'.$element}=eval '$'.$element #'
}
+ if ($target eq 'tex') {$moreenv{'form.grade_target'} = 'tex';}
&Apache::lonnet::appenv(%moreenv);
my $userview=&Apache::lonnet::ssi('/res/'.$feedurl);
&Apache::lonnet::delenv('form.grade_');
@@ -1126,6 +1222,22 @@ sub maketime {
}
+#########################################
+#
+# 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 {
my %courses=();
my $now=time;
@@ -1146,9 +1258,107 @@ sub findallcourses {
}
###############################################
+###############################################
+
+=pod
+
+=item &determinedomain()
+
+Inputs: $domain (usually will be undef)
+
+Returns: Determines which domain should be used for designs
+
+=cut
+
+###############################################
+sub determinedomain {
+ my $domain=shift;
+ if (! $domain) {
+ # Determine domain if we have not been given one
+ $domain = $Apache::lonnet::perlvar{'lonDefDomain'};
+ if ($ENV{'user.domain'}) { $domain=$ENV{'user.domain'}; }
+ if ($ENV{'request.role.domain'}) {
+ $domain=$ENV{'request.role.domain'};
+ }
+ }
+ return $domain;
+}
+###############################################
+=pod
+
+=item &domainlogo()
+
+Inputs: $domain (usually will be undef)
+
+Returns: A link to a domain logo, if the domain logo exists.
+If the domain logo does not exist, a description of the domain.
+
+=cut
+###############################################
+sub domainlogo {
+ my $domain = &determinedomain(shift);
+ # See if there is a logo
+ if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') {
+ return '';
+ } elsif(exists($Apache::lonnet::domaindescription{$domain})) {
+ return $Apache::lonnet::domaindescription{$domain};
+ } else {
+ return '';
+ }
+}
+##############################################
+
+=pod
+
+=item &designparm()
+
+Inputs: $which parameter; $domain (usually will be undef)
+
+Returns: value of designparamter $which
+
+=cut
+##############################################
+sub designparm {
+ my ($which,$domain)=@_;
+ $domain=&determinedomain($domain);
+ if ($designhash{$domain.'.'.$which}) {
+ return $designhash{$domain.'.'.$which};
+ } else {
+ return $designhash{'default.'.$which};
+ }
+}
+
+###############################################
+###############################################
+
+=pod
+
+=item &bodytag()
+
+Returns a uniform header for LON-CAPA web pages.
+
+Inputs:
+
+ $title, A title to be displayed on the page.
+ $function, the current role (can be undef).
+ $addentries, extra parameters for the
tag.
+ $bodyonly, if defined, only return the tag.
+ $domain, if defined, force a given domain.
+
+Returns: A uniform header for LON-CAPA web pages.
+If $bodyonly is nonzero, a string containing a tag will be returned.
+If $bodyonly is undef or zero, an html string containing a tag and
+other decorations will be returned.
+
+=cut
+
+###############################################
+
+###############################################
sub bodytag {
- my ($title,$function,$addentries)=@_;
+ my ($title,$function,$addentries,$bodyonly,$domain)=@_;
unless ($function) {
$function='student';
if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) {
@@ -1162,43 +1372,16 @@ sub bodytag {
$function='author';
}
}
- my $img='';
- my $pgbg='';
- my $tabbg='';
- my $font='';
- my $link='';
- my $alink='#CC0000';
- my $vlink='';
- if ($function eq 'admin') {
- $img='admin';
- $pgbg='#FFFFCC';
- $tabbg='#CCCC99';
- $font='#772200';
- $link='#663300';
- $vlink='#666600';
- } elsif ($function eq 'coordinator') {
- $img='coordinator';
- $pgbg='#CCFFFF';
- $tabbg='#CCCCFF';
- $font='#000044';
- $link='#003333';
- $vlink='#006633';
- } elsif ($function eq 'author') {
- $img='author';
- $pgbg='#CCFFFF';
- $tabbg='#CCFFCC';
- $font='#004400';
- $link='#003333';
- $vlink='#006666';
- } else {
- $img='student';
- $pgbg='#FFFFAA';
- $tabbg='#FF9900';
- $font='#991100';
- $link='#993300';
- $vlink='#996600';
- }
-# role and realm
+ my $img=&designparm($function.'.img',$domain);
+ my $pgbg=&designparm($function.'.pgbg',$domain);
+ my $tabbg=&designparm($function.'.tabbg',$domain);
+ my $font=&designparm($function.'.font',$domain);
+ my $link=&designparm($function.'.link',$domain);
+ my $alink=&designparm($function.'.alink',$domain);
+ my $vlink=&designparm($function.'.vlink',$domain);
+ my $sidebg=&designparm($function.'.sidebg',$domain);
+
+ # role and realm
my ($role,$realm)
=&Apache::lonnet::plaintext((split(/\./,$ENV{'request.role'}))[0]);
# realm
@@ -1208,15 +1391,21 @@ sub bodytag {
}
unless ($realm) { $realm=' '; }
# Set messages
- my $messages=localtime();
+ my $messages=&domainlogo($domain);
# Output
- return(<
+END
+ if ($bodyonly) {
+ return $bodytag;
+ } else {
+ return(<
-
-
$messages
+
+
$messages
@@ -1237,6 +1426,7 @@ $addentries>
$realm
ENDBODY
+ }
}
###############################################
@@ -1425,7 +1615,7 @@ return HTML code to select file and spec
sub upfile_select_html {
return (<<'ENDUPFORM');
-
+
Type: