--- loncom/interface/lonhelper.pm 2006/05/05 14:35:44 1.140 +++ loncom/interface/lonhelper.pm 2006/05/30 12:46:09 1.152 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.140 2006/05/05 14:35:44 albertel Exp $ +# $Id: lonhelper.pm,v 1.152 2006/05/30 12:46:09 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -183,7 +183,10 @@ use Apache::File; use Apache::lonxml; use Apache::lonlocal; use Apache::lonnet; - +use Apache::longroup; +use Apache::lonselstudent; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; # Register all the tags with the helper, so the helper can # push and pop them @@ -468,8 +471,8 @@ sub _varsInFile { my $self = shift; my @vars = (); for my $key (keys %{$self->{VARS}}) { - push @vars, &Apache::lonnet::escape($key) . '=' . - &Apache::lonnet::escape($self->{VARS}->{$key}); + push @vars, &escape($key) . '=' . + &escape($self->{VARS}->{$key}); } return join ('&', @vars); } @@ -2275,119 +2278,6 @@ use strict; use Apache::lonlocal; use Apache::lonnet; -# -# Utility function used when rendering the tag. -# This function renders a segment of course personel -# Personel are broken up by the helper into past, current and -# future...each one gets is own subpage of selection. -# This sub renders one of these pages. -# Parameters: -# $sections - Set of sections in the course (hash reference). -# $students - Students in the section. (ref to array of references -# to arrays). -# $formprefix - form path prefix for form element names -# This is used to make each form element -# so that the segments having to do with each -# set of students won't collide. -# $defaultusers - reference to a hash containng -# the set of users that should be on or off. -# Returns: -# HTML text to add to the rendering of the helper. -# -sub render_student_list { - my ($self, - $sections, $students, $formprefix, $defaultusers) = @_; - - my $multiselect = $self->{'multichoice'}; - my $result = ""; - - # If multiple selections are allowed, we have a listbox - # at the top which allows quick selections from each section - # as well as from categories of personnel. - - if ($multiselect) { - $result .= ''; - $result .= '
'; - - my $size = scalar(keys(%$sections)); - $size += 3; # We have allstudents allpersonel nosection too. - if ($size > 5) { - $size = 5; - } - $result .= ''; - $result .= '
'; - } - - # Now we list the students, but the form element type - # will depend on whether or not multiselect is true. - # True -> checkboxes. - # False -> radiobuttons. - - $result .= "\n"; - $result .= ''."\n"; - $result .= ' '."\n"; - $result .= ' '."\n"; - $result .= ' '."\n"; - $result .= ' '."\n"; - - my $input_type; - if ($multiselect) { - $input_type = "checkbox"; - } else { - $input_type = "radio"; - } - - my $checked = 0; - for my $student (@$students) { - $result .= ''."\n"; - } - $result .="
NameSectionStatusRoleUsername : Domain
[0]; - - # Figure out which students are checked by default... - - if(%$defaultusers) { - if (exists ($defaultusers->{$user})) { - $result .= ' checked ="checked" '; - $checked = 1; - } - } elsif (!$self->{'multichoice'} && !$checked) { - $result .= ' checked="checked" '; - $checked = 1; # First one for radio if no default specified. - } - $result .= ' value="'. HTML::Entities::encode($user . ':' - .$student->[2] . ':' - .$student->[1] . ':' - .$student->[3] . ':' - .$student->[4], "<>&\"'") - ."\" />\n"; - $result .= HTML::Entities::encode($student->[1], '<>&"') - . ''."\n"; - $result .= HTML::Entities::encode($student->[2], '<>&"') - . ''."\n"; - $result .= HTML::Entities::encode($student->[3], '<>&"') - . ''."\n"; - $result .= HTML::Entities::encode($student->[4], '<>&"') - . ''."\n"; - $result .= HTML::Entities::encode($student->[0], '<>&"') - . '


\n"; - - return $result; -} - BEGIN { &Apache::lonhelper::register('Apache::lonhelper::student', ('student')); @@ -2432,206 +2322,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} . '

