--- loncom/interface/lonhelper.pm 2003/09/02 20:58:31 1.44 +++ loncom/interface/lonhelper.pm 2003/10/09 15:27:14 1.56 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.44 2003/09/02 20:58:31 bowersj2 Exp $ +# $Id: lonhelper.pm,v 1.56 2003/10/09 15:27:14 sakharuk 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: @@ -1667,7 +1669,8 @@ resources in that sequence, or recurses to false. The "suppressEmptySequences" attribute reflects the suppressEmptySequences argument to the render routine, which will cause folders that have all of their contained resources filtered out to also -be filtered out. +be filtered out. The 'addstatus' attribute, if true, will add the icon +and long status display columns to the display. =head3 SUB-TAGS @@ -1695,7 +1698,10 @@ be filtered out. 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 @@ -1730,6 +1736,7 @@ sub start_resource { $paramHash->{'multichoice'} = $token->[2]{'multichoice'}; $paramHash->{'suppressEmptySequences'} = $token->[2]{'suppressEmptySequences'}; $paramHash->{'toponly'} = $token->[2]{'toponly'}; + $paramHash->{'addstatus'} = $token->[2]{'addstatus'}; return ''; } @@ -1806,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; } @@ -1861,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->{EVAL_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) ;-) @@ -1895,9 +1912,13 @@ BUTTONS }; $ENV{'form.condition'} = !$self->{'toponly'}; + my $cols = [$renderColFunc, Apache::lonnavmaps::resource()]; + if ($self->{'addstatus'}) { + push @$cols, (Apache::lonnavmaps::part_status_summary()); + + } $result .= - &Apache::lonnavmaps::render( { 'cols' => [$renderColFunc, - Apache::lonnavmaps::resource()], + &Apache::lonnavmaps::render( { 'cols' => $cols, 'showParts' => 0, 'filterFunc' => $filterFunc, 'resource_no_folder_link' => 1, @@ -1936,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 @@ -1970,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'}; } @@ -2002,13 +2044,34 @@ sub render { } } } + function checksec(value) { + for (i=0; i SCRIPT $buttons = < +
+ +  + + +
BUTTONS } @@ -2042,6 +2105,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(); @@ -2056,8 +2120,13 @@ 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], + $classlist->{$_}->[$status], 'Student']; + } } my $name = $self->{'coursepersonnel'} ? 'Name' : 'Student Name'; @@ -2066,7 +2135,9 @@ BUTTONS $result .= "\n"; $result .= "". "" . - ""; + "" . + "" . + ""; my $checked = 0; for my $choice (@$choices) { @@ -2078,13 +2149,18 @@ BUTTONS $checked = 1; } $result .= - " value='" . HTML::Entities::encode($choice->[0] . ':' . $choice->[2]) + " value='" . HTML::Entities::encode($choice->[0] . ':' . $choice->[2] . ':' . $choice->[1] . ':' . $choice->[3]) . "' />\n\n"; + . HTML::Entities::encode($choice->[3]) + . "\n\n\n"; } $result .= "
$nameSectionRole
StatusRoleUsername:Domain
" . HTML::Entities::encode($choice->[1]) . "" . HTML::Entities::encode($choice->[2]) . "" - . HTML::Entities::encode($choice->[3]) . "
" + . HTML::Entities::encode($choice->[4]) + . "" + . HTML::Entities::encode($choice->[0]) + . "
\n\n"; @@ -2302,9 +2378,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 @@ -2343,7 +2427,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, @@ -2381,7 +2465,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; @@ -2867,10 +2951,14 @@ sub render { } if ($self->{'restartCourse'}) { + my $targetURL = '/adm/menu'; + if ($ENV{'course.'.$ENV{'request.course.id'}.'.clonedfrom'}) { + $targetURL = '/adm/parmset?overview=1'; + } $result .= "
\n" . "
\n" . "" . - "" . + "" . "\n" . "\n\n" . @@ -2927,15 +3015,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}}; @@ -2981,6 +3071,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') { @@ -3001,6 +3094,9 @@ sub render { } elsif ($vars->{ACTION_TYPE} eq 'tries') { $result .= "\n"; + } elsif ($vars->{ACTION_TYPE} eq 'weight') { + $result .= "\n"; } $result .= $resourceString; @@ -3031,7 +3127,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";