[LON-CAPA-cvs] cvs: loncom /interface lonparmset.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 12 Feb 2002 06:28:23 -0000


This is a MIME encoded message

--albertel1013495303
Content-Type: text/plain

albertel		Tue Feb 12 01:28:23 2002 EDT

  Modified files:              
    /loncom/interface	lonparmset.pm 
  Log:
  - more readable, assesparms down to about 400 lines of code now
  - fixed bug with showing sections fro a specific resource, works now.
  
  
  
--albertel1013495303
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20020212012823.txt"

Index: loncom/interface/lonparmset.pm
diff -u loncom/interface/lonparmset.pm:1.43 loncom/interface/lonparmset.pm:1.44
--- loncom/interface/lonparmset.pm:1.43	Mon Feb 11 19:14:07 2002
+++ loncom/interface/lonparmset.pm	Tue Feb 12 01:28:23 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set parameters for assessments
 #
-# $Id: lonparmset.pm,v 1.43 2002/02/12 00:14:07 albertel Exp $
+# $Id: lonparmset.pm,v 1.44 2002/02/12 06:28:23 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -56,11 +56,8 @@
 
 my %courseopt;
 my %useropt;
-my %bighash;
 my %parmhash;
 
-my @outpar;
-
 my @ids;
 my %symbp;
 my %mapp;
@@ -70,17 +67,14 @@
 my $uname;
 my $udom;
 my $uhome;
-
 my $csec;
 
-my $fcat;
-
 # -------------------------------------------- Figure out a cascading parameter
 
 sub parmval {
     my ($what,$id,$def)=@_;
     my $result='';
-    @outpar=();
+    my @outpar=();
 # ----------------------------------------------------- Cascading lookup scheme
 
     my $symbparm=$symbp{$id}.'.'.$what;
@@ -155,7 +149,7 @@
 	}
     }
 
-    return $result;
+    return ($result,@outpar);
 }
 
 # ------------------------------------------------------------ Output for value
@@ -183,6 +177,128 @@
 		&valout($value,$type).'</a><a name="'.$marker.'"></a>';
 }
 
