--- loncom/interface/lonparmset.pm 2006/04/22 15:39:22 1.295 +++ loncom/interface/lonparmset.pm 2006/06/12 23:17:48 1.313 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.295 2006/04/22 15:39:22 albertel Exp $ +# $Id: lonparmset.pm,v 1.313 2006/06/12 23:17:48 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,6 +63,10 @@ use Apache::lonhomework; use Apache::lonxml; use Apache::lonlocal; use Apache::lonnavmaps; +use Apache::longroup; +use Apache::lonrss; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; # --- Caches local to lonparmset @@ -90,11 +94,11 @@ Inputs: $what - a parameter spec (inclu Returns: A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 14 possible levels -14 - General Course -13 - Map or Folder level in course +14- General Course +13- Map or Folder level in course 12- resource default 11- map default -10 - resource level in course +10- resource level in course 9 - General for section 8 - Map or Folder level for section 7 - resource level in section @@ -117,7 +121,6 @@ sub parmval { sub parmval_by_symb { my ($what,$symb,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_; # load caches - &cacheparmhash(); my $useropt=&Apache::lonnet::get_userresdata($uname,$udom); @@ -126,6 +129,7 @@ sub parmval_by_symb { my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme my $map=(&Apache::lonnet::decode_symb($symb))[0]; + $map = &Apache::lonnet::deversion($map); my $symbparm=$symb.'.'.$what; my $mapparm=$map.'___(all).'.$what; @@ -404,6 +408,8 @@ sub storeparm_by_symb_inner { # ---------------------------------------------------------- Construct prefixes $spnam=~s/\_([^\_]+)$/\.$1/; my $map=(&Apache::lonnet::decode_symb($symb))[0]; + $map = &Apache::lonnet::deversion($map); + my $symbparm=$symb.'.'.$spnam; my $mapparm=$map.'___(all).'.$spnam; @@ -650,8 +656,7 @@ sub startpage { &page_js(), {'add_entries' => \%loaditems,}); my $breadcrumbs = - &Apache::lonhtmlcommon::breadcrumbs(undef, - 'Table Mode Parameter Setting'); + &Apache::lonhtmlcommon::breadcrumbs('Table Mode Parameter Setting'); $r->print(< "or ID", 'ad' => "at Domain" ); - my %sectionhash=(); my $sections=''; - my $numsec = &Apache::loncommon::get_sections( - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}, - \%sectionhash); + my %sectionhash = &Apache::loncommon::get_sections(); + my $groups; - my %grouphash; - my $numgrp = &Apache::loncommon::coursegroups( - \%grouphash, - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); - if ($numsec > 0) { + my %grouphash = &Apache::longroup::coursegroups(); + + if (%sectionhash) { $sections=$lt{'se'}.': print(''); + foreach my $s ('all',sort keys %sectionhash) { + $r->print(' \n"); } - $r->print("\n"); - } + $r->print('>'.$s."\n"); + } + $r->print("\n"); } sub groupmenu { my ($r,$selectedgroups)=@_; - my %grouphash; - my $numgrp = &Apache::loncommon::coursegroups( - \%grouphash, - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); - if ($numgrp) { - $r->print('\n"); + my %grouphash = &Apache::longroup::coursegroups(); + return if (!%grouphash); + + $r->print('\n"); } @@ -1416,7 +1407,6 @@ sub assessparms { my $uhome; my $csec; my $cgroup; - my $grouplist; my @usersgroups = (); my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'}; @@ -1522,16 +1512,12 @@ sub assessparms { .$name{'lastname'}.' '.$name{'generation'}. "
\n".&mt('ID').": ".$name{'id'}.'

'; } - $grouplist = &Apache::lonnet::get_users_groups( + @usersgroups = &Apache::lonnet::get_users_groups( $udom,$uname,$env{'request.course.id'}); - if ($grouplist) { - @usersgroups = &Apache::lonnet::sort_course_groups($grouplist, - $env{'request.course.id'}); - unless (grep/^\Q$cgroup\E$/,@usersgroups) { + if (@usersgroups > 0) { + unless (grep(/^\Q$cgroup\E$/,@usersgroups)) { $cgroup = $usersgroups[0]; - } - } else { - $cgroup = ''; + } } } } @@ -1587,8 +1573,9 @@ sub assessparms { &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder); } else { my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); - $r->print(&mt('Specific Resource').": ".$resource. - ''. + my $title = &Apache::lonnet::gettitle($pssymb); + $r->print(&mt('Specific Resource: [_1] ([_2])',$title,$resource). + ''. '

'); } @@ -1748,7 +1735,7 @@ ENDTABLEHEADFOUR '

'. "$title"); @@ -1947,7 +1934,7 @@ ENDMAPONE } if ($csec) {$r->print(&mt("Section")." $csec\n")}; - if ($cgroup) {$r->print(&mt("Group")." $csec\n")}; + if ($cgroup) {$r->print(&mt("Group")." $cgroup\n")}; $r->print("\n"); #---------------------------------------------------------------- print table $r->print('

'); @@ -1990,8 +1977,8 @@ sub crsenv { my $r=shift; my $setoutput=''; - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef, - 'Edit Course Environment'); + my $breadcrumbs = + &Apache::lonhtmlcommon::breadcrumbs('Edit Course Environment'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; @@ -2094,7 +2081,8 @@ sub crsenv { } # ------------------------- Re-init course environment entries for this session - &Apache::lonnet::coursedescription($env{'request.course.id'}); + &Apache::lonnet::coursedescription($env{'request.course.id'}, + {'freshen_cache' => 1}); # -------------------------------------------------------- Get parameters again @@ -2207,6 +2195,8 @@ sub crsenv { 'disable_receipt_display' => ''.&mt('Disable display of problem receipts').'
'. ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', + 'task_messages' + => ''.&mt('Send message to student when clicking Done on Tasks. [_1] to send a message only to student, [_2] to send message to student and add record to user information page for instructors. Leave blank to disable.','only_student','student_and_user_notes_screen').'', 'disablesigfigs' => ''.&mt('Disable checking of Significant Figures').'
'. ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', @@ -2243,7 +2233,8 @@ sub crsenv { 'default_enrollment_end_date', 'tthoptions', 'disablesigfigs', - 'disableexampointprint' + 'disableexampointprint', + 'task_messages' ); foreach my $parameter (sort(keys(%values))) { unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./)) { @@ -2652,7 +2643,7 @@ sub newoverview { 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 $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print(<print(<print(&Apache::loncommon::start_page('Restrict Metadata')); - $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef, - 'Restrict Metadata')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my $key_base = $env{'course.'.$env{'request.course.id'}.'.'}; @@ -3128,7 +3118,8 @@ sub setrestrictmeta { } } } - &Apache::lonnet::coursedescription($env{'request.course.id'}); + &Apache::lonnet::coursedescription($env{'request.course.id'}, + {'freshen_cache' => 1}); my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); foreach my $field (sort(keys(%metadata_fields))) { &Apache::lonnet::logthis ($field); @@ -3153,7 +3144,7 @@ sub defaultsetter { my $start_page = &Apache::loncommon::start_page('Parameter Setting Default Actions'); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Defaults'); + my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults'); $r->print(<'; + my $realmdescription=&mt('all resources'); if ($middle=~/^(.+)\_\_\_\(all\)$/) { $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; - } elsif ($middle) { + $realmdescription=&mt('folder').' '.&Apache::lonnet::gettitle($1); + } elsif ($middle) { my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle); $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'
('.$url.' in '.$map.' id: '.$id.')
'; + $realmdescription=&mt('resource').' '.&Apache::lonnet::gettitle($middle); } my $what=$part.'.'.$name; return ($realm,$section,$name,$part,$typeflag, - $what,$middle,$uname,$udom,$issection); + $what,$middle,$uname,$udom,$issection,$realmdescription); } sub standard_parameter_names { @@ -3345,9 +3339,18 @@ sub standard_parameter_names { 'weight' => 'Weight', 'date_start' => 'Starting Date', 'date_end' => 'Ending Date', + 'interval' => 'Time Interval Length', + 'tol' => 'Numerical Tolerance', + 'sig' => 'Significant Digits', + 'contentopen' => 'Content Opening Date', + 'contentclose' => 'Content Closing Date', + 'discussend' => 'End of Discussion Time', + 'discusshide' => 'Discussion Hidden', + 'problemstatus' => 'Problem Status Visible', 'int_pos' => 'Positive Integer', 'int_zero_pos' => 'Positive Integer or Zero', - 'hinttries' => 'Number of Tries till Hints appear'); + 'hinttries' => 'Number of Tries till Hints appear', + 'numbubbles' => 'Number of Bubbles in Exam Mode'); if ($standard_parms{$name}) { return $standard_parms{$name}; } else { @@ -3355,18 +3358,47 @@ sub standard_parameter_names { } } +# +# Parameter Change Log +# + + sub parm_change_log { my ($r)=@_; &startpage($r); my %parmlog=&Apache::lonnet::dump('nohist_parameterlog', $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); + + if ((keys(%parmlog))[0]=~/^error\:/) { undef(%parmlog); } + + $r->print('
+ '); + + my %saveable_parameters = ('show' => 'scalar',); + &Apache::loncommon::store_course_settings('parameter_log', + \%saveable_parameters); + &Apache::loncommon::restore_course_settings('parameter_log', + \%saveable_parameters); + if (!$env{'form.show'}) { $env{'form.show'}=10; } + + my $countselect = + &Apache::lonmeta::selectbox('show',$env{'form.show'},undef, + (&mt('all'),10,20,50,100,1000,10000)); + + $r->print(''.&mt('[_1] Records',$countselect).''. + ''); + my $courseopt=&Apache::lonnet::get_courseresdata($env{'course.'.$env{'request.course.id'}.'.num'}, $env{'course.'.$env{'request.course.id'}.'.domain'}); - $r->print('
'); - my $bgcolor='#EEEEEE'; + $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row(). + ''. + &Apache::loncommon::end_data_table_header_row()); + my $shown=0; foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) { - if ($bgcolor eq '#EEEEEE') { $bgcolor='#FFFFCC'; } else { $bgcolor='#EEEEEE'; } my @changes=keys(%{$parmlog{$id}{'logentry'}}); my $count=$#changes+1; my $time = @@ -3386,7 +3418,8 @@ sub parm_change_log { $parmlog{$id}{'exe_uname'}, $parmlog{$id}{'exe_udom'}); } - $r->print(' + my $row_start=&Apache::loncommon::start_data_table_row(); + $r->print($row_start.''); } else { $makenewrow=1; } + if ($makenewrow) { $r->print($row_start); } else { $makenewrow=1; } $r->print(''); if ($stillactive) { + my $title=&mt('Changed [_1]',&standard_parameter_names($parmname)); + my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription, + (&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value)); if (($uname) && ($udom)) { - $r->print(''); + $r->print(''); } else { - $r->print(''); + $r->print(''); } } else { $r->print(''); } - $r->print(''); + $r->print(&Apache::loncommon::end_data_table_row()); } + $shown++; + if (!($env{'form.show'} eq &mt('all') + || $shown<=$env{'form.show'})) { last; } } - $r->print('
'.&mt('Time').''.&mt('User').''.&mt('Extent').''.&mt('Users').''. + &mt('Parameter').''.&mt('Part').''.&mt('New Value').''.&mt('Announce').'
'.$time.''.$time.' '.$about_me_link. '
'.$parmlog{$id}{'exe_uname'}. ':'.$parmlog{$id}{'exe_udom'}.''. @@ -3395,10 +3428,10 @@ sub parm_change_log { my %istype=(); foreach my $changed (reverse(sort(@changes))) { my $value=$parmlog{$id}{'logentry'}->{$changed}; - my ($realm,$section,$parmname,$part,$typeflag,$what,$middle,$uname,$udom,$issection)= + my ($realm,$section,$parmname,$part,$typeflag,$what,$middle,$uname,$udom,$issection,$realmdescription)= &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'}); if ($typeflag) { $istype{$parmname}=$value; } - if ($makenewrow) { $r->print('
'.$realm.''.$section.''. &standard_parameter_names($parmname).''. ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''); @@ -3425,18 +3458,29 @@ sub parm_change_log { } $r->print('Notify Link'. + &Apache::loncommon::messagewrapper('Notify User',$uname,$udom,$title,$description). + 'Blog Link'. + &Apache::lonrss::course_blog_link($id,$title,$description). + ' 
'); + $r->print(&Apache::loncommon::end_data_table()); + $r->print(''); $r->print(&Apache::loncommon::end_page()); } @@ -3504,8 +3548,7 @@ sub handler { } elsif (! exists($env{'form.action'})) { $r->print(&header()); - $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef, - 'Parameter Manager')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager')); &print_main_menu($r,$parm_permission); } elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv',