version 1.326, 2005/04/15 22:03:23
|
version 1.332, 2005/06/28 21:41:43
|
Line 57 my %statusIconMap =
|
Line 57 my %statusIconMap =
|
$resObj->CLOSED => '', |
$resObj->CLOSED => '', |
$resObj->OPEN => 'navmap.open.gif', |
$resObj->OPEN => 'navmap.open.gif', |
$resObj->CORRECT => 'navmap.correct.gif', |
$resObj->CORRECT => 'navmap.correct.gif', |
|
$resObj->PARTIALLY_CORRECT => 'navmap.ellipsis.gif', |
$resObj->INCORRECT => 'navmap.wrong.gif', |
$resObj->INCORRECT => 'navmap.wrong.gif', |
$resObj->ATTEMPTED => 'navmap.ellipsis.gif', |
$resObj->ATTEMPTED => 'navmap.ellipsis.gif', |
$resObj->ERROR => '' |
$resObj->ERROR => '' |
Line 81 my %colormap =
|
Line 82 my %colormap =
|
$resObj->OPEN => '', |
$resObj->OPEN => '', |
$resObj->NOTHING_SET => '', |
$resObj->NOTHING_SET => '', |
$resObj->ATTEMPTED => '', |
$resObj->ATTEMPTED => '', |
$resObj->ANSWER_SUBMITTED => '' |
$resObj->ANSWER_SUBMITTED => '', |
|
$resObj->PARTIALLY_CORRECT => '#006600' |
); |
); |
# And a special case in the nav map; what to do when the assignment |
# And a special case in the nav map; what to do when the assignment |
# is not yet done and due in less then 24 hours |
# is not yet done and due in less then 24 hours |
Line 507 sub getDescription {
|
Line 509 sub getDescription {
|
if ($status == $res->PAST_DUE_NO_ANSWER) { |
if ($status == $res->PAST_DUE_NO_ANSWER) { |
return &mt("Was due")." " . timeToHumanString($res->duedate($part)); |
return &mt("Was due")." " . timeToHumanString($res->duedate($part)); |
} |
} |
if ($status == $res->ANSWER_OPEN) { |
if ($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) { |
return &mt("Answer available"); |
return &mt("Answer available"); |
} |
} |
if ($status == $res->EXCUSED) { |
if ($status == $res->EXCUSED) { |
Line 1039 sub render_resource {
|
Line 1041 sub render_resource {
|
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons"); |
# If this is a new branch, label it so |
# If this is a new branch, label it so |
if ($params->{'isNewBranch'}) { |
if ($params->{'isNewBranch'}) { |
$newBranchText = "<img src='$location/branch.gif' border='0' />"; |
$newBranchText = "<img src='$location/branch.gif' border='0' alt='Branch' />"; |
} |
} |
|
|
# links to open and close the folder |
# links to open and close the folder |
Line 1051 sub render_resource {
|
Line 1053 sub render_resource {
|
my $linkclose = "</a>"; |
my $linkclose = "</a>"; |
|
|
# Default icon: unknown page |
# Default icon: unknown page |
my $icon = "<img src='$location/unknown.gif' alt='' border='0' />"; |
my $icon = "<img src='$location/unknown.gif' alt='' border='0' alt=' ' ' />"; |
|
|
if ($resource->is_problem()) { |
if ($resource->is_problem()) { |
if ($part eq '0' || $params->{'condensed'}) { |
if ($part eq '0' || $params->{'condensed'}) { |
$icon ='<img src="'.$location.'/problem.gif" alt="" border="0" />'; |
$icon ='<img src="'.$location.'/problem.gif" alt=" " border="0" />'; |
} else { |
} else { |
$icon = $params->{'indentString'}; |
$icon = $params->{'indentString'}; |
} |
} |
} else { |
} else { |
$icon = "<img src='".&Apache::loncommon::icon($resource->src)."' alt='' border='0' />"; |
$icon = "<img src='".&Apache::loncommon::icon($resource->src)."' alt=' ' border='0' />"; |
} |
} |
|
|
# Display the correct map icon to open or shut map |
# Display the correct map icon to open or shut map |
Line 1075 sub render_resource {
|
Line 1077 sub render_resource {
|
|
|
if (!$params->{'resource_no_folder_link'}) { |
if (!$params->{'resource_no_folder_link'}) { |
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . '.gif'; |
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . '.gif'; |
$icon = "<img src='$location/$icon' alt='' border='0' />"; |
$icon = "<img src='$location/$icon' alt='". |
|
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
|
|
$linkopen = "<a href='" . $params->{'url'} . '?' . |
$linkopen = "<a href='" . $params->{'url'} . '?' . |
$params->{'queryString'} . '&filter='; |
$params->{'queryString'} . '&filter='; |
Line 1093 sub render_resource {
|
Line 1096 sub render_resource {
|
# Don't allow users to manipulate folder |
# Don't allow users to manipulate folder |
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . |
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . |
'.nomanip.gif'; |
'.nomanip.gif'; |
$icon = "<img src='$location/$icon' alt='' border='0' />"; |
$icon = "<img src='$location/$icon' alt='". |
|
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
|
|
$linkopen = ""; |
$linkopen = ""; |
$linkclose = ""; |
$linkclose = ""; |
Line 1424 sub render {
|
Line 1428 sub render {
|
# Step two: Locate what kind of here marker is necessary |
# Step two: Locate what kind of here marker is necessary |
# Determine where the "here" marker is and where the screen jumps to. |
# Determine where the "here" marker is and where the screen jumps to. |
|
|
if ($env{'form.postsymb'}) { |
if ($env{'form.postsymb'} ne '') { |
$here = $jump = &Apache::lonnet::symbclean($env{'form.postsymb'}); |
$here = $jump = &Apache::lonnet::symbclean($env{'form.postsymb'}); |
} elsif ($env{'form.postdata'}) { |
} elsif ($env{'form.postdata'} ne '') { |
# couldn't find a symb, is there a URL? |
# couldn't find a symb, is there a URL? |
my $currenturl = $env{'form.postdata'}; |
my $currenturl = $env{'form.postdata'}; |
#$currenturl=~s/^http\:\/\///; |
#$currenturl=~s/^http\:\/\///; |
#$currenturl=~s/^[^\/]+//; |
#$currenturl=~s/^[^\/]+//; |
|
|
$here = $jump = &Apache::lonnet::symbread($currenturl); |
$here = $jump = &Apache::lonnet::symbread($currenturl); |
} else { |
} |
|
if ($here eq '') { |
my $last; |
my $last; |
if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', |
&GDBM_READER(),0640)) { |
&GDBM_READER(),0640)) { |
Line 1650 END
|
Line 1655 END
|
$args->{'condensed'} = 0; |
$args->{'condensed'} = 0; |
my $location= |
my $location= |
&Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace1.gif"); |
&Apache::loncommon::lonhttpdurl("/adm/lonIcons/whitespace1.gif"); |
$args->{'indentString'} = setDefault($args->{'indentString'}, "<img src='$location' width='25' height='1' alt='' border='0' />"); |
$args->{'indentString'} = setDefault($args->{'indentString'}, "<img src='$location' width='25' height='1' alt=' ' border='0' />"); |
$args->{'displayedHereMarker'} = 0; |
$args->{'displayedHereMarker'} = 0; |
|
|
# If we're suppressing empty sequences, look for them here. Use DFS for speed, |
# If we're suppressing empty sequences, look for them here. Use DFS for speed, |
Line 2116 sub generate_course_user_opt {
|
Line 2121 sub generate_course_user_opt {
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
|
|
my $useropt; my $courseopt; |
|
|
|
# ------------------------------------------------- Get coursedata (if present) |
# ------------------------------------------------- Get coursedata (if present) |
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); |
my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); |
# Check for network failure |
# Check for network failure |
Line 3502 sub shown_symb {
|
Line 3505 sub shown_symb {
|
if ($self->encrypted()) {return &Apache::lonenc::encrypted($self->symb());} |
if ($self->encrypted()) {return &Apache::lonenc::encrypted($self->symb());} |
return $self->symb(); |
return $self->symb(); |
} |
} |
|
sub id { |
|
my $self=shift; |
|
return $self->{ID}; |
|
} |
|
sub enclosing_map_src { |
|
my $self=shift; |
|
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/; |
|
return $self->navHash('map_id_'.$first); |
|
} |
sub symb { |
sub symb { |
my $self=shift; |
my $self=shift; |
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/; |
(my $first, my $second) = $self->{ID} =~ /(\d+).(\d+)/; |
Line 4364 sub ATTEMPTED { return 16; }
|
Line 4376 sub ATTEMPTED { return 16; }
|
|
|
sub getCompletionStatus { |
sub getCompletionStatus { |
my $self = shift; |
my $self = shift; |
|
my $part = shift; |
return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE}); |
return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE}); |
|
|
my $status = $self->queryRestoreHash('solved', shift); |
my $status = $self->queryRestoreHash('solved', $part); |
|
|
# Left as separate if statements in case we ever do more with this |
# Left as separate if statements in case we ever do more with this |
if ($status eq 'correct_by_student') {return $self->CORRECT;} |
if ($status eq 'correct_by_student') {return $self->CORRECT;} |
if ($status eq 'correct_by_scantron') {return $self->CORRECT;} |
if ($status eq 'correct_by_scantron') {return $self->CORRECT;} |
if ($status eq 'correct_by_override') {return $self->CORRECT_BY_OVERRIDE; } |
if ($status eq 'correct_by_override') { |
|
return $self->CORRECT_BY_OVERRIDE; |
|
} |
if ($status eq 'incorrect_attempted') {return $self->INCORRECT; } |
if ($status eq 'incorrect_attempted') {return $self->INCORRECT; } |
if ($status eq 'incorrect_by_override') {return $self->INCORRECT_BY_OVERRIDE; } |
if ($status eq 'incorrect_by_override') {return $self->INCORRECT_BY_OVERRIDE; } |
if ($status eq 'excused') {return $self->EXCUSED; } |
if ($status eq 'excused') {return $self->EXCUSED; } |
Line 4475 An answer has been submitted, but the st
|
Line 4490 An answer has been submitted, but the st
|
|
|
sub TRIES_LEFT { return 20; } |
sub TRIES_LEFT { return 20; } |
sub ANSWER_SUBMITTED { return 21; } |
sub ANSWER_SUBMITTED { return 21; } |
|
sub PARTIALLY_CORRECT{ return 22; } |
|
|
sub status { |
sub status { |
my $self = shift; |
my $self = shift; |
Line 4493 sub status {
|
Line 4509 sub status {
|
my $suppressFeedback = $self->problemstatus($part) eq 'no'; |
my $suppressFeedback = $self->problemstatus($part) eq 'no'; |
# If there's an answer date and we're past it, don't |
# If there's an answer date and we're past it, don't |
# suppress the feedback; student should know |
# suppress the feedback; student should know |
if ($self->answerdate($part) && $self->answerdate($part) < time()) { |
if ($self->duedate($part) && $self->duedate($part) < time() && |
|
$self->answerdate($part) && $self->answerdate($part) < time()) { |
$suppressFeedback = 0; |
$suppressFeedback = 0; |
} |
} |
|
|
# There are a few whole rows we can dispose of: |
# There are a few whole rows we can dispose of: |
if ($completionStatus == CORRECT || |
if ($completionStatus == CORRECT || |
$completionStatus == CORRECT_BY_OVERRIDE ) { |
$completionStatus == CORRECT_BY_OVERRIDE ) { |
return $suppressFeedback? ANSWER_SUBMITTED : CORRECT; |
if ( $suppressFeedback ) { return ANSWER_SUBMITTED } |
|
my $awarded=$self->awarded($part); |
|
if ($awarded < 1 && $awarded > 0) { |
|
return PARTIALLY_CORRECT; |
|
} elsif ($awarded<1) { |
|
return INCORRECT; |
|
} |
|
return CORRECT; |
} |
} |
|
|
if ($completionStatus == ATTEMPTED) { |
if ($completionStatus == ATTEMPTED) { |
Line 4587 my %compositeToSimple =
|
Line 4611 my %compositeToSimple =
|
NETWORK_FAILURE() => ERROR, |
NETWORK_FAILURE() => ERROR, |
NOTHING_SET() => CLOSED, |
NOTHING_SET() => CLOSED, |
CORRECT() => CORRECT, |
CORRECT() => CORRECT, |
|
PARTIALLY_CORRECT() => PARTIALLY_CORRECT, |
EXCUSED() => CORRECT, |
EXCUSED() => CORRECT, |
PAST_DUE_NO_ANSWER() => INCORRECT, |
PAST_DUE_NO_ANSWER() => INCORRECT, |
PAST_DUE_ANSWER_LATER() => INCORRECT, |
PAST_DUE_ANSWER_LATER() => INCORRECT, |