--- loncom/interface/loncommon.pm	2003/11/10 16:33:57	1.149
+++ loncom/interface/loncommon.pm	2003/11/17 15:14:48	1.155
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.149 2003/11/10 16:33:57 albertel Exp $
+# $Id: loncommon.pm,v 1.155 2003/11/17 15:14:48 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2007,7 +2007,7 @@ sub domainlogo {
 	my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
 	if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
         return '<img src="http://'.$ENV{'HTTP_HOST'}.':'.$lonhttpdPort.
-	    '/adm/lonDomLogos/'.$domain.'.gif" />';
+	    '/adm/lonDomLogos/'.$domain.'.gif" alt="'.$domain.'" />';
     } elsif(exists($Apache::lonnet::domaindescription{$domain})) {
         return $Apache::lonnet::domaindescription{$domain};
     } else {
@@ -2140,14 +2140,13 @@ sub bodytag {
     my $bodytag = <<END;
 <style>
 h1, h2, h3, th { font-family: Arial, Helvetica, sans-serif }
-a:hover { color: black; background: yellow }
 a:focus { color: red; background: yellow } 
 </style>
 <body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link"
-style="border-color: $tabbg; border-width: 4px; border-style: solid; padding: 4px;$addstyle" $addentries>
+style="margin-top: 0px;$addstyle" $addentries>
 END
     my $upperleft='<img src="http://'.$ENV{'HTTP_HOST'}.':'.
-                   $lonhttpdPort.$img.'" />';
+                   $lonhttpdPort.$img.'" alt="'.$function.'" />';
     if ($bodyonly) {
         return $bodytag;
     } elsif ($ENV{'browser.interface'} eq 'textual') {
@@ -2159,7 +2158,7 @@ END
 # No Remote
         return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web',
                                                       $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>';
     }
 
@@ -2745,9 +2744,10 @@ the routine &Apache::lonnet::transfer_pr
 
 ############################################################
 ############################################################
-
+my $uniq=0;
 sub get_cgi_id {
-    return (time.'_'.int(rand(1000)));
+    $uniq=($uniq+1)%100000;
+    return (time.'_'.$uniq);
 }
 
 ############################################################
@@ -3095,9 +3095,121 @@ sub chartlink {
        '">'.$linktext.'</a>';
 }
 
+#######################################################
+#######################################################
+
+=pod
+
+=head1 Course Environment Routines
+
+=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;
+} 
+
 =pod
 
 =back