--- loncom/interface/lonhelper.pm 2006/05/09 22:43:19 1.147 +++ loncom/interface/lonhelper.pm 2006/05/11 21:10:21 1.148 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.147 2006/05/09 22:43:19 foxr Exp $ +# $Id: lonhelper.pm,v 1.148 2006/05/11 21:10:21 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -183,7 +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 @@ -2274,357 +2274,6 @@ no strict; use strict; use Apache::lonlocal; use Apache::lonnet; -# -# Utility function used when rendering tags. -# This function produces a list references to four -# arrays: -# (\@course_personel, \@current_members, \@expired_members, \@future_members) -# -# Where: -# course_personnel - Each element of this array is itself a reference to an array -# containing information about a member of the course staff. -# current_members - Each element of this array is itself a reference to an -# array that contains information about current students in -# the course. -# expired_members - Each element of this array is itself a reference to an -# array that contains information about students whose -# status has expired. -# future_members - Each element of this arrya is itself a reference to an -# array that contains information about students who will -# become active at a future date. -# -# Course personnel elements include: -# [0] Last, First of the user. -# [1] Role held by the user. -# [2] Empty. -# [3] Empty -# [4] username:domain of the user. -# -# Student member array elements are: -# [0] Last, First of the user. -# [1] Status of the user one of ("Active", "Future", or "Expired') -# depending on which array the user was put in. -# [2] Section the student is in. -# [3] Role of the member (student). -# [4] username:domain of the user. -# -sub get_people_in_class { - my %coursepersonnel = &Apache::lonnet::get_course_adv_roles(); - # - # Enumerate the course_personnel. - # - my @course_personnel; - 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 @course_personnel, [join(':', @$person), $person->[0], '', $_]; - } - } - } - # Students must be split into the three categories: - - my @current_members; - my @future_members; - my @expired_members; - - # Indices into the coures data elements. - - 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 $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"]; - } - - } - } - return (\@course_personnel, - \@current_members, - \@expired_members, - \@future_members); - -} - -# -# 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: -# $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. -# $multiselect - True if multiselect allowed. -# $resultname - Name of result variable. -# $javascript - If true, the javascript to run this is output -# This should be true for the first call for a page -# and false for all other calls... only matters if -# multiselect is true. -# Returns: -# HTML text to add to the rendering of the helper. -# -sub render_student_list { - my ($students, $formprefix, $defaultusers, - $multiselect, $resultname, $javascript) = @_; - - my $result = ""; - - if ($javascript && $multiselect) { - $result .= < -// - -SCRIPT - - } - - # 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) { - # Make a section hash so we can add sections to the choice: - - my %sections; - for my $student (@$students) { - my $sect = $student->[2]; - if ($sect ne "") { - $sections{$sect} = 1; - } - } - - $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 (!$multiselect && !$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] . ":" - .$formprefix, "<>&\"'") - ."\" />\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', @@ -2692,7 +2341,7 @@ sub render { my ($course_personnel, $current_members, $expired_members, - $future_members) = &get_people_in_class(); + $future_members) = &Apache::lonselstudent::get_people_in_class(); @@ -2705,7 +2354,7 @@ sub render { # Current personel - $result .= &render_student_list( $current_members, + $result .= &Apache::lonselstudent::render_student_list( $current_members, "current", \%defaultUsers, $self->{'multichoice'}, @@ -2719,7 +2368,7 @@ sub render { # And future. - $result .= &render_student_list( $future_members, + $result .= &Apache::lonselstudent::render_student_list( $future_members, "future", \%defaultUsers, $self->{'multichoice'}, @@ -2727,7 +2376,7 @@ sub render { 0); # Past - $result .= &render_student_list($expired_members, + $result .= &Apache::lonselstudent::render_student_list($expired_members, "past", \%defaultUsers, $self->{'multichoice'},