? .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 10 Sep 2009 21:28:12 -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_6() { + 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 10 Sep 2009 21:28:12 -0000 @@ -1086,7 +1086,6 @@ 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 $criteria = votingapi_current_user_identifier(); @@ -1133,7 +1132,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, randomization) 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); // create the electoral list if desired @@ -1210,7 +1209,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 +1501,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 +1663,20 @@ 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 + */ +function _decisions_randomize_options($choices) { + //dsm($variables); + $randomized_choices = array(); + $temp_choices = $choices; + $rand_keys = array_rand($choices,5); + + 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 10 Sep 2009 21:28:12 -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); + } $num_choices = count($node->choice);