--- loncom/interface/loncommon.pm 2002/08/22 21:05:25 1.58
+++ loncom/interface/loncommon.pm 2003/02/12 17:57:27 1.78
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.58 2002/08/22 21:05:25 albertel Exp $
+# $Id: loncommon.pm,v 1.78 2003/02/12 17:57:27 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,9 +27,7 @@
#
# YEAR=2001
# 2/13-12/7 Guy Albertelli
-# 12/11,12/12,12/17 Scott Harrison
# 12/21 Gerd Kortemeyer
-# 12/21 Scott Harrison
# 12/25,12/28 Gerd Kortemeyer
# YEAR=2002
# 1/4 Gerd Kortemeyer
@@ -98,6 +96,10 @@ my %cprtag;
my %fe; my %fd;
my %category_extensions;
+# ---------------------------------------------- Designs
+
+my %designhash;
+
# ---------------------------------------------- Thesaurus variables
=pod
@@ -166,6 +168,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'}.
@@ -283,7 +309,44 @@ sub browser_and_searcher_javascript {
END
}
+sub studentbrowser_javascript {
+ unless ($ENV{'request.course.id'}) { return ''; }
+ unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
+ return '';
+ }
+ return (<<'ENDSTDBRW');
+
+ENDSTDBRW
+}
+sub selectstudent_link {
+ my ($form,$unameele,$udomele)=@_;
+ unless ($ENV{'request.course.id'}) { return ''; }
+ unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
+ return '';
+ }
+ return "Select";
+}
###############################################################
@@ -465,7 +528,7 @@ sub help_open_topic {
if (!$stayOnPage)
{
- $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height'))";
+ $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))";
}
else
{
@@ -475,14 +538,16 @@ sub help_open_topic {
# Add the text
if ($text ne "")
{
- $template .= "$text ";
+ $template .=
+ "
".
+ "
$text";
}
# Add the graphic
$template .= <<"ENDTEMPLATE";
-
+
ENDTEMPLATE
-
+ if ($text ne '') { $template.='
' };
return $template;
}
@@ -774,7 +839,7 @@ sub authform_internal{
onclick="javascript:changed_radio('int',$args{'formname'});" />
Internally authenticated (with initial password
+ onchange="javascript:changed_text('int',$args{'formname'});" />)
END
return $result;
}
@@ -810,7 +875,7 @@ sub authform_filesystem{
onclick="javascript:changed_radio('fsys',$in{'formname'});" />
Filesystem authenticated (with initial password
+ onchange="javascript:changed_text('fsys',$in{'formname'});">)
END
return $result;
}
@@ -932,6 +997,79 @@ 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";
+}
+# --------------------------------------------------------------- Notes Wrapper
+
+sub noteswrapper {
+ my ($link,$un,$do)=@_;
+ return
+"$link";
+}
+# ------------------------------------------------------------- Aboutme Wrapper
+
+sub aboutmewrapper {
+ my ($link,$username,$domain)=@_;
+ return "$link";
+}
+
+# ------------------------------------------------------------ Syllabus Wrapper
+
+
+sub syllabuswrapper {
+ my ($link,$un,$do,$tf)=@_;
+ if ($tf) { $link=''.$link.''; }
+ return "$link";
+}
+
# ---------------------------------------------------------------- Language IDs
sub languageids {
return sort(keys(%language));
@@ -1061,7 +1199,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');
@@ -1069,6 +1207,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_');
@@ -1128,6 +1267,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;
@@ -1148,9 +1303,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)/) {
@@ -1164,43 +1417,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
@@ -1210,15 +1436,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
@@ -1239,6 +1471,7 @@ $addentries>
$realm
ENDBODY
+ }
}
###############################################
@@ -1630,7 +1863,7 @@ will result in $ENV{'form.uname'} and $E
returns cache-controlling header code
-=item nocache()
+=item no_cache($r)
specifies header code to not have cache