--- loncom/interface/lonparmset.pm 2006/09/28 23:58:53 1.338 +++ loncom/interface/lonparmset.pm 2006/10/13 17:40:12 1.342 @@ -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.342 2006/10/13 17:40:12 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3215,13 +3215,103 @@ sub output_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')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata Fields')); + 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; + &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 +3322,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('
'); @@ -3304,6 +3404,10 @@ sub setrestrictmeta {
+
+
+ +
ENDenv $r->print(&Apache::loncommon::end_page()); return 'ok'; @@ -3311,7 +3415,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 +3424,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) = @_; @@ -3769,6 +3886,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"});