--- loncom/interface/lonhelper.pm 2006/04/24 23:05:35 1.137
+++ loncom/interface/lonhelper.pm 2006/05/15 22:01:12 1.149
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# .helper XML handler to implement the LON-CAPA helper
#
-# $Id: lonhelper.pm,v 1.137 2006/04/24 23:05:35 albertel Exp $
+# $Id: lonhelper.pm,v 1.149 2006/05/15 22:01:12 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -183,6 +183,7 @@ use Apache::File;
use Apache::lonxml;
use Apache::lonlocal;
use Apache::lonnet;
+use Apache::lonselstudent;
# Register all the tags with the helper, so the helper can
# push and pop them
@@ -1602,7 +1603,7 @@ sub render {
}
}
- if (!defined($date) && !$anytime) {
+ if (!defined($date)) {
$date = localtime(time);
$date->min(0);
}
@@ -1716,7 +1717,7 @@ CHECK
if ($anytime) {
$result.=' checked="checked" '
}
- $result.="name='${var}anytime'/>".&mt('Anytime').''
+ $result.="name='${var}anytime'/>".&mt('Any time').''
}
return $result;
@@ -1765,7 +1766,7 @@ sub postprocess {
if (defined($self->{VALIDATOR})) {
my $validator = eval($self->{VALIDATOR});
- die 'Died during evaluation of evaulation code; Perl said: ' . $@ if $@;
+ die 'Died during evaluation of validator code; Perl said: ' . $@ if $@;
my $invalid = &$validator($helper, $state, $self, $self->getValue());
if ($invalid) {
$self->{ERROR_MSG} = $invalid;
@@ -2318,113 +2319,6 @@ sub render {
my $buttons = '';
my $var = $self->{'variable'};
- if ($self->{'multichoice'}) {
- $result = <
-SCRIPT
-
- my %lt=&Apache::lonlocal::texthash(
- 'ocs' => "Select Only Current Students",
- 'ues' => "Unselect Expired Students",
- 'sas' => "Select All Students",
- 'uas' => "Unselect All Students",
- 'sfsg' => "Select Current Students for Section/Group",
- 'ufsg' => "Unselect for Section/Group");
-
- $buttons = <
-
-
-BUTTONS
- $result .= $buttons;
-
- }
if (defined $self->{ERROR_MSG}) {
$result .= '' . $self->{ERROR_MSG} . ' ';
@@ -2442,203 +2336,55 @@ BUTTONS
%defaultUsers = map { if ($_) {($_,1) } } @defaultUsers;
delete($defaultUsers{''});
}
- my $choices = [];
- my $expired_students = []; # Will hold expired students.
- # Load up the non-students, if necessary
- if ($self->{'coursepersonnel'}) {
- my %coursepersonnel = Apache::lonnet::get_course_adv_roles();
- for (sort keys %coursepersonnel) {
- for my $role (split /,/, $coursepersonnel{$_}) {
- # extract the names so we can sort them
- my @people;
-
- for (split /,/, $role) {
- push @people, [split /:/, $role];
- }
-
- @people = sort { $a->[0] cmp $b->[0] } @people;
-
- for my $person (@people) {
- push @$choices, [join(':', @$person), $person->[0], '', $_];
- }
- }
- }
- }
- # Constants
- my $section = Apache::loncoursedata::CL_SECTION();
- my $fullname = Apache::loncoursedata::CL_FULLNAME();
- my $status = Apache::loncoursedata::CL_STATUS();
+ my ($course_personnel,
+ $current_members,
+ $expired_members,
+ $future_members) = &Apache::lonselstudent::get_people_in_class();
- # Load up the students
- my $classlist = &Apache::loncoursedata::get_classlist();
- my @keys = keys %{$classlist};
- # Sort by: Section, name
- @keys = sort {
- if ($classlist->{$a}->[$section] ne $classlist->{$b}->[$section]) {
- return $classlist->{$a}->[$section] cmp $classlist->{$b}->[$section];
- }
- return $classlist->{$a}->[$fullname] cmp $classlist->{$b}->[$fullname];
- } @keys;
- #
- # now add the fancy section choice... first enumerate the sections:
- if ($self->{'multichoice'}) {
- my %sections;
- for my $key (@keys) {
- my $section_name = $classlist->{$key}->[$section];
- if ($section_name ne "") {
- $sections{$section_name} = 1;
- }
- }
- # The variable $choice_widget will have the html to make the choice
- # selector.
- my $size=5;
- if (scalar(keys(%sections)) < 5) {
- $size=scalar(keys(%sections));
- }
- my $choice_widget = ''."\n";
- foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {
- $choice_widget .= "$sec \n";
- }
- $choice_widget .= "none \n";
- # Build a table without any borders to contain the section based
- # selection:
- my $section_selectors =<
-
- For Sections: $choice_widget
-
- Current Students
-
- All students
-
- Expired Students
-
-
-
-
-
-
-SECTIONSELECT
- $result .= $section_selectors;
+ # Load up the non-students, if necessary
+
+ if ($self->{'coursepersonnel'}) {
+ unshift @$current_members, (@$course_personnel);
}
- # username, fullname, section, type
- for (@keys) {
- # We split the active students into the choices array and
- # inactive ones into expired_students so that we can put them in 2 separate
- # tables.
-
- if ( $classlist->{$_}->[$status] eq
- 'Active') {
- push @$choices, [$_, $classlist->{$_}->[$fullname],
- $classlist->{$_}->[$section],
- $classlist->{$_}->[$status], 'Student'];
- } else {
- push @$expired_students, [$_, $classlist->{$_}->[$fullname],
- $classlist->{$_}->[$section],
- $classlist->{$_}->[$status], 'Student'];
- }
- }
+ # Current personel
- my $name = $self->{'coursepersonnel'} ? &mt('Name') : &mt('Student Name');
- my $type = 'radio';
- if ($self->{'multichoice'}) { $type = 'checkbox'; }
- $result .= "\n";
- $result .= "$name ".
- "" . &mt('Section') . " " .
- "".&mt('Status')." " .
- "" . &mt("Role") . " " .
- "".&mt('Username').":".&mt('Domain')." ";
+ $result .= &Apache::lonselstudent::render_student_list( $current_members,
+ "helpform",
+ "current",
+ \%defaultUsers,
+ $self->{'multichoice'},
+ $self->{'variable'},
+ 1);
- my $checked = 0;
- #
- # Give the active students and staff:
- #
- for my $choice (@$choices) {
- $result .= " [0];
- if (exists($defaultUsers{$user})) {
- $result .= " checked='checked' ";
- $checked = 1;
- }
- } elsif (!$self->{'multichoice'} && !$checked) {
- $result .= " checked='checked' ";
- $checked = 1;
- }
- $result .=
- " value='" . HTML::Entities::encode($choice->[0] . ':'
- .$choice->[2] . ':'
- .$choice->[1] . ':'
- .$choice->[3], "<>&\"'")
- . "' />"
- . HTML::Entities::encode($choice->[1],'<>&"')
- . " "
- . HTML::Entities::encode($choice->[2],'<>&"')
- . " \n"
- . HTML::Entities::encode($choice->[3],'<>&"')
- . " \n"
- . HTML::Entities::encode($choice->[4],'<>&"')
- . " \n"
- . HTML::Entities::encode($choice->[0],'<>&"')
- . " \n";
- }
- $result .= "
\n\n";
# If activeonly is not set then we can also give the expired students:
#
- if (!$self->{'activeonly'} && ((scalar @$expired_students) > 0)) {
- $result .= "Inactive students:
\n";
- $result .= <
-
-
-
-
-
-INACTIVEBUTTONS
- $result .= "\n";
-
+ if (!$self->{'activeonly'} && ((scalar @$expired_members) > 0)) {
+
+ # And future.
+
+ $result .= &Apache::lonselstudent::render_student_list( $future_members,
+ "helpform",
+ "future",
+ \%defaultUsers,
+ $self->{'multichoice'},
+ $self->{'variable'},
+ 0);
+ # Past
+
+ $result .= &Apache::lonselstudent::render_student_list($expired_members,
+ "helpform",
+ "past",
+ \%defaultUsers,
+ $self->{'multichoice'},
+ $self->{'variable'},
+ 0);
}
@@ -3082,26 +2828,29 @@ sub start_section {
my $section = Apache::loncoursedata::CL_SECTION();
my $classlist = Apache::loncoursedata::get_classlist();
- foreach (keys %$classlist) {
- my $sectionName = $classlist->{$_}->[$section];
- if (!$sectionName) {
+ foreach my $user (keys(%$classlist)) {
+ my $section_name = $classlist->{$user}[$section];
+ if (!$section_name) {
$choices{"No section assigned"} = "";
} else {
- $choices{$sectionName} = $sectionName;
+ $choices{$section_name} = $section_name;
}
}
- for my $sectionName (sort(keys(%choices))) {
- push @{$paramHash->{CHOICES}}, [$sectionName, $sectionName];
+ if (exists($choices{"No section assigned"})) {
+ push(@{$paramHash->{CHOICES}},
+ ['No section assigned','No section assigned']);
+ delete($choices{"No section assigned"});
+ }
+ for my $section_name (sort {lc($a) cmp lc($b) } (keys(%choices))) {
+ push @{$paramHash->{CHOICES}}, [$section_name, $section_name];
}
return if ($token->[2]{'onlysections'});
# add in groups to the end of the list
- my %curr_groups;
- if (&Apache::loncommon::coursegroups(\%curr_groups)) {
- foreach my $group_name (sort(keys(%curr_groups))) {
- push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
- }
+ my %curr_groups = &Apache::loncommon::coursegroups();
+ foreach my $group_name (sort(keys(%curr_groups))) {
+ push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
}
}
@@ -3163,11 +2912,9 @@ sub start_group {
# Populate the CHOICES element
my %choices;
- my %curr_groups;
- if (&Apache::loncommon::coursegroups(\%curr_groups)) {
- foreach my $group_name (sort(keys(%curr_groups))) {
- push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
- }
+ my %curr_groups = &Apache::loncommon::coursegroups();
+ foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) {
+ push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]);
}
}
@@ -3274,7 +3021,7 @@ sub postprocess {
if (defined($self->{VALIDATOR})) {
my $validator = eval($self->{VALIDATOR});
- die 'Died during evaluation of evaulation code; Perl said: ' . $@ if $@;
+ die 'Died during evaluation of validator code; Perl said: ' . $@ if $@;
my $invalid = &$validator($helper, $state, $self, $self->getValue());
if ($invalid) {
$self->{ERROR_MSG} = $invalid;