[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";