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(
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org