--- loncom/interface/lonparmset.pm 2006/07/14 17:44:11 1.321 +++ loncom/interface/lonparmset.pm 2006/10/07 20:02:16 1.339 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.321 2006/07/14 17:44:11 www Exp $ +# $Id: lonparmset.pm,v 1.339 2006/10/07 20:02:16 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -524,7 +524,7 @@ sub valout { # Values of zero are valid. if (! $value && $value ne '0') { if ($editable) { - $result = ''; + $result = '*'; } else { $result=' '; } @@ -1514,7 +1514,7 @@ sub assessparms { $message="\n

\n".&mt("Full Name").": ". $name{'firstname'}.' '.$name{'middlename'}.' ' .$name{'lastname'}.' '.$name{'generation'}. - "
\n".&mt('ID').": ".$name{'id'}.'

'; + "
\n".&mt('ID').": ".$name{'id'}.'

'; } @usersgroups = &Apache::lonnet::get_users_groups( $udom,$uname,$env{'request.course.id'}); @@ -1562,7 +1562,7 @@ sub assessparms { foreach ('tolerance','date_default','date_start','date_end', 'date_interval','int','float','string') { $r->print(''); + $env{'form.recent_'.$_}.'" name="recent_'.$_.'" />'); } if (!$pssymb) { @@ -1639,7 +1639,7 @@ sub assessparms { ); $r->print(<$lt{'pie'} -$lt{'csv'}
($csuname $lt{'at'} $csudom) +$lt{'csv'}
($csuname $lt{'at'} $csudom) $lt{'ic'}$lt{'rl'} $lt{'ic'} @@ -1740,8 +1740,8 @@ ENDTABLEHEADFOUR "$title"); + "', 'metadatafile', '450', '500', 'no', 'yes');\"". + " target=\"_self\">$title"); if ($thistitle) { $r->print(' ('.$thistitle.')'); @@ -2005,7 +2005,7 @@ sub crsenv { ('environment', {'top level map backup '.$bkuptime => $tmp[1] }, $dom,$crs). - '
'; + '
'; } # # Deal with modified default spreadsheets @@ -2116,7 +2116,7 @@ sub crsenv { 'default_xml_style' => ''.&mt('Default XML Style File').' '. '
$SelectStyleFile
", + ",'sty')\">$SelectStyleFile
", 'question.email' => ''.&mt('Feedback Addresses for Resource Content Question'). '
(user:domain,'. 'user:domain(section;section;...;*;...),...)', @@ -2310,7 +2310,7 @@ 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(); @@ -2432,7 +2432,7 @@ sub storedata { } &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { - push (@deldata,$thiskey); + push (@deldata,$thiskey,$thiskey.'.type'); } } elsif ($cmd eq 'datepointer') { my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_}); @@ -2589,15 +2589,6 @@ sub listdata { $oldpart=$part; } # -# Preset defaults? -# - my ($hour,$min,$sec,$val)=('','','',''); - unless ($$resourcedata{$thiskey}) { - my ($parmname)=($thiskey=~/\.(\w+)$/); - ($hour,$min,$sec,$val)=&preset_defaults($parmname); - } - -# # Ready to print # $r->print(&tablestart(). @@ -2613,7 +2604,7 @@ sub listdata { &Apache::lonhtmlcommon::date_setter('parmform', $jskey, $$resourcedata{$thiskey}, - '',1,'','',$hour,$min,$sec). + '',1,'',''). ''. &date_sanity_info($$resourcedata{$thiskey}) ); @@ -2621,8 +2612,6 @@ sub listdata { my $showval; if (defined($$resourcedata{$thiskey})) { $showval=$$resourcedata{$thiskey}; - } else { - $showval=$val; } $r->print('

'. + &mt('These parameters refer to resources that do not exist.'). + '

'. + ''.'
'. + '
'); + $r->print(&Apache::loncommon::start_data_table(). + ''. + ''.&mt('Delete').''. + ''.&mt('Parameter').''. + ''); + foreach my $thiskey (sort(keys(%{$resourcedata}))) { + next if (!exists($resourcedata->{$thiskey.'.type'}) + && $thiskey=~/\.type$/); + my %data = &parse_key($thiskey); + if (exists($data{'realm_exists'}) + && !$data{'realm_exists'}) { + $r->print(&Apache::loncommon::start_data_table_row(). + ''. + '' ); + + $r->print(''); + $r->print(&mt('Parameter: "[_1]" with value: "[_2]"', + &standard_parameter_names($data{'parameter_name'}), + $resourcedata->{$thiskey})); + $r->print('
'); + if ($data{'scope_type'} eq 'all') { + $r->print(&mt('All users')); + } elsif ($data{'scope_type'} eq 'user') { + $r->print(&mt('User: [_1]',join(':',@{$data{'scope'}}))); + } elsif ($data{'scope_type'} eq 'section') { + $r->print(&mt('Section: [_1]',$data{'scope'})); + } elsif ($data{'scope_type'} eq 'group') { + $r->print(&mt('Group: [_1]',$data{'scope'})); + } + $r->print('
'); + if ($data{'realm_type'} eq 'all') { + $r->print(&mt('All Resources')); + } elsif ($data{'realm_type'} eq 'folder') { + $r->print(&mt('Folder: [_1]'),$data{'realm'}); + } elsif ($data{'realm_type'} eq 'symb') { + my ($map,$resid,$url) = + &Apache::lonnet::decode_symb($data{'realm'}); + $r->print(&mt('Resource: [_1]
   with ID: [_2]
   in folder [_3]', + $url,$resid,$map)); + } + $r->print(&mt('Part: [_1]',$data{'parameter_part'})); + $r->print(''); + + } + } + $r->print(&Apache::loncommon::end_data_table().'

'. + ''. + '

'. + &Apache::loncommon::end_page()); +} + +sub parse_key { + my ($key) = @_; + my %data; + my ($middle,$part,$name)= + ($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); + $data{'scope_type'} = 'all'; + if ($middle=~/^\[(.*)\]/) { + $data{'scope'} = $1; + if ($data{'scope'}=~/^useropt\:(\w+)\:(\w+)/) { + $data{'scope_type'} = 'user'; + $data{'scope'} = [$1,$2]; + } else { + #FIXME check for group scope + $data{'scope_type'} = 'section'; + } + $middle=~s/^\[(.*)\]//; + } + $middle=~s/\.+$//; + $middle=~s/^\.+//; + $data{'realm_type'}='all'; + if ($middle=~/^(.+)\_\_\_\(all\)$/) { + $data{'realm'} = $1; + $data{'realm_type'} = 'folder'; + $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); + ($data{'realm_exists'}) = &Apache::lonnet::is_on_map($data{'realm'}); + &Apache::lonnet::logthis($1." siad ". $data{'realm_exists'} ); + } elsif ($middle) { + $data{'realm'} = $middle; + $data{'realm_type'} = 'symb'; + $data{'realm_title'} = &Apache::lonnet::gettitle($data{'realm'}); + my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'}); + $data{'realm_exists'} = &Apache::lonnet::symbverify($data{'realm'},$url); + } + + $data{'parameter_part'} = $part; + $data{'parameter_name'} = $name; + + return %data; +} + ################################################## ################################################## - + =pod =item check_cloners @@ -3008,10 +3113,12 @@ ENDMAINFORMHEAD my $vgr = &Apache::lonnet::allowed('vgr',$env{'request.course.id'}); my @menu = - ( - { text => 'Set Course Environment Parameters', + ( { divider=>'Settings for Your Course', + }, + { text => 'Set Course Environment', action => 'crsenv', permission => $parm_permission, + help => 'Course_Environment', }, { text => 'Set Portfolio Metadata', action => 'setrestrictmeta', @@ -3021,29 +3128,34 @@ 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, + help => 'Parameter_Helper', }, - { 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, + help => 'Parameter_Overview', }, { text => 'Set/Modify Resource Parameters - Table Mode', action => 'settable', permission => $parm_permission, - help => 'Cascading_Parameters', + help => 'Table_Mode', }, - { 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, - }, + help => 'Parameter_Overview', + }, { text => 'Parameter Change Log and Course Blog Posting/User Notification', action => 'parameterchangelog', permission => $parm_permission, @@ -3052,7 +3164,7 @@ 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'}); @@ -3076,36 +3188,86 @@ ENDMAINFORMHEAD } ### Set portfolio metadata sub output_row { - my ($r, $field_name, $field_text) = @_; + my ($r, $field_name, $field_text, $added_flag) = @_; my $output; my $options=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'}; my $values=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.values'}; - unless (defined($options)) { + if (!defined($options)) { $options = 'active,stuadd'; $values = ''; } - $output.=''.$field_text.':'; - $output.='
'; + if (!($options =~ /deleted/)) { + $output.=''.$field_text.':'; + $output.='
'; - my @options= ( ['active', 'Show to student'], + my @options= ( ['active', 'Show to student'], ['onlyone','Student may select only one choice'], ['stuadd', 'Student may type choices']); - foreach my $opt (@options) { - my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; - $output.=(' 'x5).'
'; + if ($added_flag) { + push @options,['deleted', 'Delete Metadata Field']; + } + foreach my $opt (@options) { + my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; + $output.=(' 'x5).'
'; + } } return ($output); } - +sub addmetafield { + my ($r)=@_; + $r->print(&Apache::loncommon::start_page('Add Metadata Field')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field')); + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + if (exists($env{'form.undelete'})) { + my @meta_fields = &Apache::loncommon::get_env_multiple('form.undelete'); + foreach my $meta_field(@meta_fields) { + my $options = $env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.options'}; + $options =~ s/deleted//; + $options =~ s/,,/,/; + my $put_result = &Apache::lonnet::put('environment', + {'metadata.'.$meta_field.'.options'=>$options},$dom,$crs); + + $r->print('Undeleted Metadata Field '.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}." with result ".$put_result.'
'); + } + $r->print('
'); + $r->print(''); + $r->print(''); + } elsif (exists($env{'form.fieldname'})) { + my $meta_field = $env{'form.fieldname'}; + my $display_field = $env{'form.fieldname'}; + $meta_field =~ s/\W/_/g; + $meta_field =~ tr/A-Z/a-z/; + my $put_result = &Apache::lonnet::put('environment', + {'metadata.'.$meta_field.'.values'=>"", + 'metadata.'.$meta_field.'.added'=>"$display_field", + 'metadata.'.$meta_field.'.options'=>""},$dom,$crs); + $r->print('Added new Metadata Field '.$env{'form.fieldname'}." with result ".$put_result); + } else { + my $fields = &get_deleted_meta_fieldnames(); + if ($fields) { + $r->print('You may undelete previously deleted fields.
Check those you wish to undelete and click Undelete.
'); + $r->print(''); + foreach my $key(keys(%$fields)) { + $r->print(''.$$fields{$key}.'
print(''); + $r->print('
'); + } + $r->print('
Or you may enter a new metadata field name.
print('
'); + $r->print(''); + $r->print('
'); + } +} sub setrestrictmeta { my ($r)=@_; my $next_meta; my $output; my $item_num; my $put_result; - $r->print(&Apache::loncommon::start_page('Restrict Metadata')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -3129,6 +3291,10 @@ sub setrestrictmeta { if ($env{'form.'.$meta_field.'_active'}) { $options.='active,'; } + if ($env{'form.'.$meta_field.'_deleted'}) { + $options.='deleted,'; + } + my $name = $save_field; $put_result = &Apache::lonnet::put('environment', {'metadata.'.$meta_field.'.options'=>$options, @@ -3140,25 +3306,59 @@ sub setrestrictmeta { } &Apache::lonnet::coursedescription($env{'request.course.id'}, {'freshen_cache' => 1}); + # Get the default metadata fields my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); + # Now get possible added metadata fields + my $added_metadata_fields = &get_added_meta_fieldnames(\%metadata_fields); foreach my $field (sort(keys(%metadata_fields))) { - &Apache::lonnet::logthis ($field); if ($field ne 'courserestricted') { $output.= &output_row($r, $field, $metadata_fields{$field}); } } + my $added_flag = 1; + foreach my $field (sort(keys(%$added_metadata_fields))) { + $output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag); + } $r->print(<

$output +
+

+
ENDenv $r->print(&Apache::loncommon::end_page()); return 'ok'; } ################################################## - +sub get_added_meta_fieldnames { + my %fields; + my ($default_fields) = @_; + foreach my $key(%env) { + if ($key =~ m/\.metadata\.(.+)\.added$/) { + my $field_name = $1; + my ($display_field_name) = $env{$key}; + $fields{$field_name} = $display_field_name; + } + } + return \%fields; +} +sub get_deleted_meta_fieldnames { + my %fields; + my ($default_fields) = @_; + foreach my $key(%env) { + if ($key =~ m/\.metadata\.(.+)\.added$/) { + my $field_name = $1; + if ($env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'} =~ m/deleted/) { + my ($display_field_name) = $env{$key}; + $fields{$field_name} = $display_field_name; + } + } + } + return \%fields; +} sub defaultsetter { my ($r) = @_; @@ -3320,14 +3520,16 @@ ENDYESNO } sub components { - my ($key,$uname,$udom,$exeuser,$exedomain)=@_; - my $typeflag=0; - if ($key=~/\.type$/) { + my ($key,$uname,$udom,$exeuser,$exedomain,$typeflag)=@_; + + if ($typeflag) { $key=~s/\.type$//; - $typeflag=1; } + + my ($middle,$part,$name)= + ($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); my $issection; - my ($middle,$part,$name)=($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); + my $section=&mt('All Students'); if ($middle=~/^\[(.*)\]/) { $issection=$1; @@ -3351,31 +3553,33 @@ sub components { $realmdescription=&mt('resource').' '.&Apache::lonnet::gettitle($middle); } my $what=$part.'.'.$name; - return ($realm,$section,$name,$part,$typeflag, + return ($realm,$section,$name,$part, $what,$middle,$uname,$udom,$issection,$realmdescription); } +my %standard_parms; +sub load_parameter_names { + open(my $config,"<$Apache::lonnet::perlvar{'lonTabDir'}/packages.tab"); + while (my $configline=<$config>) { + if ($configline !~ /\S/ || $configline=~/^\#/) { next; } + chomp($configline); + my ($short,$plain)=split(/:/,$configline); + my (undef,$name,$type)=split(/\&/,$short,3); + if ($type eq 'display') { + $standard_parms{$name} = $plain; + } + } + close($config); + $standard_parms{'int_pos'} = 'Positive Integer'; + $standard_parms{'int_zero_pos'} = 'Positive Integer or Zero'; + %standard_parms=&Apache::lonlocal::texthash(%standard_parms); +} + 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', - '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', - 'numbubbles' => 'Number of Bubbles in Exam Mode'); + if (!%standard_parms) { + &load_parameter_names(); + } if ($standard_parms{$name}) { return $standard_parms{$name}; } else { @@ -3390,17 +3594,17 @@ sub standard_parameter_names { sub parm_change_log { my ($r)=@_; - &startpage($r); + $r->print(&Apache::loncommon::start_page('Parameter Change Log')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log')); + 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('
- '); + $r->print(''); my %saveable_parameters = ('show' => 'scalar',); &Apache::loncommon::store_course_settings('parameter_log', @@ -3414,7 +3618,9 @@ sub parm_change_log { (&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'}); @@ -3425,7 +3631,7 @@ sub parm_change_log { 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 $count = 0; my $time = &Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); my $plainname = @@ -3444,68 +3650,79 @@ sub parm_change_log { $parmlog{$id}{'exe_udom'}); } my $row_start=&Apache::loncommon::start_data_table_row(); - $r->print($row_start.''.$time.' - '.$about_me_link. - '
'.$parmlog{$id}{'exe_uname'}. - ':'.$parmlog{$id}{'exe_udom'}.''. - $send_msg_link.''); + $r->print($row_start); my $makenewrow=0; my %istype=(); + my $output; foreach my $changed (reverse(sort(@changes))) { - 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($row_start); } else { $makenewrow=1; } - $r->print(''.$realm.''.$section.''. + my $value=$parmlog{$id}{'logentry'}{$changed}; + my $typeflag = ($changed =~/\.type$/ && + !exists($parmlog{$id}{'logentry'}{$changed.'.type'})); + my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= + &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); + if ($typeflag) { + $istype{$parmname}=$value; + if (!$env{'form.includetypes'}) { next; } + } + $count++; + if ($makenewrow) { + $output .= $row_start; + } else { + $makenewrow=1; + } + $output .=''.$realm.''.$section.''. &standard_parameter_names($parmname).''. - ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''); + ($part?&mt('Part: [_1]',$part):&mt('All Parts')).''; my $stillactive=0; - if ($parmlog{$id}{'deleteflag'}) { - $r->print(&mt('Deleted')); + if ($parmlog{$id}{'delflag'}) { + $output .= &mt('Deleted'); } else { if ($typeflag) { - $r->print(&mt('Type: [_1]',&standard_parameter_names($value))); + $output .= &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)); + $output .= &Apache::lonlocal::locallocaltime($value); } else { - $r->print($value); + $output .= $value; } if ($value ne $all[$level]) { - $r->print('
'.&mt('Not active anymore').''); + $output .= '
'.&mt('Not active anymore').''; } else { $stillactive=1; } } } - $r->print(''); + $output .= ''; 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(''. - &Apache::loncommon::messagewrapper('Notify User',$uname,$udom,$title,$description). - ''); + $output .= + &Apache::loncommon::messagewrapper('Notify User', + $uname,$udom,$title, + $description); } else { - $r->print(''. - &Apache::lonrss::course_blog_link($id,$title,$description). - ''); + $output .= + &Apache::lonrss::course_blog_link($id,$title, + $description); } - } else { - $r->print(' '); } - $r->print(&Apache::loncommon::end_data_table_row()); + $output .= ''.&Apache::loncommon::end_data_table_row(); } + $r->print(''.$time.' + '.$about_me_link. + '
'.$parmlog{$id}{'exe_uname'}. + ':'.$parmlog{$id}{'exe_udom'}.''. + $send_msg_link.''.$output); + $shown++; if (!($env{'form.show'} eq &mt('all') || $shown<=$env{'form.show'})) { last; } } $r->print(&Apache::loncommon::end_data_table()); - $r->print(''); $r->print(&Apache::loncommon::end_page()); } @@ -3544,7 +3761,8 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset", text=>"Parameter Manager", faq=>10, - bug=>'Instructor Interface'}); + bug=>'Instructor Interface', + help => 'Parameter_Manager'}); # ----------------------------------------------------- Needs to be in a course my $parm_permission = @@ -3569,6 +3787,8 @@ sub handler { # the table mode if ((($env{'form.command'} eq 'set') && ($env{'form.url'}) && (!$env{'form.dis'})) || ($env{'form.symb'})) { + &Apache::lonhtmlcommon::add_breadcrumb({help=>'Problem_Parameters', + text=>"Problem Parameters"}); &assessparms($r); } elsif (! exists($env{'form.action'})) { @@ -3583,6 +3803,10 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', text=>"Overview Mode"}); &overview($r); + } elsif ($env{'form.action'} eq 'addmetadata' && $parm_permission) { + &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', + text=>"Add Metadata Field"}); + &addmetafield($r); } elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta', text=>"Restrict Metadata"}); @@ -3604,6 +3828,10 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', text=>"Parameter Change Log"}); &parm_change_log($r); + } elsif ($env{'form.action'} eq 'cleanparameters' && $parm_permission) { + &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters', + text=>"Clean Parameters"}); + &clean_parameters($r); } } else { # ----------------------------- Not in a course, or not allowed to modify parms 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.