version 1.183, 2005/02/17 08:29:43
|
version 1.209, 2005/06/05 01:37:26
|
Line 62 use GDBM_File;
|
Line 62 use GDBM_File;
|
use Apache::lonhomework; |
use Apache::lonhomework; |
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::lonnavmaps; |
|
|
my %courseopt; |
# --- Caches local to lonparmset |
my %useropt; |
|
|
my $parmhashid; |
my %parmhash; |
my %parmhash; |
|
my $symbsid; |
|
my %symbs; |
|
|
my @ids; |
# --- end local caches |
my %symbp; |
|
my %mapp; |
|
my %typep; |
|
my %keyp; |
|
|
|
my %maptitles; |
|
|
|
my $uname; |
|
my $udom; |
|
my $uhome; |
|
my $csec; |
|
my $coursename; |
|
|
|
################################################## |
################################################## |
################################################## |
################################################## |
Line 111 Returns: A list, the first item is the
|
Line 103 Returns: A list, the first item is the
|
=cut |
=cut |
|
|
################################################## |
################################################## |
################################################## |
|
sub parmval { |
sub parmval { |
my ($what,$id,$def)=@_; |
my ($what,$id,$def,$uname,$udom,$csec)=@_; |
|
return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec); |
|
} |
|
|
|
sub parmval_by_symb { |
|
my ($what,$symb,$def,$uname,$udom,$csec)=@_; |
|
# load caches |
|
|
|
&cacheparmhash(); |
|
|
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $useropt=&Apache::lonnet::get_userresdata($uname,$udom); |
|
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); |
|
|
|
|
my $result=''; |
my $result=''; |
my @outpar=(); |
my @outpar=(); |
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
|
my $map=(&Apache::lonnet::decode_symb($symb))[0]; |
|
|
my $symbparm=$symbp{$id}.'.'.$what; |
my $symbparm=$symb.'.'.$what; |
my $mapparm=$mapp{$id}.'___(all).'.$what; |
my $mapparm=$map.'___(all).'.$what; |
|
|
my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$what; |
my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$what; |
my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm; |
my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm; |
my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm; |
my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; |
|
|
my $courselevel=$ENV{'request.course.id'}.'.'.$what; |
my $courselevel=$env{'request.course.id'}.'.'.$what; |
my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm; |
my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; |
my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm; |
my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; |
|
|
|
|
|
|
# --------------------------------------------------------- first, check course |
# --------------------------------------------------------- first, check course |
|
|
if (defined($courseopt{$courselevel})) { |
if (defined($$courseopt{$courselevel})) { |
$outpar[11]=$courseopt{$courselevel}; |
$outpar[11]=$$courseopt{$courselevel}; |
$result=11; |
$result=11; |
} |
} |
|
|
if (defined($courseopt{$courselevelm})) { |
if (defined($$courseopt{$courselevelm})) { |
$outpar[10]=$courseopt{$courselevelm}; |
$outpar[10]=$$courseopt{$courselevelm}; |
$result=10; |
$result=10; |
} |
} |
|
|
Line 152 sub parmval {
|
Line 159 sub parmval {
|
my $thisparm=$parmhash{$symbparm}; |
my $thisparm=$parmhash{$symbparm}; |
if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; } |
if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; } |
|
|
if (defined($courseopt{$courselevelr})) { |
if (defined($$courseopt{$courselevelr})) { |
$outpar[7]=$courseopt{$courselevelr}; |
$outpar[7]=$$courseopt{$courselevelr}; |
$result=7; |
$result=7; |
} |
} |
|
|
# ------------------------------------------------------ fourth, back to course |
# ------------------------------------------------------ fourth, back to course |
if (defined($csec)) { |
if (defined($csec)) { |
if (defined($courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevel})) { |
$outpar[6]=$courseopt{$seclevel}; |
$outpar[6]=$$courseopt{$seclevel}; |
$result=6; |
$result=6; |
} |
} |
if (defined($courseopt{$seclevelm})) { |
if (defined($$courseopt{$seclevelm})) { |
$outpar[5]=$courseopt{$seclevelm}; |
$outpar[5]=$$courseopt{$seclevelm}; |
$result=5; |
$result=5; |
} |
} |
|
|
if (defined($courseopt{$seclevelr})) { |
if (defined($$courseopt{$seclevelr})) { |
$outpar[4]=$courseopt{$seclevelr}; |
$outpar[4]=$$courseopt{$seclevelr}; |
$result=4; |
$result=4; |
} |
} |
} |
} |
Line 177 sub parmval {
|
Line 184 sub parmval {
|
# ---------------------------------------------------------- fifth, check user |
# ---------------------------------------------------------- fifth, check user |
|
|
if (defined($uname)) { |
if (defined($uname)) { |
if (defined($useropt{$courselevel})) { |
if (defined($$useropt{$courselevel})) { |
$outpar[3]=$useropt{$courselevel}; |
$outpar[3]=$$useropt{$courselevel}; |
$result=3; |
$result=3; |
} |
} |
|
|
if (defined($useropt{$courselevelm})) { |
if (defined($$useropt{$courselevelm})) { |
$outpar[2]=$useropt{$courselevelm}; |
$outpar[2]=$$useropt{$courselevelm}; |
$result=2; |
$result=2; |
} |
} |
|
|
if (defined($useropt{$courselevelr})) { |
if (defined($$useropt{$courselevelr})) { |
$outpar[1]=$useropt{$courselevelr}; |
$outpar[1]=$$useropt{$courselevelr}; |
$result=1; |
$result=1; |
} |
} |
} |
} |
return ($result,@outpar); |
return ($result,@outpar); |
} |
} |
|
|
|
sub resetparmhash { |
|
$parmhashid=''; |
|
} |
|
|
|
sub cacheparmhash { |
|
if ($parmhashid eq $env{'request.course.fn'}) { return; } |
|
my %parmhashfile; |
|
if (tie(%parmhashfile,'GDBM_File', |
|
$env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) { |
|
%parmhash=%parmhashfile; |
|
untie %parmhashfile; |
|
$parmhashid=$env{'request.course.fn'}; |
|
} |
|
} |
|
|
|
sub resetsymbcache { |
|
$symbsid=''; |
|
} |
|
|
|
sub symbcache { |
|
my $id=shift; |
|
if ($symbsid ne $env{'request.course.id'}) { |
|
%symbs=(); |
|
} |
|
unless ($symbs{$id}) { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if ($id=~/\./) { |
|
my $resource=$navmap->getById($id); |
|
$symbs{$id}=$resource->symb(); |
|
} else { |
|
my $resource=$navmap->getByMapPc($id); |
|
$symbs{$id}=&Apache::lonnet::declutter($resource->src()); |
|
} |
|
$symbsid=$env{'request.course.id'}; |
|
} |
|
return $symbs{$id}; |
|
} |
|
|
|
################################################## |
|
################################################## |
|
# |
|
# Store a parameter by ID |
|
# |
|
# Takes |
|
# - resource id |
|
# - name of parameter |
|
# - level |
|
# - new value |
|
# - new type |
|
# - username |
|
# - userdomain |
|
|
|
sub storeparm { |
|
my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_; |
|
&storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec); |
|
} |
|
|
|
# |
|
# Store a parameter by symb |
|
# |
|
# Takes |
|
# - symb |
|
# - name of parameter |
|
# - level |
|
# - new value |
|
# - new type |
|
# - username |
|
# - userdomain |
|
|
|
sub storeparm_by_symb { |
|
# ---------------------------------------------------------- Get symb, map, etc |
|
my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_; |
|
# ---------------------------------------------------------- Construct prefixes |
|
$spnam=~s/\_([^\_]+)$/\.$1/; |
|
my $map=(&Apache::lonnet::decode_symb($symb))[0]; |
|
my $symbparm=$symb.'.'.$spnam; |
|
my $mapparm=$map.'___(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==11) || ($snum==3)) { $storeunder=$courselevel; } |
|
if (($snum==10) || ($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; } |
|
|
|
my $delete; |
|
if ($nval eq '') { $delete=1;} |
|
my %storecontent = ($storeunder => $nval, |
|
$storeunder.'.type' => $ntype); |
|
my $reply=''; |
|
if ($snum>3) { |
|
# ---------------------------------------------------------------- Store Course |
|
# |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
# Expire sheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
if (($snum==7) || ($snum==4)) { |
|
&Apache::lonnet::expirespread('','','assesscalc',$symb); |
|
} elsif (($snum==8) || ($snum==5)) { |
|
&Apache::lonnet::expirespread('','','assesscalc',$map); |
|
} else { |
|
&Apache::lonnet::expirespread('','','assesscalc'); |
|
} |
|
# Store parameter |
|
if ($delete) { |
|
$reply=&Apache::lonnet::del |
|
('resourcedata',[keys(%storecontent)],$cdom,$cnum); |
|
} else { |
|
$reply=&Apache::lonnet::cput |
|
('resourcedata',\%storecontent,$cdom,$cnum); |
|
} |
|
&Apache::lonnet::devalidatecourseresdata($cnum,$cdom); |
|
} else { |
|
# ------------------------------------------------------------------ Store User |
|
# |
|
# Expire sheets |
|
&Apache::lonnet::expirespread($uname,$udom,'studentcalc'); |
|
if ($snum==1) { |
|
&Apache::lonnet::expirespread |
|
($uname,$udom,'assesscalc',$symb); |
|
} elsif ($snum==2) { |
|
&Apache::lonnet::expirespread |
|
($uname,$udom,'assesscalc',$map); |
|
} else { |
|
&Apache::lonnet::expirespread($uname,$udom,'assesscalc'); |
|
} |
|
# Store parameter |
|
if ($delete) { |
|
$reply=&Apache::lonnet::del |
|
('resourcedata',[keys(%storecontent)],$udom,$uname); |
|
} else { |
|
$reply=&Apache::lonnet::cput |
|
('resourcedata',\%storecontent,$udom,$uname); |
|
} |
|
&Apache::lonnet::devalidateuserresdata($uname,$udom); |
|
} |
|
|
|
if ($reply=~/^error\:(.*)/) { |
|
return "<font color=red>Write Error: $1</font>"; |
|
} |
|
return ''; |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
Line 275 sub plink {
|
Line 435 sub plink {
|
my $winvalue=$value; |
my $winvalue=$value; |
unless ($winvalue) { |
unless ($winvalue) { |
if ($type=~/^date/) { |
if ($type=~/^date/) { |
$winvalue=$ENV{'form.recent_'.$type}; |
$winvalue=$env{'form.recent_'.$type}; |
} else { |
} else { |
$winvalue=$ENV{'form.recent_'.(split(/\_/,$type))[0]}; |
$winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]}; |
} |
} |
} |
} |
|
|
|
|
return |
return |
'<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','" |
'<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','" |
.$marker."','".$return."','".$call."'".');">'. |
.$marker."','".$return."','".$call."'".');">'. |
&valout($value,$type).'</a><a name="'.$marker.'"></a>'; |
&valout($value,$type).'</a><a name="'.$marker.'"></a>'; |
} |
} |
|
|
|
|
sub startpage { |
sub startpage { |
my ($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader)=@_; |
my $r=shift; |
|
|
my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','', |
my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','', |
'onUnload="pclose()"'); |
'onUnload="pclose()"'); |
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Table Mode Parameter Setting'); |
&Apache::loncommon::selectstudent_link('parmform','uname','udom'); |
|
my $selscript=&Apache::loncommon::studentbrowser_javascript(); |
my $selscript=&Apache::loncommon::studentbrowser_javascript(); |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); |
my %lt=&Apache::lonlocal::texthash( |
|
'cep' => "Course Environment Parameters", |
|
'scep' => "Set Course Environment Parameters", |
|
'smcap' => "Set/Modify Course Assessment Parameter", |
|
'mcap' => "Modify Course Assessment Parameters", |
|
'caphm' => "Course Assessment Parameter - Helper Mode", |
|
'capom' => "Course Assessment Parameters - Overview Mode", |
|
'captm' => "Course Assessments Parameters - Table Mode", |
|
'sg' => "Section/Group", |
|
'fu' => "For User", |
|
'oi' => "or ID", |
|
'ad' => "at Domain" |
|
); |
|
my $overallhelp= |
|
&Apache::loncommon::help_open_menu('','Setting Parameters','Course_Setting_Parameters','',10,'Instructor Interface'); |
|
my $assessparmhelp=&Apache::loncommon::help_open_topic("Cascading_Parameters","Assessment Parameters"); |
|
my $html=&Apache::lonxml::xmlbegin(); |
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<ENDHEAD); |
$r->print(<<ENDHEAD); |
$html |
$html |
Line 361 $html
|
Line 505 $html
|
$selscript |
$selscript |
</head> |
</head> |
$bodytag |
$bodytag |
$overallhelp |
$breadcrumbs |
ENDHEAD |
<form method="post" action="/adm/parmset?action=settable" name="parmform"> |
|
|
unless ($trimheader) {$r->print(<<ENDHEAD2); |
|
<form method="post" action="/adm/parmset" name="envform"> |
|
<h4>$lt{'cep'}</h4> |
|
<input type="submit" name="crsenv" value="$lt{'scep'}" /> |
|
</form> |
|
<hr /> |
|
$assessparmhelp |
|
<form method="post" action="/adm/helper/parameter.helper" name="helpform"> |
|
<h4>$lt{'caphm'}</h4> |
|
<input type="submit" value="$lt{'smcap'}" /> |
|
</form> |
|
<hr /> |
|
<form method="post" action="/adm/parmset" name="overview"> |
|
<h4>$lt{'capom'}</h4> |
|
<input type="submit" name="overview" value="$lt{'mcap'}" /> |
|
</form> |
|
<hr /> |
|
ENDHEAD2 |
|
} |
|
$r->print(<<ENDHEAD3); |
|
<form method="post" action="/adm/parmset" name="parmform"> |
|
<h4>$lt{'captm'}</h4> |
|
ENDHEAD3 |
|
|
|
if (!$have_assesments) { |
|
$r->print('<font color="red">'.&mt('There are no assesment parameters in this course to set.').'</font><br />'); |
|
} else { |
|
$r->print(<<ENDHEAD); |
|
<b> |
|
$lt{'sg'}: |
|
<input type="text" value="$csec" size="6" name="csec"> |
|
<br> |
|
$lt{'fu'} |
|
<input type="text" value="$uname" size="12" name="uname"> |
|
$lt{'oi'} |
|
<input type="text" value="$id" size="12" name="id"> |
|
$lt{'ad'} |
|
$chooseopt |
|
</b> |
|
<input type="hidden" value='' name="pres_value"> |
<input type="hidden" value='' name="pres_value"> |
<input type="hidden" value='' name="pres_type"> |
<input type="hidden" value='' name="pres_type"> |
<input type="hidden" value='' name="pres_marker"> |
<input type="hidden" value='' name="pres_marker"> |
|
<input type="hidden" value='1' name="prevvisit"> |
ENDHEAD |
ENDHEAD |
} |
|
} |
} |
|
|
|
|
sub print_row { |
sub print_row { |
my ($r,$which,$part,$name,$rid,$default,$defaulttype,$display,$defbgone, |
my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone, |
$defbgtwo,$parmlev)=@_; |
$defbgtwo,$parmlev,$uname,$udom,$csec)=@_; |
# get the values for the parameter in cascading order |
# get the values for the parameter in cascading order |
# empty levels will remain empty |
# empty levels will remain empty |
my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which}, |
my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which}, |
$rid,$$default{$which}); |
$rid,$$default{$which},$uname,$udom,$csec); |
# get the type for the parameters |
# get the type for the parameters |
# problem: these may not be set for all levels |
# problem: these may not be set for all levels |
my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'. |
my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'. |
$$name{$which}.'.type', |
$$name{$which}.'.type', |
$rid,$$defaulttype{$which}); |
$rid,$$defaulttype{$which},$uname,$udom,$csec); |
# cascade down manually |
# cascade down manually |
my $cascadetype=$$defaulttype{$which}; |
my $cascadetype=$$defaulttype{$which}; |
for (my $i=11;$i>0;$i--) { |
for (my $i=11;$i>0;$i--) { |
Line 433 sub print_row {
|
Line 538 sub print_row {
|
} |
} |
my $parm=$$display{$which}; |
my $parm=$$display{$which}; |
|
|
if ($parmlev eq 'full' || $parmlev eq 'brief') { |
if ($parmlev eq 'full') { |
$r->print('<td bgcolor='.$defbgtwo.' align="center">' |
$r->print('<td bgcolor='.$defbgtwo.' align="center">' |
.$$part{$which}.'</td>'); |
.$$part{$which}.'</td>'); |
} else { |
} else { |
Line 468 sub print_row {
|
Line 573 sub print_row {
|
|
|
&print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
|
if ($parmlev eq 'brief') { |
&print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,9,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,8,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
if ($csec) { |
|
&print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
if ($csec) { |
} |
&print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
if ($uname) { |
&print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
} |
} |
} else { |
if ($uname) { |
|
&print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,9,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
&print_td($r,8,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
} |
&print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
|
|
if ($csec) { |
|
&print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
} |
|
if ($uname) { |
|
&print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
&print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); |
|
} |
|
} # end of $brief if/else |
|
} # end of $parmlev if/else |
} # end of $parmlev if/else |
|
|
$r->print('<td bgcolor=#CCCCFF align="center">'. |
$r->print('<td bgcolor=#CCCCFF align="center">'. |
&valout($outpar[$result],$typeoutpar[$result]).'</td>'); |
&valout($outpar[$result],$typeoutpar[$result]).'</td>'); |
|
|
if ($parmlev eq 'full' || $parmlev eq 'brief') { |
if ($parmlev eq 'full') { |
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}. |
my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}. |
'.'.$$name{$which},$symbp{$rid}); |
'.'.$$name{$which},$$symbp{$rid}); |
|
|
# this doesn't seem to work, and I don't think is correct |
|
# my $sessionvaltype=&Apache::lonnet::EXT('resource.'.$$part{$which}. |
|
# '.'.$$name{$which}.'.type',$symbp{$rid}); |
|
# this seems to work |
|
my $sessionvaltype=$typeoutpar[$result]; |
my $sessionvaltype=$typeoutpar[$result]; |
if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } |
if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } |
$r->print('<td bgcolor=#999999 align="center"><font color=#FFFFFF>'. |
$r->print('<td bgcolor=#999999 align="center"><font color=#FFFFFF>'. |
Line 533 sub print_td {
|
Line 621 sub print_td {
|
$r->print('</td>'."\n"); |
$r->print('</td>'."\n"); |
} |
} |
|
|
|
|
=pod |
=pod |
|
|
=item B<extractResourceInformation>: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes. |
=item B<extractResourceInformation>: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes. |
Line 568 Input: See list below:
|
Line 657 Input: See list below:
|
=cut |
=cut |
|
|
sub extractResourceInformation { |
sub extractResourceInformation { |
my $bighash = shift; |
|
my $ids = shift; |
my $ids = shift; |
my $typep = shift; |
my $typep = shift; |
my $keyp = shift; |
my $keyp = shift; |
my $allparms = shift; |
my $allparms = shift; |
my $allparts = shift; |
my $allparts = shift; |
my $allkeys = shift; |
|
my $allmaps = shift; |
my $allmaps = shift; |
my $fcat = shift; |
|
my $defp = shift; |
|
my $mapp = shift; |
my $mapp = shift; |
my $symbp = shift; |
my $symbp = shift; |
my $maptitles=shift; |
my $maptitles=shift; |
|
my $uris=shift; |
|
|
foreach (keys %$bighash) { |
|
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
my $navmap = Apache::lonnavmaps::navmap->new(); |
# there are no resources in the 0 level |
my @allres=$navmap->retrieveResources(undef,undef,1,undef,1); |
if ($1 eq '0') { next; } |
foreach my $resource (@allres) { |
my $mapid=$1; |
my $id=$resource->id(); |
my $resid=$2; |
my ($mapid,$resid)=split(/\./,$id); |
my $id=$mapid.'.'.$resid; |
if ($mapid eq '0') { next; } |
my $srcf=$$bighash{$_}; |
$$ids[$#$ids+1]=$id; |
if (1) { |
my $srcf=$resource->src(); |
$srcf=~/\.(\w+)$/; |
$srcf=~/\.(\w+)$/; |
$$ids[$#$ids+1]=$id; |
$$typep{$id}=$1; |
$$typep{$id}=$1; |
$$keyp{$id}=''; |
$$keyp{$id}=''; |
$$uris{$id}=$srcf; |
foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { |
foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) { |
if ($_=~/^parameter\_(.*)/) { |
if ($_=~/^parameter\_(.*)/) { |
my $key=$_; |
my $key=$_; |
my $allkey=$1; |
# Hidden parameters |
$allkey=~s/\_/\./g; |
if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm') { |
if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq |
next; |
'parm') { |
|
next; #hide hidden things |
|
} |
|
my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
|
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
|
my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); |
|
my $parmdis = $display; |
|
$parmdis =~ s|(\[Part.*$)||g; |
|
my $partkey = $part; |
|
$partkey =~ tr|_|.|; |
|
$$allparms{$name} = $parmdis; |
|
$$allparts{$part} = "[Part $part]"; |
|
$$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}= |
my $display= &Apache::lonnet::metadata($srcf,$key.'.display'); |
&Apache::lonnet::declutter($$bighash{'map_id_'.$mapid}); |
my $name=&Apache::lonnet::metadata($srcf,$key.'.name'); |
$$mapp{$mapid}=$$mapp{$id}; |
my $part= &Apache::lonnet::metadata($srcf,$key.'.part'); |
$$allmaps{$mapid}=$$mapp{$id}; |
# |
if ($mapid eq '1') { |
# allparms is a hash of parameter names |
$$maptitles{$mapid}='Main Course Documents'; |
# |
|
my $parmdis = $display; |
|
$parmdis =~ s/\[Part.*$//g; |
|
$$allparms{$name}=$parmdis; |
|
# |
|
# allparts is a hash of all parts |
|
# |
|
$$allparts{$part} = "Part: $part"; |
|
# |
|
# Remember all keys going with this resource |
|
# |
|
if ($$keyp{$id}) { |
|
$$keyp{$id}.=','.$key; |
} else { |
} else { |
$$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id})); |
$$keyp{$id}=$key; |
} |
} |
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; |
|
$$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf); |
|
$$symbp{$mapid}=$$mapp{$id}.'___(all)'; |
|
} |
} |
} |
} |
|
$$mapp{$id}= |
|
&Apache::lonnet::declutter($resource->enclosing_map_src()); |
|
$$mapp{$mapid}=$$mapp{$id}; |
|
$$allmaps{$mapid}=$$mapp{$id}; |
|
if ($mapid eq '1') { |
|
$$maptitles{$mapid}='Main Course Documents'; |
|
} else { |
|
$$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id})); |
|
} |
|
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; |
|
$$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf); |
|
$$symbp{$mapid}=$$mapp{$id}.'___(all)'; |
} |
} |
} |
} |
|
|
|
|
|
################################################## |
|
################################################## |
|
|
|
sub parmmenu { |
|
my ($r,$allparms,$pscat)=@_; |
|
my $tempkey; |
|
$r->print(<<ENDSCRIPT); |
|
<script type="text/javascript"> |
|
function checkall(value, checkName) { |
|
for (i=0; i<document.forms.parmform.elements.length; i++) { |
|
ele = document.forms.parmform.elements[i]; |
|
if (ele.name == checkName) { |
|
document.forms.parmform.elements[i].checked=value; |
|
} |
|
} |
|
} |
|
</script> |
|
ENDSCRIPT |
|
$r->print(); |
|
$r->print("\n<table><tr>"); |
|
my $cnt=0; |
|
foreach $tempkey (sort { $$allparms{$a} cmp $$allparms{$b} } |
|
keys %{$allparms} ) { |
|
$r->print("\n<td><font size='-1'><input type='checkbox' name='pscat' "); |
|
$r->print('value="'.$tempkey.'"'); |
|
if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) { |
|
$r->print(' checked'); |
|
} |
|
$r->print('>'.$$allparms{$tempkey}.'</font></td>'); |
|
$cnt++; |
|
if ($cnt==3) { |
|
$r->print("</tr>\n<tr>"); |
|
$cnt=0; |
|
} |
|
} |
|
$r->print(' |
|
</tr><tr><td> |
|
<input type="button" onclick="checkall(true, \'pscat\')" value="Select All" /> |
|
</td><td></td><td> |
|
<input type="button" onclick="checkall(false, \'pscat\')" value="Unselect All" /> |
|
</td> |
|
'); |
|
$r->print('</tr></table>'); |
|
} |
|
|
|
sub partmenu { |
|
my ($r,$allparts,$psprt)=@_; |
|
$r->print('<select multiple name="psprt" size="5">'); |
|
$r->print('<option value="all"'); |
|
$r->print(' selected') unless (@{$psprt}); |
|
$r->print('>'.&mt('All Parts').'</option>'); |
|
my %temphash=(); |
|
foreach (@{$psprt}) { $temphash{$_}=1; } |
|
foreach my $tempkey (sort keys %{$allparts}) { |
|
unless ($tempkey =~ /\./) { |
|
$r->print('<option value="'.$tempkey.'"'); |
|
if ($$psprt[0] eq "all" || $temphash{$tempkey}) { |
|
$r->print(' selected'); |
|
} |
|
$r->print('>'.$$allparts{$tempkey}.'</option>'); |
|
} |
|
} |
|
$r->print('</select>'); |
|
} |
|
|
|
sub usermenu { |
|
my ($r,$uname,$id,$udom,$csec)=@_; |
|
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
|
&Apache::loncommon::selectstudent_link('parmform','uname','udom'); |
|
my $selscript=&Apache::loncommon::studentbrowser_javascript(); |
|
my %lt=&Apache::lonlocal::texthash( |
|
'sg' => "Section/Group", |
|
'fu' => "For User", |
|
'oi' => "or ID", |
|
'ad' => "at Domain" |
|
); |
|
my %sectionhash=(); |
|
my $sections=''; |
|
if (&Apache::loncommon::get_sections( |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
|
$env{'course.'.$env{'request.course.id'}.'.num'}, |
|
\%sectionhash)) { |
|
$sections=$lt{'sg'}.': <select name="csec">'; |
|
foreach ('',sort keys %sectionhash) { |
|
$sections.='<option value="'.$_.'"'. |
|
($_ eq $csec?'selected="selected"':'').'>'.$_.'</option>'; |
|
} |
|
$sections.='</select>'; |
|
} |
|
$r->print(<<ENDMENU); |
|
<b> |
|
$sections |
|
<br /> |
|
$lt{'fu'} |
|
<input type="text" value="$uname" size="12" name="uname" /> |
|
$lt{'oi'} |
|
<input type="text" value="$id" size="12" name="id" /> |
|
$lt{'ad'} |
|
$chooseopt |
|
</b> |
|
ENDMENU |
|
} |
|
|
|
sub displaymenu { |
|
my ($r,$allparms,$allparts,$pscat,$psprt)=@_; |
|
$r->print('<table border="1"><tr><th>'.&mt('Select Parameters to View').'</th><th>'. |
|
&mt('Select Parts to View').'</th></tr><tr><td>'); |
|
&parmmenu($r,$allparms,$pscat); |
|
$r->print('</td><td>'); |
|
&partmenu($r,$allparts,$psprt); |
|
$r->print('</td></tr></table>'); |
|
} |
|
|
|
sub mapmenu { |
|
my ($r,$allmaps,$pschp,$maptitles)=@_; |
|
$r->print(&mt('Select Enclosing Map or Folder').' '); |
|
$r->print('<select name="pschp">'); |
|
$r->print('<option value="all">'.&mt('All Maps or Folders').'</option>'); |
|
foreach (sort {$$allmaps{$a} cmp $$allmaps{$b}} keys %{$allmaps}) { |
|
$r->print('<option value="'.$_.'"'); |
|
if (($pschp eq $_)) { $r->print(' selected'); } |
|
$r->print('>'.$$maptitles{$_}.($$allmaps{$_}!~/^uploaded/?' ['.$$allmaps{$_}.']':'').'</option>'); |
|
} |
|
$r->print("</select>"); |
|
} |
|
|
|
sub levelmenu { |
|
my ($r,$alllevs,$parmlev)=@_; |
|
$r->print(&mt('Select Parameter Level'). |
|
&Apache::loncommon::help_open_topic('Course_Parameter_Levels').' '); |
|
$r->print('<select name="parmlev">'); |
|
foreach (reverse sort keys %{$alllevs}) { |
|
$r->print('<option value="'.$$alllevs{$_}.'"'); |
|
if ($parmlev eq $$alllevs{$_}) { |
|
$r->print(' selected'); |
|
} |
|
$r->print('>'.$_.'</option>'); |
|
} |
|
$r->print("</select>"); |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
Line 674 Variables used (guessed by Jeremy):
|
Line 901 Variables used (guessed by Jeremy):
|
sub assessparms { |
sub assessparms { |
|
|
my $r=shift; |
my $r=shift; |
|
|
|
my @ids=(); |
|
my %symbp=(); |
|
my %mapp=(); |
|
my %typep=(); |
|
my %keyp=(); |
|
my %uris=(); |
|
my %maptitles=(); |
|
|
# -------------------------------------------------------- Variable declaration |
# -------------------------------------------------------- Variable declaration |
my %allkeys=(); |
|
my %allmaps=(); |
my %allmaps=(); |
my %alllevs=(); |
my %alllevs=(); |
|
|
|
my $uname; |
|
my $udom; |
|
my $uhome; |
|
my $csec; |
|
|
|
my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'}; |
|
|
$alllevs{'Resource Level'}='full'; |
$alllevs{'Resource Level'}='full'; |
# $alllevs{'Resource Level [BRIEF]'}='brief'; |
|
$alllevs{'Map Level'}='map'; |
$alllevs{'Map Level'}='map'; |
$alllevs{'Course Level'}='general'; |
$alllevs{'Course Level'}='general'; |
|
|
my %allparms; |
my %allparms; |
my %allparts; |
my %allparts; |
|
|
my %defp; |
|
%courseopt=(); |
|
%useropt=(); |
|
my %bighash=(); |
|
|
|
@ids=(); |
@ids=(); |
%symbp=(); |
%symbp=(); |
%typep=(); |
%typep=(); |
|
|
my $message=''; |
my $message=''; |
|
|
$csec=$ENV{'form.csec'}; |
$csec=$env{'form.csec'}; |
if ($udom=$ENV{'form.udom'}) { |
|
} elsif ($udom=$ENV{'request.role.domain'}) { |
if ($udom=$env{'form.udom'}) { |
} elsif ($udom=$ENV{'user.domain'}) { |
} elsif ($udom=$env{'request.role.domain'}) { |
|
} elsif ($udom=$env{'user.domain'}) { |
} else { |
} else { |
$udom=$r->dir_config('lonDefDomain'); |
$udom=$r->dir_config('lonDefDomain'); |
} |
} |
|
|
my @pscat=&Apache::loncommon::get_env_multiple('form.pscat'); |
my @pscat=&Apache::loncommon::get_env_multiple('form.pscat'); |
my $pschp=$ENV{'form.pschp'}; |
my $pschp=$env{'form.pschp'}; |
my @psprt=&Apache::loncommon::get_env_multiple('form.psprt'); |
my @psprt=&Apache::loncommon::get_env_multiple('form.psprt'); |
if (!@psprt) { $psprt[0]='0'; } |
if (!@psprt) { $psprt[0]='0'; } |
my $showoptions=$ENV{'form.showoptions'}; |
|
|
|
my $pssymb=''; |
my $pssymb=''; |
my $parmlev=''; |
my $parmlev=''; |
my $trimheader=''; |
|
my $prevvisit=$ENV{'form.prevvisit'}; |
|
|
|
# unless ($parmlev==$ENV{'form.parmlev'}) { |
|
# $parmlev = 'full'; |
|
# } |
|
|
|
unless ($ENV{'form.parmlev'}) { |
unless ($env{'form.parmlev'}) { |
$parmlev = 'map'; |
$parmlev = 'map'; |
} else { |
} else { |
$parmlev = $ENV{'form.parmlev'}; |
$parmlev = $env{'form.parmlev'}; |
} |
} |
|
|
# ----------------------------------------------- Was this started from grades? |
# ----------------------------------------------- Was this started from grades? |
|
|
if (($ENV{'form.command'} eq 'set') && ($ENV{'form.url'}) |
if (($env{'form.command'} eq 'set') && ($env{'form.url'}) |
&& (!$ENV{'form.dis'})) { |
&& (!$env{'form.dis'})) { |
my $url=$ENV{'form.url'}; |
my $url=$env{'form.url'}; |
$url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
$url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--; |
$pssymb=&Apache::lonnet::symbread($url); |
$pssymb=&Apache::lonnet::symbread($url); |
if (!@pscat) { @pscat=('all'); } |
if (!@pscat) { @pscat=('all'); } |
$pschp=''; |
$pschp=''; |
$parmlev = 'full'; |
$parmlev = 'full'; |
$trimheader='yes'; |
} elsif ($env{'form.symb'}) { |
} elsif ($ENV{'form.symb'}) { |
$pssymb=$env{'form.symb'}; |
$pssymb=$ENV{'form.symb'}; |
|
if (!@pscat) { @pscat=('all'); } |
if (!@pscat) { @pscat=('all'); } |
$pschp=''; |
$pschp=''; |
$parmlev = 'full'; |
$parmlev = 'full'; |
$trimheader='yes'; |
|
} else { |
} else { |
$ENV{'form.url'}=''; |
$env{'form.url'}=''; |
} |
} |
|
|
my $id=$ENV{'form.id'}; |
my $id=$env{'form.id'}; |
if (($id) && ($udom)) { |
if (($id) && ($udom)) { |
$uname=(&Apache::lonnet::idget($udom,$id))[1]; |
$uname=(&Apache::lonnet::idget($udom,$id))[1]; |
if ($uname) { |
if ($uname) { |
Line 759 sub assessparms {
|
Line 988 sub assessparms {
|
&mt('at domain')." '$udom'</font>"; |
&mt('at domain')." '$udom'</font>"; |
} |
} |
} else { |
} else { |
$uname=$ENV{'form.uname'}; |
$uname=$env{'form.uname'}; |
} |
} |
unless ($udom) { $uname=''; } |
unless ($udom) { $uname=''; } |
$uhome=''; |
$uhome=''; |
Line 772 sub assessparms {
|
Line 1001 sub assessparms {
|
$uname=''; |
$uname=''; |
} else { |
} else { |
$csec=&Apache::lonnet::getsection($udom,$uname, |
$csec=&Apache::lonnet::getsection($udom,$uname, |
$ENV{'request.course.id'}); |
$env{'request.course.id'}); |
if ($csec eq '-1') { |
if ($csec eq '-1') { |
$message="<font color=red>". |
$message="<font color=red>". |
&mt("User")." '$uname' ".&mt("at domain")." '$udom' ". |
&mt("User")." '$uname' ".&mt("at domain")." '$udom' ". |
&mt("not in this course")."</font>"; |
&mt("not in this course")."</font>"; |
$uname=''; |
$uname=''; |
$csec=$ENV{'form.csec'}; |
$csec=$env{'form.csec'}; |
} else { |
} else { |
my %name=&Apache::lonnet::userenvironment($udom,$uname, |
my %name=&Apache::lonnet::userenvironment($udom,$uname, |
('firstname','middlename','lastname','generation','id')); |
('firstname','middlename','lastname','generation','id')); |
Line 792 sub assessparms {
|
Line 1021 sub assessparms {
|
|
|
unless ($csec) { $csec=''; } |
unless ($csec) { $csec=''; } |
|
|
my $fcat=$ENV{'form.fcat'}; |
|
unless ($fcat) { $fcat=''; } |
|
|
|
# ------------------------------------------------------------------- Tie hashs |
|
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 |
# --------------------------------------------------------- Get all assessments |
extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles); |
&extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, \%mapp, \%symbp,\%maptitles,\%uris); |
|
|
$mapp{'0.0'} = ''; |
$mapp{'0.0'} = ''; |
$symbp{'0.0'} = ''; |
$symbp{'0.0'} = ''; |
|
|
# ---------------------------------------------------------- Anything to store? |
# ---------------------------------------------------------- Anything to store? |
if ($ENV{'form.pres_marker'}) { |
if ($env{'form.pres_marker'}) { |
my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'}); |
my @markers=split(/\&\&\&/,$env{'form.pres_marker'}); |
$spnam=~s/\_([^\_]+)$/\.$1/; |
my @values=split(/\&\&\&/,$env{'form.pres_value'}); |
# ---------------------------------------------------------- Construct prefixes |
my @types=split(/\&\&\&/,$env{'form.pres_type'}); |
|
for (my $i=0;$i<=$#markers;$i++) { |
my $symbparm=$symbp{$sresid}.'.'.$spnam; |
$message.=&storeparm(split(/\&/,$markers[$i]), |
my $mapparm=$mapp{$sresid}.'___(all).'.$spnam; |
$values[$i], |
|
$types[$i], |
my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam; |
$uname,$udom,$csec); |
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==11) || ($snum==3)) { $storeunder=$courselevel; } |
|
if (($snum==10) || ($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; } |
|
|
|
my $delete; |
|
if ($ENV{'form.pres_value'} eq '') { $delete=1;} |
|
my %storecontent = ($storeunder => $ENV{'form.pres_value'}, |
|
$storeunder.'.type' => $ENV{'form.pres_type'}); |
|
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'); |
|
} |
|
# Store parameter |
|
if ($delete) { |
|
$reply=&Apache::lonnet::del |
|
('resourcedata',[keys(%storecontent)], |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
} else { |
|
$reply=&Apache::lonnet::cput |
|
('resourcedata',\%storecontent, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
} |
|
} 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'); |
|
} |
|
# Store parameter |
|
if ($delete) { |
|
$reply=&Apache::lonnet::del |
|
('resourcedata',[keys(%storecontent)],$udom,$uname); |
|
} else { |
|
$reply=&Apache::lonnet::cput |
|
('resourcedata',\%storecontent,$udom,$uname); |
|
} |
|
} |
|
|
|
if ($reply=~/^error\:(.*)/) { |
|
$message.="<font color=red>Write Error: $1</font>"; |
|
} |
} |
# ---------------------------------------------------------------- Done storing |
# ---------------------------------------------------------------- Done storing |
$message.='<h3>'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'</h3>'; |
$message.='<h3>'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'</h3>'; |
} |
} |
# --------------------------------------------- Devalidate cache for this child |
|
&Apache::lonnet::devalidatecourseresdata( |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}); |
|
&Apache::lonnet::clear_EXT_cache_status(); |
|
# -------------------------------------------------------------- Get coursedata |
|
%courseopt = &Apache::lonnet::dump |
|
('resourcedata', |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
# --------------------------------------------------- Get userdata (if present) |
|
if ($uname) { |
|
%useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname); |
|
} |
|
|
|
# ------------------------------------------------------------------- Sort this |
|
|
|
@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; |
|
#----------------------------------------------- if all selected, fill in array |
#----------------------------------------------- if all selected, fill in array |
if ($pscat[0] eq "all" || !@pscat) {@pscat = (keys %allparms);} |
if ($pscat[0] eq "all") {@pscat = (keys %allparms);} |
|
if (!@pscat) { @pscat=('duedate','opendate','answerdate','weight','maxtries') }; |
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} |
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} |
# ------------------------------------------------------------------ Start page |
# ------------------------------------------------------------------ Start page |
|
|
my $have_assesments=1; |
&startpage($r); |
if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; } |
|
|
|
&startpage($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader); |
|
|
|
if (!$have_assesments) { |
|
untie(%bighash); |
|
untie(%parmhash); |
|
return ''; |
|
} |
|
# if ($ENV{'form.url'}) { |
|
# $r->print('<input type="hidden" value="'.$ENV{'form.url'}. |
|
# '" name="url"><input type="hidden" name="command" value="set">'); |
|
# } |
|
$r->print('<input type="hidden" value="true" name="prevvisit">'); |
|
|
|
foreach ('tolerance','date_default','date_start','date_end', |
foreach ('tolerance','date_default','date_start','date_end', |
'date_interval','int','float','string') { |
'date_interval','int','float','string') { |
$r->print('<input type="hidden" value="'. |
$r->print('<input type="hidden" value="'. |
$ENV{'form.recent_'.$_}.'" name="recent_'.$_.'">'); |
$env{'form.recent_'.$_}.'" name="recent_'.$_.'">'); |
} |
} |
|
|
$r->print('<h2>'.$message.'</h2><table>'); |
$r->print('<h2>'.$message.'</h2>'); |
|
|
my $submitmessage = &mt('Update Section or Specific User'); |
|
if (!$pssymb) { |
if (!$pssymb) { |
$r->print('<tr><td>'.&mt('Select Parameter Level'). |
$r->print('<table border="1"><tr><td>'); |
&Apache::loncommon::help_open_topic('Course_Parameter_Levels'). |
&levelmenu($r,\%alllevs,$parmlev); |
'</td><td colspan="2">'); |
|
$r->print('<select name="parmlev">'); |
|
foreach (reverse sort keys %alllevs) { |
|
$r->print('<option value="'.$alllevs{$_}.'"'); |
|
if ($parmlev eq $alllevs{$_}) { |
|
$r->print(' selected'); |
|
} |
|
$r->print('>'.$_.'</option>'); |
|
} |
|
$r->print("</select></td>\n"); |
|
|
|
$r->print('</tr>'); |
|
if ($parmlev ne 'general') { |
if ($parmlev ne 'general') { |
$r->print('<tr><td>'.&mt('Select Enclosing Map or Folder').'</td>'); |
$r->print('<td>'); |
$r->print('<td colspan="2"><select name="pschp">'); |
&mapmenu($r,\%allmaps,$pschp,\%maptitles); |
$r->print('<option value="all">'.&mt('All Maps or Folders').'</option>'); |
$r->print('</td>'); |
foreach (sort {$allmaps{$a} cmp $allmaps{$b}} keys %allmaps) { |
|
$r->print('<option value="'.$_.'"'); |
|
if (($pschp eq $_)) { $r->print(' selected'); } |
|
$r->print('>'.$maptitles{$_}.($allmaps{$_}!~/^uploaded/?' ['.$allmaps{$_}.']':'').'</option>'); |
|
} |
|
$r->print("</select></td></tr>\n"); |
|
} |
} |
|
$r->print('</td></tr></table>'); |
|
&displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt); |
} else { |
} else { |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); |
$r->print("<tr><td>".&mt('Specific Resource')."</td><td>$resource</td>"); |
$r->print(&mt('Specific Resource').": ".$resource. |
$r->print('<td><input type="submit" name="dis" value="'.$submitmessage.'"></td>'); |
'<input type="hidden" value="'.$pssymb.'" name="symb">'); |
$r->print('</tr>'); |
|
$r->print('<input type="hidden" value="'.$pssymb.'" name="symb">'); |
|
} |
|
|
|
$r->print('<tr><td colspan="3"><hr /><input type="checkbox"'); |
|
if ($showoptions eq 'show') {$r->print(" checked ");} |
|
$r->print(' name="showoptions" value="show">'.&mt('Show More Options').'<hr /></td></tr>'); |
|
# $r->print("<tr><td>Show: $showoptions</td></tr>"); |
|
# $r->print("<tr><td>pscat: @pscat</td></tr>"); |
|
# $r->print("<tr><td>psprt: @psprt</td></tr>"); |
|
# $r->print("<tr><td>fcat: $fcat</td></tr>"); |
|
|
|
if ($showoptions eq 'show') { |
|
my $tempkey; |
|
|
|
$r->print('<tr><td colspan="3" align="center">'.&mt('Select Parameters to View').'</td></tr>'); |
|
|
|
$r->print('<tr><td colspan="2"><table><tr>'); |
|
my $cnt=0; |
|
foreach $tempkey (sort { $allparms{$a} cmp $allparms{$b} } |
|
keys %allparms ) { |
|
++$cnt; |
|
$r->print('</tr><tr>') if ($cnt%2); |
|
$r->print('<td><input type="checkbox" name="pscat" '); |
|
$r->print('value="'.$tempkey.'"'); |
|
if ($pscat[0] eq "all" || grep $_ eq $tempkey, @pscat) { |
|
$r->print(' checked'); |
|
} |
|
$r->print('>'.$allparms{$tempkey}.'</td>'); |
|
} |
|
$r->print(' |
|
</tr><tr><td> |
|
<script type="text/javascript"> |
|
function checkall(value, checkName) { |
|
for (i=0; i<document.forms.parmform.elements.length; i++) { |
|
ele = document.forms.parmform.elements[i]; |
|
if (ele.name == checkName) { |
|
document.forms.parmform.elements[i].checked=value; |
|
} |
|
} |
|
} |
} |
</script> |
&usermenu($r,$uname,$id,$udom,$csec); |
<input type="button" onclick="checkall(true, \'pscat\')" value="Select All" /> |
|
</td><td> |
|
<input type="button" onclick="checkall(false, \'pscat\')" value="Unselect All" /> |
|
</td> |
|
'); |
|
$r->print('</tr></table>'); |
|
|
|
# $r->print('<tr><td>Select Parts</td><td>'); |
$r->print('<br /><input type="submit" name="dis" value="'.&mt("Update Parameter Display").'" />'); |
$r->print('<td><select multiple name="psprt" size="5">'); |
|
$r->print('<option value="all"'); |
|
$r->print(' selected') unless (@psprt); |
|
$r->print('>'.&mt('All Parts').'</option>'); |
|
my %temphash=(); |
|
foreach (@psprt) { $temphash{$_}=1; } |
|
foreach $tempkey (sort keys %allparts) { |
|
unless ($tempkey =~ /\./) { |
|
$r->print('<option value="'.$tempkey.'"'); |
|
if ($psprt[0] eq "all" || $temphash{$tempkey}) { |
|
$r->print(' selected'); |
|
} |
|
$r->print('>'.$allparts{$tempkey}.'</option>'); |
|
} |
|
} |
|
$r->print('</select></td></tr><tr><td colspan="3"><hr /></td></tr>'); |
|
|
|
$r->print('<tr><td>'.&mt('Sort list by').'</td><td>'); |
|
$r->print('<select name="fcat">'); |
|
$r->print('<option value="">'.&mt('Enclosing Map or Folder').'</option>'); |
|
foreach (sort keys %allkeys) { |
|
$r->print('<option value="'.$_.'"'); |
|
if ($fcat eq $_) { $r->print(' selected'); } |
|
$r->print('>'.$allkeys{$_}.'</option>'); |
|
} |
|
$r->print('</select></td>'); |
|
|
|
$r->print('</tr><tr><td colspan="3"><hr /></td></tr>'); |
|
|
|
} else { # hide options - include any necessary extras here |
|
|
|
$r->print('<input type="hidden" name="fcat" value="'.$fcat.'">'."\n"); |
|
|
|
unless (@pscat) { |
|
foreach (keys %allparms ) { |
|
$r->print('<input type="hidden" name="pscat" value="'.$_.'">'."\n"); |
|
} |
|
} else { |
|
foreach (@pscat) { |
|
$r->print('<input type="hidden" name="pscat" value="'.$_.'">'."\n"); |
|
} |
|
} |
|
|
|
unless (@psprt) { |
|
foreach (keys %allparts ) { |
|
$r->print('<input type="hidden" name="psprt" value="'.$_.'">'."\n"); |
|
} |
|
} else { |
|
foreach (@psprt) { |
|
$r->print('<input type="hidden" name="psprt" value="'.$_.'">'."\n"); |
|
} |
|
} |
|
|
|
} |
|
$r->print('</table><br />'); |
|
if (($prevvisit) || ($pschp) || ($pssymb)) { |
|
$submitmessage = &mt("Update Course Assessment Parameter Display"); |
|
} else { |
|
$submitmessage = &mt("Set/Modify Course Assessment Parameters"); |
|
} |
|
$r->print('<input type="submit" name="dis" value="'.$submitmessage.'">'); |
|
|
|
# my @temp_psprt; |
|
# foreach my $t (@psprt) { |
|
# push(@temp_psprt, grep {eval (/^$t\./ || ($_ == $t))} (keys %allparts)); |
|
# } |
|
|
|
# @psprt = @temp_psprt; |
|
|
|
my @temp_pscat; |
my @temp_pscat; |
map { |
map { |
Line 1112 sub assessparms {
|
Line 1084 sub assessparms {
|
|
|
@pscat = @temp_pscat; |
@pscat = @temp_pscat; |
|
|
if (($prevvisit) || ($pschp) || ($pssymb)) { |
if (($env{'form.prevvisit'}) || ($pschp) || ($pssymb)) { |
# ----------------------------------------------------------------- Start Table |
# ----------------------------------------------------------------- Start Table |
my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat; |
my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat; |
my $csuname=$ENV{'user.name'}; |
my $csuname=$env{'user.name'}; |
my $csudom=$ENV{'user.domain'}; |
my $csudom=$env{'user.domain'}; |
|
|
if ($parmlev eq 'full' || $parmlev eq 'brief') { |
if ($parmlev eq 'full') { |
my $coursespan=$csec?8:5; |
my $coursespan=$csec?8:5; |
$r->print('<p><table border=2>'); |
$r->print('<p><table border=2>'); |
$r->print('<tr><td colspan=5></td>'); |
$r->print('<tr><td colspan=5></td>'); |
Line 1158 ENDTABLETWO
|
Line 1130 ENDTABLETWO
|
$r->print(<<ENDTABLEHEADFOUR); |
$r->print(<<ENDTABLEHEADFOUR); |
</tr><tr><th>$lt{'aut'}</th><th>$lt{'type'}</th> |
</tr><tr><th>$lt{'aut'}</th><th>$lt{'type'}</th> |
<th>$lt{'emof'}</th><th>$lt{'part'}</th><th>$lt{'pn'}</th> |
<th>$lt{'emof'}</th><th>$lt{'part'}</th><th>$lt{'pn'}</th> |
<th>$lt{'gen'}</th><th>$lt{'femof'}</th> |
<th>$lt{'gen'}</th><th>$lt{'foremf'}</th> |
<th>$lt{'def'}</th><th>$lt{'foremf'}</th><th>$lt{'fr'}</th> |
<th>$lt{'def'}</th><th>$lt{'femof'}</th><th>$lt{'fr'}</th> |
ENDTABLEHEADFOUR |
ENDTABLEHEADFOUR |
|
|
if ($csec) { |
if ($csec) { |
Line 1185 ENDTABLEHEADFOUR
|
Line 1157 ENDTABLEHEADFOUR
|
|| |
|| |
($pssymb && $pssymb eq $symbp{$rid})) { |
($pssymb && $pssymb eq $symbp{$rid})) { |
# ------------------------------------------------------ Entry for one resource |
# ------------------------------------------------------ Entry for one resource |
if ($defbgone eq '"E0E099"') { |
if ($defbgone eq '"#E0E099"') { |
$defbgone='"E0E0DD"'; |
$defbgone='"#E0E0DD"'; |
} else { |
} else { |
$defbgone='"E0E099"'; |
$defbgone='"#E0E099"'; |
} |
} |
if ($defbgtwo eq '"FFFF99"') { |
if ($defbgtwo eq '"#FFFF99"') { |
$defbgtwo='"FFFFDD"'; |
$defbgtwo='"#FFFFDD"'; |
} else { |
} else { |
$defbgtwo='"FFFF99"'; |
$defbgtwo='"#FFFF99"'; |
} |
} |
my $thistitle=''; |
my $thistitle=''; |
my %name= (); |
my %name= (); |
Line 1202 ENDTABLEHEADFOUR
|
Line 1174 ENDTABLEHEADFOUR
|
my %display=(); |
my %display=(); |
my %type= (); |
my %type= (); |
my %default=(); |
my %default=(); |
my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid}); |
my $uri=&Apache::lonnet::declutter($uris{$rid}); |
|
|
foreach (split(/\,/,$keyp{$rid})) { |
foreach (split(/\,/,$keyp{$rid})) { |
my $tempkeyp = $_; |
my $tempkeyp = $_; |
Line 1255 ENDTABLEHEADFOUR
|
Line 1227 ENDTABLEHEADFOUR
|
undef $firstrow; |
undef $firstrow; |
} |
} |
|
|
&print_row($r,$_,\%part,\%name,$rid,\%default, |
&print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default, |
\%type,\%display,$defbgone,$defbgtwo, |
\%type,\%display,$defbgone,$defbgtwo, |
$parmlev); |
$parmlev,$uname,$udom,$csec); |
} |
} |
} |
} |
} |
} |
} # end foreach ids |
} # end foreach ids |
# -------------------------------------------------- End entry for one resource |
# -------------------------------------------------- End entry for one resource |
$r->print('</table>'); |
$r->print('</table>'); |
} # end of brief/full |
} # end of full |
#--------------------------------------------------- Entry for parm level map |
#--------------------------------------------------- Entry for parm level map |
if ($parmlev eq 'map') { |
if ($parmlev eq 'map') { |
my $defbgone = '"E0E099"'; |
my $defbgone = '"E0E099"'; |
Line 1301 ENDTABLEHEADFOUR
|
Line 1273 ENDTABLEHEADFOUR
|
# $r->print("$mapid:$map: $rid <br /> \n"); |
# $r->print("$mapid:$map: $rid <br /> \n"); |
|
|
if ($map eq $mapid) { |
if ($map eq $mapid) { |
my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid}); |
my $uri=&Apache::lonnet::declutter($uris{$rid}); |
# $r->print("Keys: $keyp{$rid} <br />\n"); |
# $r->print("Keys: $keyp{$rid} <br />\n"); |
|
|
#-------------------------------------------------------------------- |
#-------------------------------------------------------------------- |
Line 1363 ENDMAPONE
|
Line 1335 ENDMAPONE
|
|
|
foreach (sort keys %name) { |
foreach (sort keys %name) { |
$r->print('<tr>'); |
$r->print('<tr>'); |
&print_row($r,$_,\%part,\%name,$mapid,\%default, |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
\%type,\%display,$defbgone,$defbgtwo, |
\%type,\%display,$defbgone,$defbgtwo, |
$parmlev); |
$parmlev,$uname,$udom,$csec); |
# $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n"); |
# $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n"); |
} |
} |
$r->print("</table></center>"); |
$r->print("</table></center>"); |
Line 1389 ENDMAPONE
|
Line 1361 ENDMAPONE
|
foreach (@ids) { |
foreach (@ids) { |
my $rid = $_; |
my $rid = $_; |
|
|
my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid}); |
my $uri=&Apache::lonnet::declutter($uris{$rid}); |
|
|
#-------------------------------------------------------------------- |
#-------------------------------------------------------------------- |
# @catmarker contains list of all possible parameters including part #s |
# @catmarker contains list of all possible parameters including part #s |
Line 1441 ENDMAPONE
|
Line 1413 ENDMAPONE
|
|
|
foreach (sort keys %name) { |
foreach (sort keys %name) { |
$r->print('<tr>'); |
$r->print('<tr>'); |
&print_row($r,$_,\%part,\%name,$mapid,\%default, |
&print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default, |
\%type,\%display,$defbgone,$defbgtwo,$parmlev); |
\%type,\%display,$defbgone,$defbgtwo,$parmlev,$uname,$udom,$csec); |
# $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n"); |
# $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n"); |
} |
} |
$r->print("</table></center>"); |
$r->print("</table></center>"); |
} # end of $parmlev eq general |
} # end of $parmlev eq general |
} |
} |
$r->print('</form></body></html>'); |
$r->print('</form></body></html>'); |
untie(%bighash); |
|
untie(%parmhash); |
|
} # end sub assessparms |
} # end sub assessparms |
|
|
|
|
Line 1477 sub crsenv {
|
Line 1447 sub crsenv {
|
my $setoutput=''; |
my $setoutput=''; |
my $bodytag=&Apache::loncommon::bodytag( |
my $bodytag=&Apache::loncommon::bodytag( |
'Set Course Environment Parameters'); |
'Set Course Environment Parameters'); |
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef, |
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
'Edit Course Environment'); |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
|
# |
# |
# Go through list of changes |
# Go through list of changes |
foreach (keys %ENV) { |
foreach (keys %env) { |
next if ($_!~/^form\.(.+)\_setparmval$/); |
next if ($_!~/^form\.(.+)\_setparmval$/); |
my $name = $1; |
my $name = $1; |
my $value = $ENV{'form.'.$name.'_value'}; |
my $value = $env{'form.'.$name.'_value'}; |
if ($name eq 'newp') { |
if ($name eq 'newp') { |
$name = $ENV{'form.newp_name'}; |
$name = $env{'form.newp_name'}; |
} |
} |
if ($name eq 'url') { |
if ($name eq 'url') { |
$value=~s/^\/res\///; |
$value=~s/^\/res\///; |
Line 1563 sub crsenv {
|
Line 1535 sub crsenv {
|
} |
} |
# ------------------------- Re-init course environment entries for this session |
# ------------------------- Re-init course environment entries for this session |
|
|
&Apache::lonnet::coursedescription($ENV{'request.course.id'}); |
&Apache::lonnet::coursedescription($env{'request.course.id'}); |
|
|
# -------------------------------------------------------- Get parameters again |
# -------------------------------------------------------- Get parameters again |
|
|
Line 1759 sub crsenv {
|
Line 1731 sub crsenv {
|
my $Set=&mt('Set'); |
my $Set=&mt('Set'); |
my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset'); |
my $html=&Apache::lonxml::xmlbegin(); |
my $html=&Apache::lonxml::xmlbegin(); |
$r->print(<<ENDENV); |
$r->print(<<ENDenv); |
$html |
$html |
<head> |
<head> |
<script type="text/javascript" language="Javascript" > |
<script type="text/javascript" language="Javascript" > |
Line 1768 $browse_js
|
Line 1740 $browse_js
|
<title>LON-CAPA Course Environment</title> |
<title>LON-CAPA Course Environment</title> |
</head> |
</head> |
$bodytag |
$bodytag |
<form method="post" action="/adm/parmset" name="envform"> |
$breadcrumbs |
|
<form method="post" action="/adm/parmset?action=crsenv" name="envform"> |
$setoutput |
$setoutput |
<p> |
<p> |
<table border=2> |
<table border=2> |
Line 1779 $output
|
Line 1752 $output
|
</form> |
</form> |
</body> |
</body> |
</html> |
</html> |
ENDENV |
ENDenv |
} |
} |
################################################## |
################################################## |
|
# Overview mode |
|
################################################## |
my $tableopen; |
my $tableopen; |
|
|
sub tablestart { |
sub tablestart { |
Line 1804 sub tableend {
|
Line 1778 sub tableend {
|
} |
} |
} |
} |
|
|
sub overview { |
sub readdata { |
my $r=shift; |
my ($crs,$dom)=@_; |
my $bodytag=&Apache::loncommon::bodytag( |
# Read coursedata |
'Set/Modify Course Assessment Parameters'); |
my $resourcedata=&Apache::lonnet::get_courseresdata($crs,$dom); |
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
# Read userdata |
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
|
my $html=&Apache::lonxml::xmlbegin(); |
my $classlist=&Apache::loncoursedata::get_classlist(); |
$r->print(<<ENDOVER); |
foreach (keys %$classlist) { |
$html |
# the following undefs are for 'domain', and 'username' respectively. |
<head> |
if ($_=~/^(\w+)\:(\w+)$/) { |
<title>LON-CAPA Course Environment</title> |
my ($tuname,$tudom)=($1,$2); |
</head> |
my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom); |
$bodytag |
foreach my $userkey (keys %{$useropt}) { |
<form method="post" action="/adm/parmset" name="overviewform"> |
if ($userkey=~/^$env{'request.course.id'}/) { |
<input type="hidden" name="overview" value="1" /> |
my $newkey=$userkey; |
ENDOVER |
$newkey=~s/^($env{'request.course.id'}\.)/$1\[useropt\:$tuname\:$tudom\]\./; |
|
$$resourcedata{$newkey}=$$useropt{$userkey}; |
|
} |
|
} |
|
} |
|
} |
|
return $resourcedata; |
|
} |
|
|
|
|
# Setting |
# Setting |
my %olddata=&Apache::lonnet::dump('resourcedata',$dom,$crs); |
|
|
sub storedata { |
|
my ($r,$crs,$dom)=@_; |
|
# Set userlevel immediately |
|
# Do an intermediate store of course level |
|
my $olddata=&readdata($crs,$dom); |
my %newdata=(); |
my %newdata=(); |
undef %newdata; |
undef %newdata; |
my @deldata=(); |
my @deldata=(); |
undef @deldata; |
undef @deldata; |
foreach (keys %ENV) { |
foreach (keys %env) { |
if ($_=~/^form\.([a-z]+)\_(.+)$/) { |
if ($_=~/^form\.([a-z]+)\_(.+)$/) { |
my $cmd=$1; |
my $cmd=$1; |
my $thiskey=$2; |
my $thiskey=$2; |
|
my ($tuname,$tudom)=&extractuser($thiskey); |
|
my $tkey=$thiskey; |
|
if ($tuname) { |
|
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./; |
|
} |
if ($cmd eq 'set') { |
if ($cmd eq 'set') { |
my $data=$ENV{$_}; |
my $data=$env{$_}; |
if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } |
if ($$olddata{$thiskey} ne $data) { |
|
if ($tuname) { |
|
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') { |
|
$r->print('<br />'.&mt('Stored modified parameter for').' '. |
|
&Apache::loncommon::plainname($tuname,$tudom)); |
|
} else { |
|
$r->print('<h2><font color="red">'. |
|
&mt('Error storing parameters').'</font></h2>'); |
|
} |
|
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
|
} else { |
|
$newdata{$thiskey}=$data; |
|
} |
|
} |
} elsif ($cmd eq 'del') { |
} elsif ($cmd eq 'del') { |
push (@deldata,$thiskey); |
if ($tuname) { |
|
if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') { |
|
$r->print('<br />'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom)); |
|
} else { |
|
$r->print('<h2><font color="red">'. |
|
&mt('Error deleting parameters').'</font></h2>'); |
|
} |
|
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
|
} else { |
|
push (@deldata,$thiskey); |
|
} |
} elsif ($cmd eq 'datepointer') { |
} elsif ($cmd eq 'datepointer') { |
my $data=&Apache::lonhtmlcommon::get_date_from_form($ENV{$_}); |
my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); |
if (defined($data) and $olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } |
if (defined($data) and $$olddata{$thiskey} ne $data) { |
|
if ($tuname) { |
|
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') { |
|
$r->print('<br />'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom)); |
|
} else { |
|
$r->print('<h2><font color="red">'. |
|
&mt('Error storing parameters').'</font></h2>'); |
|
} |
|
&Apache::lonnet::devalidateuserresdata($tuname,$tudom); |
|
} else { |
|
$newdata{$thiskey}=$data; |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
# Store |
# Store all course level |
my $delentries=$#deldata+1; |
my $delentries=$#deldata+1; |
my @newdatakeys=keys %newdata; |
my @newdatakeys=keys %newdata; |
my $putentries=$#newdatakeys+1; |
my $putentries=$#newdatakeys+1; |
Line 1852 ENDOVER
|
Line 1880 ENDOVER
|
$r->print('<h2><font color="red">'. |
$r->print('<h2><font color="red">'. |
&mt('Error deleting parameters').'</font></h2>'); |
&mt('Error deleting parameters').'</font></h2>'); |
} |
} |
|
&Apache::lonnet::devalidatecourseresdata($crs,$dom); |
} |
} |
if ($putentries) { |
if ($putentries) { |
if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') { |
if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') { |
Line 1860 ENDOVER
|
Line 1889 ENDOVER
|
$r->print('<h2><font color="red">'. |
$r->print('<h2><font color="red">'. |
&mt('Error storing parameters').'</font></h2>'); |
&mt('Error storing parameters').'</font></h2>'); |
} |
} |
|
&Apache::lonnet::devalidatecourseresdata($crs,$dom); |
} |
} |
# Read and display |
} |
my %resourcedata=&Apache::lonnet::dump('resourcedata',$dom,$crs); |
|
|
sub extractuser { |
|
my $key=shift; |
|
return ($key=~/^$env{'request.course.id'}.\[useropt\:(\w+)\:(\w+)\]\./); |
|
} |
|
|
|
sub listdata { |
|
my ($r,$resourcedata,$listdata)=@_; |
|
# Start list output |
|
|
my $oldsection=''; |
my $oldsection=''; |
my $oldrealm=''; |
my $oldrealm=''; |
my $oldpart=''; |
my $oldpart=''; |
my $pointer=0; |
my $pointer=0; |
$tableopen=0; |
$tableopen=0; |
my $foundkeys=0; |
my $foundkeys=0; |
foreach my $thiskey (sort keys %resourcedata) { |
foreach my $thiskey (sort keys %{$listdata}) { |
if ($resourcedata{$thiskey.'.type'}) { |
if ($$resourcedata{$thiskey.'.type'}) { |
my ($course,$middle,$part,$name)= |
my ($middle,$part,$name)= |
($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
my $section=&mt('All Students'); |
my $section=&mt('All Students'); |
if ($middle=~/^\[(.*)\]\./) { |
if ($middle=~/^\[(.*)\]/) { |
$section=&mt('Group/Section').': '.$1; |
my $issection=$1; |
$middle=~s/^\[(.*)\]\.//; |
if ($issection=~/^useropt\:(\w+)\:(\w+)/) { |
|
$section=&mt('User').": ".&Apache::loncommon::plainname($1,$2); |
|
} else { |
|
$section=&mt('Group/Section').': '.$issection; |
|
} |
|
$middle=~s/^\[(.*)\]//; |
} |
} |
$middle=~s/\.$//; |
$middle=~s/\.+$//; |
|
$middle=~s/^\.+//; |
my $realm='<font color="red">'.&mt('All Resources').'</font>'; |
my $realm='<font color="red">'.&mt('All Resources').'</font>'; |
if ($middle=~/^(.+)\_\_\_\(all\)$/) { |
if ($middle=~/^(.+)\_\_\_\(all\)$/) { |
$realm='<font color="green">'.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).' <br /><font color="#aaaaaa" size="-2">('.$1.')</font></font>'; |
$realm='<font color="green">'.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).' <br /><font color="#aaaaaa" size="-2">('.$1.')</font></font>'; |
Line 1908 ENDOVER
|
Line 1953 ENDOVER
|
':</b></td><td><input type="checkbox" name="del_'. |
':</b></td><td><input type="checkbox" name="del_'. |
$thiskey.'" /></td><td>'); |
$thiskey.'" /></td><td>'); |
$foundkeys++; |
$foundkeys++; |
if ($resourcedata{$thiskey.'.type'}=~/^date/) { |
if ($$resourcedata{$thiskey.'.type'}=~/^date/) { |
my $jskey='key_'.$pointer; |
my $jskey='key_'.$pointer; |
$pointer++; |
$pointer++; |
$r->print( |
$r->print( |
&Apache::lonhtmlcommon::date_setter('overviewform', |
&Apache::lonhtmlcommon::date_setter('overviewform', |
$jskey, |
$jskey, |
$resourcedata{$thiskey}). |
$$resourcedata{$thiskey}). |
'<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />' |
'<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />' |
); |
); |
} else { |
} else { |
$r->print( |
$r->print( |
'<input type="text" name="set_'.$thiskey.'" value="'. |
'<input type="text" name="set_'.$thiskey.'" value="'. |
$resourcedata{$thiskey}.'">'); |
$$resourcedata{$thiskey}.'">'); |
} |
} |
$r->print('</td></tr>'); |
$r->print('</td></tr>'); |
} |
} |
} |
} |
|
return $foundkeys; |
|
} |
|
|
|
sub newoverview { |
|
my $r=shift; |
|
my $bodytag=&Apache::loncommon::bodytag( |
|
'Set Course Assessment Parameters'); |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
|
$r->print(<<ENDOVER); |
|
$html |
|
<head> |
|
<title>LON-CAPA Parameters</title> |
|
</head> |
|
$bodytag |
|
$breadcrumbs |
|
<form method="post" action="/adm/parmset?action=newoverview" name="overviewform"> |
|
ENDOVER |
|
$r->print(&tableend(). |
|
'<p><input type="submit" value="'.&mt('Submit').'" /></p></form></body></html>'); |
|
} |
|
|
|
sub overview { |
|
my $r=shift; |
|
my $bodytag=&Apache::loncommon::bodytag( |
|
'Modify Course Assessment Parameters'); |
|
my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview'); |
|
my $html=&Apache::lonxml::xmlbegin(); |
|
$r->print(<<ENDOVER); |
|
$html |
|
<head> |
|
<title>LON-CAPA Parameters</title> |
|
</head> |
|
$bodytag |
|
$breadcrumbs |
|
<form method="post" action="/adm/parmset?action=setoverview" name="overviewform"> |
|
ENDOVER |
|
# Store modified |
|
|
|
&storedata($r,$crs,$dom); |
|
|
|
# Read modified data |
|
|
|
my $resourcedata=&readdata($crs,$dom); |
|
|
|
# List data |
|
|
|
my $foundkeys=&listdata($r,$resourcedata,$resourcedata); |
|
|
$r->print(&tableend().'<p>'. |
$r->print(&tableend().'<p>'. |
($foundkeys?'<input type="submit" value="'.&mt('Modify Parameters').'" />':&mt('There are no course or section parameters.')).'</p></form></body></html>'); |
($foundkeys?'<input type="submit" value="'.&mt('Modify Parameters').'" />':&mt('There are no parameters.')).'</p></form></body></html>'); |
} |
} |
|
|
################################################## |
################################################## |
Line 1957 Returns:
|
Line 2054 Returns:
|
sub change_clone { |
sub change_clone { |
my ($clonelist,$oldcloner) = @_; |
my ($clonelist,$oldcloner) = @_; |
my ($uname,$udom); |
my ($uname,$udom); |
my $cnum = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cdom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $clone_crs = $cnum.':'.$cdom; |
my $clone_crs = $cnum.':'.$cdom; |
|
|
if ($cnum && $cdom) { |
if ($cnum && $cdom) { |
Line 2014 sub change_clone {
|
Line 2111 sub change_clone {
|
} |
} |
} |
} |
|
|
|
|
|
################################################## |
|
################################################## |
|
|
|
=pod |
|
|
|
=item * header |
|
|
|
Output html header for page |
|
|
|
=cut |
|
|
|
################################################## |
|
################################################## |
|
sub header { |
|
my $html=&Apache::lonxml::xmlbegin(); |
|
my $bodytag=&Apache::loncommon::bodytag('Parameter Manager'); |
|
my $title = &mt('LON-CAPA Parameter Manager'); |
|
return(<<ENDHEAD); |
|
$html |
|
<head> |
|
<title>$title</title> |
|
</head> |
|
$bodytag |
|
ENDHEAD |
|
} |
|
################################################## |
|
################################################## |
|
sub print_main_menu { |
|
my ($r,$parm_permission)=@_; |
|
# |
|
$r->print(<<ENDMAINFORMHEAD); |
|
<form method="post" enctype="multipart/form-data" |
|
action="/adm/parmset" name="studentform"> |
|
ENDMAINFORMHEAD |
|
# |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my @menu = |
|
( |
|
{ text => 'Set Course Environment Parameters', |
|
action => 'crsenv', |
|
permission => $parm_permission, |
|
}, |
|
{ text => 'Set/Modify Course Assessment Parameters - Helper Mode', |
|
url => '/adm/helper/parameter.helper', |
|
permission => $parm_permission, |
|
}, |
|
{ text => 'Modify Course Assessment Parameters - Overview Mode', |
|
action => 'setoverview', |
|
permission => $parm_permission, |
|
}, |
|
{ text => 'Set Course Assessment Parameters - Overview Mode', |
|
action => 'newoverview', |
|
permission => $parm_permission, |
|
}, |
|
{ text => 'Set/Modify Course Assessment Parameters - Table Mode', |
|
action => 'settable', |
|
permission => $parm_permission, |
|
help => 'Cascading_Parameters', |
|
}, |
|
# { text => 'Set Parameter Default Preferences', |
|
# help => 'Course_View_Class_List', |
|
# action => 'setdefaults', |
|
# permission => $parm_permission, |
|
# }, |
|
); |
|
my $menu_html = ''; |
|
foreach my $menu_item (@menu) { |
|
next if (! $menu_item->{'permission'}); |
|
$menu_html.='<p>'; |
|
$menu_html.='<font size="+1">'; |
|
if (exists($menu_item->{'url'})) { |
|
$menu_html.=qq{<a href="$menu_item->{'url'}">}; |
|
} else { |
|
$menu_html.= |
|
qq{<a href="/adm/parmset?action=$menu_item->{'action'}">}; |
|
} |
|
$menu_html.= &mt($menu_item->{'text'}).'</a></font>'; |
|
if (exists($menu_item->{'help'})) { |
|
$menu_html.= |
|
&Apache::loncommon::help_open_topic($menu_item->{'help'}); |
|
} |
|
$menu_html.='</p>'.$/; |
|
} |
|
$r->print($menu_html); |
|
return; |
|
} |
|
|
|
|
|
|
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
Line 2024 sub change_clone {
|
Line 2213 sub change_clone {
|
Main handler. Calls &assessparms and &crsenv subroutines. |
Main handler. Calls &assessparms and &crsenv subroutines. |
|
|
=cut |
=cut |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
use Data::Dumper; |
use Data::Dumper; |
Line 2036 sub handler {
|
Line 2224 sub handler {
|
$r->send_http_header; |
$r->send_http_header; |
return OK; |
return OK; |
} |
} |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['action','state', |
# ----------------------------------------------------------- Clear out garbage |
'pres_marker', |
|
'pres_value', |
|
'pres_type', |
|
'udom','uname']); |
|
|
%courseopt=(); |
|
%useropt=(); |
|
%parmhash=(); |
|
|
|
@ids=(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
%symbp=(); |
&Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset", |
%mapp=(); |
text=>"Parameter Manager", |
%typep=(); |
faq=>10, |
%keyp=(); |
bug=>'Instructor Interface'}); |
|
|
%maptitles=(); |
|
|
|
# ----------------------------------------------------- Needs to be in a course |
# ----------------------------------------------------- Needs to be in a course |
|
my $parm_permission = |
|
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) || |
|
&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'. |
|
$env{'request.course.sec'})); |
|
if ($env{'request.course.id'} && $parm_permission) { |
|
|
if (($ENV{'request.course.id'}) && |
# Start Page |
(&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}) || |
|
&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}.'/'. |
|
$ENV{'request.course.sec'}) |
|
)) { |
|
|
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
|
|
$coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
|
|
|
if (($ENV{'form.crsenv'}) || (!$ENV{'request.course.fn'})) { |
|
# ---------------------------------------------- This is for course environment |
# id numbers can change on re-ordering of folders |
# -------------------------- also call if toplevel map coudl not be initialized |
|
&crsenv($r); |
&resetsymbcache(); |
} elsif ($ENV{'form.overview'}) { |
|
# --------------------------------------------------------------- Overview mode |
# |
|
# Main switch on form.action and form.state, as appropriate |
|
# |
|
# Check first if coming from someone else headed directly for |
|
# the table mode |
|
if ((($env{'form.command'} eq 'set') && ($env{'form.url'}) |
|
&& (!$env{'form.dis'})) || ($env{'form.symb'})) { |
|
&assessparms($r); |
|
|
|
} elsif (! exists($env{'form.action'})) { |
|
$r->print(&header()); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs(undef, |
|
'Parameter Manager')); |
|
&print_main_menu($r,$parm_permission); |
|
} elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv', |
|
text=>"Course Environment"}); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs(undef, |
|
'Edit Course Environment')); |
|
&crsenv($r); |
|
} elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
|
text=>"Overview Mode"}); |
&overview($r); |
&overview($r); |
} else { |
} elsif ($env{'form.action'} eq 'newoverview' && $parm_permission) { |
# --------------------------------------------------------- Bring up assessment |
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', |
|
text=>"Overview Mode"}); |
|
&newoverview($r); |
|
} elsif ($env{'form.action'} eq 'settable' && $parm_permission) { |
|
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', |
|
text=>"Table Mode", |
|
help => 'Course_Setting_Parameters'}); |
&assessparms($r); |
&assessparms($r); |
} |
} |
|
|
} 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/parmset:opa:0:0:Cannot modify assessment parameters"; |
"/adm/parmset:opa:0:0:Cannot modify assessment parameters"; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |