--- loncom/interface/lonparmset.pm 2006/04/18 18:10:55 1.293 +++ loncom/interface/lonparmset.pm 2006/07/14 18:49:06 1.323 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.293 2006/04/18 18:10:55 www Exp $ +# $Id: lonparmset.pm,v 1.323 2006/07/14 18:49:06 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -63,6 +63,9 @@ use Apache::lonhomework; use Apache::lonxml; use Apache::lonlocal; use Apache::lonnavmaps; +use Apache::longroup; +use Apache::lonrss; +use LONCAPA; # --- Caches local to lonparmset @@ -90,11 +93,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 +120,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 +128,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 +407,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; @@ -489,7 +494,7 @@ sub storeparm_by_symb_inner { } if ($reply=~/^error\:(.*)/) { - return "Write Error: $1"; + return "Write Error: $1"; } return ''; } @@ -503,21 +508,26 @@ sub storeparm_by_symb_inner { Format a value for output. -Inputs: $value, $type +Inputs: $value, $type, $editable Returns: $value, formatted for output. If $type indicates it is a date, localtime($value) is returned. +$editable will return an icon to click on =cut ################################################## ################################################## sub valout { - my ($value,$type)=@_; + my ($value,$type,$editable)=@_; my $result = ''; # Values of zero are valid. if (! $value && $value ne '0') { - $result = '  '; + if ($editable) { + $result = ''; + } else { + $result=' '; + } } else { if ($type eq 'date_interval') { my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); @@ -585,7 +595,7 @@ sub plink { return '
'. ''. - &valout($value,$type).'
'; + &valout($value,$type,1).''; } sub page_js { @@ -650,8 +660,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','Table_Mode'); $r->print(<'; + $parm.='
'.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).'
'; } $r->print(''.$parm.''); @@ -1053,15 +1062,15 @@ sub parmmenu { ENDSCRIPT $r->print(); - $r->print("\n"); + $r->print("\n
"); my $cnt=0; foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) { - $r->print("\n'); + $r->print('>'.$$allparms{$tempkey}.''); $cnt++; if ($cnt==3) { $r->print("\n"); @@ -1069,7 +1078,7 @@ ENDSCRIPT } } $r->print(' -'); + $r->print(''.&Apache::loncommon::end_data_table_row()); } } return $foundkeys; @@ -2650,7 +2660,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('
+
Select All
Select Common Only
@@ -1119,21 +1128,15 @@ sub usermenu { 'oi' => "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 +1411,6 @@ sub assessparms { my $uhome; my $csec; my $cgroup; - my $grouplist; my @usersgroups = (); my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'}; @@ -1488,8 +1482,8 @@ sub assessparms { $id=''; } else { $message= - "".&mt("Unknown ID")." '$id' ". - &mt('at domain')." '$udom'"; + ''.&mt("Unknown ID")." '$id' ". + &mt('at domain')." '$udom'"; } } else { $uname=$env{'form.uname'}; @@ -1500,17 +1494,17 @@ sub assessparms { $uhome=&Apache::lonnet::homeserver($uname,$udom); if ($uhome eq 'no_host') { $message= - "".&mt("Unknown user")." '$uname' ". - &mt("at domain")." '$udom'"; + ''.&mt("Unknown user")." '$uname' ". + &mt("at domain")." '$udom'"; $uname=''; } else { $csec=&Apache::lonnet::getsection($udom,$uname, $env{'request.course.id'}); if ($csec eq '-1') { - $message="". + $message=''. &mt("User")." '$uname' ".&mt("at domain")." '$udom' ". - &mt("not in this course").""; + &mt("not in this course").""; $uname=''; $csec=$env{'form.csec'}; $cgroup=$env{'form.cgroup'}; @@ -1522,16 +1516,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 +1577,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 +1739,7 @@ ENDTABLEHEADFOUR '

'. "$title"); @@ -1947,7 +1938,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 +1981,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'}; @@ -2092,9 +2083,14 @@ sub crsenv { } } } + + my $start_table =&Apache::loncommon::start_data_table(); + my $start_header_row=&Apache::loncommon::start_data_table_header_row(); + my $end_header_row =&Apache::loncommon::end_data_table_header_row(); # ------------------------- 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 @@ -2107,9 +2103,9 @@ sub crsenv { ('url' => ''.&mt('Top Level Map').' '. '". - &mt('Select Map').'
'. + &mt('Select Map').'
'. &mt('Modification may make assessment data inaccessible'). - '
', + '', 'description' => ''.&mt('Course Description').'', 'courseid' => ''.&mt('Course ID or number'). '
'. @@ -2180,8 +2176,8 @@ sub crsenv { '('.&mt('or set value to "[_1]" to allow all roles',"yes").')', 'rndseed' => ''.&mt('Randomization algorithm used').'
'. - ''.&mt('Modifying this will make problems').' '. - &mt('have different numbers and answers').'', + ''.&mt('Modifying this will make problems').' '. + &mt('have different numbers and answers').'', 'receiptalg' => ''.&mt('Receipt algorithm used').'
'. &mt('This controls how receipt numbers are generated.'), @@ -2196,6 +2192,8 @@ sub crsenv { ' ('.&mt('supported types').': Letter [8 1/2x11 in], Legal [8 1/2x14 in],'. ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])', + 'print_header_format' + => 'Print header format; substitutions: %n student name %c course id %a assignment', 'anonymous_quiz' => ''.&mt('Anonymous quiz/exam').'
'. ' ('.&mt('yes').' '.&mt('to avoid print students names').' )', @@ -2207,6 +2205,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').')', @@ -2234,6 +2234,7 @@ sub crsenv { 'problem_stream_switch', 'suppress_tries', 'default_paper_size', + 'print_header_format', 'disable_receipt_display', 'spreadsheet_default_classcalc', 'spreadsheet_default_studentcalc', @@ -2243,7 +2244,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\./)) { @@ -2253,13 +2255,15 @@ sub crsenv { } } } + foreach my $parameter (@Display_Order) { my $description = $descriptions{$parameter}; # onchange is javascript to automatically check the 'Set' button. my $onchange = 'onFocus="javascript:window.document.forms'. "['envform'].elements['".$parameter."_setparmval']". '.checked=true;"'; - $output .= '
'; + $output .= &Apache::loncommon::start_data_table_row(). + ''; if ($parameter =~ /^default_enrollment_(start|end)_date$/) { $output .= ''; - $output .= "\n"; + $output .= &Apache::loncommon::end_data_table_row()."\n"; } my $onchange = 'onFocus="javascript:window.document.forms'. '[\'envform\'].elements[\'newp_setparmval\']'. '.checked=true;"'; - $output.=''; + ''. + &Apache::loncommon::end_data_table_row()."\n"; } my %lt=&Apache::lonlocal::texthash( 'par' => 'Parameter', @@ -2304,20 +2310,22 @@ sub crsenv { ''; my $start_page = - &Apache::loncommon::start_page('Set Course Environment Parameters', + &Apache::loncommon::start_page('Set Course Environment', $browse_js); my $end_page = &Apache::loncommon::end_page(); + my $end_table=&Apache::loncommon::end_data_table(); $r->print(< $setoutput -

-

'.$description.''.$description.''. &Apache::lonhtmlcommon::date_setter('envform', @@ -2276,17 +2280,19 @@ sub crsenv { $output .= ''. &Apache::lonhtmlcommon::checkbox($parameter.'_setparmval'). '
'.&mt('Create New Environment Variable').'
'. + $output.=&Apache::loncommon::start_data_table_row(). + '
'.&mt('Create New Environment Variable').'
'. '
'. ''. - '
- +$start_table +$start_header_row + +$end_header_row $output -
$lt{'par'}$lt{'val'}$lt{'set'}?
$lt{'par'}$lt{'val'}$lt{'set'}?
+$end_table $end_page @@ -2333,7 +2341,7 @@ sub tablestart { return ''; } else { $tableopen=1; - return ''; } } @@ -2341,7 +2349,7 @@ sub tablestart { sub tableend { if ($tableopen) { $tableopen=0; - return '
'.&mt('Parameter').''. + return &Apache::loncommon::start_data_table().'
'.&mt('Parameter').''. &mt('Delete').''.&mt('Set to ...').'
'; + return &Apache::loncommon::end_data_table(); } else { return''; } @@ -2404,8 +2412,8 @@ sub storedata { $r->print('
'.&mt('Stored modified parameter for').' '. &Apache::loncommon::plainname($tuname,$tudom)); } else { - $r->print('

'. - &mt('Error storing parameters').'

'); + $r->print('
'. + &mt('Error storing parameters').'
'); } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { @@ -2419,8 +2427,8 @@ sub storedata { &log_parmset({$tkey=>''},1,$tuname,$tudom); $r->print('
'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom)); } else { - $r->print('

'. - &mt('Error deleting parameters').'

'); + $r->print('
'. + &mt('Error deleting parameters').'
'); } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { @@ -2437,8 +2445,8 @@ sub storedata { &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('

'. - &mt('Error storing parameters').'

'); + $r->print('
'. + &mt('Error storing parameters').'
'); } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { @@ -2459,8 +2467,8 @@ sub storedata { &log_parmset(\%loghash,1); $r->print('

'.&mt('Deleted [_1] parameter(s)

',$delentries)); } else { - $r->print('

'. - &mt('Error deleting parameters').'

'); + $r->print('
'. + &mt('Error deleting parameters').'
'); } &Apache::lonnet::devalidatecourseresdata($crs,$dom); } @@ -2469,8 +2477,8 @@ sub storedata { &log_parmset(\%newdata,0); $r->print('

'.&mt('Stored [_1] parameter(s)',$putentries/2).'

'); } else { - $r->print('

'. - &mt('Error storing parameters').'

'); + $r->print('
'. + &mt('Error storing parameters').'
'); } &Apache::lonnet::devalidatecourseresdata($crs,$dom); } @@ -2545,12 +2553,12 @@ sub listdata { } $middle=~s/\.+$//; $middle=~s/^\.+//; - my $realm=''.&mt('All Resources').''; + my $realm=''.&mt('All Resources').''; if ($middle=~/^(.+)\_\_\_\(all\)$/) { - $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; + $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.')
'; + $realm=''.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).'
('.$url.' in '.$map.' id: '.$id.')
'; } if ($sortorder eq 'realmstudent') { if ($realm ne $oldrealm) { @@ -2577,7 +2585,7 @@ sub listdata { } if ($part ne $oldpart) { $r->print(&tableend(). - "\n".&mt('Part').": $part"); + "\n".&mt('Part').": $part"); $oldpart=$part; } # @@ -2592,7 +2600,9 @@ sub listdata { # # Ready to print # - $r->print(&tablestart().'
'.&standard_parameter_names($name). + $r->print(&tablestart(). + &Apache::loncommon::start_data_table_row(). + ''.&standard_parameter_names($name). ''); $foundkeys++; @@ -2638,7 +2648,7 @@ sub listdata { } $r->print(''); - $r->print('
'); + $r->print(' + '); } $r->print('
'); &levelmenu($r,\%alllevs,$parmlev); if ($parmlev ne 'general') { - $r->print(''); + $r->print(''); &mapmenu($r,\%allmaps,$pschp,\%maptitles); $r->print('
'); - $r->print('
'); + $r->print(' +
'); &parmmenu($r,\%allparms,\@pscat,\%keyorder); - $r->print(''. - '
'.&mt('Parts').''.&mt('Section(s)'). - ''.&mt('Group(s)').'
'); + $r->print(' + '. + '
'.&mt('Parts').''.&mt('Section(s)'). + ''.&mt('Group(s)').'
'); &partmenu($r,\%allparts,\@psprt); - $r->print(' '); + $r->print(''); §ionmenu($r,\@selected_sections); - $r->print(' '); + $r->print(''); &groupmenu($r,\@selected_groups); $r->print('
'); $r->print('
'); @@ -2804,7 +2817,7 @@ sub overview { 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 $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print(< 'Set Course Environment Parameters', + ( { divider=>'Settings for Your Course', + }, + { text => 'Set Course Environment', action => 'crsenv', permission => $parm_permission, }, @@ -3008,17 +3022,17 @@ ENDMAINFORMHEAD url => '/adm/slotrequest?command=showslots', permission => $vgr, }, - { divider => 1, + { text => 'Set Parameter Setting Default Actions', + action => 'setdefaults', + permission => $parm_permission, + }, + { divider => 'New and Existing Parameter Settings for Your Resources', }, { text => 'Set/Modify Resource Parameters - Helper Mode', url => '/adm/helper/parameter.helper', permission => $parm_permission, }, - { text => 'Modify Resource Parameters - Overview Mode', - action => 'setoverview', - permission => $parm_permission, - }, - { text => 'Set Resource Parameters - Overview Mode', + { text => 'Set/Modify Resource Parameters - Overview Mode', action => 'newoverview', permission => $parm_permission, }, @@ -3027,10 +3041,12 @@ ENDMAINFORMHEAD permission => $parm_permission, help => 'Cascading_Parameters', }, - { text => 'Set Parameter Setting Default Actions', - action => 'setdefaults', + { divider => 'Existing Parameter Settings for Your Resources', + }, + { text => 'Modify Resource Parameters - Overview Mode', + action => 'setoverview', permission => $parm_permission, - }, + }, { text => 'Parameter Change Log and Course Blog Posting/User Notification', action => 'parameterchangelog', permission => $parm_permission, @@ -3039,19 +3055,19 @@ ENDMAINFORMHEAD my $menu_html = ''; foreach my $menu_item (@menu) { if ($menu_item->{'divider'}) { - $menu_html .= '
'; + $menu_html .= '

'.&mt($menu_item->{'divider'}).'

'; next; } next if (! $menu_item->{'permission'}); $menu_html.='

'; - $menu_html.=''; + $menu_html.=''; if (exists($menu_item->{'url'})) { $menu_html.=qq{}; } else { $menu_html.= qq{}; } - $menu_html.= &mt($menu_item->{'text'}).''; + $menu_html.= &mt($menu_item->{'text'}).''; if (exists($menu_item->{'help'})) { $menu_html.= &Apache::loncommon::help_open_topic($menu_item->{'help'}); @@ -3094,8 +3110,7 @@ sub setrestrictmeta { my $put_result; $r->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'}.'.'}; @@ -3126,7 +3141,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); @@ -3151,7 +3167,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(<print(&mt('Manual setting rules apply to all interfaces.').'
'. &mt('Automatic setting rules apply to table mode interfaces only.')); - $r->print("\n'); + $r->print("\n".&Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + "'. + &Apache::loncommon::end_data_table_header_row()); foreach my $tempkey (&keysindisplayorder(\%allparms,\%keyorder)) { unless ($tempkey) { next; } - $r->print("\n'); + $r->print(''.&Apache::loncommon::end_data_table_row()); } - $r->print("
".&mt('Rule for parameter').''. - &mt('Action').''.&mt('Value').'
".&mt('Rule for parameter').''. + &mt('Action').''.&mt('Value').'
".$allparms{$tempkey}."\n
(".$tempkey.')
'); + $r->print("\n".&Apache::loncommon::start_data_table_row(). + "".$allparms{$tempkey}."\n
(".$tempkey.')
'); my $action=&rulescache($tempkey.'_action'); $r->print(''); } - $r->print('
\n\n". &Apache::loncommon::end_page()); return; @@ -3322,16 +3343,19 @@ sub components { $section=&mt('User').": ".&Apache::loncommon::plainname($uname,$udom); $issection=''; } - my $realm=''.&mt('All Resources').''; + my $realm=''.&mt('All Resources').''; + my $realmdescription=&mt('all resources'); if ($middle=~/^(.+)\_\_\_\(all\)$/) { - $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; - } elsif ($middle) { + $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; + $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.')
'; + $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 { @@ -3343,9 +3367,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 { @@ -3353,61 +3386,85 @@ 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'}); - my %exetime=(); - foreach my $key (keys(%parmlog)) { - if ($key=~/^(.+)\_exe\_time$/) { - $exetime{$1}=$parmlog{$key}; - } - } + + 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'; - foreach my $id (sort { $exetime{$b}<=>$exetime{$a} } (keys(%exetime))) { - if ($bgcolor eq '#EEEEEE') { $bgcolor='#FFFFCC'; } else { $bgcolor='#EEEEEE'; } - my @changes=keys(%{$parmlog{$id.'_logentry'}}); + $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))) { + my @changes=keys(%{$parmlog{$id}{'logentry'}}); my $count=$#changes+1; my $time = - &Apache::lonlocal::locallocaltime($parmlog{$id.'_exe_time'}); + &Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); my $plainname = - &Apache::loncommon::plainname($parmlog{$id.'_exe_uname'}, - $parmlog{$id.'_exe_udom'}); + &Apache::loncommon::plainname($parmlog{$id}{'exe_uname'}, + $parmlog{$id}{'exe_udom'}); my $about_me_link = &Apache::loncommon::aboutmewrapper($plainname, - $parmlog{$id.'_exe_uname'}, - $parmlog{$id.'_exe_udom'}); + $parmlog{$id}{'exe_uname'}, + $parmlog{$id}{'exe_udom'}); my $send_msg_link=''; - if ((($parmlog{$id.'_exe_uname'} ne $env{'user.name'}) - || ($parmlog{$id.'_exe_udom'} ne $env{'user.domain'}))) { + if ((($parmlog{$id}{'exe_uname'} ne $env{'user.name'}) + || ($parmlog{$id}{'exe_udom'} ne $env{'user.domain'}))) { $send_msg_link ='
'. &Apache::loncommon::messagewrapper(&mt('Send message'), - $parmlog{$id.'_exe_uname'}, - $parmlog{$id.'_exe_udom'}); + $parmlog{$id}{'exe_uname'}, + $parmlog{$id}{'exe_udom'}); } - $r->print(' + my $row_start=&Apache::loncommon::start_data_table_row(); + $r->print($row_start.''); my $makenewrow=0; 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)= - &components($changed,$parmlog{$id.'_uname'},$parmlog{$id.'_udom'}); + my $value=$parmlog{$id}{'logentry'}->{$changed}; + 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(''); } 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'}.''. + '
'.$parmlog{$id}{'exe_uname'}. + ':'.$parmlog{$id}{'exe_udom'}.''. $send_msg_link.'
'.$realm.''.$section.''. &standard_parameter_names($parmname).''. ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''); my $stillactive=0; - if ($parmlog{$id.'_deleteflag'}) { + if ($parmlog{$id}{'deleteflag'}) { $r->print(&mt('Deleted')); } else { if ($typeflag) { @@ -3421,7 +3478,7 @@ sub parm_change_log { $r->print($value); } if ($value ne $all[$level]) { - $r->print('
'.&mt('Not active anymore').''); + $r->print('
'.&mt('Not active anymore').''); } else { $stillactive=1; } @@ -3429,18 +3486,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()); } @@ -3508,8 +3576,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',