kareila: (Default)
kareila ([personal profile] kareila) wrote in [site community profile] changelog2009-08-01 03:10 pm

[dw-free] number of participants in poll question

[commit: http://hg.dwscoalition.org/dw-free/rev/03e6393d0809]

http://bugs.dwscoalition.org/show_bug.cgi?id=1522

Display number of participants in poll results.

Patch from LiveJournal; prepared for Dreamwidth by [personal profile] yvi.

Files modified:
  • bin/upgrading/en.dat
  • cgi-bin/LJ/Poll.pm
--------------------------------------------------------------------------------
diff -r 8bdc3476e3c5 -r 03e6393d0809 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat	Sat Aug 01 14:31:59 2009 +0000
+++ b/bin/upgrading/en.dat	Sat Aug 01 10:09:53 2009 -0500
@@ -2319,6 +2319,8 @@ poll.error.whovote=whovote must be 'all'
 
 poll.isclosed=This poll is closed.
 
+poll.participants=, participants: [[total]]
+
 poll.pollnum=Poll #[[num]]
 
 poll.scaleanswers=<b>Mean:</b> [[mean]] <b>Median:</b> [[median]] <b>Std. Dev</b> [[stddev]]
diff -r 8bdc3476e3c5 -r 03e6393d0809 cgi-bin/LJ/Poll.pm
--- a/cgi-bin/LJ/Poll.pm	Sat Aug 01 14:31:59 2009 +0000
+++ b/cgi-bin/LJ/Poll.pm	Sat Aug 01 10:09:53 2009 -0500
@@ -961,21 +961,36 @@ sub render {
     }
     $ret .= LJ::Lang::ml('poll.security2', { 'whovote' => LJ::Lang::ml('poll.security.'.$self->whovote),
                                        'whoview' => LJ::Lang::ml('poll.security.'.$whoview) });
-    $ret .= "<br />\n";
 
-
-    if ( $mode eq 'enter' ) {
-        $ret .= "[ <a href='$LJ::SITEROOT/poll/?id=$pollid&amp;mode=results'>" . BML::ml( 'poll.seeresults' ) . "</a> ]  " if $self->can_view( $remote );
+    if ( $mode eq 'enter' && $self->can_view( $remote ) ) {
+        $ret .= "<br />\n";
+        $ret .= "[ <a href='$LJ::SITEROOT/poll/?id=$pollid&amp;mode=results'>" . BML::ml( 'poll.seeresults' ) . "</a> ]  ";
     } elsif ( $mode eq 'results' ) {
+        #include number of participants
+        my $sth = "";
+        if ($self->is_clustered) {
+            $sth = $self->journal->prepare("SELECT count(DISTINCT userid) FROM pollresult2 WHERE pollid=? AND journalid=?");
+            $sth->execute($pollid, $self->journalid);
+        } else {
+            $sth = $dbr->prepare("SELECT count(DISTINCT userid) FROM pollresult WHERE pollid=?");
+            $sth->execute($pollid);
+        }
+        my ($participants) = $sth->fetchrow_array;
+        $ret .= LJ::Lang::ml('poll.participants', { 'total' => $participants });
+        $ret .= "<br />\n";
+        # change vote link
         $ret .= "[ <a href='$LJ::SITEROOT/poll/?id=$pollid&amp;mode=enter'>" . BML::ml( 'poll.changevote' ) . "</a> ]" if $self->can_vote( $remote ) && !$self->is_closed;
+    } else {
+        $ret .= "<br />\n";
     }
 
+    my $results_table = "";
     ## go through all questions, adding to buffer to return
     foreach my $q (@qs) {
         my $qid = $q->pollqid;
         my $text = $q->text;
         LJ::Poll->clean_poll(\$text);
-        $ret .= "<p>$text</p><div style='margin: 10px 0 10px 40px'>";
+        $results_table .= "<p>$text</p><div style='margin: 10px 0 10px 40px'>";
 
         ### get statistics, for scale questions
         my ($valcount, $valmean, $valstddev, $valmedian);
@@ -1027,7 +1042,7 @@ sub render {
         if ($mode eq "results") {
             ### to see individual's answers
             my $posterid = $self->posterid;
-            $ret .= qq {
+            $results_table .= qq {
                 <a href='$LJ::SITEROOT/poll/?id=$pollid&amp;qid=$qid&amp;mode=ans'
                      class='LJ_PollAnswerLink' lj_pollid='$pollid' lj_qid='$qid' lj_posterid='$posterid' lj_page='0' lj_pagesize="$pagesize"
                      id="LJ_PollAnswerLink_${pollid}_$qid">
@@ -1063,7 +1078,7 @@ sub render {
         if ($q->type eq "text" && $do_form) {
             my ($size, $max) = split(m!/!, $q->opts);
 
-            $ret .= LJ::html_text({ 'size' => $size, 'maxlength' => $max,
+            $results_table .= LJ::html_text({ 'size' => $size, 'maxlength' => $max,
                                     'name' => "pollq-$qid", 'value' => $preval{$qid} });
         } elsif ($q->type eq 'drop' && $do_form) {
             #### drop-down list
@@ -1074,7 +1089,7 @@ sub render {
                 LJ::Poll->clean_poll(\$item);
                 push @optlist, ($itid, $item);
             }
-            $ret .= LJ::html_select({ 'name' => "pollq-$qid",
+            $results_table .= LJ::html_select({ 'name' => "pollq-$qid",
                                       'selected' => $preval{$qid} }, @optlist);
         } elsif ($q->type eq "scale" && $do_form) {
             #### scales (from 1-10) questions
@@ -1086,17 +1101,17 @@ sub render {
             # few opts, display radios
             if ($do_radios) {
 
-                $ret .= "<table><tr valign='top' align='center'>";
+                $results_table .= "<table><tr valign='top' align='center'>";
 
                 for (my $at=$from; $at<=$to; $at+=$by) {
-                    $ret .= "<td style='text-align: center;'>";
-                    $ret .= LJ::html_check({ 'type' => 'radio', 'name' => "pollq-$qid",
+                    $results_table .= "<td style='text-align: center;'>";
+                    $results_table .= LJ::html_check({ 'type' => 'radio', 'name' => "pollq-$qid",
                                              'value' => $at, 'id' => "pollq-$pollid-$qid-$at",
                                              'selected' => (defined $preval{$qid} && $at == $preval{$qid}) });
-                    $ret .= "<br /><label for='pollq-$pollid-$qid-$at'>$at</label></td>";
+                    $results_table .= "<br /><label for='pollq-$pollid-$qid-$at'>$at</label></td>";
                 }
 
-                $ret .= "</tr></table>\n";
+                $results_table .= "</tr></table>\n";
 
             # many opts, display select
             # but only if displaying form
@@ -1106,7 +1121,7 @@ sub render {
                 for (my $at=$from; $at<=$to; $at+=$by) {
                     push @optlist, ($at, $at);
                 }
-                $ret .= LJ::html_select({ 'name' => "pollq-$qid", 'selected' => $preval{$qid} }, @optlist);
+                $results_table .= LJ::html_select({ 'name' => "pollq-$qid", 'selected' => $preval{$qid} }, @optlist);
             }
 
         } else {
@@ -1116,10 +1131,10 @@ sub render {
             if ($q->type eq "scale") { # implies ! do_form
                 my $stddev = sprintf("%.2f", $valstddev);
                 my $mean = sprintf("%.2f", $valmean);
-                $ret .= LJ::Lang::ml('poll.scaleanswers', { 'mean' => $mean, 'median' => $valmedian, 'stddev' => $stddev });
-                $ret .= "<br />\n";
+                $results_table .= LJ::Lang::ml('poll.scaleanswers', { 'mean' => $mean, 'median' => $valmedian, 'stddev' => $stddev });
+                $results_table .= LJ::Lang::ml('poll.scaleanswers', { 'mean' => $mean, 'median' => $valmedian, 'stddev' => $stddev });
                 $do_table = 1;
-                $ret .= "<table>";
+                $results_table .= "<table>";
             }
 
             my @items = $self->question($qid)->items;
@@ -1142,10 +1157,10 @@ sub render {
 
                 # displaying a radio or checkbox
                 if ($do_form) {
-                    $ret .= LJ::html_check({ 'type' => $q->type, 'name' => "pollq-$qid",
-                                             'value' => $itid, 'id' => "pollq-$pollid-$qid-$itid",
-                                             'selected' => ($preval{$qid} =~ /\b$itid\b/) });
-                    $ret .= " <label for='pollq-$pollid-$qid-$itid'>$item</label><br />";
+                    $results_table .= LJ::html_check({ 'type' => $q->type, 'name' => "pollq-$qid",
+                                              'value' => $itid, 'id' => "pollq-$pollid-$qid-$itid",
+                                              'selected' => ($preval{$qid} =~ /\b$itid\b/) });
+                    $results_table .= " <label for='pollq-$pollid-$qid-$itid'>$item</label><br />";
                     next;
                 }
 
@@ -1155,28 +1170,30 @@ sub render {
                 my $width = 20+int(($count/$maxitvotes)*380);
 
                 if ($do_table) {
-                    $ret .= "<tr valign='middle'><td align='right'>$item</td>";
-                    $ret .= "<td><img src='$LJ::IMGPREFIX/poll/leftbar.gif' style='vertical-align:middle' height='14' width='7' alt='' />";
-                    $ret .= "<img src='$LJ::IMGPREFIX/poll/mainbar.gif' style='vertical-align:middle' height='14' width='$width' alt='' />";
-                    $ret .= "<img src='$LJ::IMGPREFIX/poll/rightbar.gif' style='vertical-align:middle' height='14' width='7' alt='' /> ";
-                    $ret .= "<b>$count</b> ($percent%)</td></tr>";
+                    $results_table .= "<tr valign='middle'><td align='right'>$item</td>";
+                    $results_table .= "<td><img src='$LJ::IMGPREFIX/poll/leftbar.gif' style='vertical-align:middle' height='14' width='7' alt='' />";
+                    $results_table .= "<img src='$LJ::IMGPREFIX/poll/mainbar.gif' style='vertical-align:middle' height='14' width='$width' alt='' />";
+                    $results_table .= "<img src='$LJ::IMGPREFIX/poll/rightbar.gif' style='vertical-align:middle' height='14' width='7' alt='' /> ";
+                    $results_table .= "<b>$count</b> ($percent%)</td></tr>";
                 } else {
-                    $ret .= "<p>$item<br />";
-                    $ret .= "<span style='white-space: nowrap'><img src='$LJ::IMGPREFIX/poll/leftbar.gif' style='vertical-align:middle' height='14' alt='' />";
-                    $ret .= "<img src='$LJ::IMGPREFIX/poll/mainbar.gif' style='vertical-align:middle' height='14' width='$width' alt='' />";
-                    $ret .= "<img src='$LJ::IMGPREFIX/poll/rightbar.gif' style='vertical-align:middle' height='14' width='7' alt='' /> ";
-                    $ret .= "<b>$count</b> ($percent%)</span></p>";
+                    $results_table .= "<p>$item<br />";
+                    $results_table .= "<span style='white-space: nowrap'><img src='$LJ::IMGPREFIX/poll/leftbar.gif' style='vertical-align:middle' height='14' alt='' />";
+                    $results_table .= "<img src='$LJ::IMGPREFIX/poll/mainbar.gif' style='vertical-align:middle' height='14' width='$width' alt='' />";
+                    $results_table .= "<img src='$LJ::IMGPREFIX/poll/rightbar.gif' style='vertical-align:middle' height='14' width='7' alt='' /> ";
+                    $results_table .= "<b>$count</b> ($percent%)</span></p>";
                 }
             }
 
             if ($do_table) {
-                $ret .= "</table>";
+                $results_table .= "</table>";
             }
 
         }
 
-        $ret .= "</div>";
+        $results_table .= "</div>";
     }
+
+    $ret .= $results_table;
 
     if ($do_form) {
         $ret .= LJ::html_submit(
--------------------------------------------------------------------------------