--- loncom/interface/lonparmset.pm 2007/10/05 17:56:29 1.376.2.1
+++ loncom/interface/lonparmset.pm 2007/10/06 04:32:49 1.382
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.376.2.1 2007/10/05 17:56:29 albertel Exp $
+# $Id: lonparmset.pm,v 1.382 2007/10/06 04:32:49 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -577,6 +577,7 @@ sub valout {
&date_sanity_info($value);
} else {
$result = $value;
+ $result = &HTML::Entities::encode($result,'"<>&');
}
}
return $result;
@@ -613,10 +614,16 @@ sub plink {
my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/);
my ($hour,$min,$sec,$val)=&preset_defaults($parmname);
unless (defined($winvalue)) { $winvalue=$val; }
+ my $valout = &valout($value,$type,1);
+ foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call,
+ \$hour, \$min, \$sec) {
+ $$item = &HTML::Entities::encode($$item,'"<>&');
+ $$item =~ s/\'/\\\'/g;
+ }
return '
';
+ $valout.'';
}
sub page_js {
@@ -1594,7 +1601,8 @@ sub assessparms {
foreach ('tolerance','date_default','date_start','date_end',
'date_interval','int','float','string') {
$r->print('');
+ &HTML::Entities::encode($env{'form.recent_'.$_},'"&<>').
+ '" name="recent_'.$_.'" />');
}
if (!$pssymb) {
@@ -2116,9 +2124,19 @@ sub crsenv {
if ($name eq 'cloners') {
&change_clone($value,\@oldcloner);
}
- # Flush the course logs so course description is immediately updated
+ # Update environment and nohist_courseids.db
if ($name eq 'description' && defined($value)) {
- &Apache::lonnet::flushcourselogs();
+ my %crsinfo =
+ &Apache::lonnet::courseiddump($dom,'.',1,'.','.',
+ $crs,undef,undef,'Course');
+ &Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.description' => $value);
+ if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') {
+ $crsinfo{$env{'request.course.id'}}{'description'} = $value;
+ my $chome = &Apache::lonnet::homeserver($crs,$dom);
+ my $putresult =
+ &Apache::lonnet::courseidput($dom,\%crsinfo,
+ $chome,'notime');
+ }
}
} else {
$setoutput.=&mt('Unable to set').' '.$name.' '.&mt('to').
@@ -2211,11 +2229,11 @@ Use * to allow unrestricted cloning in a
'pageseparators' => ''.&mt('Visibly Separate Items on Pages').'
'.
'('.&mt('"[_1]" for visible separation','yes').', '.
&mt('changes will not show until next login').')',
- 'student_classlist_view' => ''.&mt('Allow students to view classlist.').''.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'),
+ 'student_classlist_view' => ''.&mt('Allow students to view classlist.').'
'.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.)'),
'student_classlist_portfiles' => ''.&mt('Include link to accessible portfolio files').'
'.&mt('"[_1]" for link to each a listing of each student\'s files.','yes'),
'student_classlist_opt_in' => ''.&mt("Student's agreement needed for listing in student-viewable roster").'
'.&mt('"[_1]" to require students to opt-in to listing in the roster (on the roster page).','yes'),
'plc.roles.denied'=> ''.&mt('Disallow live chatroom use for Roles').
- '
"st": '.
+ '
("st": '.
&mt('student').', "ta": '.
'TA, "in": '.
&mt('instructor').';
'.&mt('role,role,...').') '.
@@ -2225,7 +2243,7 @@ Use * to allow unrestricted cloning in a
'(user:domain,user:domain,...)',
'pch.roles.denied'=> ''.&mt('Disallow Resource Discussion for Roles').
- '
"st": '.
+ '
("st": '.
'student, "ta": '.
'TA, "in": '.
'instructor;
role,role,...) '.
@@ -2574,6 +2592,26 @@ sub extractuser {
return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./);
}
+sub parse_listdata_key {
+ my ($key,$listdata) = @_;
+ # split into student/section affected, and
+ # the realm (folder/resource part and parameter
+ my ($student,$realm) =
+ ($key=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)$/);
+ # if course wide student would be undefined
+ if (!defined($student)) {
+ ($realm)=($key=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
+ }
+ # strip off the .type if it's not the Question type parameter
+ if ($realm=~/\.type$/ && !exists($listdata->{$key.'.type'})) {
+ $realm=~s/\.type//;
+ }
+ # split into resource+part and parameter name
+ my ($res, $parm) = ($realm=~/^(.*)\.(.*)$/);
+ my ($res, $part) = ($res =~/^(.*)\.(.*)$/);
+ return ($student,$res,$part,$parm);
+}
+
sub listdata {
my ($r,$resourcedata,$listdata,$sortorder)=@_;
# Start list output
@@ -2585,40 +2623,48 @@ sub listdata {
$tableopen=0;
my $foundkeys=0;
my %keyorder=&standardkeyorder();
+
foreach my $thiskey (sort {
+ my ($astudent,$ares,$apart,$aparm) = &parse_listdata_key($a,$listdata);
+ my ($bstudent,$bres,$bpart,$bparm) = &parse_listdata_key($b,$listdata);
+
+ # get the numerical order for the param
+ $aparm=$keyorder{'parameter_0_'.$aparm};
+ $bparm=$keyorder{'parameter_0_'.$bparm};
+
+ my $result=0;
+
if ($sortorder eq 'realmstudent') {
- my ($astudent,$arealm)=($a=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/);
- my ($bstudent,$brealm)=($b=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)\.[^\.]+$/);
- if (!defined($astudent)) {
- ($arealm)=($a=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
+ if ($ares ne $bres ) {
+ $result = ($ares cmp $bres);
+ } elsif ($astudent ne $bstudent) {
+ $result = ($astudent cmp $bstudent);
+ } elsif ($apart ne $bpart ) {
+ $result = ($apart cmp $bpart);
}
- if (!defined($bstudent)) {
- ($brealm)=($b=~/^\Q$env{'request.course.id'}\E\.(.+)$/);
+ } else {
+ if ($astudent ne $bstudent) {
+ $result = ($astudent cmp $bstudent);
+ } elsif ($ares ne $bres ) {
+ $result = ($ares cmp $bres);
+ } elsif ($apart ne $bpart ) {
+ $result = ($apart cmp $bpart);
}
- $arealm=~s/\.type//;
- my ($ares, $aparm) = ($arealm=~/^(.*)\.(.*)$/);
- $aparm=$keyorder{'parameter_0_'.$aparm};
- $brealm=~s/\.type//;
- my ($bres, $bparm) = ($brealm=~/^(.*)\.(.*)$/);
- $bparm=$keyorder{'parameter_0_'.$bparm};
- if ($ares eq $bres) {
- if (defined($aparm) && defined($bparm)) {
- ($aparm <=> $bparm);
- } elsif (defined($aparm)) {
- -1;
- } elsif (defined($bparm)) {
- 1;
- } else {
- ($arealm cmp $brealm) || ($astudent cmp $bstudent);
- }
- } else {
- ($arealm cmp $brealm) || ($astudent cmp $bstudent);
+ }
+
+ if (!$result) {
+ if (defined($aparm) && defined($bparm)) {
+ $result = ($aparm <=> $bparm);
+ } elsif (defined($aparm)) {
+ $result = -1;
+ } elsif (defined($bparm)) {
+ $result = 1;
}
- } else {
- $a cmp $b;
}
+
+ $result;
} keys %{$listdata}) {
-
+
if ($$listdata{$thiskey.'.type'}) {
my $thistype=$$listdata{$thiskey.'.type'};
if ($$resourcedata{$thiskey.'.type'}) {