--- loncom/interface/lonparmset.pm 2006/04/15 02:22:33 1.289
+++ loncom/interface/lonparmset.pm 2006/04/18 02:13:49 1.292
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.289 2006/04/15 02:22:33 www Exp $
+# $Id: lonparmset.pm,v 1.292 2006/04/18 02:13:49 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -397,7 +397,10 @@ sub storeparm_by_symb {
{
my $logid;
sub log_parmset {
- my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;
+ my ($storehash,$delflag,$uname,$udom)=@_;
+ my $logentry=join(',',map {
+ &Apache::lonnet::escape($_).'=>'.&Apache::lonnet::escape($$storehash{$_});
+ } keys %$storehash);
$logid++;
my $id=time().'00000'.$$.'00000'.$logid;
&Apache::lonnet::put('nohist_parameterlog',
@@ -406,15 +409,10 @@ sub storeparm_by_symb {
$id.'_exe_udom' => $env{'user.domain'},
$id.'_exe_time' => time(),
$id.'_exe_ip' => $ENV{'REMOTE_ADDR'},
- $id.'_symb' => $symb,
- $id.'_spnam' => $spnam,
- $id.'_snum' => $snum,
- $id.'_nval' => $nval,
- $id.'_ntype' => $ntype,
+ $id.'_delflag' => $delflag,
+ $id.'_logentry' => $logentry,
$id.'_uname' => $uname,
$id.'_udom' => $udom,
- $id.'_csec' => $csec,
- $id.'_cgroup' => $cgroup
},
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'}
@@ -425,7 +423,6 @@ sub storeparm_by_symb {
sub storeparm_by_symb_inner {
# ---------------------------------------------------------- Get symb, map, etc
my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;
- &log_parmset(@_);
# ---------------------------------------------------------- Construct prefixes
$spnam=~s/\_([^\_]+)$/\.$1/;
my $map=(&Apache::lonnet::decode_symb($symb))[0];
@@ -479,9 +476,11 @@ sub storeparm_by_symb_inner {
if ($delete) {
$reply=&Apache::lonnet::del
('resourcedata',[keys(%storecontent)],$cdom,$cnum);
+ &log_parmset(\%storecontent,1);
} else {
$reply=&Apache::lonnet::cput
('resourcedata',\%storecontent,$cdom,$cnum);
+ &log_parmset(\%storecontent);
}
&Apache::lonnet::devalidatecourseresdata($cnum,$cdom);
} else {
@@ -502,9 +501,11 @@ sub storeparm_by_symb_inner {
if ($delete) {
$reply=&Apache::lonnet::del
('resourcedata',[keys(%storecontent)],$udom,$uname);
+ &log_parmset(\%storecontent,1,$uname,$udom);
} else {
$reply=&Apache::lonnet::cput
('resourcedata',\%storecontent,$udom,$uname);
+ &log_parmset(\%storecontent,0,$uname,$udom);
}
&Apache::lonnet::devalidateuserresdata($uname,$udom);
}
@@ -2421,6 +2422,7 @@ sub storedata {
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,
$tkey.'.type' => $typeof},
$tudom,$tuname) eq 'ok') {
+ &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
$r->print('
'.&mt('Stored modified parameter for').' '.
&Apache::loncommon::plainname($tuname,$tudom));
} else {
@@ -2436,6 +2438,7 @@ sub storedata {
} elsif ($cmd eq 'del') {
if ($tuname) {
if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {
+ &log_parmset({$tkey=>''},1,$tuname,$tudom);
$r->print('
'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));
} else {
$r->print('
'.
@@ -2453,6 +2456,7 @@ sub storedata {
if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,
$tkey.'.type' => $typeof},
$tudom,$tuname) eq 'ok') {
+ &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
$r->print('
'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom));
} else {
$r->print(''.
@@ -2473,6 +2477,8 @@ sub storedata {
my $putentries=$#newdatakeys+1;
if ($delentries) {
if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {
+ my %loghash=map { $_ => '' } @deldata;
+ &log_parmset(\%loghash,1);
$r->print(''.&mt('Deleted [_1] parameter(s)
',$delentries));
} else {
$r->print(''.
@@ -2482,6 +2488,7 @@ sub storedata {
}
if ($putentries) {
if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {
+ &log_parmset(\%newdata,0);
$r->print(''.&mt('Stored [_1] parameter(s)',$putentries/2).'
');
} else {
$r->print(''.
@@ -3046,7 +3053,7 @@ ENDMAINFORMHEAD
action => 'setdefaults',
permission => $parm_permission,
},
- { text => 'Parameter Change Log and Course Blog Posting',
+ { text => 'Parameter Change Log and Course Blog Posting/User Notification',
action => 'parameterchangelog',
permission => $parm_permission,
},
@@ -3316,76 +3323,57 @@ ENDYESNO
return;
}
+sub components {
+ my ($key,$uname,$udom,$exeuser,$exedomain)=@_;
+ my $typeflag=0;
+ if ($key=~/\.type$/) {
+ $key=~s/\.type$//;
+ $typeflag=1;
+ }
+ my $issection;
+ my ($middle,$part,$name)=($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
+ my $section=&mt('All Students');
+ if ($middle=~/^\[(.*)\]/) {
+ $issection=$1;
+ $section=&mt('Group/Section').': '.$issection;
+ $middle=~s/^\[(.*)\]//;
+ }
+ $middle=~s/\.+$//;
+ $middle=~s/^\.+//;
+ if ($uname) {
+ $section=&mt('User').": ".&Apache::loncommon::plainname($uname,$udom);
+ $issection='';
+ }
+ my $realm=''.&mt('All Resources').'';
+ if ($middle=~/^(.+)\_\_\_\(all\)$/) {
+ $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')';
+ } elsif ($middle) {
+ my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
+ $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'
('.$url.' in '.$map.' id: '.$id.')';
+ }
+ my $what=$part.'.'.$name;
+ return ($realm,$section,$name,$part,$typeflag,
+ $what,$middle,$uname,$udom,$issection);
+}
+sub standard_parameter_names {
+ my ($name)=@_;
+ my %standard_parms=&Apache::lonlocal::texthash('duedate' => 'Due Date',
+ 'answerdate' => 'Answer Date',
+ 'opendate' => 'Open Date',
+ 'maxtries' => 'Max. Number of Tries',
+ 'weight' => 'Weight',
+ 'date_start' => 'Starting Date',
+ 'date_end' => 'Ending Date');
+ if ($standard_parms{$name}) {
+ return $standard_parms{$name};
+ } else {
+ return $name;
+ }
+}
+
sub parm_change_log {
my ($r)=@_;
&startpage($r);
-
- my @ids=();
- my %symbp=();
- my %mapp=();
- my %typep=();
- my %keyp=();
- my %uris=();
- my %maptitles=();
-
-# -------------------------------------------------------- Variable declaration
-
- my %allmaps=();
- my %alllevs=();
-
- my $uname;
- my $udom;
- my $uhome;
- my $csec;
- my $cgroup;
- my $grouplist;
- my @usersgroups = ();
-
- my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'};
-
- $alllevs{'Resource Level'}='full';
- $alllevs{'Map/Folder Level'}='map';
- $alllevs{'Course Level'}='general';
-
- my %allparms;
- my %allparts;
- my %keyorder;
-# --------------------------------------------------------- Get all assessments
- &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps,
- \%mapp, \%symbp,\%maptitles,\%uris,
- \%keyorder);
-
- $mapp{'0.0'} = '';
- $symbp{'0.0'} = '';
-
- my %level=&Apache::lonlocal::texthash('parmlevel_14' => 'General Course',
- 'parmlevel_13' => 'Map or Folder level in course',
- 'parmlevel_12' => 'Resource default',
- 'parmlevel_11' => 'Map default',
- 'parmlevel_10' => 'Resource level in course',
- 'parmlevel_9' => 'General for section',
- 'parmlevel_8' => 'Map or Folder level for section',
- 'parmlevel_7' => 'Resource level in section',
- 'parmlevel_6' => 'General for group',
- 'parmlevel_5' => 'Map or Folder level for group',
- 'parmlevel_4' => 'Resource level in group',
- 'parmlevel_3' => 'General for specific student',
- 'parmlevel_2' => 'Map or Folder level for specific student',
- 'parmlevel_1' => 'Resource level for specific student');
-
-# $id.'_exe_uname' => $env{'user.name'},
-# $id.'_exe_udom' => $env{'user.domain'},
-# $id.'_exe_time' => time(),
-# $id.'_exe_ip' => $ENV{'REMOTE_ADDR'},
-# $id.'_symb' => $symb,
-# $id.'_spnam' => $spnam,
-# $id.'_snum' => $snum,
-# $id.'_nval' => $nval,
-# $id.'_ntype' => $ntype,
-# $id.'_uname' => $uname,
-# $id.'_udom' => $udom,
-# $id.'_csec' => $csec,
-# $id.'_cgroup' => $cgroup
my %parmlog=&Apache::lonnet::dump('nohist_parameterlog',
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
@@ -3394,11 +3382,13 @@ sub parm_change_log {
if ($key=~/^(.+)\_exe\_time$/) {
$exetime{$1}=$parmlog{$key};
}
- }
+ }
+ my $courseopt=&Apache::lonnet::get_courseresdata($env{'course.'.$env{'request.course.id'}.'.num'},
+ $env{'course.'.$env{'request.course.id'}.'.domain'});
$r->print('');
- foreach my $id (sort { $exetime{$a}<=>$exetime{$b} } (keys(%exetime))) {
- my ($part,$name)=($parmlog{$id.'_spnam'}=~/^(.*)[\_\.]([^\_\.]+)$/);
- my $spnam=$part.'_'.$name;
+ foreach my $id (sort { $exetime{$b}<=>$exetime{$a} } (keys(%exetime))) {
+ my @changes=split(/\,/,$parmlog{$id.'_logentry'});
+ my $count=$#changes+1;
my $time =
&Apache::lonlocal::locallocaltime($parmlog{$id.'_exe_time'});
my $plainname =
@@ -3417,28 +3407,55 @@ sub parm_change_log {
$parmlog{$id.'_exe_uname'},
$parmlog{$id.'_exe_udom'});
}
- my $value;
- if ($parmlog{$id.'_nval'}) {
- if (&isdateparm($spnam)) {
- $value =
- &Apache::lonlocal::locallocaltime($parmlog{$id.'_nval'});
+ $r->print(''.$time.' |
+ '.$about_me_link.
+ ' '.$parmlog{$id.'_exe_uname'}.
+ ':'.$parmlog{$id.'_exe_udom'}.''.
+ $send_msg_link.' | ');
+ my $makenewrow=0;
+ my %istype=();
+ foreach my $changed (sort @changes) {
+ my ($key,$value)=split(/\=\>/,&Apache::lonnet::unescape($changed));
+ my ($realm,$section,$parmname,$part,$typeflag,$what,$middle,$uname,$udom,$issection)=
+ &components($key,$parmlog{$id.'_uname'},$parmlog{$id.'_udom'});
+ if ($typeflag) { $istype{$parmname}=$value; }
+ if ($makenewrow) { $r->print('
'); } else { $makenewrow=1; }
+ $r->print(''.$realm.' | '.$section.' | '.
+ &standard_parameter_names($parmname).' | '.
+ ($part?&mt('Part: [_1]',$part):&mt('All Parts')).' | ');
+ my $stillactive=0;
+ if ($parmlog{$id.'_deleteflag'}) {
+ $r->print(&mt('Deleted'));
+ } else {
+ if ($typeflag) {
+ $r->print(&mt('Type: [_1]',&standard_parameter_names($value)));
+ } else {
+ my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what),
+ $uname,$udom,$issection,$issection,$courseopt);
+ if (&isdateparm($istype{$parmname})) {
+ $r->print(&Apache::lonlocal::locallocaltime($value));
+ } else {
+ $r->print($value);
+ }
+ if ($value ne $all[$level]) {
+ $r->print(' '.&mt('Not active anymore').'');
+ } else {
+ $stillactive=1;
+ }
+ }
+ }
+ $r->print(' | ');
+ if ($stillactive) {
+ if (($uname) && ($udom)) {
+ $r->print('Notify Link | ');
+ } else {
+ $r->print('Blog Link | ');
+ }
} else {
- $value = $parmlog{$id.'_nval'};
+ $r->print(' | ');
}
- } else {
- $value = &mt('Deleted Parameter');
+ $r->print('
');
}
- $r->print(''.$time.' |
- '.$about_me_link.'
- '.$parmlog{$id.'_exe_udom'}.'
- '.$parmlog{$id.'_exe_uname'}.
- ':'.$parmlog{$id.'_exe_udom'}.''.
- $send_msg_link.' |
- '.$level{'parmlevel_'.$parmlog{$id.'_snum'}}.' |
- '.&mt($allparms{$name}).' '.$name.' |
- '.($part?&mt('Part: [_1]',$part):&mt('All parts')).' |
- '.$parmlog{$id.'_symb'}.' |
- '.$value.' |
');
}
$r->print('
');
$r->print(&Apache::loncommon::end_page());
@@ -3538,7 +3555,7 @@ sub handler {
&assessparms($r);
} elsif ($env{'form.action'} eq 'parameterchangelog' && $parm_permission) {
&Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
- text=>"Parameter Change Log and Course Blog Posting"});
+ text=>"Parameter Change Log"});
&parm_change_log($r);
}
} else {