[LON-CAPA-cvs] cvs: loncom /interface londocs.pm lonquickgrades.pm

www www@source.lon-capa.org
Sun, 30 Jan 2011 01:21:30 -0000


This is a MIME encoded message

--www1296350490
Content-Type: text/plain

www		Sun Jan 30 01:21:30 2011 EDT

  Modified files:              
    /loncom/interface	londocs.pm lonquickgrades.pm 
  Log:
  Saving my work: category grading
  
  
--www1296350490
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20110130012130.txt"

Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.451 loncom/interface/londocs.pm:1.452
--- loncom/interface/londocs.pm:1.451	Fri Jan 21 01:30:07 2011
+++ loncom/interface/londocs.pm	Sun Jan 30 01:21:29 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.451 2011/01/21 01:30:07 www Exp $
+# $Id: londocs.pm,v 1.452 2011/01/30 01:21:29 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1150,6 +1150,7 @@
     &Apache::loncommon::restore_course_settings('docs_log',
                                                 \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }
+# FIXME: internationalization seems wrong here
     my %lt=('hiddenresource' => 'Resources hidden',
 	    'encrypturl'     => 'URL hidden',
 	    'randompick'     => 'Randomly pick',
@@ -1238,6 +1239,7 @@
 	    $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
 	    foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
 		if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
+# FIXME: internationalization seems wrong here
 		    $r->print('<li>'.
 			      &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
 				  $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
Index: loncom/interface/lonquickgrades.pm
diff -u loncom/interface/lonquickgrades.pm:1.64 loncom/interface/lonquickgrades.pm:1.65
--- loncom/interface/lonquickgrades.pm:1.64	Fri Jan 21 16:28:32 2011
+++ loncom/interface/lonquickgrades.pm	Sun Jan 30 01:21:29 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Quick Student Grades Display
 #
-# $Id: lonquickgrades.pm,v 1.64 2011/01/21 16:28:32 www Exp $
+# $Id: lonquickgrades.pm,v 1.65 2011/01/30 01:21:29 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -399,7 +399,11 @@
 }
 
 #
-# Outputting category-based grades.
+# === Outputting category-based grades.
+#
+# $category{'order'}: output order of categories by id
+# $category{'all'}: complete list of all categories 
+# $category{$id.'_name'}: display-name of category
 #
 
 sub outputCategories {
@@ -413,28 +417,220 @@
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my %categories=();
+# Loading old categories
+    %categories=&Apache::lonnet::dump('grading_categories',$cdom,$cnum);
 # Storing
-    if (($cangrade) && ($env{'form.storechanges'})) {
-
+    if (($cangrade) && (($env{'form.storechanges'}) || ($env{'form.storemove'} ne ''))) {
+# Process the changes
+        %categories=&process_category_edits($r,$cangrade,%categories);
 # Actually store
         &Apache::lonnet::put('grading_categories',\%categories,$cdom,$cnum);
-    } else {
-# Loading
-        %categories=&Apache::lonnet::dump('grading_categories',$cdom,$cnum);
     }
-# categories loaded now
+# new categories loaded now
 # Form only generated if user can change the grading categories
-   if ($cangrade) {
-      $r->print('<form method="post">');
-   }
+    if ($cangrade) {
+        $r->print('<form method="post">');
+    }
+#
+    &output_category_table($r,$cangrade,$navmap,%categories);
+#
+    if ($cangrade) {
+        $r->print('<input type="hidden" name="storemove" value="" />'.
+                  '<input type="submit" name="storechanges" value="'.&mt("Save changes to grading categories").'" /></form>');
+    }
+}
+
+#
+# Process editing commands, update category hash
+#
+
+sub process_category_edits {
+    my ($r,$cangrade,%categories)=@_;
+    unless ($cangrade) { return %categories; }
 #
 # Business logic here
 #
-   if ($cangrade) {
-      $r->print('<input type="submit" name="storechanges" value="'.&mt("Save changes to grading categories").'" /></form>');
-   }
+    return %categories;
+}
+
+#
+# Output the table
+#
+
+sub output_category_table {
+    my ($r,$cangrade,$navmaps,%categories)=@_;
+    my $sum=0;
+    $r->print(&Apache::loncommon::start_data_table());
+#
+    &output_category_table_header($r,$cangrade);
+#
+    my @order=split(/\,/,$categories{'order'});
+#
+# FIXME: Debug only
+    @order=('3131_4123_42124','4124_34231_3412');
+#
+    my $maxpos=$#order;
+    for (my $i=0;$i<=$maxpos;$i++) {
+        my ($value,$weight)=&output_and_calc_category($r,$cangrade,$navmaps,$order[$i],$i,$maxpos,%categories);
+    }
+#
+    &bottom_line_category($r,$cangrade);
+#
+    $r->print(&Apache::loncommon::end_data_table());
+    return $sum;
+}
+
+sub output_category_table_header {
+    my ($r,$cangrade)=@_;
+    $r->print(&Apache::loncommon::start_data_table_header_row());
+    if ($cangrade) {
+        $r->print('<th colspan="2">'.&mt("Move").'</th><th>'.&mt('Action').'</th>');
+    }
+    $r->print('<th>'.&mt('Category').'</th>'.
+              '<th>'.&mt('Contents').'</th>'.
+              '<th>'.&mt('Calculation').'</th>'.
+              '<th>'.&mt('Weight').'</th>'.
+              '<th>'.&mt('Percent Overall').'</th>');
+    $r->print(&Apache::loncommon::end_data_table_header_row());
+}
+
+
+#
+# Output one category to table
+#
+
+sub output_and_calc_category {
+    my ($r,$cangrade,$navmaps,$id,$currentpos,$maxpos,%categories)=@_;
+    my $value=0;
+    my $weight=0;
+    my $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
+    my %lt=&Apache::lonlocal::texthash(
+           'up' => 'Move Up',
+           'dw' => 'Move Down');
+    $r->print("\n".&Apache::loncommon::start_data_table_row());
+
+    if ($cangrade) {
+        $r->print(<<ENDMOVE);
+<td>
+<div class="LC_docs_entry_move">
+  <a href='/adm/quickgrades?cmd=up_$id&storechanges=1'>
+    <img src="${iconpath}move_up.gif" alt='$lt{'up'}' class="LC_icon" />
+  </a>
+</div>
+<div class="LC_docs_entry_move">
+  <a href='/adm/quickgrades?cmd=down_$id&storechanges=1'>
+    <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' class="LC_icon" />
+  </a>
+</div>
+</td>
+ENDMOVE
+        $r->print("\n<td>\n<select name='newpos_$id' onchange='this.form.storemove.value=\"$id\";this.form.submit()'>");
+        for (my $i=0;$i<=$maxpos;$i++) {
+            if ($i==$currentpos) {
+                $r->print('<option value="" selected="selected">('.$i.')</option>');
+            } else {
+                $r->print('<option value="'.$i.'">'.$i.'</option>');
+            }
+        }
+        $r->print("\n</select>\n</td>\n");
+
+    }
+    $r->print(&Apache::loncommon::end_data_table_row()."\n");
+    return ($value,$weight);
+}
+
+#
+# Bottom line with grades
+#
+
+sub bottom_line_category {
+    my ($r,$cangrade)=@_;
+}
+
+#
+# Make one new category
+#
+
+sub make_new_category {
+    my ($r,$cangrade,$ordernum,%categories)=@_;
+    unless ($cangrade) { return %categories; }
+# Generate new ID
+    my $id=time.'_'.$$.'_'.rand(10000);
+# Add new ID to list of all IDs ever created in this course
+    $categories{'all'}.=','.$id;
+    $categories{'all'}=~s/^\,//;
+# Add new ID to ordered list of displayed and evaluated categories
+    $categories{'order'}.=','.$id;
+    $categories{'order'}=~s/^\,//;
+# Move it into desired space
+    if (defined($ordernum)) {
+        %categories=&move_category($id,$cangrade,$ordernum,%categories);
+    }
+    return %categories;
 }
 
+#
+# Move a category to a desired position n the display order
+#
+
+sub move_category {
+    my ($id,$cangrade,$ordernum,%categories)=@_;
+    unless ($cangrade) { return %categories; }
+    my @order=split(/\,/,$categories{'order'});
+# Where is the index currently?
+    my $currentpos=&current_pos_category($id,%categories);
+    if (defined($currentpos)) {
+        if ($currentpos<$ordernum) {
+# This is moving to a higher index
+# ....X1234....
+# ....1234X....
+            for (my $i=$currentpos;$i<$ordernum;$i++) {
+                $order[$i]=$order[$i+1];
+            }
+            $order[$ordernum]=$id;
+        }
+        if ($currentpos>$ordernum) {
+# This is moving to a lower index
+# ....1234X....
+# ....X1234....
+            for (my $i=$currentpos;$i>$ordernum;$i--) {
+                $order[$i]=$order[$i-1];
+            }
+            $order[$ordernum]=$id;
+        }
+    }
+    $categories{'order'}=join(',',@order);
+    return %categories;
+}
+
+#
+#  Find current postion of a category in the order
+#
+
+sub current_pos_category {
+    my ($id,%categories)=@_;
+    my @order=split(/\,/,$categories{'order'});
+    for (my $i=0;$i<=$#order;$i++) {
+        if ($order[$i] eq $id) { return $i; }
+    }
+# not found
+    return undef;
+}
+
+#
+# Set name of a category
+#
+sub set_category_name {
+    my ($canedit,$id,$name,%categories)=@_;
+    unless ($canedit) { return %categories; }
+    $categories{$id.'_name'}=$name;
+    return %categories;
+}
+
+#
+# === end category-related
+#
+#
 # Pass this two refs to arrays for the start and end color, and a number
 # from 0 to 1 for how much of the latter you want to mix in. It will
 # return a string ready to show ("#FFC309");

--www1296350490--