--- loncom/interface/lonparmset.pm 2006/09/28 23:58:53 1.338 +++ loncom/interface/lonparmset.pm 2006/11/29 22:02:47 1.349 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.338 2006/09/28 23:58:53 banghart Exp $ +# $Id: lonparmset.pm,v 1.349 2006/11/29 22:02:47 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2193,7 +2193,7 @@ sub crsenv { ' 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', + => 'Print header format; substitutions: %n student name %c course id %a assignment note, numbers after the % limit the field size', 'anonymous_quiz' => ''.&mt('Anonymous quiz/exam').'
'. ' ('.&mt('yes').' '.&mt('to avoid print students names').' )', @@ -3189,6 +3189,7 @@ ENDMAINFORMHEAD ### Set portfolio metadata sub output_row { my ($r, $field_name, $field_text, $added_flag) = @_; + my $row_class; 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'}; @@ -3197,9 +3198,11 @@ sub output_row { $values = ''; } if (!($options =~ /deleted/)) { - $output.=''.$field_text.':'; - $output.='
'; - + $output = &Apache::loncommon::start_data_table_row(); + $output .= ''.$field_text.':'; + # $output .= ''.$field_text.':'; + $output .= ''; + $output .= &Apache::loncommon::end_data_table_row(); my @options= ( ['active', 'Show to student'], ['onlyone','Student may select only one choice'], ['stuadd', 'Student may type choices']); @@ -3208,20 +3211,119 @@ sub output_row { } foreach my $opt (@options) { my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; - $output.=(' 'x5).' '; + $output .= &Apache::loncommon::end_data_table_row(); } + } return ($output); } +sub order_meta_fields { + my ($r)=@_; + my $idx = 1; + my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + $r->print(&Apache::loncommon::start_page('Order Metadata Fields')); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"/adm/parmset?action=setrestrictmeta", + text=>"Restrict Metadata"}, + {text=>"Order Metadata"}); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata')); + if ($env{'form.storeorder'}) { + my $newpos = $env{'form.newpos'} - 1; + my $currentpos = $env{'form.currentpos'} - 1; + my @neworder = (); + my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + my $i; + if ($newpos > $currentpos) { + # moving stuff up + for ($i=0;$i<$currentpos;$i++) { + $neworder[$i]=$oldorder[$i]; + } + for ($i=$currentpos;$i<$newpos;$i++) { + $neworder[$i]=$oldorder[$i+1]; + } + $neworder[$newpos]=$oldorder[$currentpos]; + for ($i=$newpos+1;$i<=$#oldorder;$i++) { + $neworder[$i]=$oldorder[$i]; + } + } else { + # moving stuff down + for ($i=0;$i<$newpos;$i++) { + $neworder[$i]=$oldorder[$i]; + } + $neworder[$newpos]=$oldorder[$currentpos]; + for ($i=$newpos+1;$i<$currentpos+1;$i++) { + $neworder[$i]=$oldorder[$i-1]; + } + for ($i=$currentpos+1;$i<=$#oldorder;$i++) { + $neworder[$i]=$oldorder[$i]; + } + } + my $ordered_fields = join ",", @neworder; + my $put_result = &Apache::lonnet::put('environment', + {'metadata.addedorder'=>$ordered_fields},$dom,$crs); + &Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields); + } + my $fields = &get_added_meta_fieldnames(); + my $ordered_fields; + my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + if (!@fields_in_order) { + # no order found, pick sorted order then create metadata.addedorder key. + foreach my $key (sort keys %$fields) { + push @fields_in_order, $key; + $ordered_fields = join ",", @fields_in_order; + } + my $put_result = &Apache::lonnet::put('environment', + {'metadata.addedorder'=>$ordered_fields},$dom,$crs); + } + $r->print(''); + my $num_fields = scalar(@fields_in_order); + foreach my $key (@fields_in_order) { + $r->print(''); + $idx ++; + } + $r->print('
'); + $r->print('
'); + $r->print('
'); + $r->print(''); + $r->print(''); + $r->print(''); + $r->print($$fields{$key}.'
'); + return 'ok'; +} 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.fieldname'})) { + 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; @@ -3232,7 +3334,17 @@ sub addmetafield { 'metadata.'.$meta_field.'.options'=>""},$dom,$crs); $r->print('Added new Metadata Field '.$env{'form.fieldname'}." with result ".$put_result); } else { - $r->print('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('
'); @@ -3286,23 +3398,31 @@ sub setrestrictmeta { my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio'); # Now get possible added metadata fields my $added_metadata_fields = &get_added_meta_fieldnames(\%metadata_fields); + my $row_alt = 1; + $output .= &Apache::loncommon::start_data_table(); foreach my $field (sort(keys(%metadata_fields))) { if ($field ne 'courserestricted') { + $row_alt = $row_alt ? 0 : 1; $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); + $row_alt = $row_alt ? 0 : 1; + $output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag, $row_alt); } + $output .= &Apache::loncommon::end_data_table(); $r->print(< -

$output - +
-

- + + +
+
+
+
ENDenv $r->print(&Apache::loncommon::end_page()); @@ -3311,7 +3431,6 @@ ENDenv ################################################## sub get_added_meta_fieldnames { my %fields; - my ($default_fields) = @_; foreach my $key(%env) { if ($key =~ m/\.metadata\.(.+)\.added$/) { my $field_name = $1; @@ -3321,6 +3440,20 @@ sub get_added_meta_fieldnames { } 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) = @_; @@ -3573,13 +3706,7 @@ sub parm_change_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).''. + $r->print(&Apache::loncommon::display_filter(). ''. ''); @@ -3591,6 +3718,16 @@ sub parm_change_log { &mt('Parameter').''.&mt('Part').''.&mt('New Value').''.&mt('Announce').''. &Apache::loncommon::end_data_table_header_row()); my $shown=0; + my $folder=''; + if ($env{'form.displayfilter'} eq 'currentfolder') { + my $last=''; + if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', + &GDBM_READER(),0640)) { + $last=$hash{'last_known'}; + untie(%hash); + } + if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); } + } foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) { my @changes=keys(%{$parmlog{$id}{'logentry'}}); my $count = 0; @@ -3612,7 +3749,6 @@ sub parm_change_log { $parmlog{$id}{'exe_udom'}); } my $row_start=&Apache::loncommon::start_data_table_row(); - $r->print($row_start); my $makenewrow=0; my %istype=(); my $output; @@ -3622,6 +3758,11 @@ sub parm_change_log { !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 ($env{'form.displayfilter'} eq 'currentfolder') { + if ($folder) { + if ($middle!~/^\Q$folder\E/) { next; } + } + } if ($typeflag) { $istype{$parmname}=$value; if (!$env{'form.includetypes'}) { next; } @@ -3674,13 +3815,20 @@ sub parm_change_log { } $output .= ''.&Apache::loncommon::end_data_table_row(); } - $r->print(''.$time.' + if ($env{'form.displayfilter'} eq 'containing') { + my $wholeentry=$about_me_link.':'. + $parmlog{$id}{'exe_uname'}.':'.$parmlog{$id}{'exe_udom'}.':'. + $output; + if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } + } + if ($count) { + $r->print($row_start.''.$time.' '.$about_me_link. '
'.$parmlog{$id}{'exe_uname'}. ':'.$parmlog{$id}{'exe_udom'}.''. $send_msg_link.''.$output); - - $shown++; + $shown++; + } if (!($env{'form.show'} eq &mt('all') || $shown<=$env{'form.show'})) { last; } } @@ -3769,6 +3917,10 @@ sub handler { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', text=>"Add Metadata Field"}); &addmetafield($r); + } elsif ($env{'form.action'} eq 'ordermetadata' && $parm_permission) { + &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', + text=>"Add Metadata Field"}); + &order_meta_fields($r); } elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta', text=>"Restrict Metadata"});