--- loncom/interface/lonhelper.pm 2006/05/09 22:15:30 1.146 +++ loncom/interface/lonhelper.pm 2006/05/16 20:45:26 1.150 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.146 2006/05/09 22:15:30 foxr Exp $ +# $Id: lonhelper.pm,v 1.150 2006/05/16 20:45:26 albertel 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 @@ -2275,243 +2275,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: -# $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', ('student')); @@ -2575,99 +2338,29 @@ sub render { } + 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"]; - } - - } + if ($self->{'coursepersonnel'}) { + unshift @$current_members, (@$course_personnel); } - # Current personel - $result .= &render_student_list( $current_members, - "current", - \%defaultUsers, - $self->{'multichoice'}, - $self->{'variable'}, - 1); + $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: @@ -2676,20 +2369,22 @@ sub render { # And future. - $result .= &render_student_list( $future_members, - "future", - \%defaultUsers, - $self->{'multichoice'}, - $self->{'variable'}, - 0); + $result .= &Apache::lonselstudent::render_student_list( $future_members, + "helpform", + "future", + \%defaultUsers, + $self->{'multichoice'}, + $self->{'variable'}, + 0); # Past - $result .= &render_student_list($expired_members, - "past", - \%defaultUsers, - $self->{'multichoice'}, - $self->{'variable'}, - 0); + $result .= &Apache::lonselstudent::render_student_list($expired_members, + "helpform", + "past", + \%defaultUsers, + $self->{'multichoice'}, + $self->{'variable'}, + 0); } @@ -3705,8 +3400,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; @@ -3721,8 +3418,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; @@ -3738,8 +3437,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;