+
+sub startpage {
+    my ($r,$id,$udom,$csec,$uname)=@_;
+    $r->content_type('text/html');
+    $r->send_http_header;
+    $r->print(<<ENDHEAD);
+<html>
+<head>
+<title>LON-CAPA Course Parameters</title>
+<script>
+
+    function pclose() {
+        parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
+                 "height=350,width=350,scrollbars=no,menubar=no");
+        parmwin.close();
+    }
+
+    function pjump(type,dis,value,marker,ret,call) {
+        document.parmform.pres_marker.value='';
+        parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)
+                 +"&value="+escape(value)+"&marker="+escape(marker)
+                 +"&return="+escape(ret)
+                 +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",
+                 "height=350,width=350,scrollbars=no,menubar=no");
+
+    }
+
+    function psub() {
+        pclose();
+        if (document.parmform.pres_marker.value!='') {
+            document.parmform.action+='#'+document.parmform.pres_marker.value;
+            var typedef=new Array();
+            typedef=document.parmform.pres_type.value.split('_');
+           if (document.parmform.pres_type.value!='') {
+            if (typedef[0]=='date') {
+                eval('document.parmform.recent_'+
+                     document.parmform.pres_type.value+
+		     '.value=document.parmform.pres_value.value;');
+            } else {
+                eval('document.parmform.recent_'+typedef[0]+
+		     '.value=document.parmform.pres_value.value;');
+            }
+	   }
+            document.parmform.submit();
+        } else {
+            document.parmform.pres_value.value='';
+            document.parmform.pres_marker.value='';
+        }
+    }
+
+</script>
+</head>
+<body bgcolor="#FFFFFF" onUnload="pclose()">
+<h1>Set Course Parameters</h1>
+<form method="post" action="/adm/parmset" name="envform">
+<h2>Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}</h2>
+<h3>Course Environment</h3>
+<input type="submit" name="crsenv" value="Set Course Environment">
+</form>
+<form method="post" action="/adm/parmset" name="parmform">
+<h3>Course Assessments</h3>
+<b>
+Section/Group:
+<input type="text" value="$csec" size="6" name="csec">
+<br>
+For User 
+<input type="text" value="$uname" size="12" name="uname">
+or ID
+<input type="text" value="$id" size="12" name="id"> 
+at Domain 
+<input type="text" value="$udom" size="6" name="udom">
+</b>
+<input type="hidden" value='' name="pres_value">
+<input type="hidden" value='' name="pres_type">
+<input type="hidden" value='' name="pres_marker">
+ENDHEAD
+
+}
+
+sub print_row {
+    my ($r,$which,$part,$name,$rid,$default,$type,$display,$defbgone,
+	$defbgtwo)=@_;
+    my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},
+				  $rid,$$default{$which});
+    $r->print("<td bgcolor=".$defbgtwo.
+	      '>'.$$part{$which}.'</td><td bgcolor='.$defbgone.
+	      '>'.$$display{$which}.'</td>');
+    my $thismarker=$which;
+    $thismarker=~s/^parameter\_//;
+    my $mprefix=$rid.'&'.$thismarker.'&';
+
+    &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,$type,$display);
+    &print_td($r,10,'#FFDDDD',$result,\@outpar,$mprefix,$_,$type,$display);
+    &print_td($r,9,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+    &print_td($r,8,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+    &print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+    if ($csec) {
+	&print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display);
+	&print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display);
+	&print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,$type,$display);
+    }
+    if ($uname) {
+	&print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+	&print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+	&print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,$type,$display);
+    }
+    $r->print('<td bgcolor=#CCCCFF>'.&valout($outpar[$result],$$type{$which}).'</td>');
+    my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
+					'.'.$$name{$which},$symbp{$rid});
+    $r->print('<td bgcolor=#999999><font color=#FFFFFF>'.
+	      &valout($sessionval,$$type{$which}).'&nbsp;'.
+	      '</font></td>');
+    $r->print('</tr>');
+}
+
+sub print_td {
+    my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$type,$display)=@_;
+    $r->print('<td bgcolor='.(($result==$which)?'"#AAFFAA"':$defbg).'>'.
+	      &plink($$type{$value},$$display{$value},$$outpar[$which],
+		     $mprefix."$which",'parmform.pres','psub').'</td>');
+}
+
 sub assessparms {
 
     my $r=shift;
@@ -192,7 +308,7 @@
     my %defp;
     %courseopt=();
     %useropt=();
-    %bighash=();
+    my %bighash=();
 
     @ids=();
     %symbp=();
@@ -266,459 +382,335 @@
 
     unless ($csec) { $csec=''; }
 
-    $fcat=$ENV{'form.fcat'};
+    my $fcat=$ENV{'form.fcat'};
     unless ($fcat) { $fcat=''; }
 
 # ------------------------------------------------------------------- Tie hashs
-    if ((tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
-	     &GDBM_READER,0640)) &&
-	(tie(%parmhash,'GDBM_File',
-	     $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640))) {
-
+    if (!(tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
+	      &GDBM_READER,0640))) {
+	$r->print("Unable to access course data. (File $ENV{'request.course.fn'}.db not tieable)");
+	return ;
+    }
+    if (!(tie(%parmhash,'GDBM_File',
+	      $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640))) {
+	$r->print("Unable to access parameter data. (File $ENV{'request.course.fn'}_parms.db not tieable)");
+	return ;
+    }
 # --------------------------------------------------------- Get all assessments