'; @@ -2651,125 +2341,29 @@ BUTTONS } + my ($course_personnel, + $current_members, + $expired_members, + $future_members) = &Apache::lonselstudent::get_people_in_class(); - # my $choices = []; - - # - # We need to parcel out the personel in to three arrays: - # $current_members[] - Contains those whose roles are currently active. - # $expired_members[] - Contains those whose roles have expired. - # $future_members[] - Contains those whose roles will become active in the - # future. - # - # Constants - my $section = &Apache::loncoursedata::CL_SECTION(); - my $fullname = &Apache::loncoursedata::CL_FULLNAME(); - my $status = &Apache::loncoursedata::CL_STATUS(); - my $start_date = &Apache::loncoursedata::CL_START(); - - my $current_members = []; - my $expired_members = []; - my $future_members = []; # 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 @$current_members, [join(':', @$person), $person->[0], '', $_]; - } - } - } - } - - - # 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; - - - - - for (@keys) { - - if ( $classlist->{$_}->[$status] eq - 'Active') { - push @$current_members, [$_, $classlist->{$_}->[$fullname], - $classlist->{$_}->[$section], - $classlist->{$_}->[$status], 'Student']; - } else { - # Need to figure out if this user is future or - # Expired... If the start date is in the future - # the user is future...else expired. - - my $now = time; - if ($classlist->{$_}->[$start_date] > $now) { - push @$future_members, [$_, $classlist->{$_}->[$fullname], - $classlist->{$_}->[$section], - "Future", "Student"]; - } else { - push @$expired_members, [$_, $classlist->{$_}->[$fullname], - $classlist->{$_}->[$section], - "Expired", "Student"]; - } - - } - } - - # Create a list of the sections that can be used to create the section - # selection list boxes: - # - my %sections; - for my $key (@keys) { - my $section_name = $classlist->{$key}->[$section]; - if ($section_name ne "") { - $sections{$section_name} = 1; - } + if ($self->{'coursepersonnel'}) { + unshift @$current_members, (@$course_personnel); } - if ($self->{'multichoice'}) { - - # 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 $result = '\n"; - - - } - # Current personel - $result .= $self->render_student_list(\%sections, - $current_members, - "current", - \%defaultUsers); + $result .= &Apache::lonselstudent::render_student_list( $current_members, + "helpform", + "current", + \%defaultUsers, + $self->{'multichoice'}, + $self->{'variable'}, + 1); # If activeonly is not set then we can also give the expired students: @@ -2778,16 +2372,22 @@ BUTTONS # And future. - $result .= $self->render_student_list(\%sections, - $future_members, - "future", - \%defaultUsers); + $result .= &Apache::lonselstudent::render_student_list( $future_members, + "helpform", + "future", + \%defaultUsers, + $self->{'multichoice'}, + $self->{'variable'}, + 0); # Past - $result .= $self->render_student_list(\%sections, - $expired_members, - "past", - \%defaultUsers); + $result .= &Apache::lonselstudent::render_student_list($expired_members, + "helpform", + "past", + \%defaultUsers, + $self->{'multichoice'}, + $self->{'variable'}, + 0); } @@ -3231,26 +2831,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::longroup::coursegroups(); + foreach my $group_name (sort(keys(%curr_groups))) { + push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]); } } @@ -3312,11 +2915,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::longroup::coursegroups(); + foreach my $group_name (sort {lc($a) cmp lc($b)} (keys(%curr_groups))) { + push(@{$paramHash->{CHOICES}}, [$group_name, $group_name]); } } @@ -3802,8 +3403,10 @@ sub render { if ($vars->{GRANULARITY} eq 'whole_course') { $resourceString .= '
  • '.&mt('for all resources in the course').'
  • '; if ($vars->{TARGETS} eq 'course') { - $level = 11; # general course, see lonparmset.pm perldoc + $level = 14; # general course, see lonparmset.pm perldoc } elsif ($vars->{TARGETS} eq 'section') { + $level = 9; + } elsif ($vars->{TARGETS} eq 'group') { $level = 6; } else { $level = 3; @@ -3818,8 +3421,10 @@ sub render { $symb = $res->symb(); $resourceString .= '
  • '.&mt('for the map named [_1]',"$title").'
  • '; if ($vars->{TARGETS} eq 'course') { - $level = 10; # general course, see lonparmset.pm perldoc + $level = 13; # general course, see lonparmset.pm perldoc } elsif ($vars->{TARGETS} eq 'section') { + $level = 8; + } elsif ($vars->{TARGETS} eq 'group') { $level = 5; } else { $level = 2; @@ -3835,8 +3440,10 @@ sub render { my $title = $res->compTitle(); $resourceString .= '
  • '.&mt('for the resource named [_1] part [_2]',"$title","$part").'
  • '; if ($vars->{TARGETS} eq 'course') { - $level = 7; # general course, see lonparmset.pm perldoc + $level = 10; # general course, see lonparmset.pm perldoc } elsif ($vars->{TARGETS} eq 'section') { + $level = 7; + } elsif ($vars->{TARGETS} eq 'group') { $level = 4; } else { $level = 1;