version 1.349.2.1, 2005/11/22 18:58:37
|
version 1.363, 2006/02/24 22:54:50
|
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->PARTIALLY_CORRECT => 'navmap.partial.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 530 sub getDescription {
|
Line 530 sub getDescription {
|
if ($status == $res->PAST_DUE_NO_ANSWER) { |
if ($status == $res->PAST_DUE_NO_ANSWER) { |
return &mt("Was due")." " . timeToHumanString($res->duedate($part),'end'); |
return &mt("Was due")." " . timeToHumanString($res->duedate($part),'end'); |
} |
} |
if ($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) { |
if (($status == $res->ANSWER_OPEN || $status == $res->PARTIALLY_CORRECT) |
|
&& $res->handgrade($part) ne 'yes') { |
return &mt("Answer available"); |
return &mt("Answer available"); |
} |
} |
if ($status == $res->EXCUSED) { |
if ($status == $res->EXCUSED) { |
Line 1094 sub render_resource {
|
Line 1095 sub render_resource {
|
|
|
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="'.&mt('Problem').'" border="0" />'; |
} else { |
} else { |
$icon = $params->{'indentString'}; |
$icon = $params->{'indentString'}; |
} |
} |
Line 1111 sub render_resource {
|
Line 1112 sub render_resource {
|
} |
} |
|
|
my $folderType = $resource->is_sequence() ? 'folder' : 'page'; |
my $folderType = $resource->is_sequence() ? 'folder' : 'page'; |
|
my $title=$resource->title; |
|
$title=~s/\"/\"/g; |
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='". |
$icon = "<img src='$location/$icon' alt=\"". |
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
($nowOpen ? &mt('Open Folder') : &mt('Close Folder')).' '.$title."\" border='0' />"; |
|
|
$linkopen = "<a href=\"" . $params->{'url'} . '?' . |
$linkopen = "<a href=\"" . $params->{'url'} . '?' . |
$params->{'queryString'} . '&filter='; |
$params->{'queryString'} . '&filter='; |
Line 1134 sub render_resource {
|
Line 1136 sub render_resource {
|
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . |
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') . |
'.nomanip.gif'; |
'.nomanip.gif'; |
$icon = "<img src='$location/$icon' alt='". |
$icon = "<img src='$location/$icon' alt='". |
($nowOpen ? 'Open Folder' : 'Close Folder')."' border='0' />"; |
($nowOpen ? &mt('Open Folder') : &mt('Close Folder')).' '.$title."' border='0' />"; |
|
|
$linkopen = ""; |
$linkopen = ""; |
$linkclose = ""; |
$linkclose = ""; |
Line 1142 sub render_resource {
|
Line 1144 sub render_resource {
|
} |
} |
|
|
if ($resource->randomout()) { |
if ($resource->randomout()) { |
$nonLinkedText .= ' <i>(hidden)</i> '; |
$nonLinkedText .= ' <i>('.&mt('hidden').')</i> '; |
} |
} |
if (!$resource->condval()) { |
if (!$resource->condval()) { |
$nonLinkedText .= ' <i>(conditionally hidden)</i> '; |
$nonLinkedText .= ' <i>('.&mt('conditionally hidden').')</i> '; |
} |
} |
|
|
# We're done preparing and finally ready to start the rendering |
# We're done preparing and finally ready to start the rendering |
Line 1177 sub render_resource {
|
Line 1179 sub render_resource {
|
if ($resource->is_problem() && $part ne '0' && |
if ($resource->is_problem() && $part ne '0' && |
!$params->{'condensed'}) { |
!$params->{'condensed'}) { |
my $displaypart=$resource->part_display($part); |
my $displaypart=$resource->part_display($part); |
$partLabel = " (Part: $displaypart)"; |
$partLabel = " (".&mt('Part: [_1]', $displaypart).")"; |
if ($link!~/\#/) { $link.='#'.&Apache::lonnet::escape($part); } |
if ($link!~/\#/) { $link.='#'.&Apache::lonnet::escape($part); } |
$title = ""; |
$title = ""; |
} |
} |
|
|
if ($params->{'condensed'} && $resource->countParts() > 1) { |
if ($params->{'condensed'} && $resource->countParts() > 1) { |
$nonLinkedText .= ' (' . $resource->countParts() . ' parts)'; |
$nonLinkedText .= ' ('.&mt('[_1] parts', $resource->countParts()).')'; |
} |
} |
|
|
my $target; |
my $target; |
Line 1471 sub render {
|
Line 1473 sub render {
|
$navmap = Apache::lonnavmaps::navmap->new(); |
$navmap = Apache::lonnavmaps::navmap->new(); |
if (!defined($navmap)) { |
if (!defined($navmap)) { |
# no londer in course |
# no londer in course |
return '<font color="red">No course selected</font><br /> |
return '<font color="red">'.&mt('No course selected').'</font><br /> |
<a href="/adm/roles">Select a course</a><br />'; |
<a href="/adm/roles">'.&mt('Select a course').'</a><br />'; |
} |
} |
} |
} |
|
|
Line 2065 In order of increasing complexity and po
|
Line 2067 In order of increasing complexity and po
|
|
|
=over 4 |
=over 4 |
|
|
=item * C<$navmap-E<gt>getByX>, where X is B<Id>, B<Symb>, B<Url> or B<MapPc>. This provides |
=item * C<$navmap-E<gt>getByX>, where X is B<Id>, B<Symb> or B<MapPc> and getResourceByUrl. This provides |
various ways to obtain resource objects, based on various identifiers. |
various ways to obtain resource objects, based on various identifiers. |
Use this when you want to request information about one object or |
Use this when you want to request information about one object or |
a handful of resources you already know the identities of, from some |
a handful of resources you already know the identities of, from some |
other source. For more about Ids, Symbs, and MapPcs, see the |
other source. For more about Ids, Symbs, and MapPcs, see the |
Resource documentation. Note that Url should be a B<last resort>, |
Resource documentation. Note that Url should be a B<last resort>, |
not your first choice; it only works when there is only one |
not your first choice; it only really works when there is only one |
instance of the resource in the course, which only applies to |
instance of the resource in the course, which only applies to |
maps, and even that may change in the future. |
maps, and even that may change in the future (see the B<getResourceByUrl> |
|
documentation for more details.) |
|
|
=item * C<my @resources = $navmap-E<gt>retrieveResources(args)>. This |
=item * C<my @resources = $navmap-E<gt>retrieveResources(args)>. This |
retrieves resources matching some criterion and returns them |
retrieves resources matching some criterion and returns them |
Line 2265 sub get_user_data {
|
Line 2268 sub get_user_data {
|
$self->{RETRIEVED_USER_DATA} = 1; |
$self->{RETRIEVED_USER_DATA} = 1; |
} |
} |
|
|
|
sub get_discussion_data { |
|
my $self = shift; |
|
if ($self->{RETRIEVED_DISCUSSION_DATA}) { |
|
return $self->{DISCUSSION_DATA}; |
|
} |
|
|
|
my $cid=$env{'request.course.id'}; |
|
my $cdom=$env{'course.'.$cid.'.domain'}; |
|
my $cnum=$env{'course.'.$cid.'.num'}; |
|
|
|
# Retrieve discussion data for resources in course |
|
my %discussion_data = &Apache::lonnet::dump($cid,$cdom,$cnum); |
|
|
|
$self->{DISCUSSION_DATA} = \%discussion_data; |
|
$self->{RETRIEVED_DISCUSSION_DATA} = 1; |
|
return $self->{DISCUSSION_DATA}; |
|
} |
|
|
|
|
# Internal function: Takes a key to look up in the nav hash and implements internal |
# Internal function: Takes a key to look up in the nav hash and implements internal |
# memory caching of that key. |
# memory caching of that key. |
sub navhash { |
sub navhash { |
Line 2475 sub parmval_real {
|
Line 2497 sub parmval_real {
|
|
|
my $cid=$env{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
my $csec=$env{'request.course.sec'}; |
my $csec=$env{'request.course.sec'}; |
|
my $cgroup=''; |
|
my @cgrps=split(/:/,$env{'request.course.groups'}); |
|
if (@cgrps > 0) { |
|
@cgrps = sort(@cgrps); |
|
$cgroup = $cgrps[0]; |
|
} |
my $uname=$env{'user.name'}; |
my $uname=$env{'user.name'}; |
my $udom=$env{'user.domain'}; |
my $udom=$env{'user.domain'}; |
|
|
Line 2492 sub parmval_real {
|
Line 2520 sub parmval_real {
|
my $mapparm=$mapname.'___(all).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $usercourseprefix=$cid; |
my $usercourseprefix=$cid; |
|
|
|
my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what; |
|
my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm; |
|
my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm; |
|
|
my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what; |
my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what; |
my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm; |
my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm; |
my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm; |
my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm; |
Line 2512 sub parmval_real {
|
Line 2544 sub parmval_real {
|
} |
} |
|
|
# ------------------------------------------------------- second, check course |
# ------------------------------------------------------- second, check course |
|
if ($cgroup ne '' and defined($courseopt)) { |
|
if (defined($$courseopt{$grplevelr})) { return $$courseopt{$grplevelr}; } |
|
if (defined($$courseopt{$grplevelm})) { return $$courseopt{$grplevelm}; } |
|
if (defined($$courseopt{$grplevel})) { return $$courseopt{$grplevel}; } |
|
} |
|
|
if ($csec and defined($courseopt)) { |
if ($csec and defined($courseopt)) { |
if (defined($$courseopt{$seclevelr})) { return $$courseopt{$seclevelr}; } |
if (defined($$courseopt{$seclevelr})) { return $$courseopt{$seclevelr}; } |
if (defined($$courseopt{$seclevelm})) { return $$courseopt{$seclevelm}; } |
if (defined($$courseopt{$seclevelm})) { return $$courseopt{$seclevelm}; } |
Line 2562 sub parmval_real {
|
Line 2600 sub parmval_real {
|
|
|
=pod |
=pod |
|
|
=item * B<getResourceByUrl>(url): |
=item * B<getResourceByUrl>(url,multiple): |
|
|
Retrieves a resource object by URL of the resource. If passed a |
Retrieves a resource object by URL of the resource, unless the optional |
resource object, it will simply return it, so it is safe to use this |
multiple parameter is included in wahich caes an array of resource |
method in code like "$res = $navmap->getResourceByUrl($res)", if |
objects is returned. If passed a resource object, it will simply return |
you're not sure if $res is already an object, or just a URL. If the |
it, so it is safe to use this method in code like |
resource appears multiple times in the course, only the first instance |
"$res = $navmap->getResourceByUrl($res)" |
will be returned. As a result, this is probably useful only for maps. |
if you're not sure if $res is already an object, or just a URL. If the |
|
resource appears multiple times in the course, only the first instance |
|
will be returned (useful for maps), unless the multiple parameter has |
|
been included, in which case all instances are returned in an array. |
|
|
=item * B<retrieveResources>(map, filterFunc, recursive, bailout, showall): |
=item * B<retrieveResources>(map, filterFunc, recursive, bailout, showall): |
|
|
Line 2604 Convience method for
|
Line 2645 Convience method for
|
which will tell whether the map has resources matching the description |
which will tell whether the map has resources matching the description |
in the filter function. |
in the filter function. |
|
|
|
=item * B<usedVersion>(url): |
|
|
|
Retrieves version infomation for a url. Returns the version (a number, or |
|
the string "mostrecent") for resources which have version information in |
|
the big hash. |
|
|
=cut |
=cut |
|
|
|
|
sub getResourceByUrl { |
sub getResourceByUrl { |
my $self = shift; |
my $self = shift; |
my $resUrl = shift; |
my $resUrl = shift; |
|
my $multiple = shift; |
|
|
if (ref($resUrl)) { return $resUrl; } |
if (ref($resUrl)) { return $resUrl; } |
|
|
$resUrl = &Apache::lonnet::clutter($resUrl); |
$resUrl = &Apache::lonnet::clutter($resUrl); |
my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl}; |
my $resId = $self->{NAV_HASH}->{'ids_' . $resUrl}; |
if ($resId =~ /,/) { |
|
$resId = (split (/,/, $resId))[0]; |
|
} |
|
if (!$resId) { return ''; } |
if (!$resId) { return ''; } |
return $self->getById($resId); |
if ($multiple) { |
|
my @resources = (); |
|
my @resIds = split (/,/, $resId); |
|
foreach my $id (@resIds) { |
|
my $resourceId = $self->getById($id); |
|
if ($resourceId) { |
|
push(@resources,$resourceId); |
|
} |
|
} |
|
return @resources; |
|
} else { |
|
if ($resId =~ /,/) { |
|
$resId = (split (/,/, $resId))[0]; |
|
} |
|
return $self->getById($resId); |
|
} |
} |
} |
|
|
sub retrieveResources { |
sub retrieveResources { |
Line 2687 sub hasResource {
|
Line 2747 sub hasResource {
|
return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0; |
return scalar($self->retrieveResources($map, $filterFunc, $recursive, 1, $showall)) > 0; |
} |
} |
|
|
|
sub usedVersion { |
|
my $self = shift; |
|
my $linkurl = shift; |
|
return $self->navhash("version_$linkurl"); |
|
} |
|
|
1; |
1; |
|
|
package Apache::lonnavmaps::iterator; |
package Apache::lonnavmaps::iterator; |
Line 3593 sub condition {
|
Line 3659 sub condition {
|
} |
} |
sub condval { |
sub condval { |
my $self=shift; |
my $self=shift; |
my $uri=&Apache::lonnet::deversion(&Apache::lonnet::declutter($self->src())); |
my ($pathname,$filename) = |
my ($pathname,$filename)=($uri=~m|(.*)/([^/]*)|); |
&Apache::lonnet::split_uri_for_cond($self->src()); |
$pathname=~s/^adm\/wrapper\///; |
|
|
|
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~ |
my $match=($env{'acc.res.'.$env{'request.course.id'}.'.'.$pathname}=~ |
/\&\Q$filename\E\:([\d\|]+)\&/); |
/\&\Q$filename\E\:([\d\|]+)\&/); |
Line 3666 sub is_page {
|
Line 3731 sub is_page {
|
return $self->navHash("is_map_", 1) && |
return $self->navHash("is_map_", 1) && |
$self->navHash("map_type_" . $self->map_pc()) eq 'page'; |
$self->navHash("map_type_" . $self->map_pc()) eq 'page'; |
} |
} |
|
sub is_practice { |
|
my $self=shift; |
|
my ($part) = @_; |
|
if ($self->parmval('type',$part) eq 'practice') { |
|
return 1; |
|
} |
|
return 0; |
|
} |
sub is_problem { |
sub is_problem { |
my $self=shift; |
my $self=shift; |
my $src = $self->src(); |
my $src = $self->src(); |
return ($src =~ /\.(problem|exam|quiz|assess|survey|form|library|task)$/) |
if ($src =~ /\.(problem|exam|quiz|assess|survey|form|library|task)$/) { |
|
return !($self->is_practice()); |
|
} |
|
return 0; |
} |
} |
sub contains_problem { |
sub contains_problem { |
my $self=shift; |
my $self=shift; |
Line 3696 sub is_survey {
|
Line 3772 sub is_survey {
|
} |
} |
return 0; |
return 0; |
} |
} |
|
sub is_task { |
|
my $self=shift; |
|
my $src = $self->src(); |
|
return ($src =~ /\.(task)$/) |
|
} |
|
|
sub is_empty_sequence { |
sub is_empty_sequence { |
my $self=shift; |
my $self=shift; |
Line 4209 sub extractParts {
|
Line 4290 sub extractParts {
|
# where the part names begin and end, and even then, it is possible |
# where the part names begin and end, and even then, it is possible |
# to construct ambiguous situations. |
# to construct ambiguous situations. |
foreach (split /,/, $metadata) { |
foreach (split /,/, $metadata) { |
if ($_ =~ /^([a-zA-Z]+)response_(.*)/) { |
if ($_ =~ /^([a-zA-Z]+)response_(.*)/ |
|
|| $_ =~ /^(Task)_(.*)/) { |
my $responseType = $1; |
my $responseType = $1; |
my $partStuff = $2; |
my $partStuff = $2; |
my $partIdSoFar = ''; |
my $partIdSoFar = ''; |