--- loncom/interface/lonparmset.pm 2006/10/07 20:02:16 1.339 +++ loncom/interface/lonparmset.pm 2006/10/13 00:20:19 1.340 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.339 2006/10/07 20:02:16 banghart Exp $ +# $Id: lonparmset.pm,v 1.340 2006/10/13 00:20:19 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3215,6 +3215,90 @@ 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; + my $put_result = &Apache::lonnet::put('environment', + {'metadata.addedorder'=>$ordered_fields},$dom,$crs); + + + + + + $r->print($env{'form.currentpos'}.' becomes '.$env{'form.newpos'}); + } + my $fields = &get_added_meta_fieldnames(); + 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; + my $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')); @@ -3328,6 +3412,10 @@ sub setrestrictmeta {
+
+
+ +
ENDenv $r->print(&Apache::loncommon::end_page()); return 'ok'; @@ -3335,7 +3423,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; @@ -3807,6 +3894,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"});