--- loncom/interface/lonparmset.pm 2011/01/15 15:14:47 1.508
+++ loncom/interface/lonparmset.pm 2012/05/06 22:09:14 1.522
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.508 2011/01/15 15:14:47 www Exp $
+# $Id: lonparmset.pm,v 1.522 2012/05/06 22:09:14 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -137,33 +137,41 @@ javascript function 'pjump'.
=item extractResourceInformation() :
-Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes.
+ extractResourceInformation extracts lots of information about all of the the course's resources into a variety of hashes.
Input: See list below:
-=item * B : An array that will contain all of the ids in the course.
+=item * B : Current username
-=item * B : hash, id->type, where "type" contains the extension of the file, thus, I.
+=item * B : Domain of current user.
-=item * B : hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id
+=item * b : hash, name of parameter->display value (what is the display value?)
+Outputs: See list below:
-=item * B : hash, part identification->text representation of part, where the text representation is "[Part $part]"
+=item * B (out) : An array that will contain all of the ids in the course.
-=item * B : hash, full key to part->display value (what's display value?)
+=item * B(out) : hash, id->type, where "type" contains the extension of the file, thus, I.
-=item * B : hash, ???
+=item * B (out) : hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id
-=item * B : ???
+=item * B (out) : hash, name of parameter->display value (what is the display value?)
-=item * B : hash, ???
+=item * B (out) : hash, part identification->text representation of part, where the text representation is "[Part $part]"
+
+=item * B (out) : hash, ???
=item * B : ??
=item * B : hash, id->full sym?
+=item * B
+
+=item * B
+
+=item * B
+=item * B
=item isdateparm()
@@ -196,8 +204,8 @@ Input: See list below:
Show assessment data and parameters. This is a large routine that should
be simplified and shortened... someday.
-Inputs: $r
-
+Inputs: $r - the Apache request object.
+
Returns: nothing
Variables used (guessed by Jeremy):
@@ -805,6 +813,7 @@ sub valout {
&date_sanity_info($value);
} else {
$result = $value;
+ $result=~s/\,/\, /gs;
$result = &HTML::Entities::encode($result,'"<>&');
}
}
@@ -846,16 +855,10 @@ sub page_js {
return(<
// "pclose()",
- 'onload' => "showHide_courseContent(); group_or_section('cgroup')",
- );
+ my %loaditems = (
+ 'onload' => "group_or_section('cgroup')",
+ );
+ if (!$psymb) {
+ $loaditems{'onload'} = "showHide_courseContent(); group_or_section('cgroup')";
+ }
if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
&& (!$env{'form.dis'})) || ($env{'form.symb'})) {
@@ -1165,6 +1171,7 @@ sub extractResourceInformation {
$$typep{$id}=$1;
$$keyp{$id}='';
$$uris{$id}=$srcf;
+
foreach my $key (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
next if ($key!~/^parameter_/);
@@ -1264,14 +1271,12 @@ sub parmmenu {
ele = document.forms.parmform.elements[i];
if (ele.name == checkName) {
document.forms.parmform.elements[i].checked=value;
- document.getElementById(document.forms.parmform.elements[i].value.concat(li)).style.display = displayOverview;
}
}
}
function checkthis(thisvalue, checkName) {
- document.getElementById(thisvalue.concat("_li")).style.display = "";
for (i=0; i
ENDSCRIPT
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parameters to View')));
-
- #part to print selected parms overview
- $r->print(&mt('Selected Parameters:').' ');
-
- #print out all possible parms and hide them by default
- $r->print('');
- foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) {
- $r->print('print(' style="display:none"');
- }
- $r->print('>'
- .($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey} : $tempkey)
- .' '
- );
- }
- $r->print(' ');
$r->print(' ');
&shortCuts($r,$allparms,$pscat,$keyorder);
$r->print(' ');
-
- $r->print(
- ''
- .&mt('Show detailed Parameter Selection')
- .'
'
- );
-
- $r->print(&Apache::lonhtmlcommon::row_closure(1));
}
# return a hash
sub categories {
@@ -1399,6 +1361,8 @@ sub lookUpTableParameter {
'contentopen' => 'time_settings',
'contentclose' => 'time_settings',
'discussend' => 'time_settings',
+ 'printopendate' => 'time_settings',
+ 'printclosedate' => 'time_settings',
'weight' => 'grading',
'handgrade' => 'grading',
'maxtries' => 'tries',
@@ -1430,6 +1394,9 @@ sub lookUpTableParameter {
'acc' => 'misc',
'maxcollaborators' => 'misc',
'scoreformat' => 'misc',
+ 'lenient' => 'grading',
+ 'retrypartial' => 'tries',
+ 'discussvote' => 'misc',
);
}
@@ -1498,24 +1465,12 @@ sub parmboxes {
'file_submission' => [],
'misc' => [],
);
- my $hidelink =
- ''
- .''
- .&mt('Hide detailed Parameter Selection')
- .' '
- .'
'
- ."\n";
-;
+
foreach $tempparameter (keys %$allparms) {
&whatIsMyCategory($tempparameter, \%categoryList);
}
#part to print the parm-list
- $r->print(
- '\n");
}
#
# This function offers some links on the parameter section to get with one click a group a parameters
@@ -1708,11 +1657,19 @@ function group_or_section(caller) {
# This function shows on table Mode the available Parameters for the selected Resources
#
sub displaymenu {
- my ($r,$allparms,$allparts,$pscat,$psprt,$keyorder)=@_;
+ my ($r,$allparms,$pscat,$psprt,$keyorder)=@_;
+
$r->print(&Apache::lonhtmlcommon::start_pick_box());
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parameters to View')));
+
&parmmenu($r,$allparms,$pscat,$keyorder);
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
+ $r->print(&Apache::loncommon::start_scrollbox());
&parmboxes($r,$allparms,$pscat,$keyorder);
+ $r->print(&Apache::loncommon::end_scrollbox());
+
+ $r->print(&Apache::lonhtmlcommon::row_closure(1));
+ $r->print(&Apache::lonhtmlcommon::end_pick_box());
+
}
sub mapmenu {
@@ -1780,7 +1737,7 @@ sub mapmenu {
.''
);
-
+ $r->print(&Apache::loncommon::start_scrollbox());
$r->print(&Apache::loncommon::start_data_table());
# Display row: "All Maps or Folders"
@@ -1861,6 +1818,7 @@ sub mapmenu {
}
$r->print(&Apache::loncommon::end_data_table());
+ $r->print(&Apache::loncommon::end_scrollbox());
}
}
@@ -1986,8 +1944,11 @@ sub standardkeyorder {
'parameter_0_tol' => 16,
'parameter_0_sig' => 17,
'parameter_0_turnoffunit' => 18,
- 'parameter_0_discussend' => 19,
- 'parameter_0_discusshide' => 20);
+ 'parameter_0_discussend' => 19,
+ 'parameter_0_discusshide' => 20,
+ 'parameter_0_discussvote' => 21,
+ 'parameter_0_printopendate' => 22,
+ 'parameter_0_printclosedate' => 23);
}
@@ -1995,6 +1956,9 @@ sub assessparms {
my $r=shift;
+
+
+# -------------------------------------------------------- Variable declaration
my @ids=();
my %symbp=();
my %mapp=();
@@ -2002,9 +1966,6 @@ sub assessparms {
my %keyp=();
my %uris=();
my %maptitles=();
-
-# -------------------------------------------------------- Variable declaration
-
my %allmaps=();
my %alllevs=();
@@ -2023,14 +1984,16 @@ sub assessparms {
my %allparms;
my %allparts;
+# ------------------------------------------------------------------------------
+
#
# Order in which these parameters will be displayed
#
my %keyorder=&standardkeyorder();
- @ids=();
- %symbp=();
- %typep=();
+# @ids=();
+# %symbp=(); # These seem defined above already.
+# %typep=();
my $message='';
@@ -2050,7 +2013,7 @@ sub assessparms {
my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
- if (!@psprt) { $psprt[0]='0'; }
+ if (!@psprt) { $psprt[0]='all'; }
if (($env{'form.part'}) && ($psprt[0] ne 'all')) { $psprt[0]=$env{'form.part'}; }
my $pssymb='';
@@ -2152,8 +2115,10 @@ sub assessparms {
my $chome = $env{'course.'.$env{'request.course.id'}.'.home'};
my ($got_chostname,$chostname,$cmajor,$cminor);
my $totalstored = 0;
+
+
for (my $i=0;$i<=$#markers;$i++) {
- my ($needsrelease,$needsnewer);
+ my ($needsrelease,$needsnewer,$name);
if ($markers[$i] =~ /^[\d.]+\&0_availablestudent\&(1|2|3)$/) {
my (@ok_slots,@fail_slots,@del_slots);
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
@@ -2184,22 +2149,23 @@ sub assessparms {
}
}
}
- } elsif ($markers[$i] =~ /_type\&\d+$/) {
+ } elsif ($markers[$i] =~ /_(type|lenient|retrypartial|discussvote)\&\d+$/) {
+ $name = $1;
$needsrelease =
- $Apache::lonnet::needsrelease{'parameter:type:'.$values[$i]};
+ $Apache::lonnet::needsrelease{"parameter:$name:$values[$i]"};
if ($needsrelease) {
unless ($got_chostname) {
- ($chostname,$cmajor,$cminor) = &questiontype_release_vars();
+ ($chostname,$cmajor,$cminor) = ¶meter_release_vars();
$got_chostname = 1;
}
- $needsnewer = &questiontype_releasecheck($values[$i],
- $needsrelease,
- $chostname,
- $cmajor,$cminor);
+ $needsnewer = ¶meter_releasecheck($name,$values[$i],
+ $needsrelease,
+ $chostname,
+ $cmajor,$cminor);
}
}
if ($needsnewer) {
- $message .= &oldversion_warning($values[$i],$chostname,$cmajor,
+ $message .= &oldversion_warning($name,$values[$i],$chostname,$cmajor,
$cminor,$needsrelease);
} else {
$message.=&storeparm(split(/\&/,$markers[$i]),
@@ -2223,7 +2189,7 @@ sub assessparms {
if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);}
# ------------------------------------------------------------------ Start page
- &startpage($r);
+ &startpage($r,$pssymb);
foreach ('tolerance','date_default','date_start','date_end',
'date_interval','int','float','string') {
@@ -2287,7 +2253,7 @@ COURSECONTENTSCRIPT
# Step 2
$r->print(&Apache::lonhtmlcommon::topic_bar(2,&mt('Parameter Specification')));
- &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder);
+ &displaymenu($r,\%allparms,\@pscat,\@psprt,\%keyorder);
# Step 3
$r->print(&Apache::lonhtmlcommon::topic_bar(3,&mt('User Specification (optional)')));
@@ -2299,7 +2265,7 @@ COURSECONTENTSCRIPT
# Update Display Button
$r->print(''
.' '
+ .' value="'.&mt('Update Display').'" />'
.' '
.'
');
$r->print('');
@@ -2315,6 +2281,7 @@ COURSECONTENTSCRIPT
.''
.'
');
} else {
+ $r->print();
# parameter screen for a single resource.
my ($map,$iid,$resource)=&Apache::lonnet::decode_symb($pssymb);
my $title = &Apache::lonnet::gettitle($pssymb);
@@ -2324,18 +2291,12 @@ COURSECONTENTSCRIPT
' ');
$r->print(&Apache::lonhtmlcommon::topic_bar('',&mt('Additional Display Specification (optional)')));
$r->print(&Apache::lonhtmlcommon::start_pick_box());
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View')).
- ''.
- ' '.
- &mt('Show all parts').
- ' ');
&usermenu($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,\@usersgroups);
$r->print(&Apache::lonhtmlcommon::row_closure(1));
$r->print(&Apache::lonhtmlcommon::end_pick_box());
$r->print(''
.' '
+ .' value="'.&mt('Update Display').'" />'
.' '
.'
');
}
@@ -2370,7 +2331,7 @@ COURSECONTENTSCRIPT
$coursespan += 3;
}
- $r->print('
');
+ $r->print(&Apache::loncommon::start_data_table());
#
# This produces the headers
#
@@ -2480,7 +2441,6 @@ ENDTABLEHEADFOUR
my $uri=&Apache::lonnet::declutter($uris{$rid});
my $filter=$env{'form.filter'};
-
foreach (&keysplit($keyp{$rid})) {
my $tempkeyp = $_;
if (grep $_ eq $tempkeyp, @catmarker) {
@@ -2535,8 +2495,8 @@ ENDTABLEHEADFOUR
$r->print(''.$maptitles{$mapp{$rid}}.' ');
-
foreach (&keysinorder_bytype(\%name,\%keyorder)) {
+
unless ($firstrow) {
$r->print('');
} else {
@@ -2551,7 +2511,7 @@ ENDTABLEHEADFOUR
}
} # end foreach ids
# -------------------------------------------------- End entry for one resource
- $r->print('
');
+ $r->print(&Apache::loncommon::end_data_table);
} # end of full
#--------------------------------------------------- Entry for parm level map
if ($parmlev eq 'map') {
@@ -2842,25 +2802,38 @@ sub storedata {
$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
}
if ($cmd eq 'set' || $cmd eq 'datepointer' || $cmd eq 'dateinterval') {
- my ($data, $typeof, $text);
+ my ($data, $typeof, $text, $name);
if ($cmd eq 'set') {
$data=$env{$key};
$typeof=$env{'form.typeof_'.$thiskey};
$text = &mt('Saved modified parameter for');
if ($typeof eq 'string_questiontype') {
+ $name = 'type';
+ } elsif ($typeof eq 'string_lenient') {
+ $name = 'lenient';
+ } elsif ($typeof eq 'string_discussvote') {
+ $name = 'discussvote';
+ } elsif ($typeof eq 'string_yesno') {
+ if ($thiskey =~ /\.retrypartial$/) {
+ $name = 'retrypartial';
+ }
+ }
+ if ($name ne '') {
my ($needsrelease,$needsnewer);
- $needsrelease = $Apache::lonnet::needsrelease{'parameter:type:'.$data};
+ $needsrelease = $Apache::lonnet::needsrelease{"parameter:$name:$data"};
if ($needsrelease) {
unless ($got_chostname) {
- ($chostname,$cmajor,$cminor)=&questiontype_release_vars();
+ ($chostname,$cmajor,$cminor)=¶meter_release_vars();
$got_chostname = 1;
}
- $needsnewer = &questiontype_releasecheck($data,$needsrelease,
- $chostname,$cmajor,
- $cminor);
+ $needsnewer = ¶meter_releasecheck($name,$data,
+ $needsrelease,
+ $chostname,$cmajor,
+ $cminor);
}
if ($needsnewer) {
- $r->print(' '.&oldversion_warning($data,$chostname,$cmajor,
+ $r->print(' '.&oldversion_warning($name,$data,
+ $chostname,$cmajor,
$cminor,$needsrelease));
next;
}
@@ -3095,7 +3068,7 @@ sub listdata {
$$resourcedata{$thiskey}));
} elsif ($thistype =~ m/^string/) {
$r->print(&string_selector($thistype,$thiskey,
- $$resourcedata{$thiskey}));
+ $$resourcedata{$thiskey},$name));
} else {
$r->print(&default_selector($thiskey,$$resourcedata{$thiskey}));
}
@@ -3169,6 +3142,14 @@ my %strings =
[ 'randomizetry', 'New Randomization Each N Tries (default N=1)'],
[ 'practice', 'Practice'],
[ 'surveycred', 'Survey (credit for submission)']],
+ 'string_lenient'
+ => [['yes', 'Yes' ],
+ [ 'no', 'No' ],
+ [ 'default', 'Default - only bubblesheet grading is lenient' ]],
+ 'string_discussvote'
+ => [['yes','Yes'],
+ ['notended','Yes, unless discussion ended'],
+ ['no','No']],
);
sub standard_string_options {
@@ -3180,33 +3161,37 @@ sub standard_string_options {
}
sub string_selector {
- my ($thistype, $thiskey, $showval) = @_;
+ my ($thistype, $thiskey, $showval, $name) = @_;
if (!exists($strings{$thistype})) {
return &default_selector($thiskey,$showval);
}
my %skiptype;
- if ($thistype eq 'string_questiontype') {
+ if (($thistype eq 'string_questiontype') ||
+ ($thistype eq 'string_lenient') ||
+ ($thistype eq 'string_discussvote') ||
+ ($name eq 'retrypartial')) {
my ($got_chostname,$chostname,$cmajor,$cminor);
foreach my $possibilities (@{ $strings{$thistype} }) {
next unless (ref($possibilities) eq 'ARRAY');
- my ($name, $description) = @{ $possibilities };
- my $needsrelease=$Apache::lonnet::needsrelease{'parameter:type:'.$name};
+ my ($parmval, $description) = @{ $possibilities };
+ my $needsrelease=$Apache::lonnet::needsrelease{"parameter:$name:$parmval"};
if ($needsrelease) {
unless ($got_chostname) {
- ($chostname,$cmajor,$cminor)=&questiontype_release_vars();
+ ($chostname,$cmajor,$cminor)=¶meter_release_vars();
$got_chostname = 1;
}
- my $needsnewer=&questiontype_releasecheck($name,$needsrelease,
- $chostname,$cmajor,
- $cminor);
+ my $needsnewer=¶meter_releasecheck($name,$parmval,$needsrelease,
+ $chostname,$cmajor,
+ $cminor);
if ($needsnewer) {
- $skiptype{$name} = 1;
+ $skiptype{$parmval} = 1;
}
}
}
}
+
my $result;
my $numinrow = 3;
@@ -3331,7 +3316,7 @@ ENDOVER
my $pschp=$env{'form.pschp'};
my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
- if (!@psprt) { $psprt[0]='0'; }
+ if (!@psprt) { $psprt[0]='all'; }
my @selected_sections =
&Apache::loncommon::get_env_multiple('form.Section');
@@ -3377,10 +3362,7 @@ ENDOVER
$r->print('');
$r->print('
');
- $r->print(&Apache::lonhtmlcommon::start_pick_box());
- &parmmenu($r,\%allparms,\@pscat,\%keyorder);
- $r->print(&Apache::lonhtmlcommon::end_pick_box());
- &parmboxes($r,\%allparms,\@pscat,\%keyorder);
+ &displaymenu($r,\%allparms,\@pscat,\%keyorder);
$r->print(&Apache::lonhtmlcommon::start_pick_box());
$r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View')));
$r->print('
'.
@@ -3607,7 +3589,8 @@ sub date_shift_one {
''.&mt('Currently set date:').' '.
&Apache::lonlocal::locallocaltime($env{'form.timebase'}).' '.
''.&mt('Shifted date:').' '.
- &Apache::lonhtmlcommon::date_setter('shiftform',
+ &Apache::lonhtmlcommon::dshowerfuck.net
+ate_setter('shiftform',
'timeshifted',
$env{'form.timebase'},,
'').
@@ -3700,6 +3683,11 @@ ENDMAINFORMHEAD
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
my $vgr = &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
my $mgr = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
+ my $dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'});
+ if ((!$dcm) && ($env{'request.course.sec'} ne '')) {
+ $dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'}.
+ '/'.$env{'request.course.sec'});
+ }
my $crstype = &Apache::loncommon::course_type();
my $lc_crstype = lc($crstype);
@@ -3719,7 +3707,12 @@ ENDMAINFORMHEAD
linktitle => "Reset access times for folders/maps, resources or the $lc_crstype." ,
icon => 'start-here.png' ,
},
-
+ { linktext => 'Blocking Communication/Resource Access',
+ url => '/adm/setblock',
+ permission => $dcm,
+ linktitle => 'Configure blocking of communication/collaboration and access to resources during an exam',
+ icon => 'comblock.png',
+ },
{ linktext => 'Set Parameter Setting Default Actions',
url => '/adm/parmset?action=setdefaults',
permission => $parm_permission,
@@ -4345,7 +4338,12 @@ sub parm_change_log {
my ($r)=@_;
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
text=>"Parameter Change Log"});
- $r->print(&Apache::loncommon::start_page('Parameter Change Log'));
+ my $js = ''."\n";
+ $r->print(&Apache::loncommon::start_page('Parameter Change Log',$js));
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log'));
&startSettingsScreen($r,'parmset');
my %parmlog=&Apache::lonnet::dump('nohist_parameterlog',
@@ -4354,7 +4352,9 @@ sub parm_change_log {
if ((keys(%parmlog))[0]=~/^error\:/) { undef(%parmlog); }
- $r->print('