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

bowersj2 lon-capa-cvs@mail.lon-capa.org
Mon, 29 Sep 2003 16:33:09 -0000


bowersj2		Mon Sep 29 12:33:09 2003 EDT

  Modified files:              
    /loncom/interface	lonhelper.pm 
  Log:
  Docs updates, new features for resources, and now, support changing 
  weights in the parameter helper.
  
  
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.47 loncom/interface/lonhelper.pm:1.48
--- loncom/interface/lonhelper.pm:1.47	Thu Sep 25 16:39:32 2003
+++ loncom/interface/lonhelper.pm	Mon Sep 29 12:33:09 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # .helper XML handler to implement the LON-CAPA helper
 #
-# $Id: lonhelper.pm,v 1.47 2003/09/25 20:39:32 albertel Exp $
+# $Id: lonhelper.pm,v 1.48 2003/09/29 16:33:09 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -926,7 +926,9 @@
 
 =pod
 
-=head1 Element: messageX<message, helper element>
+=head1 Elements
+
+=head2 Element: messageX<message, helper element>
 
 Message elements display their contents, and
 transition directly to the state in the <nextstate> attribute. Example:
@@ -1696,7 +1698,10 @@
   default, the value will be the resource ID of the object ($res->{ID}).
 
 =item * <mapurl>X<mapurl>: If the URL of a map is given here, only that map
-  will be displayed, instead of the whole course.
+  will be displayed, instead of the whole course. If the attribute
+  "evaluate" is given and is true, the contents of the mapurl will be
+  evaluated with "sub { my $helper = shift; my $state = shift;" and
+  "}", with the return value used as the mapurl.
 
 =back
 
@@ -1808,6 +1813,7 @@
 
     my $contents = Apache::lonxml::get_all_text('/mapurl',
                                                 $parser);
+    $paramHash->{EVAL_MAP_URL} = $token->[2]{'evaluate'};
     $paramHash->{MAP_URL} = $contents;
 }
 
@@ -1863,9 +1869,18 @@
     my $filterFunc = $self->{FILTER_FUNC};
     my $choiceFunc = $self->{CHOICE_FUNC};
     my $valueFunc = $self->{VALUE_FUNC};
-    my $mapUrl = $self->{MAP_URL};
     my $multichoice = $self->{'multichoice'};
 
+    # Evaluate the map url as needed
+    my $mapUrl;
+    if ($self->{EVALUATE_MAP_URL}) {
+	my $mapUrlFunc = eval('sub { my $helper = shift; my $state = shift; ' . 
+	    $self->{MAP_URL} . '}');
+	$mapUrl = &$mapUrlFunc($helper, $self);
+    } else {
+	$mapUrl = $self->{MAP_URL};
+    }
+
     # Create the composite function that renders the column on the nav map
     # have to admit any language that lets me do this can't be all bad
     #  - Jeremy (Pythonista) ;-)
@@ -1942,10 +1957,30 @@
 Student elements display a choice of students enrolled in the current
 course. Currently it is primitive; this is expected to evolve later.
 
-Student elements take three attributes: "variable", which means what
-it usually does, "multichoice", which if true allows the user
-to select multiple students, and "coursepersonnel" which if true 
-adds the course personnel to the top of the student selection.
+Student elements take the following attributes: 
+
+=over 4
+
+=item * B<variable>: 
+
+Does what it usually does: declare which helper variable to put the
+result in.
+
+=item * B<multichoice>: 
+
+If true allows the user to select multiple students. Defaults to false.
+
+=item * B<coursepersonnel>: 
+
+If true adds the course personnel to the top of the student
+selection. Defaults to false.
+
+=item * B<activeonly>:
+
+If true, only active students and course personnel will be
+shown. Defaults to false.
+
+=back
 
 =cut
 
@@ -1976,6 +2011,7 @@
     $helper->declareVar($paramHash->{'variable'});
     $paramHash->{'multichoice'} = $token->[2]{'multichoice'};
     $paramHash->{'coursepersonnel'} = $token->[2]{'coursepersonnel'};
+    $paramHash->{'sctiveonly'} = $token->[2]{'activeonly'};
     if (defined($token->[2]{'nextstate'})) {
         $paramHash->{NEXTSTATE} = $token->[2]{'nextstate'};
     }
@@ -2048,6 +2084,7 @@
     # Constants
     my $section = Apache::loncoursedata::CL_SECTION();
     my $fullname = Apache::loncoursedata::CL_FULLNAME();
+    my $status = Apache::loncoursedata::CL_STATUS();
 
     # Load up the students
     my $classlist = &Apache::loncoursedata::get_classlist();
@@ -2062,8 +2099,12 @@
 
     # username, fullname, section, type
     for (@keys) {
-	push @$choices, [$_, $classlist->{$_}->[$fullname], 
-			 $classlist->{$_}->[$section], 'Student'];
+	# Filter out inactive students if we've set "activeonly"
+	if (!$self->{'activeonly'} || $classlist->{$_}->[$status] eq
+	    'Active') {
+	    push @$choices, [$_, $classlist->{$_}->[$fullname], 
+			     $classlist->{$_}->[$section], 'Student'];
+	}
     }
 
     my $name = $self->{'coursepersonnel'} ? 'Name' : 'Student Name';
@@ -2945,15 +2986,17 @@
     my $vars = $helper->{VARS};
 
     # FIXME: Unify my designators with the standard ones
-    my %dateTypeHash = ('open_date' => "Opening Date",
-                        'due_date' => "Due Date",
-                        'answer_date' => "Answer Date",
-			'tries' => 'Number of Tries'
+    my %dateTypeHash = ('open_date' => "opening date",
+                        'due_date' => "due date",
+                        'answer_date' => "answer date",
+			'tries' => 'number of tries',
+			'weight' => 'problem weight'
 			);
     my %parmTypeHash = ('open_date' => "0_opendate",
                         'due_date' => "0_duedate",
                         'answer_date' => "0_answerdate",
-			'tries' => '0_maxtries' );
+			'tries' => '0_maxtries',
+			'weight' => '0_weight' );
     
     my $affectedResourceId = "";
     my $parm_name = $parmTypeHash{$vars->{ACTION_TYPE}};
@@ -2999,6 +3042,9 @@
     if ($vars->{ACTION_TYPE} eq 'tries') {
 	$result .= ' to <b>' . $vars->{TRIES} . '</b>';
     }
+    if ($vars->{ACTION_TYPE} eq 'weight') {
+	$result .= ' to <b>' . $vars->{WEIGHT} . '</b>';
+    }
     $result .= "</li>\n";
     if ($vars->{ACTION_TYPE} eq 'due_date' || 
         $vars->{ACTION_TYPE} eq 'answer_date') {
@@ -3019,6 +3065,9 @@
     } elsif ($vars->{ACTION_TYPE} eq 'tries') {
 	$result .= "<input type='hidden' name='pres_value' " .
 	    "value='" . $vars->{TRIES} . "' />\n";
+    } elsif ($vars->{ACTION_TYPE} eq 'weight') {
+	$result .= "<input type='hidden' name='pres_value' " .
+	    "value='" . $vars->{WEIGHT} . "' />\n";
     }
 
     $result .= $resourceString;
@@ -3049,7 +3098,7 @@
     }
 
     # Print value
-    if ($vars->{ACTION_TYPE} ne 'tries') {
+    if ($vars->{ACTION_TYPE} ne 'tries' && $vars->{ACTION_TYPE} ne 'weight') {
 	$result .= "<li>to <b>" . ctime($vars->{PARM_DATE}) . "</b> (" .
 	    Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}) 
 	    . ")</li>\n";