--- loncom/interface/lonnavmaps.pm 2003/05/16 17:54:21 1.192 +++ loncom/interface/lonnavmaps.pm 2003/06/12 20:56:19 1.202 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.192 2003/05/16 17:54:21 bowersj2 Exp $ +# $Id: lonnavmaps.pm,v 1.202 2003/06/12 20:56:19 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -72,7 +72,7 @@ my %statusIconMap = $resObj->TRIES_LEFT => 'navmap.open.gif', $resObj->INCORRECT => 'navmap.wrong.gif', $resObj->OPEN => 'navmap.open.gif', - $resObj->ATTEMPTED => 'navmap.open.gif', + $resObj->ATTEMPTED => 'navmap.ellipsis.gif', $resObj->ANSWER_SUBMITTED => '' ); my %iconAltTags = @@ -249,17 +249,20 @@ sub real_handler { my $suppressEmptySequences = 0; my $filterFunc = undef; + my $resource_no_folder_link = 0; + # Display only due homework. my $showOnlyHomework = 0; if ($ENV{QUERY_STRING} eq 'showOnlyHomework') { $showOnlyHomework = 1; $suppressEmptySequences = 1; $filterFunc = sub { my $res = shift; - return $res->completable() || $res->is_sequence(); + return $res->completable() || $res->is_map(); }; $r->print("

Uncompleted Homework

"); $ENV{'form.filter'} = ''; $ENV{'form.condition'} = 1; + $resource_no_folder_link = 1; } else { $r->print("" . "Show Only Uncompleted Homework
"); @@ -272,6 +275,7 @@ sub real_handler { 'suppressNavmap' => 1, 'suppressEmptySequences' => $suppressEmptySequences, 'filterFunc' => $filterFunc, + 'resource_no_folder_link' => $resource_no_folder_link, 'r' => $r}; my $render = render($renderArgs); $navmap->untieHashes(); @@ -378,7 +382,7 @@ sub getDescription { return "Excused by instructor"; } if ($status == $res->ATTEMPTED) { - return "Not yet graded."; + return "Answer submitted, not yet graded."; } if ($status == $res->TRIES_LEFT) { my $tries = $res->tries($part); @@ -919,7 +923,7 @@ sub render_resource { $nonLinkedText .= ' (' . $resource->countParts() . ' parts)'; } - if (!$params->{'resource_nolink'}) { + if (!$params->{'resource_nolink'} && $src !~ /^\/uploaded\//) { $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText"; } else { $result .= " $curMarkerBegin$title$partLabel$curMarkerEnd $nonLinkedText"; @@ -966,6 +970,10 @@ sub render_communication_status { } } + if ($params->{'multipart'} && $part != '0') { + $discussionHTML = $feedbackHTML = $errorHTML = ''; + } + return "$discussionHTML$feedbackHTML$errorHTML "; } @@ -1021,8 +1029,6 @@ sub render_long_status { $result .= '(randomly select ' . $resource->randompick() .')'; } - $result .= " \n"; - return $result; } @@ -1291,7 +1297,7 @@ sub render { if (ref($curRes)) { # Parallel pre-processing: Do sequences have non-filtered-out children? - if ($curRes->is_sequence()) { + if ($curRes->is_map()) { $curRes->{DATA}->{HAS_VISIBLE_CHILDREN} = 0; # Sequences themselves do not count as visible children, # unless those sequences also have visible children. @@ -1354,7 +1360,7 @@ sub render { } # If this is an empty sequence and we're filtering them, continue on - if ($curRes->is_sequence() && $args->{'suppressEmptySequences'} && + if ($curRes->is_map() && $args->{'suppressEmptySequences'} && !$curRes->{DATA}->{HAS_VISIBLE_CHILDREN}) { next; } @@ -1413,8 +1419,13 @@ sub render { @parts = ($parts[0]); $args->{'condensed'} = 1; } - } + # Multipart problem with one part: always "condense" (happens + # to match the desirable behavior) + if ($curRes->countParts() == 1) { + @parts = ($parts[0]); + $args->{'condensed'} = 1; + } } } @@ -1662,7 +1673,7 @@ sub init { my %emailstatus = &Apache::lonnet::dump('email_status'); my $logoutTime = $emailstatus{'logout'}; my $courseLeaveTime = $emailstatus{'logout_'.$ENV{'request.course.id'}}; - $self->{LAST_CHECK} = ($courseLeaveTime < $logoutTime ? + $self->{LAST_CHECK} = (($courseLeaveTime > $logoutTime) ? $courseLeaveTime : $logoutTime); my %discussiontime = &Apache::lonnet::dump('discussiontimes', $cdom, $cnum); @@ -1779,6 +1790,16 @@ object for that resource. This method, o (as in the resource object) is the only proper way to obtain a resource object. +=item * B(symb): + +Based on the symb of the resource, get a resource object for that +resource. This is one of the proper ways to get a resource object. + +=item * B(map_pc): + +Based on the map_pc of the resource, get a resource object for +the given map. This is one of the proper ways to get a resource object. + =cut # The strategy here is to cache the resource objects, and only construct them @@ -1809,6 +1830,14 @@ sub getBySymb { return $self->getById($map->map_pc() . '.' . $id); } +sub getByMapPc { + my $self = shift; + my $map_pc = shift; + my $map_id = $self->{NAV_HASH}->{'map_id_' . $map_pc}; + $map_id = $self->{NAV_HASH}->{'ids_' . $map_id}; + return $self->getById($map_id); +} + =pod =item * B(): @@ -3211,31 +3240,30 @@ sub getErrors { =item * B(): Returns a list reference containing sorted strings corresponding to -each part of the problem. To count the number of parts, use the list -in a scalar context, and subtract one if greater than two. (One part -problems have a part 0. Multi-parts have a part 0, plus a part for -each part. Filtering part 0 if you want it is up to you.) +each part of the problem. Single part problems have only a part '0'. +Multipart problems do not return their part '0', since they typically +do not really matter. =item * B(): Returns the number of parts of the problem a student can answer. Thus, for single part problems, returns 1. For multipart, it returns the -number of parts in the problem, not including psuedo-part 0. Thus, -B may return an array with more parts in it then countParts -might lead you to believe. +number of parts in the problem, not including psuedo-part 0. =item * B(): -Returns true if the problem is multipart, false otherwise. +Returns true if the problem is multipart, false otherwise. Use this instead +of countParts if all you want is multipart/not multipart. =item * B($part): Returns the response type of the part, without the word "response" on the end. Example return values: 'string', 'essay', 'numeric', etc. -=item * B($part): +=item * B($part): -Retreives the response ID for the given part, which may be an empty string. +Retreives the response IDs for the given part as an array reference containing +strings naming the response IDs. This may be empty. =back @@ -3281,7 +3309,7 @@ sub responseType { return $self->{RESPONSE_TYPE}->{$part}; } -sub responseId { +sub responseIds { my $self = shift; my $part = shift; 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.