-        foreach (keys %bighash) {
-	    if ($_=~/^src\_(\d+)\.(\d+)$/) {
-		my $mapid=$1;
-		my $resid=$2;
-		my $id=$mapid.'.'.$resid;
-		my $srcf=$bighash{$_};
-		if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) {
-		    $ids[$#ids+1]=$id;
-		    $typep{$id}=$1;
-		    $keyp{$id}='';
-		    foreach (split(/\,/,
-				   &Apache::lonnet::metadata($srcf,'keys'))) {
-			if ($_=~/^parameter\_(.*)/) {
-			    my $key=$_;
-			    my $allkey=$1;
-			    $allkey=~s/\_/\./;
-			    my $display=
-				&Apache::lonnet::metadata($srcf,$key.'.display');
-			    unless ($display) {
-				$display=
-				    &Apache::lonnet::metadata($srcf,$key.'.name');
-			    }
-			    $allkeys{$allkey}=$display;
-			    if ($allkey eq $fcat) {
-				$defp{$id}=
-				    &Apache::lonnet::metadata($srcf,$key);
-			    }
-			    if ($keyp{$id}) {
-				$keyp{$id}.=','.$key;
-			    } else {
-				$keyp{$id}=$key;
-			    }
+    foreach (keys %bighash) {
+	if ($_=~/^src\_(\d+)\.(\d+)$/) {
+	    my $mapid=$1;
+	    my $resid=$2;
+	    my $id=$mapid.'.'.$resid;
+	    my $srcf=$bighash{$_};
+	    if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+		$ids[$#ids+1]=$id;
+		$typep{$id}=$1;
+		$keyp{$id}='';
+		foreach (split(/\,/,
+			       &Apache::lonnet::metadata($srcf,'keys'))) {
+		    if ($_=~/^parameter\_(.*)/) {
+			my $key=$_;
+			my $allkey=$1;
+			$allkey=~s/\_/\./;
+			my $display=
+			    &Apache::lonnet::metadata($srcf,$key.'.display');
+			unless ($display) {
+			    $display=
+				&Apache::lonnet::metadata($srcf,$key.'.name');
+			}
+			$allkeys{$allkey}=$display;
+			if ($allkey eq $fcat) {
+			    $defp{$id}=
+				&Apache::lonnet::metadata($srcf,$key);
+			}
+			if ($keyp{$id}) {
+			    $keyp{$id}.=','.$key;
+			} else {
+			    $keyp{$id}=$key;
 			}
 		    }
-		    $mapp{$id}=
-			&Apache::lonnet::declutter($bighash{'map_id_'.$mapid});
-		    $allmaps{$mapid}=$mapp{$id};
-		    $symbp{$id}=$mapp{$id}.
+		}
+		$mapp{$id}=
+		    &Apache::lonnet::declutter($bighash{'map_id_'.$mapid});
+		$allmaps{$mapid}=$mapp{$id};
+		$symbp{$id}=$mapp{$id}.
 			'___'.$resid.'___'.
 			    &Apache::lonnet::declutter($srcf);
-		}
-            }
-        }
+	    }
+	}
+    }
 # ---------------------------------------------------------- Anything to store?
-        if ($ENV{'form.pres_marker'}) {
-	    my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'});
-	    $spnam=~s/\_([^\_]+)$/\.$1/;
+    if ($ENV{'form.pres_marker'}) {
+	my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'});
+	$spnam=~s/\_([^\_]+)$/\.$1/;
 # ---------------------------------------------------------- Construct prefixes
 
-	    my $symbparm=$symbp{$sresid}.'.'.$spnam;
-	    my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;
-
-	    my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam;
-	    my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm;
-	    my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm;
-
-	    my $courselevel=$ENV{'request.course.id'}.'.'.$spnam;
-	    my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;
-	    my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm;
-
-	    my $storeunder='';
-	    if (($snum==9) || ($snum==3)) { $storeunder=$courselevel; }
-	    if (($snum==8) || ($snum==2)) { $storeunder=$courselevelm; }
-	    if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; }
-	    if ($snum==6) { $storeunder=$seclevel; }
-	    if ($snum==5) { $storeunder=$seclevelm; }
-	    if ($snum==4) { $storeunder=$seclevelr; }
-	    $storeunder=&Apache::lonnet::escape($storeunder);
-
-	    my $storecontent=
-		$storeunder.'='.
-		    &Apache::lonnet::escape($ENV{'form.pres_value'}).'&'.
-			$storeunder.'.type='.
-			    &Apache::lonnet::escape($ENV{'form.pres_type'});
+	my $symbparm=$symbp{$sresid}.'.'.$spnam;
+	my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;
+	
+	my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam;
+	my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm;
+	my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm;
+	
+	my $courselevel=$ENV{'request.course.id'}.'.'.$spnam;
+	my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;
+	my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm;
+	
+	my $storeunder='';
+	if (($snum==9) || ($snum==3)) { $storeunder=$courselevel; }
+	if (($snum==8) || ($snum==2)) { $storeunder=$courselevelm; }
+	if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; }
+	if ($snum==6) { $storeunder=$seclevel; }
+	if ($snum==5) { $storeunder=$seclevelm; }
+	if ($snum==4) { $storeunder=$seclevelr; }
+	$storeunder=&Apache::lonnet::escape($storeunder);
+	
+	my $storecontent=
+	    $storeunder.'='.
+		&Apache::lonnet::escape($ENV{'form.pres_value'}).'&'.
+		    $storeunder.'.type='.
+			&Apache::lonnet::escape($ENV{'form.pres_type'});
 
-	    my $reply='';
-	    if ($snum>3) {
+	my $reply='';
+	if ($snum>3) {
 # ---------------------------------------------------------------- Store Course
 #
 # Expire sheets
-		&Apache::lonnet::expirespread('','','studentcalc');
-		if (($snum==7) || ($snum==4)) {
-		    &Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid});
-		} elsif (($snum==8) || ($snum==5)) {
-		    &Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid});
-		} else {
-		    &Apache::lonnet::expirespread('','','assesscalc');
-		}
+	    &Apache::lonnet::expirespread('','','studentcalc');
+	    if (($snum==7) || ($snum==4)) {
+		&Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid});
+	    } elsif (($snum==8) || ($snum==5)) {
+		&Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid});
+	    } else {
+		&Apache::lonnet::expirespread('','','assesscalc');
+	    }
 
 # Store parameter
