version 1.361, 2006/02/16 19:38:27
|
version 1.369, 2006/03/14 22:17:20
|
Line 1095 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 1112 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 1135 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='". |
$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 1143 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 1178 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 1472 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 2270 sub get_user_data {
|
Line 2271 sub get_user_data {
|
sub get_discussion_data { |
sub get_discussion_data { |
my $self = shift; |
my $self = shift; |
if ($self->{RETRIEVED_DISCUSSION_DATA}) { |
if ($self->{RETRIEVED_DISCUSSION_DATA}) { |
return $self->{DISCUSSION_DATA}; |
return $self->{DISCUSSION_DATA}; |
} |
} |
|
|
|
$self->generate_email_discuss_status(); |
|
|
my $cid=$env{'request.course.id'}; |
my $cid=$env{'request.course.id'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cdom=$env{'course.'.$cid.'.domain'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
|
|
# Retrieve discussion data for resources in course |
# Retrieve discussion data for resources in course |
my %discussion_data = &Apache::lonnet::dump($cid,$cdom,$cnum); |
my %discussion_data = &Apache::lonnet::dumpstore($cid,$cdom,$cnum); |
|
|
|
|
$self->{DISCUSSION_DATA} = \%discussion_data; |
$self->{DISCUSSION_DATA} = \%discussion_data; |
$self->{RETRIEVED_DISCUSSION_DATA} = 1; |
$self->{RETRIEVED_DISCUSSION_DATA} = 1; |
return $self->{DISCUSSION_DATA}; |
return $self->{DISCUSSION_DATA}; |
Line 2341 sub hasDiscussion {
|
Line 2344 sub hasDiscussion {
|
} |
} |
} |
} |
|
|
|
sub last_post_time { |
|
my $self = shift; |
|
my $symb = shift; |
|
my $ressymb = $self->wrap_symb($symb); |
|
return $self->{DISCUSSION_TIME}->{$ressymb}; |
|
} |
|
|
|
sub unread_discussion { |
|
my $self = shift; |
|
my $symb = shift; |
|
|
|
$self->get_discussion_data(); |
|
|
|
my $ressymb = $self->wrap_symb($symb); |
|
|
|
my $version = $self->{DISCUSSION_DATA}{'version:'.$ressymb}; |
|
if (!$version) { return; } |
|
|
|
my $prevread = $self->{LAST_READ}{$ressymb}; |
|
|
|
my $unreadcount = 0; |
|
my $hiddenflag = 0; |
|
my $deletedflag = 0; |
|
my ($hidden,$deleted); |
|
|
|
my %subjects; |
|
|
|
for (my $id=$version; $id>0; $id--) { |
|
my $vkeys=$self->{DISCUSSION_DATA}{$id.':keys:'.$ressymb}; |
|
my @keys=split(/:/,$vkeys); |
|
if (grep(/^hidden$/ ,@keys)) { |
|
if (!$hiddenflag) { |
|
$hidden = $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':hidden'}; |
|
$hiddenflag = 1; |
|
} |
|
} elsif (grep(/^deleted$/,@keys)) { |
|
if (!$deletedflag) { |
|
$deleted = $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':deleted'}; |
|
$deletedflag = 1; |
|
} |
|
} else { |
|
if (($hidden !~/\.$id\./) && ($deleted !~/\.$id\./) |
|
&& $prevread < $self->{DISCUSSION_DATA}{$id.':'.$ressymb.':timestamp'}) { |
|
$unreadcount++; |
|
$subjects{$unreadcount}= |
|
$id.': '.$self->{DISCUSSION_DATA}{$id.':'.$ressymb.':subject'}; |
|
} |
|
} |
|
} |
|
if (wantarray) { |
|
return ($unreadcount,\%subjects); |
|
} |
|
return $unreadcount |
|
} |
|
|
sub wrap_symb { |
sub wrap_symb { |
my $self = shift; |
my $self = shift; |
my $symb = shift; |
my $symb = shift; |
Line 2755 sub usedVersion {
|
Line 2813 sub usedVersion {
|
1; |
1; |
|
|
package Apache::lonnavmaps::iterator; |
package Apache::lonnavmaps::iterator; |
use WeakRef; |
use Scalar::Util qw(weaken); |
use Apache::lonnet; |
use Apache::lonnet; |
|
|
=pod |
=pod |
Line 3236 sub populateStack {
|
Line 3294 sub populateStack {
|
1; |
1; |
|
|
package Apache::lonnavmaps::DFSiterator; |
package Apache::lonnavmaps::DFSiterator; |
use WeakRef; |
use Scalar::Util qw(weaken); |
use Apache::lonnet; |
use Apache::lonnet; |
|
|
# Not documented in the perldoc: This is a simple iterator that just walks |
# Not documented in the perldoc: This is a simple iterator that just walks |
Line 3420 sub populateStack {
|
Line 3478 sub populateStack {
|
1; |
1; |
|
|
package Apache::lonnavmaps::resource; |
package Apache::lonnavmaps::resource; |
use WeakRef; |
use Scalar::Util qw(weaken); |
use Apache::lonnet; |
use Apache::lonnet; |
|
|
=pod |
=pod |
Line 3599 sub kind { my $self=shift; return $self-
|
Line 3657 sub kind { my $self=shift; return $self-
|
sub randomout { my $self=shift; return $self->navHash("randomout_", 1); } |
sub randomout { my $self=shift; return $self->navHash("randomout_", 1); } |
sub randompick { |
sub randompick { |
my $self = shift; |
my $self = shift; |
return $self->{NAV_MAP}->{PARM_HASH}->{$self->symb . |
return $self->{NAV_MAP}->{PARM_HASH}->{$self->symb().'.0.randompick'}; |
'.0.parameter_randompick'}; |
|
} |
} |
sub link { |
sub link { |
my $self=shift; |
my $self=shift; |
Line 3718 sub retrieveResources {
|
Line 3775 sub retrieveResources {
|
return $self->{NAV_MAP}->retrieveResources(@_); |
return $self->{NAV_MAP}->retrieveResources(@_); |
} |
} |
|
|
|
sub is_exam { |
|
my ($self,$part) = @_; |
|
if ($self->parmval('type',$part) eq 'exam') { |
|
return 1; |
|
} |
|
if ($self->src() =~ /\.(exam)$/) { |
|
return 1; |
|
} |
|
return 0; |
|
} |
sub is_html { |
sub is_html { |
my $self=shift; |
my $self=shift; |
my $src = $self->src(); |
my $src = $self->src(); |
Line 4060 Returns a false value if there has been
|
Line 4127 Returns a false value if there has been
|
logged in, true if there has. Always returns false if the discussion |
logged in, true if there has. Always returns false if the discussion |
data was not extracted when the nav map was constructed. |
data was not extracted when the nav map was constructed. |
|
|
|
=item * B<last_post_time>: |
|
|
|
Returns a false value if there hasn't been discussion otherwise returns |
|
unix timestamp of last time a discussion posting (or edit) was made. |
|
|
|
=item * B<unread_discussion>: |
|
|
|
returns in scalar context the count of the number of unread discussion |
|
postings |
|
|
|
returns in list context both the count of postings and a hash ref |
|
containing the subjects of all unread postings |
|
|
=item * B<getFeedback>: |
=item * B<getFeedback>: |
|
|
Gets the feedback for the resource and returns the raw feedback string |
Gets the feedback for the resource and returns the raw feedback string |
Line 4080 sub hasDiscussion {
|
Line 4160 sub hasDiscussion {
|
return $self->{NAV_MAP}->hasDiscussion($self->symb()); |
return $self->{NAV_MAP}->hasDiscussion($self->symb()); |
} |
} |
|
|
|
sub last_post_time { |
|
my $self = shift; |
|
return $self->{NAV_MAP}->last_post_time($self->symb()); |
|
} |
|
|
|
sub unread_discussion { |
|
my $self = shift; |
|
return $self->{NAV_MAP}->unread_discussion($self->symb()); |
|
} |
|
|
sub getFeedback { |
sub getFeedback { |
my $self = shift; |
my $self = shift; |
my $source = $self->src(); |
my $source = $self->src(); |
Line 4177 sub countResponses {
|
Line 4267 sub countResponses {
|
sub responseTypes { |
sub responseTypes { |
my $self = shift; |
my $self = shift; |
my %responses; |
my %responses; |
foreach my $part ($self->parts()) { |
foreach my $part (@{$self->parts()}) { |
foreach my $responsetype ($self->responseType($part)) { |
foreach my $responsetype ($self->responseType($part)) { |
$responses{$responsetype}++ if (defined($responsetype)); |
$responses{$responsetype}++ if (defined($responsetype)); |
} |
} |