version 1.2, 2000/11/21 12:22:29
|
version 1.11, 2000/11/24 21:41:43
|
Line 9
|
Line 9
|
# |
# |
# 10/11,10/12,10/16 Gerd Kortemeyer) |
# 10/11,10/12,10/16 Gerd Kortemeyer) |
# |
# |
# 11/20,11/21 Gerd Kortemeyer |
# 11/20,11/21,11/22,11/23,11/24,11/25 Gerd Kortemeyer |
|
|
package Apache::lonparmset; |
package Apache::lonparmset; |
|
|
Line 17 use strict;
|
Line 17 use strict;
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::Constants qw(:common :http REDIRECT); |
use Apache::Constants qw(:common :http REDIRECT); |
use GDBM_File; |
use GDBM_File; |
|
use Apache::lonmeta; |
|
|
|
|
my %courseopt; |
my %courseopt; |
my %useropt; |
my %useropt; |
my %bighash; |
my %bighash; |
my %parmhash; |
my %parmhash; |
|
|
my @srcp; |
my @outpar; |
my @typep; |
|
my @resp; |
my @ids; |
my @mapp; |
my %symbp; |
my @symbp; |
my %mapp; |
|
my %typep; |
|
|
my $uname; |
my $uname; |
my $udom; |
my $udom; |
Line 35 my $uhome;
|
Line 38 my $uhome;
|
|
|
my $csec; |
my $csec; |
|
|
|
my $fcat; |
|
|
# -------------------------------------------- Figure out a cascading parameter |
# -------------------------------------------- Figure out a cascading parameter |
|
|
sub parmval { |
sub parmval { |
my ($what,$idx)=@_; |
my ($what,$id,$def)=@_; |
|
my $result=''; |
|
@outpar=(); |
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
my $symbparm=$symbp[$idx].'.'.$what; |
|
my $reslevel= |
my $symbparm=$symbp{$id}.'.'.$what; |
$ENV{'request.course.id'}.'.'.$symbparm; |
my $mapparm=$mapp{$id}.'___(all).'.$what; |
|
|
my $seclevel= |
my $seclevel= |
$ENV{'request.course.id'}.'.'. |
$ENV{'request.course.id'}.'.['. |
$ENV{'request.course.sec'}.'.'.$what; |
$ENV{'request.course.sec'}.'].'.$what; |
|
my $seclevelr= |
|
$ENV{'request.course.id'}.'.['. |
|
$ENV{'request.course.sec'}.'].'.$symbparm; |
|
my $seclevelm= |
|
$ENV{'request.course.id'}.'.['. |
|
$ENV{'request.course.sec'}.'].'.$mapparm; |
|
|
my $courselevel= |
my $courselevel= |
$ENV{'request.course.id'}.'.'.$what; |
$ENV{'request.course.id'}.'.'.$what; |
|
my $courselevelr= |
|
$ENV{'request.course.id'}.'.'.$symbparm; |
|
my $courselevelm= |
|
$ENV{'request.course.id'}.'.'.$mapparm; |
|
|
# ----------------------------------------------------------- first, check user |
# -------------------------------------------------------- first, check default |
|
|
if ($useropt{$reslevel}) { return $useropt{$reslevel}; } |
if ($def) { $outpar[11]=$def; |
if ($useropt{$seclevel}) { return $useropt{$seclevel}; } |
$result=11; } |
if ($useropt{$courselevel}) { return $useropt{$courselevel}; } |
|
|
|
# -------------------------------------------------------- second, check course |
# ----------------------------------------------------- second, check map parms |
|
|
if ($courseopt{$reslevel}) { return $courseopt{$reslevel}; } |
my $thisparm=$parmhash{$symbparm}; |
if ($courseopt{$seclevel}) { return $courseopt{$seclevel}; } |
if ($thisparm) { $outpar[10]=$thisparm; |
if ($courseopt{$courselevel}) { return $courseopt{$courselevel}; } |
$result=10; } |
|
|
# ------------------------------------------------------ third, check map parms |
# --------------------------------------------------------- third, check course |
|
|
my $thisparm=$parmhash{$symbparm}; |
if ($courseopt{$courselevel}) { $outpar[9]=$courseopt{$courselevel}; |
if ($thisparm) { return $thisparm; } |
$result=9; } |
|
|
|
if ($courseopt{$courselevelm}) { $outpar[8]=$courseopt{$courselevelm}; |
|
$result=8; } |
|
|
|
if ($courseopt{$courselevelr}) { $outpar[7]=$courseopt{$courselevelr}; |
|
$result=7; } |
|
|
|
if ($csec) { |
|
|
|
if ($courseopt{$seclevel}) { $outpar[6]=$courseopt{$seclevel}; |
|
$result=6; } |
|
|
|
if ($courseopt{$seclevelm}) { $outpar[5]=$courseopt{$seclevelm}; |
|
$result=5; } |
|
|
|
if ($courseopt{$seclevelr}) { $outpar[4]=$courseopt{$seclevelr}; |
|
$result=4; } |
|
|
|
} |
|
|
|
# ---------------------------------------------------------- fourth, check user |
|
|
|
if ($uname) { |
|
|
|
if ($useropt{$courselevel}) { $outpar[3]=$useropt{$courselevel}; |
|
$result=3; } |
|
|
|
if ($useropt{$courselevelm}) { $outpar[2]=$useropt{$courselevelm}; |
|
$result=2; } |
|
|
|
if ($useropt{$courselevelr}) { $outpar[1]=$useropt{$courselevelr}; |
|
$result=1; } |
|
|
|
} |
|
|
# --------------------------------------------- last, look in resource metadata |
return $result; |
|
} |
|
|
my $filename='/home/httpd/res/'.$srcp[$idx].'.meta'; |
# ---------------------------------------------------------------- Sort routine |
if (-e $filename) { |
|
my @content; |
sub bycat { |
{ |
if ($fcat eq '') { |
my $fh=Apache::File->new($filename); |
$a<=>$b; |
@content=<$fh>; |
} else { |
} |
&parmval('0.'.$fcat,$a)<=>&parmval('0.'.$fcat,$b); |
if (join('',@content)=~ |
} |
/\<$what[^\>]*\>([^\<]*)\<\/$what\>/) { |
} |
return $1; |
|
} |
# ------------------------------------------------------------ Output for value |
} |
|
return ''; |
sub valout { |
|
my ($value,$type)=@_; |
|
return |
|
($value?(($type=~/^date/)?localtime($value):$value):' '); |
|
} |
|
|
|
# -------------------------------------------------------- Produces link anchor |
|
|
|
sub plink { |
|
my ($type,$dis,$value,$marker,$return,$call)=@_; |
|
return '<a href="javascript:pjump('."'".$type."','".$dis."','".$value."','" |
|
.$marker."','".$return."','".$call."'".');">'. |
|
&valout($value,$type).'</a>'; |
} |
} |
|
|
# ================================================================ Main Handler |
# ================================================================ Main Handler |
Line 105 sub handler {
|
Line 169 sub handler {
|
%useropt=(); |
%useropt=(); |
%bighash=(); |
%bighash=(); |
|
|
@srcp=(); |
@ids=(); |
@typep=(); |
%symbp=(); |
@resp=(); |
%typep=(); |
@mapp=(); |
|
@symbp=(); |
|
|
|
$uname=$ENV{'form.uname'}; |
$uname=$ENV{'form.uname'}; |
$udom=$ENV{'form.udom'}; |
$udom=$ENV{'form.udom'}; |
unless ($udom) { $uname=''; } |
unless ($udom) { $uname=''; } |
$uhome=''; |
$uhome=''; |
|
my $message=''; |
if ($uname) { |
if ($uname) { |
$uhome=&Apache::lonnet::homeserver($uname,$udom); |
$uhome=&Apache::lonnet::homeserver($uname,$udom); |
} |
} |
|
if ($uhome eq 'no_host') { |
|
$message= |
|
"<h3><font color=red>Unknown user '$uname' at domain '$udom'</font></h3>"; |
|
$uname=''; |
|
} |
|
|
$csec=$ENV{'form.csec'}; |
$csec=$ENV{'form.csec'}; |
|
unless ($csec) { $csec=''; } |
|
$fcat=$ENV{'form.fcat'}; |
|
unless ($fcat) { $fcat=''; } |
|
|
# ------------------------------------------------------------------- Tie hashs |
# ------------------------------------------------------------------- Tie hashs |
if ((tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
if ((tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', |
Line 154 sub handler {
|
Line 225 sub handler {
|
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
my $mapid=$1; |
my $mapid=$1; |
my $resid=$2; |
my $resid=$2; |
|
my $id=$mapid.'.'.$resid; |
if ($bighash{$_}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
if ($bighash{$_}=~/\.(problem|exam|quiz|assess|survey|form)$/) { |
$typep[$#typep+1]=$1; |
$ids[$#ids+1]=$id; |
$mapp[$#mapp+1]=$mapid; |
$typep{$id}=$1; |
$resp[$#resp+1]=$resid; |
$mapp{$id}= |
$srcp[$#srcp+1]=&Apache::lonnet::declutter($bighash{$_}); |
&Apache::lonnet::declutter($bighash{'map_id_'.$mapid}); |
$symbp[$#symbp+1]= |
$symbp{$id}=$mapp{$id}. |
&Apache::lonnet::declutter($bighash{'map_id_'.$mapid}). |
'___'.$resid.'___'. |
'___'.$resid.'___'.$srcp[$#srcp]; |
&Apache::lonnet::declutter($bighash{$_}); |
} |
} |
} |
} |
} keys %bighash; |
} keys %bighash; |
# ------------------------------------------------------------------- Sort this |
# ------------------------------------------------------------------- Sort this |
|
@ids=sort bycat @ids; |
# ------------------------------------------------------------------ Start page |
# ------------------------------------------------------------------ Start page |
$r->content_type('text/html'); |
$r->content_type('text/html'); |
$r->send_http_header; |
$r->send_http_header; |
$r->print('<html><body bgcolor="#FFFFFF">'); |
$r->print(<<ENDHEAD); |
|
<html> |
$r->print('</body></html>'); |
<head> |
|
<title>LON-CAPA Assessment 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) { |
|
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"); |
|
|
|
} |
|
</script> |
|
</head> |
|
<body bgcolor="#FFFFFF" onUnload="pclose()"> |
|
<h1>Set Assessment Parameters</h1> |
|
<form method="post" action="/adm/parmset" name="parmform"> |
|
<h2>Course: $ENV{'course.'.$ENV{'request.course.id'}.'.description'}</h2> |
|
<b> |
|
Section/Group: |
|
<input type="text" value="$csec" size="6" name="csec" |
|
onBlur="this.form.submit();"> |
|
<br> |
|
For User |
|
<input type="text" value="$uname" size="12" name="uname" |
|
onBlur="if (this.form.udom.value) { this.form.submit(); }"> |
|
at Domain |
|
<input type="text" value="$udom" size="6" name="udom" |
|
onBlur="if (this.form.uname.value) { this.form.submit(); }"> |
|
</b> |
|
ENDHEAD |
|
|
|
if ($uhome eq 'no_host') { |
|
$r->print($message); |
|
} |
|
$r->print('<p>Sort list by '); |
|
$r->print('<select name="fcat" onChange="this.form.submit();">'); |
|
my $k; |
|
my @sopt=('map','Map','name','Problem Name','deadline','Deadline'); |
|
for ($k=0;$k<$#sopt;$k=$k+2) { |
|
$r->print('<option value="'.$sopt[$k].'"'); |
|
if ($fcat eq $sopt[$k]) { $r->print(' selected'); } |
|
$r->print('>'.$sopt[$k+1].'</option>'); |
|
} |
|
$r->print('</select>'); |
|
# ----------------------------------------------------------------- Start Table |
|
my $coursespan=$csec?8:5; |
|
$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); |
|
<th rowspan=3>Parameter in Effect</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); |
|
</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><tr>'); |
|
map { |
|
# ------------------------------------------------------ Entry for one resource |
|
@outpar=(); |
|
my $rid=$_; |
|
my $thistitle=''; |
|
my %name= ('0_deadline' => 'deadline'); |
|
my %part= ('0_deadline' => '0'); |
|
my %display=('0_deadline' => 'Deadline'); |
|
my %type= ('0_deadline' => 'date_end'); |
|
my %default=('0_deadline' => time); |
|
my %metadata=&Apache::lonmeta::unpackagemeta( |
|
&Apache::lonnet::getfile('/home/httpd/html/'.$bighash{'src_'.$rid}.'.meta'),1); |
|
map { |
|
if ($_=~/^parameter\_(\d+)\_(\w+)$/) { |
|
my $hashid=$1.'_'.$2; |
|
$part{$hashid}=$1; |
|
$name{$hashid}=$2; |
|
my $tdef; |
|
($tdef,$display{$hashid})= |
|
split(/\_\_dis\_\_/,$metadata{$_}); |
|
($type{$hashid},$default{$hashid})=split(/\:/,$tdef); |
|
unless ($display{$hashid}) { |
|
$display{$hashid}=$name{$hashid}; |
|
} |
|
} |
|
if ($_ eq 'title') { |
|
$thistitle=$metadata{$_}; |
|
} |
|
} keys %metadata; |
|
my $totalparms=scalar keys %name; |
|
$r->print('<td rowspan='.$totalparms.'><tt><font size=-1>'. |
|
join(' / ',split(/\//,&Apache::lonnet::declutter($bighash{'src_'.$rid}))). |
|
'</font></tt><p><b>'. |
|
$bighash{'title_'.$rid}); |
|
if ($thistitle) { |
|
$r->print(' ('.$thistitle.')'); |
|
} |
|
$r->print('</b></td>'); |
|
$r->print('<td rowspan='.$totalparms.'>'.$typep{$rid}.'</td>'); |
|
$r->print('<td rowspan='.$totalparms.'><tt><font size=-1>'. |
|
join(' / ',split(/\//,$mapp{$rid})).'</font></tt></td>'); |
|
map { |
|
|
|
my $result=&parmval($part{$_}.'.'.$name{$_},$rid,$default{$_}); |
|
|
|
$r->print("<td>$part{$_}</td><td>$display{$_}</td>"); |
|
|
|
$r->print('<td>'.&valout($outpar[11],$type{$_}).'</td>'); |
|
$r->print('<td>'.&valout($outpar[10],$type{$_}).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[9]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[8]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[7]).'</td>'); |
|
if ($csec) { |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[6]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[5]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[4]).'</td>'); |
|
} |
|
if ($uname) { |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[3]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[2]).'</td>'); |
|
$r->print('<td>'. |
|
&plink($type{$_},$display{$_},$outpar[1]).'</td>'); |
|
} |
|
$r->print('<td>'.&valout($outpar[$result],$type{$_}).'</td>'); |
|
$r->print("</tr>\n<tr>"); |
|
} sort keys %name; |
|
# -------------------------------------------------- End entry for one resource |
|
} @ids; |
|
$r->print('</table></form></body></html>'); |
untie(%bighash); |
untie(%bighash); |
untie(%parmhash); |
untie(%parmhash); |
} |
} |
} else { |
} else { |
# ----------------------------- Not in a course, or not allowed to modify parms |
# ----------------------------- Not in a course, or not allowed to modify parms |
$ENV{'user.error.msg'}= |
$ENV{'user.error.msg'}= |
"/adm/flip:opa:0:0:Cannot modify assessment parameters"; |
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
return OK; |
return OK; |
Line 190 __END__
|
Line 419 __END__
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|