-		$reply=&Apache::lonnet::critical('put:'.
-						 $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
-						 $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':resourcedata:'.
-						 $storecontent,
-						 $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
-	    } else {
+	    $reply=&Apache::lonnet::critical('put:'.
+					     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
+					     $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':resourcedata:'.
+					     $storecontent,
+					     $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+	} else {
 # ------------------------------------------------------------------ Store User
 #
 # Expire sheets
-		&Apache::lonnet::expirespread($uname,$udom,'studentcalc');
-		if ($snum==1) {
-		    &Apache::lonnet::expirespread
-			($uname,$udom,'assesscalc',$symbp{$sresid});
-		} elsif ($snum==2) {
-		    &Apache::lonnet::expirespread
-			($uname,$udom,'assesscalc',$mapp{$sresid});
-		} else {
-		    &Apache::lonnet::expirespread($uname,$udom,'assesscalc');
-		}
+	    &Apache::lonnet::expirespread($uname,$udom,'studentcalc');
+	    if ($snum==1) {
+		&Apache::lonnet::expirespread
+		    ($uname,$udom,'assesscalc',$symbp{$sresid});
+	    } elsif ($snum==2) {
+		&Apache::lonnet::expirespread
+		    ($uname,$udom,'assesscalc',$mapp{$sresid});
+	    } else {
+		&Apache::lonnet::expirespread($uname,$udom,'assesscalc');
+	    }
 
 # Store parameter
-		$reply=
-		    &Apache::lonnet::critical('put:'.$udom.':'.$uname.':resourcedata:'.
-					      $storecontent,$uhome);
-           }
+	    $reply=
+		&Apache::lonnet::critical('put:'.$udom.':'.$uname.':resourcedata:'.
+					  $storecontent,$uhome);
+	}
 
-	    if ($reply=~/^error\:(.*)/) {
-		$message.="<font color=red>Write Error: $1</font>";
-	    }
+	if ($reply=~/^error\:(.*)/) {
+	    $message.="<font color=red>Write Error: $1</font>";
+	}
 # ---------------------------------------------------------------- Done storing
-   }
+    }
 # -------------------------------------------------------------- Get coursedata
-        my $reply=&Apache::lonnet::reply('dump:'.
-					 $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
-					 $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':resourcedata',
-					 $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
-        if ($reply!~/^error\:/) {
+    my $reply=&Apache::lonnet::reply('dump:'.
+				     $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'.
+				     $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':resourcedata',
+				     $ENV{'course.'.$ENV{'request.course.id'}.'.home'});
+    if ($reply!~/^error\:/) {
+	foreach (split(/\&/,$reply)) {
+	    my ($name,$value)=split(/\=/,$_);
+	    $courseopt{&Apache::lonnet::unescape($name)}=
+		&Apache::lonnet::unescape($value);
+	}
+    }
+# --------------------------------------------------- Get userdata (if present)
+    if ($uname) {
+	my $reply=
+	    &Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome);
+	if ($reply!~/^error\:/) {
 	    foreach (split(/\&/,$reply)) {
 		my ($name,$value)=split(/\=/,$_);
-		$courseopt{&Apache::lonnet::unescape($name)}=
+		$useropt{&Apache::lonnet::unescape($name)}=
 		    &Apache::lonnet::unescape($value);
 	    }
-        }
-# --------------------------------------------------- Get userdata (if present)
-        if ($uname) {
-	    my $reply=
-		&Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome);
-	    if ($reply!~/^error\:/) {
-		foreach (split(/\&/,$reply)) {
-		    my ($name,$value)=split(/\=/,$_);
-		    $useropt{&Apache::lonnet::unescape($name)}=
-			&Apache::lonnet::unescape($value);
-		}
-	    }
-        }
+	}
+    }
 
 # ------------------------------------------------------------------- Sort this
 
-        @ids=sort  {
-	    if ($fcat eq '') {
-		$a<=>$b;
-	    } else {
-		1*$outpar[&parmval($fcat,$a,$defp{$a})]<=>
-		    1*$outpar[&parmval($fcat,$b,$defp{$b})];
-	    }
-	} @ids;
+    @ids=sort  {
+	if ($fcat eq '') {
+	    $a<=>$b;
+	} else {
+	    my ($result,@outpar)=&parmval($fcat,$a,$defp{$a});
+	    my $aparm=$outpar[$result];
+	    ($result,@outpar)=&parmval($fcat,$b,$defp{$b});
+	    my $bparm=$outpar[$result];
+	    1*$aparm<=>1*$bparm;
+	}
+    } @ids;
 
 # ------------------------------------------------------------------ Start page
