--- loncom/interface/lonparmset.pm 2006/03/04 22:17:36 1.277 +++ loncom/interface/lonparmset.pm 2006/04/14 16:38:43 1.287 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.277 2006/03/04 22:17:36 www Exp $ +# $Id: lonparmset.pm,v 1.287 2006/04/14 16:38:43 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -394,9 +394,38 @@ sub storeparm_by_symb { return ''; } +{ + my $logid; + sub log_parmset { + my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_; + $logid++; + my $id=time().'00000'.$$.'00000'.$logid; + &Apache::lonnet::put('nohist_parameterlog', + { + $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 + }, + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'} + ); + } +} + 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]; @@ -580,20 +609,13 @@ sub plink { &valout($value,$type).''; } -sub startpage { - my $r=shift; - my $loaditems = qq|onUnload="pclose()" onLoad="group_or_section('cgroup')"|; - my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','', - $loaditems); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Table Mode Parameter Setting'); +sub page_js { + my $selscript=&Apache::loncommon::studentbrowser_javascript(); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< -LON-CAPA Course Parameters - $selscript - -$bodytag +ENDJS + +} +sub startpage { + my ($r) = @_; + + my %loaditems = ('onunload' => "pclose()", + 'onload' => "group_or_section('cgroup')",); + + my $start_page = + &Apache::loncommon::start_page('Set/Modify Course Parameters', + &page_js(), + {'add_entries' => \%loaditems,}); + my $breadcrumbs = + &Apache::lonhtmlcommon::breadcrumbs(undef, + 'Table Mode Parameter Setting'); + $r->print(< - - - - + + + + ENDHEAD } @@ -1947,7 +1985,7 @@ ENDMAPONE $r->print(""); } # end of $parmlev eq general } - $r->print(''); + $r->print(''.&Apache::loncommon::end_page()); } # end sub assessparms @@ -1972,8 +2010,7 @@ Returns: nothing sub crsenv { my $r=shift; my $setoutput=''; - my $bodytag=&Apache::loncommon::bodytag( - 'Set Course Environment Parameters'); + my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef, 'Edit Course Environment'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -2197,10 +2234,13 @@ sub crsenv { 'disableexampointprint' => ''.&mt('Disable automatically printing point values onto exams.').'
'. ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', + 'externalsyllabus' + => ''.&mt('URL of Syllabus (not using internal handler)').'', 'tthoptions' => ''.&mt('Default set of options to pass to tth/m when converting tex').'' ); my @Display_Order = ('url','description','courseid','cloners','grading', + 'externalsyllabus', 'default_xml_style','pageseparators', 'question.email','comment.email','policy.email', 'student_classlist_view', @@ -2279,17 +2319,18 @@ sub crsenv { my $Parameter=&mt('Parameter'); my $Value=&mt('Value'); my $Set=&mt('Set'); - my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset'); - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< - -LON-CAPA Course Environment - -$bodytag + my $browse_js= + ''; + + my $start_page = + &Apache::loncommon::start_page('Set Course Environment Parameters', + $browse_js); + my $end_page = + &Apache::loncommon::end_page(); + $r->print(< $setoutput @@ -2300,9 +2341,8 @@ $output - - -ENDenv +$end_page +ENDENV } ################################################## # Overview mode @@ -2620,18 +2660,14 @@ sub listdata { } sub newoverview { - my $r=shift; - my $bodytag=&Apache::loncommon::bodytag('Set Parameters'); + my ($r) = @_; + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $start_page = &Apache::loncommon::start_page('Set Parameters'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview'); - my $html=&Apache::lonxml::xmlbegin(); $r->print(< -LON-CAPA Parameters - -$bodytag +$start_page $breadcrumbs
ENDOVER @@ -2739,7 +2775,7 @@ ENDOVER } $r->print(&tableend(). ((($env{'form.store'}) || ($env{'form.dis'}))?'

':''). - '
'); + ''.&Apache::loncommon::end_page()); } sub secgroup_lister { @@ -2778,18 +2814,14 @@ sub secgroup_lister { } sub overview { - my $r=shift; - my $bodytag=&Apache::loncommon::bodytag('Modify Parameters'); + my ($r) = @_; my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + + my $start_page=&Apache::loncommon::start_page('Modify Parameters'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview'); - my $html=&Apache::lonxml::xmlbegin(); $r->print(< -LON-CAPA Parameters - -$bodytag +$start_page $breadcrumbs
ENDOVER @@ -2811,7 +2843,8 @@ ENDOVER my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder); $r->print(&tableend().'

'. - ($foundkeys?'':&mt('There are no parameters.')).'

'); + ($foundkeys?'':&mt('There are no parameters.')).'

'. + &Apache::loncommon::end_page()); } ################################################## @@ -2960,16 +2993,7 @@ Output html header for page ################################################## ################################################## sub header { - my $html=&Apache::lonxml::xmlbegin(); - my $bodytag=&Apache::loncommon::bodytag('Parameter Manager'); - my $title = &mt('LON-CAPA Parameter Manager'); - return(< -$title - -$bodytag -ENDHEAD + return &Apache::loncommon::start_page('Parameter Manager'); } ################################################## ################################################## @@ -3021,6 +3045,10 @@ ENDMAINFORMHEAD { text => 'Set Parameter Setting Default Actions', action => 'setdefaults', permission => $parm_permission, + }, + { text => 'Parameter Change Log and Course Blog Posting', + action => 'parameterchangelog', + permission => $parm_permission, }, ); my $menu_html = ''; @@ -3079,11 +3107,8 @@ sub setrestrictmeta { my $output; my $item_num; my $put_result; - $r->print(&Apache::lonxml::xmlbegin()); - $r->print(' - LON-CAPA Restrict Metadata - '); - $r->print(&Apache::loncommon::bodytag('Restrict Metadata')); + + $r->print(&Apache::loncommon::start_page('Restrict Metadata')); $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef, 'Restrict Metadata')); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -3131,28 +3156,25 @@ sub setrestrictmeta { ENDenv - $r->print(' - '); + $r->print(&Apache::loncommon::end_page()); return 'ok'; } ################################################## sub defaultsetter { - my $r=shift; - my $bodytag=&Apache::loncommon::bodytag('Parameter Setting Default Actions'); - my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my ($r) = @_; + + my $start_page = + &Apache::loncommon::start_page('Parameter Setting Default Actions'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Defaults'); - my $html=&Apache::lonxml::xmlbegin(); $r->print(< -LON-CAPA Parameters - -$bodytag +$start_page $breadcrumbs
ENDDEFHEAD + + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my @ids=(); my %typep=(); my %keyp=(); @@ -3289,10 +3311,126 @@ ENDYESNO $r->print(''); } $r->print("\n
\n\n"); + &mt('Store Rules')."' />\n". + &Apache::loncommon::end_page()); return; } +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'}); + my %exetime=(); + foreach my $key (keys(%parmlog)) { + if ($key=~/^(.+)\_exe\_time$/) { + $exetime{$1}=$parmlog{$key}; + } + } + $r->print(''); + foreach my $id (sort { $exetime{$a}<=>$exetime{$b} } (keys(%exetime))) { + my ($part,$name)=($parmlog{$id.'_spnam'}=~/^(.*)[\_\.]([^\_\.]+)$/); + my $spnam=$part.'_'.$name; + $r->print(''); + } + $r->print('
'. + &Apache::lonlocal::locallocaltime($parmlog{$id.'_exe_time'}). + ''. + &Apache::loncommon::aboutmewrapper( + &Apache::loncommon::plainname($parmlog{$id.'_exe_uname'}, + $parmlog{$id.'_exe_udom'}), + $parmlog{$id.'_exe_uname'}, + $parmlog{$id.'_exe_udom'}).'
'. + $parmlog{$id.'_exe_uname'}.':'.$parmlog{$id.'_exe_udom'}.''. + ((($parmlog{$id.'_exe_uname'} ne $env{'user.name'}) || + ($parmlog{$id.'_exe_udom'} ne $env{'user.domain'}))? + '
'.&Apache::loncommon::messagewrapper(&mt('Send message'), + $parmlog{$id.'_exe_uname'}, + $parmlog{$id.'_exe_udom'}):''). + '
'. + $level{'parmlevel_'.$parmlog{$id.'_snum'}}. + ''. + &mt($allparms{$name}).'
'.$name.''. + '
'. + ($part?&mt('Part: [_1]',$part):&mt('All parts')). + ''. + $parmlog{$id.'_symb'}. + ''. + ($parmlog{$id.'_nval'}? + (&isdateparm($spnam)?&Apache::lonlocal::locallocaltime($parmlog{$id.'_nval'}):$parmlog{$id.'_nval'}) + :&mt('Deleted Parameter')). + '
'); + $r->print(&Apache::loncommon::end_page()); +} + ################################################## ################################################## @@ -3385,8 +3523,11 @@ sub handler { text=>"Table Mode", help => 'Course_Setting_Parameters'}); &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"}); + &parm_change_log($r); + } } else { # ----------------------------- Not in a course, or not allowed to modify parms $env{'user.error.msg'}=