? .DS_Store
? randomize_answers.patch
Index: decisions.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/decisions/decisions.install,v
retrieving revision 1.28
diff -u -p -r1.28 decisions.install
--- decisions.install	5 Dec 2008 03:48:02 -0000	1.28
+++ decisions.install	24 Sep 2009 22:49:58 -0000
@@ -25,6 +25,7 @@ function decisions_schema() {
          'algorithm' => array('type' => 'varchar', 'length' => '100', 'not null' => FALSE),
          'showvotes' => array('type' => 'int', 'size' => 'tiny', 'not null' => FALSE, 'disp-width' => '4'),
          'startdate' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, 'disp-width' => '10')),
+         'randomize' => array('type' => 'int', 'size' => 'tiny', 'not null' => FALSE, 'default' => 1, 'disp-width' => '4'),
     'primary key' => array('nid'),
   );
 
@@ -113,6 +114,16 @@ function decisions_update_5() {
   return $items;
 }
 
+function decisions_update_6000() {
+  switch ($GLOBALS['db_type']) {
+  case 'mysql':
+  case 'mysqli':
+    $items[] = update_sql("ALTER TABLE {decisions} ADD COLUMN `randomize` tinyint default '0'");
+    break;
+  }
+  return $items;
+}
+
 /**
  * Implementation of hook_uninstall().
  */
Index: decisions.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/decisions/decisions.module,v
retrieving revision 1.221
diff -u -p -r1.221 decisions.module
--- decisions.module	19 Aug 2009 22:34:36 -0000	1.221
+++ decisions.module	24 Sep 2009 22:49:58 -0000
@@ -1086,6 +1086,7 @@ function decisions_load($node) {
   while ($choice = db_fetch_array($result)) {
     $decision->choice[$choice['vote_offset']] = $choice;
   }
+  
   $decision->choices = count($decision->choice);
 
   // See if user has voted
@@ -1133,7 +1134,7 @@ function decisions_insert($node) {
   // just create an empty entry for now
   $mode = _decisions_get_mode($node);
 
-  db_query("INSERT INTO {decisions} (nid, mode, quorum_abs, quorum_percent, uselist, active, runtime, maxchoices, algorithm, startdate) VALUES (%d, '%s', %d, %f, %d, %d, %d, %d, '%s', %d)", $node->nid, $mode, $node->settings['quorum']['quorum_abs'], $node->settings['quorum']['quorum_percent'], $node->settings['uselist'], $node->settings['active'], $node->settings['runtime'], $node->settings['maxchoices'], $node->settings['algorithm'], $startdate);
+  db_query("INSERT INTO {decisions} (nid, mode, quorum_abs, quorum_percent, uselist, active, runtime, maxchoices, algorithm, startdate, randomize) VALUES (%d, '%s', %d, %f, %d, %d, %d, %d, '%s', %d, %d)", $node->nid, $mode, $node->settings['quorum']['quorum_abs'], $node->settings['quorum']['quorum_percent'], $node->settings['uselist'], $node->settings['active'], $node->settings['runtime'], $node->settings['maxchoices'], $node->settings['algorithm'], $startdate, $node->settings['randomize']);
 
   // create the electoral list if desired
 
@@ -1210,7 +1211,7 @@ function decisions_update($node) {
     }
   } 
 
-  db_query("UPDATE {decisions} SET quorum_abs=%d, quorum_percent=%f, active=%d, runtime=%d, maxchoices=%d, algorithm='%s', uselist=%d, showvotes=%d, startdate=%d WHERE nid = %d", $node->settings['quorum']['quorum_abs'], $node->settings['quorum']['quorum_percent'], $node->settings['active'], $runtime, $node->settings['maxchoices'], $node->settings['algorithm'], $node->settings['uselist'], $node->settings['showvotes'], $startdate, $node->nid);
+  db_query("UPDATE {decisions} SET quorum_abs=%d, quorum_percent=%f, active=%d, runtime=%d, maxchoices=%d, algorithm='%s', uselist=%d, showvotes=%d, startdate=%d, randomize=%d WHERE nid = %d", $node->settings['quorum']['quorum_abs'], $node->settings['quorum']['quorum_percent'], $node->settings['active'], $runtime, $node->settings['maxchoices'], $node->settings['algorithm'], $node->settings['uselist'], $node->settings['showvotes'], $startdate, $node->settings['randomize'], $node->nid);
   // XXX: should update decisions here, when it has some parameters
   // XXX: ... but before doing so, the code below must be factored out in a seperate function for usage in decisions_insert()
   db_query('DELETE FROM {decisions_choices} WHERE nid = %d', $node->nid);
@@ -1502,6 +1503,13 @@ function decisions_form(&$node, &$form_s
                                          '#default_value' => isset($node->showvotes)? $node->showvotes : 1,
                                          '#options' => $enabled,
                                          );
+  
+  $form['settings']['randomize'] = array(
+                                         '#type' => 'checkbox',
+                                         '#title' => t('Randomize answers order'),
+                                         '#default_value' => $node->randomize,
+                                         '#description' => t('Display answers in a random order each time the poll is displayed.'),
+                                        );
 
   $form['settings']['date'] = array(
     '#type' => 'fieldset',
@@ -1657,3 +1665,25 @@ function _decisions_date($format, $times
   $result = gmdate($format, $timestamp);
   return  $result;
 }
+
+/*
+ * Function to put choices in random order if option to
+ * list poll options in random order is selected in
+ * node create/edit form.
+ */
+function _decisions_randomize_options($choices, $num_choices) {
+  $randomized_choices = array();
+  // Put original ordered choices in separate variable.
+  $temp_choices = $choices;
+  // Put array keys from ordered choices in random order.
+  $rand_keys = array_rand($choices, $num_choices);
+  
+  // Use keys from randomized array to get data from temp variable.
+  // Use key+1 because $choices is 1 based and keys in randomized array
+  // are 0 based.
+  foreach($rand_keys as $key => $value) {
+    $randomized_choices[$key+1]['vote_offset'] = $temp_choices[$value]['vote_offset'];
+    $randomized_choices[$key+1]['label'] = $temp_choices[$value]['label'];    
+  }  
+  return $randomized_choices;  
+}
Index: modes/ranking.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/decisions/modes/ranking.module,v
retrieving revision 1.22
diff -u -p -r1.22 ranking.module
--- modes/ranking.module	19 Aug 2009 22:30:20 -0000	1.22
+++ modes/ranking.module	24 Sep 2009 22:49:58 -0000
@@ -64,6 +64,12 @@ function ranking_decisions_voting_form(&
 
   if ($node->choice) {
     $list = array();
+    
+    // Put options in random order if randomize option
+    // selected on node create/edit form.
+    if($node->randomize) {
+      $node->choice = _decisions_randomize_options($node->choice, $node->choices); 
+    }
 
     $num_choices = count($node->choice);
 
Index: modes/selection.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/decisions/modes/selection.module,v
retrieving revision 1.13
diff -u -p -r1.13 selection.module
--- modes/selection.module	27 Jul 2009 23:25:43 -0000	1.13
+++ modes/selection.module	24 Sep 2009 22:49:58 -0000
@@ -47,6 +47,12 @@ function selection_decisions_voting_form
   if ($node->choice) {
     $list = array();
 
+    // Put options in random order if randomize option
+    // selected on node create/edit form.
+    if($node->randomize) {
+      $node->choice = _decisions_randomize_options($node->choice, $node->choices); 
+    }
+
     if ($node->maxchoices == 1) {
       // plurality voting
       foreach ($node->choice as $i => $choice) {