-	$r->content_type('text/html');
-	$r->send_http_header;
-	$r->print(<<ENDHEAD);
-<html>
-<head>
-<title>LON-CAPA Course Parameters</title>
-<script>
-
-    function pclose() {
-        parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
-                 "height=350,width=350,scrollbars=no,menubar=no");
-        parmwin.close();
-    }
-
-    function pjump(type,dis,value,marker,ret,call) {
-        document.parmform.pres_marker.value='';
-        parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)
-                 +"&value="+escape(value)+"&marker="+escape(marker)
-                 +"&return="+escape(ret)
-                 +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",
-                 "height=350,width=350,scrollbars=no,menubar=no");
-
-    }
-
-    function psub() {
-        pclose();
-        if (document.parmform.pres_marker.value!='') {
-            document.parmform.action+='#'+document.parmform.pres_marker.value;
-            var typedef=new Array();
-            typedef=document.parmform.pres_type.value.split('_');
-           if (document.parmform.pres_type.value!='') {
-            if (typedef[0]=='date') {
-                eval('document.parmform.recent_'+
-                     document.parmform.pres_type.value+
-		     '.value=document.parmform.pres_value.value;');
-            } else {
-                eval('document.parmform.recent_'+typedef[0]+
-		     '.value=document.parmform.pres_value.value;');
-            }
-	   }
-            document.parmform.submit();
-        } else {
-            document.parmform.pres_value.value='';
-            document.parmform.pres_marker.value='';
-        }
+    &startpage($r,$id,$udom,$csec,$uname);
+#    if ($ENV{'form.url'}) {
+#	$r->print('<input type="hidden" value="'.$ENV{'form.url'}.
+#		  '" name="url"><input type="hidden" name="command" value="set">');
+#    }
+    foreach ('tolerance','date_default','date_start','date_end',
+	     'date_interval','int','float','string') {
+	$r->print('<input type="hidden" value="'.
+		  $ENV{'form.recent_'.$_}.'" name="recent_'.$_.'">');
+    }
+
+    $r->print('<h2>'.$message.'</h2><table><tr><td>Sort list by</td><td>');
+    $r->print('<select name="fcat">');
+    $r->print('<option value="">Enclosing Map</option>');
+    foreach (reverse sort keys %allkeys) {
+	$r->print('<option value="'.$_.'"');
+	if ($fcat eq $_) { $r->print(' selected'); }
+	$r->print('>'.$allkeys{$_}.'</option>');
     }
-
-</script>
-</head>
-<body bgcolor="#FFFFFF" onUnload="pclose()">
-<h1>Set Course Parameters</h1>
-<form method="post" action="/adm/parmset" name="envform">
-<h2>Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}</h2>
-<h3>Course Environment</h3>
-<input type="submit" name="crsenv" value="Set Course Environment">
-</form>
-<form method="post" action="/adm/parmset" name="parmform">
-<h3>Course Assessments</h3>
-<b>
-Section/Group: 
-<input type="text" value="$csec" size="6" name="csec">
-<br>
-For User 
-<input type="text" value="$uname" size="12" name="uname">
-or ID
-<input type="text" value="$id" size="12" name="id"> 
-at Domain 
-<input type="text" value="$udom" size="6" name="udom">
-</b>
-<input type="hidden" value='' name="pres_value">
-<input type="hidden" value='' name="pres_type">
-<input type="hidden" value='' name="pres_marker"> 
-ENDHEAD
-	if ($ENV{'form.url'}) {
-	    $r->print('<input type="hidden" value="'.$ENV{'form.url'}.
-		      '" name="url"><input type="hidden" name="command" value="set">');
-	}
-	foreach ('tolerance','date_default','date_start','date_end',
-		 'date_interval','int','float','string') {
-	    $r->print('<input type="hidden" value="'.
-		      $ENV{'form.recent_'.$_}.'" name="recent_'.$_.'">');
-	}
-	
-        $r->print('<h2>'.$message.'</h2><table><tr><td>Sort list by</td><td>');
-	$r->print('<select name="fcat">');
-        $r->print('<option value="">Enclosing Map</option>');
-        foreach (reverse sort keys %allkeys) {
-	    $r->print('<option value="'.$_.'"');
-            if ($fcat eq $_) { $r->print(' selected'); }
-            $r->print('>'.$allkeys{$_}.'</option>');
-        }
+    if (!$pssymb) {
 	$r->print('</select></tr><tr><td>Select Enclosing Map</td><td><select name=pschp>');
-        $r->print('<option value=all>All Maps</option>');
-        foreach (keys %allmaps) {
-	    $r->print('<option value="'.$_.'"');
-            if (($pssymb=~/^$allmaps{$_}/) || 
-                ($pschp eq $_)) { $r->print(' selected'); }
-            $r->print('>'.$allmaps{$_}.'</option>');
-        }
-        $r->print('</select></td></tr><tr><td>Select Parameter</td><td><select name=pscat>');
-        $r->print('<option value=all>All Parameters</option>');
-        foreach (reverse sort keys %allkeys) {
+	$r->print('<option value=all>All Maps</option>');
+	foreach (keys %allmaps) {
 	    $r->print('<option value="'.$_.'"');
-            if ($pscat eq $_) { $r->print(' selected'); }
-            $r->print('>'.$allkeys{$_}.'</option>');
-        }
-        $r->print('</select></td></tr></table><br><input name=dis type="submit" value="Display">');
-	if (($pscat) || ($pschp) || ($pssymb)) {
+	    if (($pssymb=~/^$allmaps{$_}/) || 
+		($pschp eq $_)) { $r->print(' selected'); }
+	    $r->print('>'.$allmaps{$_}.'</option>');
+	}
+    } else {
+	my ($map,$id,$resource)=split(/___/,$pssymb);
+	$r->print('<tr><td>Specfic Resource</td><td>&nbsp;</td></tr>');
+	$r->print('<input type="hidden" value="'.$pssymb.'" name="symb">');
+    }
+    $r->print('</select></td></tr><tr><td>Select Parameter</td><td><select name=pscat>');
+    $r->print('<option value=all>All Parameters</option>');
+    foreach (reverse sort keys %allkeys) {
+	$r->print('<option value="'.$_.'"');
+	if ($pscat eq $_) { $r->print(' selected'); }
+	$r->print('>'.$allkeys{$_}.'</option>');
+    }
+    $r->print('</select></td></tr></table><br><input name=dis type="submit" value="Display">');
+    if (($pscat) || ($pschp) || ($pssymb)) {
 # ----------------------------------------------------------------- Start Table
-	    my $catmarker='parameter_'.$pscat;
-	    $catmarker=~s/\./\_/g;
-	    my $coursespan=$csec?8:5;
-	    my $csuname=$ENV{'user.name'};
-	    my $csudom=$ENV{'user.domain'};
-	    $r->print(<<ENDTABLEHEAD);
+	my $catmarker='parameter_'.$pscat;
+	$catmarker=~s/\./\_/g;
+	my $coursespan=$csec?8:5;
+	my $csuname=$ENV{'user.name'};
+	my $csudom=$ENV{'user.domain'};
+	$r->print(<<ENDTABLEHEAD);
 <p><table border=2>
 <tr><td colspan=5></td>
 <th colspan=$coursespan>Any User</th>
 ENDTABLEHEAD
-	    if ($uname) {
-		$r->print("<th colspan=3 rowspan=2>User $uname at Domain $udom</th>");
-	    }
-	    $r->print(<<ENDTABLETWO);
+	if ($uname) {
+	    $r->print("<th colspan=3 rowspan=2>User $uname at Domain $udom</th>");
+	}
+	$r->print(<<ENDTABLETWO);
 <th rowspan=3>Parameter in Effect</th>
 <th rowspan=3>Current Session Value<br>($csuname at $csudom)</th>
 </tr><tr><td colspan=5></td>
 <th colspan=2>Resource Level</th>
 <th colspan=3>in Course</th>
 ENDTABLETWO
-	    if ($csec) {
-		$r->print("<th colspan=3>in Section/Group $csec</th>");
-	    }
-	    $r->print(<<ENDTABLEHEADFOUR);
+	if ($csec) {
+	    $r->print("<th colspan=3>in Section/Group $csec</th>");
+	}
+	$r->print(<<ENDTABLEHEADFOUR);
 </tr><tr><th>Assessment URL and Title</th><th>Type</th>
 <th>Enclosing Map</th><th>Part No.</th><th>Parameter Name</th>
 <th>default</th><th>from Enclosing Map</th>
 <th>general</th><th>for Enclosing Map</th><th>for Resource</th>
 ENDTABLEHEADFOUR
-	    if ($csec) {
-		$r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>');
-	    }
-	    if ($uname) {
-		$r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>');
-	    }
-	    $r->print('</tr>');
-	    my $defbgone='';
-	    my $defbgtwo='';
-	    foreach (@ids) {
-		my $rid=$_;
-		my ($inmapid)=($rid=~/\.(\d+)$/);
-		if (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid}) ||
-		    ($pssymb eq $mapp{$rid}.'___'.$inmapid.'___'.
-		     &Apache::lonnet::declutter($bighash{'src_'.$rid}))) {
+	if ($csec) {
+	    $r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>');
+	}
+	if ($uname) {
+	    $r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>');
+	}
+	$r->print('</tr>');
+	my $defbgone='';
+	my $defbgtwo='';
+	foreach (@ids) {
+	    my $rid=$_;
+	    my ($inmapid)=($rid=~/\.(\d+)$/);
+	    if (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid}) ||
+		($pssymb eq $symbp{$rid})) {
 # ------------------------------------------------------ Entry for one resource
-		    if ($defbgone eq '"E0E099"') {
-			$defbgone='"E0E0DD"';
-		    } else {
-			$defbgone='"E0E099"';
-		    }
-		    if ($defbgtwo eq '"FFFF99"') {
-			$defbgtwo='"FFFFDD"';
-		    } else {
-			$defbgtwo='"FFFF99"';
+		if ($defbgone eq '"E0E099"') {
+		    $defbgone='"E0E0DD"';
+		} else {
+		    $defbgone='"E0E099"';
+		}
+		if ($defbgtwo eq '"FFFF99"') {
+		    $defbgtwo='"FFFFDD"';
+		} else {
+		    $defbgtwo='"FFFF99"';
+		}
+		my $thistitle='';
+		my %name=   ();
+		undef %name;
+		my %part=   ();
+		my %display=();
+		my %type=   ();
+		my %default=();
+		my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid});
+		
+		foreach (split(/\,/,$keyp{$rid})) {
+		    if (($_ eq $catmarker) || ($pscat eq 'all')) {
+			$part{$_}=&Apache::lonnet::metadata($uri,$_.'.part');
+			$name{$_}=&Apache::lonnet::metadata($uri,$_.'.name');
+			$display{$_}=&Apache::lonnet::metadata($uri,$_.'.display');
+			unless ($display{$_}) { $display{$_}=''; }
+			$display{$_}.=' ('.$name{$_}.')';
+			$default{$_}=&Apache::lonnet::metadata($uri,$_);
+			$type{$_}=&Apache::lonnet::metadata($uri,$_.'.type');
+			$thistitle=&Apache::lonnet::metadata($uri,$_.'.title');
 		    }
-		    @outpar=();
-		    my $thistitle='';
-		    my %name=   ();
-		    undef %name;
-		    my %part=   ();
-		    my %display=();
-		    my %type=   ();
-		    my %default=();
-		    my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid});
-
-		    foreach (split(/\,/,$keyp{$rid})) {
-			if (($_ eq $catmarker) || ($pscat eq 'all')) {
-			    $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part');
-			    $name{$_}=&Apache::lonnet::metadata($uri,$_.'.name');
-			    $display{$_}=&Apache::lonnet::metadata($uri,$_.'.display');
-			    unless ($display{$_}) { $display{$_}=''; }
-			    $display{$_}.=' ('.$name{$_}.')';
-			    $default{$_}=&Apache::lonnet::metadata($uri,$_);
-			    $type{$_}=&Apache::lonnet::metadata($uri,$_.'.type');
-			    $thistitle=&Apache::lonnet::metadata($uri,$_.'.title');
-			}
+		}
+		my $totalparms=scalar keys %name;
+		if ($totalparms>0) {
+		    my $firstrow=1;
+		    $r->print('<tr><td bgcolor='.$defbgone.
+			      ' rowspan='.$totalparms.'><tt><font size=-1>'.
+			      join(' / ',split(/\//,$uri)).
+			      '</font></tt><p><b>'.
+			      $bighash{'title_'.$rid});
+		    if ($thistitle) {
+			$r->print(' ('.$thistitle.')');
 		    }
-		    my $totalparms=scalar keys %name;
-		    if ($totalparms>0) {
-			my $firstrow=1;
-			$r->print('<tr><td bgcolor='.$defbgone.
-				  ' rowspan='.$totalparms.'><tt><font size=-1>'.
-				  join(' / ',split(/\//,$uri)).
-				  '</font></tt><p><b>'.
-				  $bighash{'title_'.$rid});
-			if ($thistitle) {
-			    $r->print(' ('.$thistitle.')');
-			}
-			$r->print('</b></td>');
-			$r->print('<td bgcolor='.$defbgtwo.
-				  ' rowspan='.$totalparms.'>'.$typep{$rid}.'</td>');
-			$r->print('<td bgcolor='.$defbgone.
-				  ' rowspan='.$totalparms.'><tt><font size=-1>'.
-				  join(' / ',split(/\//,$mapp{$rid})).'</font></tt></td>');
-			foreach (sort keys %name) {
-			    my $result=&parmval($part{$_}.'.'.$name{$_},$rid,$default{$_});
-			    unless ($firstrow) { 
-				$r->print('<tr>'); 
-			    } else {
-				$firstrow=0;
-			    }
-			    $r->print("<td bgcolor=".$defbgtwo.
-				      ">$part{$_}</td><td bgcolor=".$defbgone.
-				      ">$display{$_}</td>");
-			    my $thismarker=$_;
-			    $thismarker=~s/^parameter\_//; 
-			    my $mprefix=$rid.'&'.$thismarker.'&';
-
-			    $r->print('<td bgcolor='.
-				      (($result==11)?'"#AAFFAA"':'#FFDDDD').'>'.
-				      &valout($outpar[11],$type{$_}).'</td>');
-			    $r->print('<td bgcolor='.
-				      (($result==10)?'"#AAFFAA"':'#FFDDDD').'>'.
-				      &valout($outpar[10],$type{$_}).'</td>');
-			
-			    $r->print('<td bgcolor='.
-				      (($result==9)?'"#AAFFAA"':$defbgone).'>'.
-				      &plink($type{$_},$display{$_},$outpar[9],$mprefix.'9',
-					     'parmform.pres','psub').'</td>');
-			    $r->print('<td bgcolor='.
-				      (($result==8)?'"#AAFFAA"':$defbgone).'>'.
-				      &plink($type{$_},$display{$_},$outpar[8],$mprefix.'8',
-					     'parmform.pres','psub').'</td>');
-			    $r->print('<td bgcolor='.
-				      (($result==7)?'"#AAFFAA"':$defbgone).'>'.
-				      &plink($type{$_},$display{$_},$outpar[7],$mprefix.'7',
-					     'parmform.pres','psub').'</td>');
-
-			    if ($csec) {
-				$r->print('<td bgcolor='.
-					  (($result==6)?'"#AAFFAA"':$defbgtwo).'>'.
-					  &plink($type{$_},$display{$_},$outpar[6],$mprefix.'6',
-						 'parmform.pres','psub').'</td>');
-				$r->print('<td bgcolor='.
-					  (($result==5)?'"#AAFFAA"':$defbgtwo).'>'.
-					  &plink($type{$_},$display{$_},$outpar[5],$mprefix.'5',
-						 'parmform.pres','psub').'</td>');
-				$r->print('<td bgcolor='.
-					  (($result==4)?'"#AAFFAA"':$defbgtwo).'>'.
-					  &plink($type{$_},$display{$_},$outpar[4],$mprefix.'4',
-						 'parmform.pres','psub').'</td>');
-			    }
-
-			    if ($uname) {
-				$r->print('<td bgcolor='.
-					  (($result==3)?'"#AAFFAA"':$defbgone).'>'.
-					  &plink($type{$_},$display{$_},$outpar[3],$mprefix.'3',
-						 'parmform.pres','psub').'</td>');
-				$r->print('<td bgcolor='.
-					  (($result==2)?'"#AAFFAA"':$defbgone).'>'.
-					  &plink($type{$_},$display{$_},$outpar[2],$mprefix.'2',
-						 'parmform.pres','psub').'</td>');
-				$r->print('<td bgcolor='.
-					  (($result==1)?'"#AAFFAA"':$defbgone).'>'.
-					  &plink($type{$_},$display{$_},$outpar[1],$mprefix.'1',
-						 'parmform.pres','psub').'</td>');
-			    }
-			    $r->print('<td bgcolor=#CCCCFF>'.&valout($outpar[$result],$type{$_}).'</td>');
-			    my $sessionval=&Apache::lonnet::EXT('resource.'.$part{$_}.
-								'.'.$name{$_},$mapp{$rid}.'___'.$inmapid.'___'.$uri);
-			    if (($type{$_}=~/^date/) && ($sessionval))
-				{ $sessionval=localtime($sessionval); }
-			    $r->print('<td bgcolor=#999999><font color=#FFFFFF>'.$sessionval.'&nbsp;'.
-				      '</font></td>');
-			    $r->print("</tr>");
+		    $r->print('</b></td>');
+		    $r->print('<td bgcolor='.$defbgtwo.
+			      ' rowspan='.$totalparms.'>'.$typep{$rid}.'</td>');
+		    $r->print('<td bgcolor='.$defbgone.
+			      ' rowspan='.$totalparms.'><tt><font size=-1>'.
+			      join(' / ',split(/\//,$mapp{$rid})).'</font></tt></td>');
+		    foreach (sort keys %name) {
+			unless ($firstrow) {
+			    $r->print('<tr>');
+			} else {
+			    $firstrow=0;
 			}
+			&print_row($r,$_,\%part,\%name,$rid,\%default,
+				   \%type,\%display,$defbgone,$defbgtwo);
 		    }
-# -------------------------------------------------- End entry for one resource
 		}
+# -------------------------------------------------- End entry for one resource
 	    }
-	    $r->print('</table>');
 	}
-	$r->print('</form></body></html>');
-	untie(%bighash);
-	untie(%parmhash);
+	$r->print('</table>');
     }
+    $r->print('</form></body></html>');
+    untie(%bighash);
+    untie(%parmhash);
 }
 
 sub crsenv {
@@ -913,7 +905,7 @@
 
 =item *
 
-valout() : output for value
+valout() : format a value for output
 
 =item *
 

--albertel1013495303--