--- loncom/interface/lonfeedback.pm 2012/01/06 01:59:53 1.323 +++ loncom/interface/lonfeedback.pm 2012/01/06 18:17:44 1.324 @@ -1,7 +1,7 @@ # The LearningOnline Network # Feedback # -# $Id: lonfeedback.pm,v 1.323 2012/01/06 01:59:53 www Exp $ +# $Id: lonfeedback.pm,v 1.324 2012/01/06 18:17:44 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -941,6 +941,8 @@ sub build_posting_display { $env{'course.'.$env{'request.course.id'}.'.num'}, '^'.$symb.':'); my $thisuser=$env{'user.name'}.':'.$env{'user.domain'}; +# Array with likes to figure out averages, etc. + my @theselikes=(); # Is the user allowed to see the real name behind anonymous postings? my $see_anonymous = &Apache::lonnet::allowed('rin',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')); @@ -962,7 +964,7 @@ sub build_posting_display { $hidden =~ s/\.$//; %hiddens = map { $_ => 1 } (split(/\.\./,$hidden)); } -# Versions ... +# Versions if store/restore are used to actually store the messages. if ($contrib{'version'}) { my $oldest = $contrib{'1:timestamp'}; if ($prevread eq '0') { @@ -978,6 +980,8 @@ sub build_posting_display { my $idx=$id; next if ($contrib{$idx.':deleted'}); next if ($contrib{$idx.':hidden'}); +# If we get here, we are actually going to display the message - we don't know where and we don't know if we display +# previous edits, but it counts as one entry my $posttime = $contrib{$idx.':timestamp'}; if ($prevread <= $posttime) { $$newpostsflag = 1; @@ -1112,6 +1116,7 @@ sub build_posting_display { $sender.=' '.&discussion_link($symb,&mt('Unlike'),'unlike',$idx,$$newpostsflag,$prevread,&group_args($group)); } my $thislikes=$likes{$symb.':'.$idx.':likes'}; + push(@theselikes,$thislikes); if ($thislikes>0) { $sender.=' ('.&mt("[_1] likes",$thislikes).')'; } elsif ($thislikes<0) { @@ -1319,12 +1324,34 @@ sub build_posting_display { $$discussionitems[$idx] .= ''.$version.'. - '.&Apache::lonlocal::locallocaltime($postversions[$i]).' '; } } +# end of unless ($$notshown ...) } +# end of if ($message) ... } +# end of the else-branch of target being export } +# end of unless hidden or deleted } +# end of the loop over all discussion entries } +# Figure out average likes and standard deviation if there are enough discussions to warrant that + if ($#theselikes>1) { + my $sum=0; + my $num=$#theselikes+1; + foreach my $thislike (@theselikes) { + $sum.=$thislike; + } + my $ave=$sum/$num; + my $sumsq=0; + foreach my $thislike (@theselikes) { + $sumsq+=($thislike-$ave)*($thislike-$ave); + } + my $stddev=sqrt($sumsq/$num); +# &Apache::lonnet::logthis(join(',',@theselikes)." Ave $ave StdDev $stddev"); + } +# end of "if there actually are any discussion } +# end of subroutine "build_posting_display" } sub filter_regexp {