--- loncom/interface/lonquickgrades.pm 2011/03/12 02:58:44 1.75 +++ loncom/interface/lonquickgrades.pm 2011/03/25 01:34:49 1.78 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Quick Student Grades Display # -# $Id: lonquickgrades.pm,v 1.75 2011/03/12 02:58:44 www Exp $ +# $Id: lonquickgrades.pm,v 1.78 2011/03/25 01:34:49 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -495,6 +495,8 @@ sub process_category_edits { %categories=&add_category_content($1,$cangrade,$env{'form.addcont_'.$1.'_symb'},%categories); } elsif ($cmd=~/^delcont\_(.+)\_\_\_\_\_\_(.+)$/) { %categories=&del_category_content($1,$cangrade,$2,%categories); + } elsif ($cmd=~/^newrule\_(.+)$/) { + %categories=&add_calculation_rule($1,$cangrade,':',%categories); } # Move to a new position my $moveid=$env{'form.storemove'}; @@ -607,12 +609,23 @@ ENDMOVE } $r->print(''); # Calculation -# FIXME: just placeholders + $r->print(''); if ($cangrade) { - $r->print("Calculation Edit"); - } else { - $r->print("Calculation"); + $r->print('
'.&new_calc_rule_form($id)); } + $r->print(''); + + # Total if ($cangrade) { $r->print(''. @@ -674,6 +687,70 @@ sub make_new_category { return %categories; } + +# === Calculation Rule Editing + +sub pretty_prt_rule { + my ($cangrade,$id,$code,$value)=@_; + my $cid=$id.'_'.$code; + my %lt=&Apache::lonlocal::texthash( + 'droplow' => 'Drop N lowest grade assignments', + 'drophigh' => 'Drop N highest grade assignments', + 'capabove' => 'Cap percentage above N percent', + 'capbelow' => 'Cap percentage below N percent'); + my $ret=''; + if ($cangrade) { + $ret.=' N='; + } else { + $ret.=$lt{$code}.'; N='.$value; + } + $ret.=''; + return $ret; +} + +sub new_calc_rule_form { + my ($id)=@_; + return ''.&mt('New Calculation Rule').''; +} + +# +# Add a calculation rule +# + +sub add_calculation_rule { + my ($id,$cangrade,$newcontent,%categories)=@_; + unless ($cangrade) { return %categories; } + my %newcontent=($newcontent => 1); + foreach my $current (split(/\,/,$categories{$id.'_calculations'})) { + $newcontent{$current}=1; + } + $categories{$id.'_calculations'}=join(',',sort(keys(%newcontent))); + return %categories; +} + +# +# Delete a calculation rule +# + +sub del_calculation_rule { + my ($id,$cangrade,$delcontent,%categories)=@_; + unless ($cangrade) { return %categories; } + my @newcontent=(); + foreach my $current (split(/\,/,$categories{$id.'_calculations'})) { + unless ($current=~/^\Q$delcontent\E\:/) { + push(@newcontent,$current); + } + } + $categories{$id.'_calculations'}=join(',',@newcontent); + return %categories; +} + +# === Category Editing + # # Add to category content #