--- loncom/interface/lonhelper.pm 2003/09/16 20:00:57 1.46 +++ loncom/interface/lonhelper.pm 2003/09/29 16:33:09 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.46 2003/09/16 20:00:57 bowersj2 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 @@ package Apache::lonhelper::message; =pod -=head1 Element: messageX +=head1 Elements + +=head2 Element: messageX Message elements display their contents, and transition directly to the state in the attribute. Example: @@ -1696,7 +1698,10 @@ and long status display columns to the d default, the value will be the resource ID of the object ($res->{ID}). =item * X: 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 @@ sub start_mapurl { my $contents = Apache::lonxml::get_all_text('/mapurl', $parser); + $paramHash->{EVAL_MAP_URL} = $token->[2]{'evaluate'}; $paramHash->{MAP_URL} = $contents; } @@ -1863,9 +1869,18 @@ BUTTONS 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 @@ package Apache::lonhelper::student; 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: + +Does what it usually does: declare which helper variable to put the +result in. + +=item * B: + +If true allows the user to select multiple students. Defaults to false. + +=item * B: + +If true adds the course personnel to the top of the student +selection. Defaults to false. + +=item * B: + +If true, only active students and course personnel will be +shown. Defaults to false. + +=back =cut @@ -1976,6 +2011,7 @@ sub start_student { $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 @@ BUTTONS # 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 @@ BUTTONS # 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'; @@ -2308,9 +2349,17 @@ BUTTONS my @fileList; # If the subdirectory is in local CSTR space - if ($subdir =~ m|/home/([^/]+)/public_html|) { + my $metadir; + if ($subdir =~ m|/home/([^/]+)/public_html/(.*)|) { my $user = $1; my $domain = $Apache::lonnet::perlvar{'lonDefDomain'}; + $metadir='/res/'.$domain.'/'.$user.'/'.$2; + @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, ''); + } elsif ($subdir =~ m|^~([^/]+)/(.*)$|) { + $subdir='/home/'.$1.'/public_html/'.$2; + my $user = $1; + my $domain = $Apache::lonnet::perlvar{'lonDefDomain'}; + $metadir='/res/'.$domain.'/'.$user.'/'.$2; @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, ''); } else { # local library server resource space @@ -2349,7 +2398,7 @@ BUTTONS } # Get the title - my $title = Apache::lonpubdir::getTitleString($fileName); + my $title = Apache::lonpubdir::getTitleString(($metadir?$metadir:$subdir) .'/'. $file); # Netscape 4 is stupid and there's nowhere to put the # information on the input tag that the file is Published, @@ -2387,7 +2436,7 @@ BUTTONS $result .= "\n"; if (!$choices) { - $result .= 'There are no files available to select in this directory. Please go back and select another option.

'; + $result .= 'There are no files available to select in this directory ('.$subdir.'). Please go back and select another option.

'; } $result .= $buttons; @@ -2937,15 +2986,17 @@ sub render { 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}}; @@ -2991,6 +3042,9 @@ sub render { if ($vars->{ACTION_TYPE} eq 'tries') { $result .= ' to ' . $vars->{TRIES} . ''; } + if ($vars->{ACTION_TYPE} eq 'weight') { + $result .= ' to ' . $vars->{WEIGHT} . ''; + } $result .= "\n"; if ($vars->{ACTION_TYPE} eq 'due_date' || $vars->{ACTION_TYPE} eq 'answer_date') { @@ -3011,6 +3065,9 @@ sub render { } elsif ($vars->{ACTION_TYPE} eq 'tries') { $result .= "\n"; + } elsif ($vars->{ACTION_TYPE} eq 'weight') { + $result .= "\n"; } $result .= $resourceString; @@ -3041,7 +3098,7 @@ sub render { } # Print value - if ($vars->{ACTION_TYPE} ne 'tries') { + if ($vars->{ACTION_TYPE} ne 'tries' && $vars->{ACTION_TYPE} ne 'weight') { $result .= "
  • to " . ctime($vars->{PARM_DATE}) . " (" . Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}) . ")
  • \n";