version 1.333, 2012/01/10 14:52:57
|
version 1.338, 2012/03/09 15:02:31
|
Line 955 sub build_posting_display {
|
Line 955 sub build_posting_display {
|
my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; |
my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; |
# Array with likes to figure out averages, etc. |
# Array with likes to figure out averages, etc. |
my @theselikes=(); |
my @theselikes=(); |
|
# Hashes containing likes and unlikes for this user. |
|
my %userlikes=(); |
|
my %userunlikes=(); |
# Is the user allowed to see the real name behind anonymous postings? |
# Is the user allowed to see the real name behind anonymous postings? |
my $see_anonymous = |
my $see_anonymous = |
&Apache::lonnet::allowed('rin',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')); |
&Apache::lonnet::allowed('rin',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')); |
Line 994 sub build_posting_display {
|
Line 997 sub build_posting_display {
|
next if ($contrib{$idx.':deleted'}); |
next if ($contrib{$idx.':deleted'}); |
next if ($contrib{$idx.':hidden'}); |
next if ($contrib{$idx.':hidden'}); |
unless ((($hiddens{$idx}) && (!$seeid)) || ($deletions{$idx}) || (!$contrib{$idx.':message'})) { |
unless ((($hiddens{$idx}) && (!$seeid)) || ($deletions{$idx}) || (!$contrib{$idx.':message'})) { |
push(@theselikes,$likes{$symb.':'.$idx.':likes'}); |
if ($likes{$symb.':'.$idx.':likes'} ne '') { |
|
push(@theselikes,$likes{$symb.':'.$idx.':likes'}); |
|
if (ref($likes{$symb.':'.$idx.':likers'}) eq 'HASH') { |
|
if (exists($likes{$symb.':'.$idx.':likers'}{$thisuser})) { |
|
$userlikes{$idx} = 1; |
|
} |
|
} |
|
if (ref($likes{$symb.':'.$idx.':unlikers'}) eq 'HASH') { |
|
if (exists($likes{$symb.':'.$idx.':unlikers'}{$thisuser})) { |
|
$userunlikes{$idx} = 1; |
|
} |
|
} |
|
} |
} |
} |
} |
} |
# Figure out average likes and standard deviation if there are enough discussions to warrant that |
# Figure out average likes and standard deviation if there are enough |
|
# discussions to warrant that |
my $ave=0; |
my $ave=0; |
my $stddev=10000; |
my $stddev=10000; |
if ($#theselikes>1) { |
if ($#theselikes>1) { |
Line 1021 sub build_posting_display {
|
Line 1037 sub build_posting_display {
|
my $twominus=$ave-2.*$stddev; |
my $twominus=$ave-2.*$stddev; |
# |
# |
# This is now the real loop. Go through all entries, pick up what we need |
# This is now the real loop. Go through all entries, pick up what we need |
# |
# |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
my $idx=$id; |
my $idx=$id; |
next if ($contrib{$idx.':deleted'}); |
next if ($contrib{$idx.':deleted'}); |
Line 1071 sub build_posting_display {
|
Line 1087 sub build_posting_display {
|
my %subjects = (); |
my %subjects = (); |
my %attachtxt = (); |
my %attachtxt = (); |
my %allattachments = (); |
my %allattachments = (); |
my ($screenname,$plainname); |
my ($screenname,$plainname,$showaboutme); |
my $sender = &mt('Anonymous'); |
my $sender = &mt('Anonymous'); |
# Anonymous users getting number within a discussion |
# Anonymous users getting number within a discussion |
# Since idx is in static order, this should give the same sequence every time. |
# Since idx is in static order, this should give the same sequence every time. |
Line 1081 sub build_posting_display {
|
Line 1097 sub build_posting_display {
|
$$anonhash{$key}=&mt('Anonymous').' '.$anoncnt; |
$$anonhash{$key}=&mt('Anonymous').' '.$anoncnt; |
} |
} |
my ($message,$subject,$vgrlink,$ctlink); |
my ($message,$subject,$vgrlink,$ctlink); |
&get_post_contents(\%contrib,$idx,$seeid,$outputtarget,\%messages,\%subjects,\%allattachments,\%attachtxt,$imsfiles,\$screenname,\$plainname,$numoldver); |
&get_post_contents(\%contrib,$idx,$seeid,$outputtarget,\%messages,\%subjects,\%allattachments,\%attachtxt,$imsfiles,\$screenname,\$plainname,\$showaboutme,$numoldver); |
|
|
|
|
# Set up for sorting by subject |
# Set up for sorting by subject |
Line 1111 sub build_posting_display {
|
Line 1127 sub build_posting_display {
|
} |
} |
} |
} |
if (!$contrib{$idx.':anonymous'} || $see_anonymous) { |
if (!$contrib{$idx.':anonymous'} || $see_anonymous) { |
$sender=&Apache::loncommon::aboutmewrapper( |
if ($showaboutme) { |
$plainname, |
$sender = &Apache::loncommon::aboutmewrapper( |
$contrib{$idx.':sendername'}, |
$plainname, |
$contrib{$idx.':senderdomain'}).' ('. |
$contrib{$idx.':sendername'}, |
$contrib{$idx.':sendername'}.':'. |
$contrib{$idx.':senderdomain'}); |
$contrib{$idx.':senderdomain'}.')'; |
} else { |
|
$sender = $plainname; |
|
} |
|
if ($see_anonymous) { |
|
$sender .= ' ('.$contrib{$idx.':sendername'}.':'. |
|
$contrib{$idx.':senderdomain'}.')'; |
|
} |
$sender = '<b>'.$sender.'</b>'; |
$sender = '<b>'.$sender.'</b>'; |
if ($contrib{$idx.':anonymous'}) { |
if ($contrib{$idx.':anonymous'}) { |
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
Line 1155 sub build_posting_display {
|
Line 1177 sub build_posting_display {
|
@{$$namesort{$lastname}{$firstname}} = ("$idx"); |
@{$$namesort{$lastname}{$firstname}} = ("$idx"); |
} |
} |
if ($outputtarget ne 'tex') { |
if ($outputtarget ne 'tex') { |
|
# Add karma stars |
my $karma=&userkarma($contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'}); |
my $karma=&userkarma($contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'}); |
for (my $i=1;$i<=$karma;$i++) { |
for (my $i=1;$i<=$karma;$i++) { |
$sender.='<img border="0" src="/res/adm/pages/star.gif" alt="'.&mt('Contributor Kudos').'" />'; |
$sender.='<img border="0" src="/res/adm/pages/star.gif" alt="'.&mt('Contributor Kudos').'" />'; |
} |
} |
unless ($likes{$symb.':'.$idx.':likers'}=~/\,\Q$thisuser\E\,/) { |
# Can people edit this? |
$sender.=' '.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsup.png" alt="'.&mt('Like').'" />','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting")); |
|
} |
|
unless ($likes{$symb.':'.$idx.':unlikers'}=~/\,\Q$thisuser\E\,/) { |
|
$sender.=' '.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsdown.png" alt="'.&mt('Unlike').'" />',,'unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting")); |
|
} |
|
my $thislikes=$likes{$symb.':'.$idx.':likes'}; |
|
if ($thislikes>0) { |
|
$sender.=' ('.&mt("[_1] likes",$thislikes).')'; |
|
} elsif ($thislikes<0) { |
|
$sender.=' ('.&mt("[_1] unlikes",abs($thislikes)).')'; |
|
} |
|
if (&editing_allowed($escsymb.':::'.$idx,$group)) { |
if (&editing_allowed($escsymb.':::'.$idx,$group)) { |
if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { |
if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { |
$sender.=' '. |
$sender.=' '. |
Line 1366 sub build_posting_display {
|
Line 1378 sub build_posting_display {
|
} elsif ($thislikes<$oneminus) { |
} elsif ($thislikes<$oneminus) { |
$likesize="75"; |
$likesize="75"; |
} |
} |
|
# Actually glue in the message itself |
$$discussionitems[$idx].= '<br /><blockquote>'. |
$$discussionitems[$idx].= '<br /><blockquote>'. |
"<div style='font-size:$likesize%'>". |
"<div style='font-size:$likesize%'>". |
$message. |
$message. |
'</div></blockquote>'; |
'</div></blockquote>'; |
|
# Put in the like and unlike buttons |
|
if ($userlikes{$idx}) { |
|
$$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsup_gray.png" alt="'.&mt('You like this posting').'" />'; |
|
} else { |
|
$$discussionitems[$idx].=' '.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsup.png" alt="'.&mt('Like').'" />','like',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Like this posting")); |
|
} |
|
if ($userunlikes{$idx}) { |
|
$$discussionitems[$idx].='<img border="0" src="/res/adm/pages/thumbsdown_gray.png" alt="'.&mt('You unlike this posting').'" />'; |
|
} else { |
|
$$discussionitems[$idx].=' '.&discussion_link($symb,'<img border="0" src="/res/adm/pages/thumbsdown.png" alt="'.&mt('Unlike').'" />','unlike',$idx,$$newpostsflag,$prevread,&group_args($group),&mt("Unlike this posting")); |
|
} |
|
my $thislikes=$likes{$symb.':'.$idx.':likes'}; |
|
if ($thislikes>0) { |
|
$$discussionitems[$idx].=' ('.&mt("[_1] likes",$thislikes).')'; |
|
} elsif ($thislikes<0) { |
|
$$discussionitems[$idx].=' ('.&mt("[_1] unlikes",abs($thislikes)).')'; |
|
} |
|
# If there is any history to this post, inform the reader |
if ($contrib{$idx.':history'}) { |
if ($contrib{$idx.':history'}) { |
my @postversions = (); |
my @postversions = (); |
$$discussionitems[$idx] .= &mt('This post has been edited by the author.'); |
$$discussionitems[$idx] .= ' '.&mt('This post has been edited by the author.'); |
if ($seeid) { |
if ($seeid) { |
$$discussionitems[$idx] .= ' '. |
$$discussionitems[$idx] .= ' '. |
&discussion_link($symb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group)); |
&discussion_link($symb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group)); |
Line 1459 sub filter_regexp {
|
Line 1490 sub filter_regexp {
|
|
|
|
|
sub get_post_contents { |
sub get_post_contents { |
my ($contrib,$idx,$seeid,$type,$messages,$subjects,$allattachments,$attachtxt,$imsfiles,$screenname,$plainname,$numver) = @_; |
my ($contrib,$idx,$seeid,$type,$messages,$subjects,$allattachments,$attachtxt,$imsfiles,$screenname,$plainname,$showaboutme,$numver) = @_; |
my $discussion = ''; |
my $discussion = ''; |
my $start=$numver; |
my $start=$numver; |
my $end=$numver + 1; |
my $end=$numver + 1; |
Line 1477 sub get_post_contents {
|
Line 1508 sub get_post_contents {
|
$$contrib{$idx.':sendername'}, |
$$contrib{$idx.':sendername'}, |
$$contrib{$idx.':senderdomain'}); |
$$contrib{$idx.':senderdomain'}); |
$$screenname=$$contrib{$idx.':screenname'}; |
$$screenname=$$contrib{$idx.':screenname'}; |
|
$$showaboutme = &Apache::lonnet::usertools_access($$contrib{$idx.':sendername'}, |
my $sender=&Apache::loncommon::aboutmewrapper( |
$$contrib{$idx.':senderdomain'}, |
|
'aboutme'); |
|
my $sender = $$plainname; |
|
if ($$showaboutme) { |
|
$sender = &Apache::loncommon::aboutmewrapper( |
$$plainname, |
$$plainname, |
$$contrib{$idx.':sendername'}, |
$$contrib{$idx.':sendername'}, |
$$contrib{$idx.':senderdomain'}).' ('. |
$$contrib{$idx.':senderdomain'}); |
$$contrib{$idx.':sendername'}.':'. |
} |
$$contrib{$idx.':senderdomain'}.')'; |
if ($seeid) { |
|
$sender .= ' ('.$$contrib{$idx.':sendername'}.':'. |
|
$$contrib{$idx.':senderdomain'}.')'; |
|
} |
my $attachmenturls = $$contrib{$idx.':attachmenturl'}; |
my $attachmenturls = $$contrib{$idx.':attachmenturl'}; |
my @postversions = (); |
my @postversions = (); |
if ($type eq 'allversions' || $type eq 'export') { |
if ($type eq 'allversions' || $type eq 'export') { |
Line 3465 sub generate_attachments_button {
|
Line 3503 sub generate_attachments_button {
|
my ($idx,$attachnum,$ressymb,$now,$currnewattach,$deloldattach, |
my ($idx,$attachnum,$ressymb,$now,$currnewattach,$deloldattach, |
$numoldver,$mode,$blockblog) = @_; |
$numoldver,$mode,$blockblog) = @_; |
my $origpage = $ENV{'REQUEST_URI'}; |
my $origpage = $ENV{'REQUEST_URI'}; |
my $att=$attachnum.' '.&mt("attachments"); |
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'clic' => 'Click to add/remove attachments', |
'clic' => 'Add/remove attachments', |
); |
); |
my $response = (<<END); |
my $response = (<<END); |
<br /> |
<br /> |
<form name="attachment" action="/adm/feedback?attach=$ressymb" method="post"> |
<form name="attachment" action="/adm/feedback?attach=$ressymb" method="post"> |
$lt{'clic'}: <input type="button" value="$att" |
<input type="button" value="$lt{'clic'}" |
onclick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=escape(document.mailform.comment.value);this.form.subject.value=escape(document.mailform.subject.value); |
onclick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=escape(document.mailform.comment.value);this.form.subject.value=escape(document.mailform.subject.value); |
END |
END |
if (!$blockblog) { |
if (!$blockblog) { |
Line 3790 sub handler {
|
Line 3827 sub handler {
|
my %attachmsgs = (); |
my %attachmsgs = (); |
my %allattachments = (); |
my %allattachments = (); |
my %imsfiles = (); |
my %imsfiles = (); |
my ($screenname,$plainname); |
my ($screenname,$plainname,$showaboutme); |
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$r->print(&get_post_contents(\%contrib,$idx,$seeid,'allversions',\%messages,\%subjects,\%allattachments,\%attachmsgs,\%imsfiles,\$screenname,\$plainname)); |
$r->print(&get_post_contents(\%contrib,$idx,$seeid,'allversions',\%messages,\%subjects,\%allattachments,\%attachmsgs,\%imsfiles,\$screenname,\$plainname,\$showaboutme)); |
} |
} |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
Line 3998 ENDREDIR
|
Line 4035 ENDREDIR
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}, |
'^'.$prefix); |
'^'.$prefix); |
# Get all who like or unlike this |
|
my $currentlikers=$contrib{$prefix.'likers'}; |
# Get current like or unlike status for the $idx for this user. |
my $currentunlikers=$contrib{$prefix.'unlikers'}; |
my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; |
|
my ($userlikes,$userunlikes); |
|
if (ref($contrib{$prefix.'likers'}) eq 'HASH') { |
|
if (exists($contrib{$prefix.'likers'}{$thisuser})) { |
|
$userlikes = 1; |
|
} |
|
} |
|
if (ref($contrib{$prefix.'unlikers'}) eq 'HASH') { |
|
if (exists($contrib{$prefix.'unlikers'}{$thisuser})) { |
|
$userunlikes = 1; |
|
} |
|
} |
# Get the current "likes" count |
# Get the current "likes" count |
my $likes=$contrib{$prefix.'likes'}; |
my $likes=$contrib{$prefix.'likes'}; |
# Find out if they already voted |
# Find out if they already voted |
# Users cannot like a post twice, or unlike it twice. They can change their mind, though |
# Users cannot like a post twice, or unlike it twice. |
|
# They can change their mind, though. |
my $alreadyflag=0; |
my $alreadyflag=0; |
my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; |
my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; |
if ($env{'form.like'}) { |
if ($env{'form.like'}) { |
if ($currentlikers=~/\,\Q$thisuser\E\,/) { |
if ($userlikes) { |
$alreadyflag=1; |
$alreadyflag=1; |
|
} elsif ($userunlikes) { |
|
delete($contrib{$prefix.'unlikers'}{$thisuser}); |
|
$likes++; |
} else { |
} else { |
if ($currentunlikers=~/\,\Q$thisuser\E\,/) { |
if (ref($contrib{$prefix.'likers'}) eq 'HASH') { |
$currentunlikers=~s/\,\Q$thisuser\E\,//g; |
$contrib{$prefix.'likers'}{$thisuser} = 1; |
} else { |
} else { |
$currentlikers.=','.$thisuser.','; |
$contrib{$prefix.'likers'} = {$thisuser => 1}; |
} |
} |
$likes++; |
$likes++; |
} |
} |
} else { |
} else { |
if ($currentunlikers=~/\,\Q$thisuser\E\,/) { |
if ($userunlikes) { |
$alreadyflag=1; |
$alreadyflag=1; |
|
} elsif ($userlikes) { |
|
delete($contrib{$prefix.'likers'}{$thisuser}); |
|
$likes--; |
} else { |
} else { |
if ($currentlikers=~/\,\Q$thisuser\E\,/) { |
if (ref($contrib{$prefix.'unlikers'}) eq 'HASH') { |
$currentlikers=~s/\,\Q$thisuser\E\,//g; |
$contrib{$prefix.'unlikers'}{$thisuser} = 1; |
} else { |
} else { |
$currentunlikers.=','.$thisuser.','; |
$contrib{$prefix.'unlikers'} = {$thisuser => 1}; |
} |
} |
$likes--; |
$likes--; |
} |
} |
} |
} |
my $result; |
my $result; |
# $alreadyflag would be 1 if they tried to double-like or double-unlike |
# $alreadyflag would be 1 if they tried to double-like or double-unlike |
unless ($alreadyflag) { |
unless ($alreadyflag) { |
my %newhash=($prefix.'likes' => $likes, |
my %newhash=($prefix.'likes' => $likes, |
$prefix.'likers' => $currentlikers, |
$prefix.'likers' => $contrib{$prefix.'likers'}, |
$prefix.'unlikers' => $currentunlikers); |
$prefix.'unlikers' => $contrib{$prefix.'unlikers'}); |
# Store data in db-file "disclikes" |
# Store data in db-file "disclikes" |
if (&Apache::lonnet::put('disclikes', |
if (&Apache::lonnet::put('disclikes', |
\%newhash, |
\%newhash, |