version 1.81, 2002/12/30 14:10:58
|
version 1.129, 2003/10/08 23:07:01
|
Line 56 package Apache::lonparmset;
|
Line 56 package Apache::lonparmset;
|
use strict; |
use strict; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::Constants qw(:common :http REDIRECT); |
use Apache::Constants qw(:common :http REDIRECT); |
|
use Apache::lonhtmlcommon(); |
use Apache::loncommon; |
use Apache::loncommon; |
use GDBM_File; |
use GDBM_File; |
use Apache::lonhomework; |
use Apache::lonhomework; |
Line 72 my %mapp;
|
Line 73 my %mapp;
|
my %typep; |
my %typep; |
my %keyp; |
my %keyp; |
|
|
|
my %maptitles; |
|
|
my $uname; |
my $uname; |
my $udom; |
my $udom; |
my $uhome; |
my $uhome; |
Line 96 Returns: A list, the first item is the
|
Line 99 Returns: A list, the first item is the
|
11- resource default |
11- resource default |
10- map default |
10- map default |
9 - General Course |
9 - General Course |
8 - Map level in course |
8 - Map or Folder level in course |
7 - resource level in course |
7 - resource level in course |
6 - General for section |
6 - General for section |
5 - Map level for section |
5 - Map or Folder level for section |
4 - resource level in section |
4 - resource level in section |
3 - General for specific student |
3 - General for specific student |
2 - Map level for specific student |
2 - Map or Folder level for specific student |
1 - resource level for specific student |
1 - resource level for specific student |
|
|
=cut |
=cut |
Line 282 sub plink {
|
Line 285 sub plink {
|
|
|
|
|
sub startpage { |
sub startpage { |
my ($r,$id,$udom,$csec,$uname)=@_; |
my ($r,$id,$udom,$csec,$uname,$have_assesments)=@_; |
$r->content_type('text/html'); |
|
$r->send_http_header; |
my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','', |
|
|
my $bodytag=&Apache::loncommon::bodytag('Set Course Parameters','', |
|
'onUnload="pclose()"'); |
'onUnload="pclose()"'); |
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. |
&Apache::loncommon::selectstudent_link('parmform','uname','udom'); |
&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(); |
$r->print(<<ENDHEAD); |
$r->print(<<ENDHEAD); |
<html> |
<html> |
<head> |
<head> |
Line 304 sub startpage {
|
Line 305 sub startpage {
|
parmwin.close(); |
parmwin.close(); |
} |
} |
|
|
function pjump(type,dis,value,marker,ret,call) { |
$pjump_def |
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() { |
function psub() { |
pclose(); |
pclose(); |
Line 348 sub startpage {
|
Line 341 sub startpage {
|
$selscript |
$selscript |
</head> |
</head> |
$bodytag |
$bodytag |
|
|
<form method="post" action="/adm/parmset" name="envform"> |
<form method="post" action="/adm/parmset" name="envform"> |
<h3>Course Environment</h3> |
<h4>Course Environment Parameters</h4> |
<input type="submit" name="crsenv" value="Set Course Environment"> |
<input type="submit" name="crsenv" value="Set Course Environment Parameters" /> |
|
</form> |
|
<hr /> |
|
<form method="post" action="/adm/helper/parameter.helper" name="helpform"> |
|
<h4>Course Assessment Parameter - Helper Mode</h4> |
|
<input type="submit" value="Set/Modify Course Assessment Parameter" /> |
|
</form> |
|
<hr /> |
|
<form method="post" action="/adm/parmset" name="overview"> |
|
<h4>Course Assessment Parameters - Overview Mode</h4> |
|
<input type="submit" name="overview" value="Modify Course Assessment Parameters" /> |
</form> |
</form> |
|
<hr /> |
<form method="post" action="/adm/parmset" name="parmform"> |
<form method="post" action="/adm/parmset" name="parmform"> |
<h3>Course Assessments</h3> |
<h4>Course Assessments Parameters - Table Mode</h4> |
|
ENDHEAD |
|
|
|
if (!$have_assesments) { |
|
$r->print('<font color="red">There are no assesment parameters in this course to set.</font><br />'); |
|
} else { |
|
$r->print(<<ENDHEAD); |
<b> |
<b> |
Section/Group: |
Section/Group: |
<input type="text" value="$csec" size="6" name="csec"> |
<input type="text" value="$csec" size="6" name="csec"> |
Line 369 $chooseopt
|
Line 380 $chooseopt
|
<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"> |
ENDHEAD |
ENDHEAD |
|
} |
} |
} |
|
|
sub print_row { |
sub print_row { |
Line 483 sub print_row {
|
Line 494 sub print_row {
|
sub print_td { |
sub print_td { |
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; |
$r->print('<td bgcolor='.(($result==$which)?'"#AAFFAA"':$defbg). |
$r->print('<td bgcolor='.(($result==$which)?'"#AAFFAA"':$defbg). |
' align="center">'. |
' align="center">'); |
&plink($$typeoutpar[$which],$$display{$value},$$outpar[$which], |
if ($which<10) { |
$mprefix."$which",'parmform.pres','psub').'</td>'."\n"); |
$r->print(&plink($$typeoutpar[$which], |
|
$$display{$value},$$outpar[$which], |
|
$mprefix."$which",'parmform.pres','psub')); |
|
} else { |
|
$r->print(&valout($$outpar[$which],$$typeoutpar[$which])); |
|
} |
|
$r->print('</td>'."\n"); |
} |
} |
|
|
sub get_env_multiple { |
sub get_env_multiple { |
Line 549 sub extractResourceInformation {
|
Line 566 sub extractResourceInformation {
|
my $defp = shift; |
my $defp = shift; |
my $mapp = shift; |
my $mapp = shift; |
my $symbp = shift; |
my $symbp = shift; |
|
my $maptitles=shift; |
|
|
foreach (keys %$bighash) { |
foreach (keys %$bighash) { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
if ($_=~/^src\_(\d+)\.(\d+)$/) { |
Line 589 sub extractResourceInformation {
|
Line 607 sub extractResourceInformation {
|
&Apache::lonnet::declutter($$bighash{'map_id_'.$mapid}); |
&Apache::lonnet::declutter($$bighash{'map_id_'.$mapid}); |
$$mapp{$mapid}=$$mapp{$id}; |
$$mapp{$mapid}=$$mapp{$id}; |
$$allmaps{$mapid}=$$mapp{$id}; |
$$allmaps{$mapid}=$$mapp{$id}; |
|
$$maptitles{$mapid}= |
|
$$bighash{'title_'.$$bighash{'ids_'.&Apache::lonnet::clutter($$mapp{$id})}}; |
|
$$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; |
$$symbp{$id}=$$mapp{$id}. |
$$symbp{$id}=$$mapp{$id}. |
'___'.$resid.'___'. |
'___'.$resid.'___'. |
&Apache::lonnet::declutter($srcf); |
&Apache::lonnet::declutter($srcf); |
Line 632 sub assessparms {
|
Line 653 sub assessparms {
|
|
|
my $r=shift; |
my $r=shift; |
# -------------------------------------------------------- Variable declaration |
# -------------------------------------------------------- Variable declaration |
my %allkeys; |
my %allkeys=(); |
my %allmaps; |
my %allmaps=(); |
my %alllevs; |
my %alllevs=(); |
|
|
$alllevs{'Resource Level'}='full'; |
$alllevs{'Resource Level'}='full'; |
# $alllevs{'Resource Level [BRIEF]'}='brief'; |
# $alllevs{'Resource Level [BRIEF]'}='brief'; |
Line 686 sub assessparms {
|
Line 707 sub assessparms {
|
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); |
@pscat='all'; |
if (!@pscat) { @pscat=('all'); } |
$pschp=''; |
$pschp=''; |
$parmlev = 'full'; |
$parmlev = 'full'; |
} elsif ($ENV{'form.symb'}) { |
} elsif ($ENV{'form.symb'}) { |
$pssymb=$ENV{'form.symb'}; |
$pssymb=$ENV{'form.symb'}; |
@pscat='all'; |
if (!@pscat) { @pscat=('all'); } |
$pschp=''; |
$pschp=''; |
$parmlev = 'full'; |
$parmlev = 'full'; |
} else { |
} else { |
Line 719 sub assessparms {
|
Line 740 sub assessparms {
|
"<font color=red>Unknown user '$uname' at domain '$udom'</font>"; |
"<font color=red>Unknown user '$uname' at domain '$udom'</font>"; |
$uname=''; |
$uname=''; |
} else { |
} else { |
$csec=&Apache::lonnet::usection($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>". |
"User '$uname' at domain '$udom' not ". |
"User '$uname' at domain '$udom' not ". |
Line 756 sub assessparms {
|
Line 777 sub assessparms {
|
} |
} |
|
|
# --------------------------------------------------------- Get all assessments |
# --------------------------------------------------------- Get all assessments |
extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp); |
extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles); |
|
|
$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 ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'}); |
Line 842 sub assessparms {
|
Line 864 sub assessparms {
|
$message.="<font color=red>Write Error: $1</font>"; |
$message.="<font color=red>Write Error: $1</font>"; |
} |
} |
# ---------------------------------------------------------------- Done storing |
# ---------------------------------------------------------------- Done storing |
$message.='<h3>Changes can take up to 10 minutes before being active for all students</h3>'; |
$message.='<h3>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 |
# --------------------------------------------- Devalidate cache for this child |
&Apache::lonnet::devalidatecourseresdata( |
&Apache::lonnet::devalidatecourseresdata( |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}); |
|
&Apache::lonnet::clear_EXT_cache_status(); |
# -------------------------------------------------------------- Get coursedata |
# -------------------------------------------------------------- Get coursedata |
%courseopt = &Apache::lonnet::dump |
%courseopt = &Apache::lonnet::dump |
('resourcedata', |
('resourcedata', |
Line 876 sub assessparms {
|
Line 899 sub assessparms {
|
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} |
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} |
# ------------------------------------------------------------------ Start page |
# ------------------------------------------------------------------ Start page |
|
|
&startpage($r,$id,$udom,$csec,$uname); |
my $have_assesments=1; |
|
if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; } |
|
|
|
&startpage($r,$id,$udom,$csec,$uname,$have_assesments); |
|
|
|
if (!$have_assesments) { |
|
untie(%bighash); |
|
untie(%parmhash); |
|
return ''; |
|
} |
# if ($ENV{'form.url'}) { |
# if ($ENV{'form.url'}) { |
# $r->print('<input type="hidden" value="'.$ENV{'form.url'}. |
# $r->print('<input type="hidden" value="'.$ENV{'form.url'}. |
# '" name="url"><input type="hidden" name="command" value="set">'); |
# '" name="url"><input type="hidden" name="command" value="set">'); |
Line 891 sub assessparms {
|
Line 923 sub assessparms {
|
|
|
$r->print('<h2>'.$message.'</h2><table>'); |
$r->print('<h2>'.$message.'</h2><table>'); |
|
|
$r->print('<tr><td><hr /></td></tr>'); |
my $submitmessage = 'Update Section or Specific User'; |
|
|
my $submitmessage; |
|
if (($prevvisit) || ($pschp) || ($pssymb)) { |
|
$submitmessage = "Update Display"; |
|
} else { |
|
$submitmessage = "Display"; |
|
} |
|
if (!$pssymb) { |
if (!$pssymb) { |
$r->print('<tr><td>Select Parameter Level</td><td>'); |
$r->print('<tr><td>Select Parameter Level</td><td colspan="2">'); |
$r->print('<select name="parmlev">'); |
$r->print('<select name="parmlev">'); |
foreach (reverse sort keys %alllevs) { |
foreach (reverse sort keys %alllevs) { |
$r->print('<option value="'.$alllevs{$_}.'"'); |
$r->print('<option value="'.$alllevs{$_}.'"'); |
Line 910 sub assessparms {
|
Line 935 sub assessparms {
|
$r->print('>'.$_.'</option>'); |
$r->print('>'.$_.'</option>'); |
} |
} |
$r->print("</select></td>\n"); |
$r->print("</select></td>\n"); |
|
|
$r->print('<td><input type="submit" name="dis" value="'.$submitmessage.'"></td>'); |
|
|
|
$r->print('</tr><tr><td><hr /></td>'); |
$r->print('</tr>'); |
|
if ($parmlev ne 'general') { |
$r->print('<tr><td>Select Enclosing Map</td>'); |
$r->print('<tr><td>Select Enclosing Map or Folder</td>'); |
$r->print('<td colspan="2"><select name="pschp">'); |
$r->print('<td colspan="2"><select name="pschp">'); |
$r->print('<option value="all">All Maps</option>'); |
$r->print('<option value="all">All Maps or Folders</option>'); |
foreach (sort {$allmaps{$a} cmp $allmaps{$b}} keys %allmaps) { |
foreach (sort {$allmaps{$a} cmp $allmaps{$b}} keys %allmaps) { |
$r->print('<option value="'.$_.'"'); |
$r->print('<option value="'.$_.'"'); |
if (($pschp eq $_)) { $r->print(' selected'); } |
if (($pschp eq $_)) { $r->print(' selected'); } |
$r->print('>/res/'.$allmaps{$_}.'</option>'); |
$r->print('>'.$maptitles{$_}.($allmaps{$_}!~/^uploaded/?' ['.$allmaps{$_}.']':'').'</option>'); |
} |
} |
$r->print("</select></td></tr>\n"); |
$r->print("</select></td></tr>\n"); |
|
} |
} else { |
} else { |
my ($map,$id,$resource)=split(/___/,$pssymb); |
my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); |
$r->print("<tr><td>Specific Resource</td><td>$resource</td>"); |
$r->print("<tr><td>Specific Resource</td><td>$resource</td>"); |
$r->print('<td><input type="submit" name="dis" value="'.$submitmessage.'"></td>'); |
$r->print('<td><input type="submit" name="dis" value="'.$submitmessage.'"></td>'); |
$r->print('</tr>'); |
$r->print('</tr>'); |
Line 934 sub assessparms {
|
Line 958 sub assessparms {
|
|
|
$r->print('<tr><td colspan="3"><hr /><input type="checkbox"'); |
$r->print('<tr><td colspan="3"><hr /><input type="checkbox"'); |
if ($showoptions eq 'show') {$r->print(" checked ");} |
if ($showoptions eq 'show') {$r->print(" checked ");} |
$r->print(' name="showoptions" value="show" onclick="form.submit();">Show More Options<hr /></td></tr>'); |
$r->print(' name="showoptions" value="show">Show More Options<hr /></td></tr>'); |
# $r->print("<tr><td>Show: $showoptions</td></tr>"); |
# $r->print("<tr><td>Show: $showoptions</td></tr>"); |
# $r->print("<tr><td>pscat: @pscat</td></tr>"); |
# $r->print("<tr><td>pscat: @pscat</td></tr>"); |
# $r->print("<tr><td>psprt: @psprt</td></tr>"); |
# $r->print("<tr><td>psprt: @psprt</td></tr>"); |
Line 984 sub assessparms {
|
Line 1008 sub assessparms {
|
|
|
$r->print('<tr><td>Sort list by</td><td>'); |
$r->print('<tr><td>Sort list by</td><td>'); |
$r->print('<select name="fcat">'); |
$r->print('<select name="fcat">'); |
$r->print('<option value="">Enclosing Map</option>'); |
$r->print('<option value="">Enclosing Map or Folder</option>'); |
foreach (sort keys %allkeys) { |
foreach (sort keys %allkeys) { |
$r->print('<option value="'.$_.'"'); |
$r->print('<option value="'.$_.'"'); |
if ($fcat eq $_) { $r->print(' selected'); } |
if ($fcat eq $_) { $r->print(' selected'); } |
Line 1019 sub assessparms {
|
Line 1043 sub assessparms {
|
} |
} |
|
|
} |
} |
$r->print('</table>'); |
$r->print('</table><br />'); |
|
if (($prevvisit) || ($pschp) || ($pssymb)) { |
|
$submitmessage = "Update Course Assessment Parameter Display"; |
|
} else { |
|
$submitmessage = "Set/Modify Course Assessment Parameters"; |
|
} |
|
$r->print('<input type="submit" name="dis" value="'.$submitmessage.'">'); |
|
|
# my @temp_psprt; |
# my @temp_psprt; |
# foreach my $t (@psprt) { |
# foreach my $t (@psprt) { |
Line 1042 sub assessparms {
|
Line 1072 sub assessparms {
|
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' || $parmlev eq 'brief') { |
|
|
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 1064 ENDTABLETWO
|
Line 1092 ENDTABLETWO
|
} |
} |
$r->print(<<ENDTABLEHEADFOUR); |
$r->print(<<ENDTABLEHEADFOUR); |
</tr><tr><th>Assessment URL and Title</th><th>Type</th> |
</tr><tr><th>Assessment URL and Title</th><th>Type</th> |
<th>Enclosing Map</th><th>Part No.</th><th>Parameter Name</th> |
<th>Enclosing Map or Folder</th><th>Part</th><th>Parameter Name</th> |
<th>default</th><th>from Enclosing Map</th> |
<th>default</th><th>from Enclosing Map or Folder</th> |
<th>general</th><th>for Enclosing Map</th><th>for Resource</th> |
<th>general</th><th>for Enclosing Map or Folder</th><th>for Resource</th> |
ENDTABLEHEADFOUR |
ENDTABLEHEADFOUR |
|
|
if ($csec) { |
if ($csec) { |
$r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>'); |
$r->print('<th>general</th><th>for Enclosing Map or Folder</th><th>for Resource</th>'); |
} |
} |
|
|
if ($uname) { |
if ($uname) { |
$r->print('<th>general</th><th>for Enclosing Map</th><th>for Resource</th>'); |
$r->print('<th>general</th><th>for Enclosing Map or Folder</th><th>for Resource</th>'); |
} |
} |
|
|
$r->print('</tr>'); |
$r->print('</tr>'); |
Line 1125 ENDTABLEHEADFOUR
|
Line 1153 ENDTABLEHEADFOUR
|
my $totalparms=scalar keys %name; |
my $totalparms=scalar keys %name; |
if ($totalparms>0) { |
if ($totalparms>0) { |
my $firstrow=1; |
my $firstrow=1; |
|
my $title=$bighash{'title_'.$rid}; |
|
$title=~s/\:/:/g; |
$r->print('<tr><td bgcolor='.$defbgone. |
$r->print('<tr><td bgcolor='.$defbgone. |
' rowspan='.$totalparms. |
' rowspan='.$totalparms. |
'><tt><font size=-1>'. |
'><tt><font size=-1>'. |
Line 1133 ENDTABLEHEADFOUR
|
Line 1162 ENDTABLEHEADFOUR
|
'</font></tt><p><b>'. |
'</font></tt><p><b>'. |
"<a href=\"javascript:openWindow('/res/".$uri. |
"<a href=\"javascript:openWindow('/res/".$uri. |
"', 'metadatafile', '450', '500', 'no', 'yes')\";". |
"', 'metadatafile', '450', '500', 'no', 'yes')\";". |
" TARGET=_self>$bighash{'title_'.$rid}"); |
" TARGET=_self>$title"); |
|
|
if ($thistitle) { |
if ($thistitle) { |
$r->print(' ('.$thistitle.')'); |
$r->print(' ('.$thistitle.')'); |
Line 1235 ENDTABLEHEADFOUR
|
Line 1264 ENDTABLEHEADFOUR
|
} # end loop through ids |
} # end loop through ids |
|
|
#---------------------------------------------------- print header information |
#---------------------------------------------------- print header information |
|
my $foldermap=($maptitle=~/^uploaded/?'Folder':'Map'); |
|
my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':''); |
$r->print(<<ENDMAPONE); |
$r->print(<<ENDMAPONE); |
<center><h4> |
<center><h4> |
<font color="red">Set Defaults for All Resources in map |
<font color="red">Set Defaults for All Resources in $foldermap<br /> |
<i>$maptitle</i><br /> |
<i>$showtitle</i><br /> |
Specifically for |
Specifically for |
ENDMAPONE |
ENDMAPONE |
if ($uname) { |
if ($uname) { |
Line 1359 ENDMAPONE
|
Line 1390 ENDMAPONE
|
|
|
=item crsenv |
=item crsenv |
|
|
Show course data and parameters. This is a large routine that should |
Show and set course data and parameters. This is a large routine that should |
be simplified and shortened... someday. |
be simplified and shortened... someday. |
|
|
Inputs: $r |
Inputs: $r |
Line 1377 sub crsenv {
|
Line 1408 sub crsenv {
|
'Set Course Environment Parameters'); |
'Set Course Environment Parameters'); |
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
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) { |
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\///; |
my $bkuptime=time; |
my $bkuptime=time; |
my @tmp = &Apache::lonnet::get |
my @tmp = &Apache::lonnet::get |
('environment',['url'],$dom,$crs); |
('environment',['url'],$dom,$crs); |
$setoutput.='Backing up previous URL: '. |
$setoutput.='Backing up previous URL: '. |
&Apache::lonnet::put |
&Apache::lonnet::put |
('environment', |
('environment', |
{'top level map backup '.$bkuptime => $tmp[1] }, |
{'top level map backup '.$bkuptime => $tmp[1] }, |
$dom,$crs). |
$dom,$crs). |
'<br>'; |
'<br>'; |
|
} |
|
# |
|
# Deal with modified default spreadsheets |
|
if ($name =~ /^spreadsheet_default_(classcalc| |
|
studentcalc| |
|
assesscalc)$/x) { |
|
my $sheettype = $1; |
|
if ($sheettype eq 'classcalc') { |
|
# no need to do anything since viewing the sheet will |
|
# cause it to be updated. |
|
} elsif ($sheettype eq 'studentcalc') { |
|
# expire all the student spreadsheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
|
} else { |
|
# expire all the assessment spreadsheets |
|
# this includes non-default spreadsheets, but better to |
|
# be safe than sorry. |
|
&Apache::lonnet::expirespread('','','assesscalc'); |
|
# expire all the student spreadsheets |
|
&Apache::lonnet::expirespread('','','studentcalc'); |
} |
} |
if ($name =~ /^spreadsheet_default_(classcalc| |
} |
studentcalc| |
# |
assesscalc)$/x) { |
# Deal with the enrollment dates |
my $sheettype = $1; |
if ($name =~ /^default_enrollment_(start|end)_date$/) { |
if ($sheettype eq 'classcalc') { |
$value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value'); |
# no need to do anything since viewing the sheet will |
} |
# cause it to be updated. |
# |
} elsif ($sheettype eq 'studentcalc') { |
# Let the user know we made the changes |
# expire all the student spreadsheets |
if ($name) { |
&Apache::lonnet::expirespread('','','studentcalc'); |
my $put_result = &Apache::lonnet::put('environment', |
} else { |
{$name=>$value},$dom,$crs); |
# expire all the default assessment spreadsheets |
if ($put_result eq 'ok') { |
} |
$setoutput.='Set <b>'.$name.'</b> to <b>'.$value.'</b>.<br />'; |
|
} else { |
|
$setoutput.='Unable to set <b>'.$name.'</b> to '. |
|
'<b>'.$value.'</b> due to '.$put_result.'.<br />'; |
} |
} |
|
|
if ($name) { |
|
$setoutput.='Setting <tt>'.$name.'</tt> to <tt>'. |
|
$value.'</tt>: '. |
|
&Apache::lonnet::put |
|
('environment',{$name=>$value},$dom,$crs). |
|
'<br>'; |
|
} |
|
} |
} |
} |
} |
|
# ------------------------- Re-init course environment entries for this session |
|
|
|
&Apache::lonnet::coursedescription($ENV{'request.course.id'}); |
|
|
# -------------------------------------------------------- Get parameters again |
# -------------------------------------------------------- Get parameters again |
|
|
my %values=&Apache::lonnet::dump('environment',$dom,$crs); |
my %values=&Apache::lonnet::dump('environment',$dom,$crs); |
Line 1430 sub crsenv {
|
Line 1482 sub crsenv {
|
('url' => '<b>Top Level Map</b> '. |
('url' => '<b>Top Level Map</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','url','sequence')\">". |
"('envform','url','sequence')\">". |
'Browse</a><br /><font color=red> '. |
'Select Map</a><br /><font color=red> '. |
'Modification may make assessment data '. |
'Modification may make assessment data '. |
'inaccessible</font>', |
'inaccessible</font>', |
'description' => '<b>Course Description</b>', |
'description' => '<b>Course Description</b>', |
'courseid' => '<b>Course ID or number</b><br />'. |
'courseid' => '<b>Course ID or number</b><br />'. |
'(internal, optional)', |
'(internal, optional)', |
|
'grading' => '<b>Grading</b>'. |
|
'"standard" or any other value. '. |
|
'Default for new courses is "standard".', |
|
|
'default_xml_style' => '<b>Default XML Style File</b> '. |
'default_xml_style' => '<b>Default XML Style File</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','default_xml_style'". |
"('envform','default_xml_style'". |
",'sty')\">Browse</a><br>", |
",'sty')\">Select Style File</a><br>", |
'question.email' => '<b>Feedback Addresses for Resource Content '. |
'question.email' => '<b>Feedback Addresses for Resource Content '. |
'Questions</b><br />(<tt>user:domain,'. |
'Questions</b><br />(<tt>user:domain,'. |
'user:domain(section;section;...;*;...),...</tt>)', |
'user:domain(section;section;...;*;...),...</tt>)', |
Line 1450 sub crsenv {
|
Line 1506 sub crsenv {
|
'hideemptyrows' => '<b>Hide Empty Rows in Spreadsheets</b><br />'. |
'hideemptyrows' => '<b>Hide Empty Rows in Spreadsheets</b><br />'. |
'("<tt>yes</tt>" for default hiding)', |
'("<tt>yes</tt>" for default hiding)', |
'pageseparators' => '<b>Visibly Separate Items on Pages</b><br />'. |
'pageseparators' => '<b>Visibly Separate Items on Pages</b><br />'. |
'("<tt>yes</tt>" for visible separation)', |
'("<tt>yes</tt>" for visible separation, '. |
|
'changes will not show until next login)', |
|
|
|
'plc.roles.denied'=> '<b>Disallow live chatroom use for '. |
|
'Roles</b><br />"<tt>st</tt>": '. |
|
'student, "<tt>ta</tt>": '. |
|
'TA, "<tt>in</tt>": '. |
|
'instructor;<br /><tt>role,role,...</tt>) '. |
|
Apache::loncommon::help_open_topic("Course_Disable_Discussion"), |
|
'plc.users.denied' => |
|
'<b>Disallow live chatroom use for Users</b><br />'. |
|
'(<tt>user:domain,user:domain,...</tt>)', |
|
|
'pch.roles.denied'=> '<b>Disallow Resource Discussion for '. |
'pch.roles.denied'=> '<b>Disallow Resource Discussion for '. |
'Roles</b><br />"<tt>st</tt>": '. |
'Roles</b><br />"<tt>st</tt>": '. |
'student, "<tt>ta</tt>": '. |
'student, "<tt>ta</tt>": '. |
Line 1464 sub crsenv {
|
Line 1532 sub crsenv {
|
=> '<b>Default Course Spreadsheet</b> '. |
=> '<b>Default Course Spreadsheet</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','spreadsheet_default_classcalc'". |
"('envform','spreadsheet_default_classcalc'". |
",'spreadsheet')\">Browse</a><br />", |
",'spreadsheet')\">Select Spreadsheet File</a><br />", |
'spreadsheet_default_studentcalc' |
'spreadsheet_default_studentcalc' |
=> '<b>Default Student Spreadsheet</b> '. |
=> '<b>Default Student Spreadsheet</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','spreadsheet_default_calc'". |
"('envform','spreadsheet_default_calc'". |
",'spreadsheet')\">Browse</a><br />", |
",'spreadsheet')\">Select Spreadsheet File</a><br />", |
'spreadsheet_default_assesscalc' |
'spreadsheet_default_assesscalc' |
=> '<b>Default Assessment Spreadsheet</b> '. |
=> '<b>Default Assessment Spreadsheet</b> '. |
'<a href="javascript:openbrowser'. |
'<a href="javascript:openbrowser'. |
"('envform','spreadsheet_default_assesscalc'". |
"('envform','spreadsheet_default_assesscalc'". |
",'spreadsheet')\">Browse</a><br />", |
",'spreadsheet')\">Select Spreadsheet File</a><br />", |
'allow_limited_html_in_feedback' |
'allow_limited_html_in_feedback' |
=> '<b>Allow limited HTML in discussion posts</b><br />'. |
=> '<b>Allow limited HTML in discussion posts</b><br />'. |
'(Set value to yes to allow)' |
'(Set value to "<tt>yes</tt>" to allow)', |
); |
'rndseed' |
foreach (keys(%values)) { |
=> '<b>Randomization algorithm used</b> <br />'. |
unless ($descriptions{$_}) { |
'<font color="red">Modifying this will make problems '. |
$descriptions{$_}=$_; |
'have different numbers and answers</font>', |
|
'problem_stream_switch' |
|
=> '<b>Allow problems to be split over pages</b><br />'. |
|
' ("<tt>yes</tt>" if allowed, anything else if not)', |
|
'anonymous_quiz' |
|
=> '<b>Anonimous quiz/exam</b><br />'. |
|
' (<tt><b>yes</b> to avoid print students names </tt>)', |
|
'default_enrollment_start_date' => '<b>Default beginning date '. |
|
'when enrolling students</b>', |
|
'default_enrollment_end_date' => '<b>Default ending date '. |
|
'when enrolling students</b>', |
|
'languages' => '<b>Languages used</b>', |
|
'disable_receipt_display' |
|
=> '<b>Disable display of problem receipts</b><br />'. |
|
' ("<tt>yes</tt>" to disable, anything else if not)' |
|
); |
|
my @Display_Order = ('url','description','courseid','grading', |
|
'default_xml_style','pageseparators', |
|
'question.email','comment.email','policy.email', |
|
'plc.roles.denied','plc.users.denied', |
|
'pch.roles.denied','pch.users.denied', |
|
'allow_limited_html_in_feedback', |
|
'languages', |
|
'rndseed', |
|
'problem_stream_switch', |
|
'disable_receipt_display', |
|
'spreadsheet_default_classcalc', |
|
'spreadsheet_default_studentcalc', |
|
'spreadsheet_default_assesscalc', |
|
'hideemptyrows', |
|
'default_enrollment_start_date', |
|
'default_enrollment_end_date', |
|
); |
|
foreach my $parameter (sort(keys(%values))) { |
|
if (! $descriptions{$parameter}) { |
|
$descriptions{$parameter}=$parameter; |
|
push(@Display_Order,$parameter); |
} |
} |
} |
} |
foreach (sort keys %descriptions) { |
foreach my $parameter (@Display_Order) { |
|
my $description = $descriptions{$parameter}; |
# onchange is javascript to automatically check the 'Set' button. |
# onchange is javascript to automatically check the 'Set' button. |
my $onchange = 'onFocus="javascript:window.document.forms'. |
my $onchange = 'onFocus="javascript:window.document.forms'. |
'[\'envform\'].elements[\''.$_.'_setparmval\']'. |
"['envform'].elements['".$parameter."_setparmval']". |
'.checked=true;"'; |
'.checked=true;"'; |
$output.='<tr><td>'.$descriptions{$_}.'</td>'. |
$output .= '<tr><td>'.$description.'</td>'; |
'<td><input name="'.$_.'_value" size=40 '. |
if ($parameter =~ /^default_enrollment_(start|end)_date$/) { |
'value="'.$values{$_}.'" '.$onchange.' /></td>'. |
$output .= '<td>'. |
'<td><input type=checkbox name="'.$_.'_setparmval"></td>'. |
&Apache::lonhtmlcommon::date_setter('envform', |
'</tr>'."\n"; |
$parameter.'_value', |
|
$values{$parameter}, |
|
$onchange). |
|
'</td>'; |
|
} else { |
|
$output .= '<td>'. |
|
&Apache::lonhtmlcommon::textbox($parameter.'_value', |
|
$values{$parameter}, |
|
40,$onchange).'</td>'; |
|
} |
|
$output .= '<td>'. |
|
&Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). |
|
'</td>'; |
|
$output .= "</tr>\n"; |
} |
} |
my $onchange = 'onFocus="javascript:window.document.forms'. |
my $onchange = 'onFocus="javascript:window.document.forms'. |
'[\'envform\'].elements[\'newp_setparmval\']'. |
'[\'envform\'].elements[\'newp_setparmval\']'. |
Line 1548 $output
|
Line 1666 $output
|
</html> |
</html> |
ENDENV |
ENDENV |
} |
} |
|
################################################## |
|
|
|
my $tableopen; |
|
|
|
sub tablestart { |
|
if ($tableopen) { |
|
return ''; |
|
} else { |
|
$tableopen=1; |
|
return '<table border="2"><tr><th>Parameter</th><th>Delete</th><th>Set to ...</th></tr>'; |
|
} |
|
} |
|
|
|
sub tableend { |
|
if ($tableopen) { |
|
$tableopen=0; |
|
return '</table>'; |
|
} else { |
|
return''; |
|
} |
|
} |
|
|
|
sub overview { |
|
my $r=shift; |
|
my $bodytag=&Apache::loncommon::bodytag( |
|
'Set/Modify Course Assessment Parameters'); |
|
my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; |
|
my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; |
|
$r->print(<<ENDOVER); |
|
<html> |
|
<head> |
|
<title>LON-CAPA Course Environment</title> |
|
</head> |
|
$bodytag |
|
<form method="post" action="/adm/parmset" name="overviewform"> |
|
<input type="hidden" name="overview" value="1" /> |
|
ENDOVER |
|
# Setting |
|
my %olddata=&Apache::lonnet::dump('resourcedata',$dom,$crs); |
|
my %newdata=(); |
|
undef %newdata; |
|
my @deldata=(); |
|
undef @deldata; |
|
foreach (keys %ENV) { |
|
if ($_=~/^form\.([a-z]+)\_(.+)$/) { |
|
my $cmd=$1; |
|
my $thiskey=$2; |
|
if ($cmd eq 'set') { |
|
my $data=$ENV{$_}; |
|
if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } |
|
} elsif ($cmd eq 'del') { |
|
push (@deldata,$thiskey); |
|
} elsif ($cmd eq 'datepointer') { |
|
my $data=&Apache::lonhtmlcommon::get_date_from_form($ENV{$_}); |
|
if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; } |
|
} |
|
} |
|
} |
|
# Store |
|
&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs); |
|
&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs); |
|
# Read and display |
|
my %resourcedata=&Apache::lonnet::dump('resourcedata',$dom,$crs); |
|
my $oldsection=''; |
|
my $oldrealm=''; |
|
my $oldpart=''; |
|
my $pointer=0; |
|
$tableopen=0; |
|
foreach my $thiskey (sort keys %resourcedata) { |
|
if ($resourcedata{$thiskey.'.type'}) { |
|
my ($course,$middle,$part,$name)= |
|
($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
|
my $section='All Students'; |
|
if ($middle=~/^\[(.*)\]\./) { |
|
$section='Group/Section: '.$1; |
|
$middle=~s/^\[(.*)\]\.//; |
|
} |
|
$middle=~s/\.$//; |
|
my $realm='<font color="red">All Resources</font>'; |
|
if ($middle=~/^(.+)\_\_\_\(all\)$/) { |
|
$realm='<font color="green">Folder/Map: '.&Apache::lonnet::gettitle($1).'</font>'; |
|
} elsif ($middle) { |
|
$realm='<font color="orange">Resource: '.&Apache::lonnet::gettitle($middle).'</font>'; |
|
} |
|
if ($section ne $oldsection) { |
|
$r->print(&tableend()."\n<hr /><h1>$section</h1>"); |
|
$oldsection=$section; |
|
$oldrealm=''; |
|
} |
|
if ($realm ne $oldrealm) { |
|
$r->print(&tableend()."\n<h2>$realm</h2>"); |
|
$oldrealm=$realm; |
|
$oldpart=''; |
|
} |
|
if ($part ne $oldpart) { |
|
$r->print(&tableend(). |
|
"\n<h3><font color='blue'>Part: $part</font></h3>"); |
|
$oldpart=$part; |
|
} |
|
# |
|
# Ready to print |
|
# |
|
$r->print(&tablestart().'<tr><td><b>'.$name. |
|
':</b></td><td><input type="checkbox" name="del_'. |
|
$thiskey.'" /></td><td>'); |
|
if ($resourcedata{$thiskey.'.type'}=~/^date/) { |
|
my $jskey='key_'.$pointer; |
|
$pointer++; |
|
$r->print( |
|
&Apache::lonhtmlcommon::date_setter('overviewform', |
|
$jskey, |
|
$resourcedata{$thiskey}). |
|
'<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />' |
|
); |
|
} else { |
|
$r->print( |
|
'<input type="text" name="set_'.$thiskey.'" value="'. |
|
$resourcedata{$thiskey}.'">'); |
|
} |
|
$r->print('</td></tr>'); |
|
} |
|
} |
|
|
|
$r->print(&tableend(). |
|
'<p><input type="submit" value="Modify Parameters" /></p></form></body></html>'); |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
|
=pod |
=pod |
|
|
=item handler |
=item * handler |
|
|
Main handler. Calls &assessparms and &crsenv subroutines. |
Main handler. Calls &assessparms and &crsenv subroutines. |
|
|
Line 1562 Main handler. Calls &assessparms and &c
|
Line 1806 Main handler. Calls &assessparms and &c
|
|
|
################################################## |
################################################## |
################################################## |
################################################## |
|
use Data::Dumper; |
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
|
|
if ($r->header_only) { |
if ($r->header_only) { |
$r->content_type('text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$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'}); |
|
|
# ----------------------------------------------------- Needs to be in a course |
# ----------------------------------------------------- Needs to be in a course |
|
|
if (($ENV{'request.course.id'}) && |
if (($ENV{'request.course.id'}) && |
(&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}))) { |
(&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}))) { |
|
|
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
|
|
$coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
$coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
|
|
unless (($ENV{'form.crsenv'}) || (!$ENV{'request.course.fn'})) { |
if (($ENV{'form.crsenv'}) || (!$ENV{'request.course.fn'})) { |
# --------------------------------------------------------- Bring up assessment |
|
&assessparms($r); |
|
# ---------------------------------------------- This is for course environment |
# ---------------------------------------------- This is for course environment |
} else { |
# -------------------------- also call if toplevel map coudl not be initialized |
&crsenv($r); |
&crsenv($r); |
|
} elsif ($ENV{'form.overview'}) { |
|
# --------------------------------------------------------------- Overview mode |
|
&overview($r); |
|
} else { |
|
# --------------------------------------------------------- Bring up assessment |
|
&assessparms($r); |
} |
} |
} else { |
} else { |
# ----------------------------- Not in a course, or not allowed to modify parms |
# ----------------------------- Not in a course, or not allowed to modify parms |