| 1 |
<?php |
<?php |
| 2 |
// $Id: randomizer.module,v 1.3 2006/06/21 20:44:08 deekayen Exp $ |
// $Id: randomizer.module,v 1.4 2006/11/06 22:01:03 deekayen Exp $ |
| 3 |
|
|
| 4 |
/** |
/** |
| 5 |
* @file |
* @file |
| 7 |
* |
* |
| 8 |
* @author David Kent Norman |
* @author David Kent Norman |
| 9 |
* @link http://deekayen.net/ |
* @link http://deekayen.net/ |
| 10 |
* @link http://drupal.org/node/66575 |
* @link http://drupal.org/project/randomizer |
| 11 |
* @todo markers, alternate rand generators (rand vs mt_rand), seeding, excel export, randomize form input |
* @todo markers, alternate rand generators (rand vs mt_rand), seeding, excel export, randomize form input |
| 12 |
*/ |
*/ |
| 13 |
|
|
| 40 |
* Implementation of hook_block(). |
* Implementation of hook_block(). |
| 41 |
*/ |
*/ |
| 42 |
function randomizer_block($op = 'list', $delta = 0, $edit = array()) { |
function randomizer_block($op = 'list', $delta = 0, $edit = array()) { |
|
$edit = $_POST['edit']; |
|
| 43 |
switch($op) { |
switch($op) { |
| 44 |
case 'list': |
case 'list': |
| 45 |
$blocks[0]['info'] = 'Random number'; |
$blocks[0]['info'] = 'Random number'; |
| 91 |
$items[] = array('path' => 'randomizer', |
$items[] = array('path' => 'randomizer', |
| 92 |
'title' => t('randomizer'), |
'title' => t('randomizer'), |
| 93 |
'callback' => 'randomizer_page', |
'callback' => 'randomizer_page', |
| 94 |
|
'callback_arguments' => array($_POST), |
| 95 |
'access' => user_access('access randomizer'), |
'access' => user_access('access randomizer'), |
| 96 |
'type' => MENU_SUGGESTED_ITEM); |
'type' => MENU_SUGGESTED_ITEM); |
| 97 |
$items[] = array( |
$items[] = array( |
| 116 |
* @return string |
* @return string |
| 117 |
*/ |
*/ |
| 118 |
function randomizer_page() { |
function randomizer_page() { |
| 119 |
if(isset($_POST['edit'])) { |
$form = array(); |
| 120 |
$edit = $_POST['edit']; |
|
| 121 |
if (!is_numeric($edit['randomizer_sets'])) { |
if(isset($_POST['op'])) { |
| 122 |
|
if (!is_numeric($_POST['randomizer_sets'])) { |
| 123 |
$error = true; |
$error = true; |
| 124 |
form_set_error('randomizer_sets', t('The entered sets of numbers must be numeric.')); |
form_set_error('randomizer_sets', t('The entered sets of numbers must be numeric.')); |
| 125 |
} |
} |
| 126 |
if ($edit['randomizer_sets'] > variable_get('randomizer_max_sets', RANDOMIZER_MAX_SETS)) { |
if ($_POST['randomizer_sets'] > variable_get('randomizer_max_sets', RANDOMIZER_MAX_SETS)) { |
| 127 |
$error = true; |
$error = true; |
| 128 |
form_set_error('randomizer_sets', t('The entered number of sets exceeds the maximum number of allowed sets allowed by the administrator.')); |
form_set_error('randomizer_sets', t('The entered number of sets exceeds the maximum number of allowed sets allowed by the administrator.')); |
| 129 |
} |
} |
| 130 |
if (!is_numeric($edit['randomizer_per_set'])) { |
if (!is_numeric($_POST['randomizer_per_set'])) { |
| 131 |
$error = true; |
$error = true; |
| 132 |
form_set_error('randomizer_per_set', t('The entered numbers per set must be numeric.')); |
form_set_error('randomizer_per_set', t('The entered numbers per set must be numeric.')); |
| 133 |
} |
} |
| 134 |
if ($edit['randomizer_per_set'] > variable_get('randomizer_max_per_set', RANDOMIZER_MAX_PER_SET)) { |
if ($_POST['randomizer_per_set'] > variable_get('randomizer_max_per_set', RANDOMIZER_MAX_PER_SET)) { |
| 135 |
$error = true; |
$error = true; |
| 136 |
form_set_error('randomizer_per_set', t('The entered amount of numbers per set exceeds the maximum number allowed allowed by the administrator.')); |
form_set_error('randomizer_per_set', t('The entered amount of numbers per set exceeds the maximum number allowed allowed by the administrator.')); |
| 137 |
} |
} |
| 138 |
if (!is_numeric($edit['randomizer_range_from'])) { |
if (!is_numeric($_POST['randomizer_range_from'])) { |
| 139 |
$error = true; |
$error = true; |
| 140 |
form_set_error('randomizer_range_from', t('The From value must be numeric.')); |
form_set_error('randomizer_range_from', t('The From value must be numeric.')); |
| 141 |
} |
} |
| 142 |
if (!is_numeric($edit['randomizer_range_to'])) { |
if (!is_numeric($_POST['randomizer_range_to'])) { |
| 143 |
$error = true; |
$error = true; |
| 144 |
form_set_error('randomizer_range_to', t('The To value must be numeric.')); |
form_set_error('randomizer_range_to', t('The To value must be numeric.')); |
| 145 |
} |
} |
| 146 |
if ($edit['randomizer_range_from'] == $edit['randomizer_range_to']) { |
if ($_POST['randomizer_range_from'] == $_POST['randomizer_range_to']) { |
| 147 |
$error = true; |
$error = true; |
| 148 |
form_set_error('randomizer_range_to', t('The range may not have equal From and To values.')); |
form_set_error('randomizer_range_to', t('The range may not have equal From and To values.')); |
| 149 |
} |
} |
| 150 |
$max = mt_getrandmax(); |
$max = mt_getrandmax(); |
| 151 |
if ($edit['randomizer_range_from'] > $max) { |
if ($_POST['randomizer_range_from'] > $max) { |
| 152 |
$error = true; |
$error = true; |
| 153 |
form_set_error('randomizer_range_from', t("The From value may not exceed $max.")); |
form_set_error('randomizer_range_from', t("The From value may not exceed $max.")); |
| 154 |
} |
} |
| 155 |
if ($edit['randomizer_range_to'] > $max) { |
if ($_POST['randomizer_range_to'] > $max) { |
| 156 |
$error = true; |
$error = true; |
| 157 |
form_set_error('randomizer_range_to', t("The To value may not exceed $max.")); |
form_set_error('randomizer_range_to', t("The To value may not exceed $max.")); |
| 158 |
} |
} |
| 159 |
unset($max); |
unset($max); |
| 160 |
|
|
| 161 |
if (!$error) { |
if (!$error) { |
| 162 |
if (strcmp($edit['randomizer_range_from'], $edit['randomizer_range_to']) > 0) { |
if (strcmp($_POST['randomizer_range_from'], $_POST['randomizer_range_to']) > 0) { |
| 163 |
// reverse values so the smaller one is first when sent to the rand generator |
// reverse values so the smaller one is first when sent to the rand generator |
| 164 |
$tmp = $edit['randomizer_range_from']; |
$tmp = $_POST['randomizer_range_from']; |
| 165 |
$edit['randomizer_range_from'] = $edit['randomizer_range_to']; |
$_POST['randomizer_range_from'] = $_POST['randomizer_range_to']; |
| 166 |
$edit['randomizer_range_to'] = tmp; |
$_POST['randomizer_range_to'] = tmp; |
| 167 |
unset($tmp); |
unset($tmp); |
| 168 |
} |
} |
| 169 |
|
|
| 170 |
$form = array(); |
$form = array(); |
| 171 |
|
|
| 172 |
$edit['randomizer_range_from'] = (int)$edit['randomizer_range_from']; |
$_POST['randomizer_range_from'] = (int)$_POST['randomizer_range_from']; |
| 173 |
$edit['randomizer_range_to'] = (int)$edit['randomizer_range_to']; |
$_POST['randomizer_range_to'] = (int)$_POST['randomizer_range_to']; |
| 174 |
|
|
| 175 |
for ($i=0; $i<$edit['randomizer_sets']; $i++) { |
for ($i=0; $i<$_POST['randomizer_sets']; $i++) { |
| 176 |
$list = array(); |
$list = array(); |
| 177 |
for ($j=0; $j < $edit['randomizer_per_set']; ) { |
for ($j=0; $j < $_POST['randomizer_per_set']; ) { |
| 178 |
$number = mt_rand($edit['randomizer_range_from'], $edit['randomizer_range_to']); |
$number = mt_rand($_POST['randomizer_range_from'], $_POST['randomizer_range_to']); |
| 179 |
if (!$edit['randomizer_unique'] || ($edit['randomizer_unique'] && !in_array($number, $list))) { |
if (!$_POST['randomizer_unique'] || ($_POST['randomizer_unique'] && !in_array($number, $list))) { |
| 180 |
$list[] = $number; |
$list[] = $number; |
| 181 |
$j++; |
$j++; |
| 182 |
} |
} |
| 183 |
} |
} |
| 184 |
if ($edit['randomizer_sort'] == '1') { |
if ($_POST['randomizer_sort'] == '1') { |
| 185 |
sort($list); |
sort($list); |
| 186 |
} |
} |
| 187 |
elseif ($edit['randomizer_sort'] == '2') { |
elseif ($_POST['randomizer_sort'] == '2') { |
| 188 |
rsort($list); |
rsort($list); |
| 189 |
} |
} |
| 190 |
$form['randomizer_result-'. $i] = array( |
$form['randomizer_result-'. $i] = array( |
| 191 |
'#type' => 'textarea', |
'#type' => 'textarea', |
| 192 |
'#default_value' => check_plain(implode($edit['randomizer_delimiter'], $list)), |
'#default_value' => check_plain(implode($_POST['randomizer_delimiter'], $list)), |
| 193 |
'#rows' => 10, '#cols' => 45, |
'#rows' => 10, '#cols' => 45, |
| 194 |
'#prefix' => t('Set #%i', array('%i' => $i+1)), |
'#prefix' => t('Set #%i', array('%i' => $i+1)), |
| 195 |
'#attributes' => array('onclick' => 'this.focus();this.select()'), |
'#attributes' => array('onclick' => 'this.focus();this.select()'), |
| 196 |
'#suffix' => '<hr />' |
'#suffix' => '<hr />' |
| 197 |
); |
); |
| 198 |
} |
} |
|
return drupal_get_form('randomizer_output', $form); |
|
| 199 |
} |
} |
| 200 |
} |
} |
| 201 |
|
|
| 202 |
if ($error || !isset($edit)) { |
return drupal_get_form('randomizer_form', $form); |
|
$form = randomizer_form(); |
|
|
|
|
|
$form['randomizer_submit'] = array( |
|
|
'#type' => 'submit', |
|
|
'#value' => t('Randomize') |
|
|
); |
|
|
return drupal_get_form('randomizer', $form); |
|
|
} |
|
| 203 |
} |
} |
| 204 |
|
|
| 205 |
/** |
/** |
| 230 |
/** |
/** |
| 231 |
* Default form for the public and settings output |
* Default form for the public and settings output |
| 232 |
* |
* |
| 233 |
|
* @param array $append form fields to prepend to the default form |
| 234 |
* @return array |
* @return array |
| 235 |
*/ |
*/ |
| 236 |
function randomizer_form() { |
function randomizer_form($form = array()) { |
| 237 |
$form = array(); |
$form['#redirect'] = FALSE; |
| 238 |
$form['randomizer_sets'] = array( |
$form['randomizer_sets'] = array( |
| 239 |
'#type' => 'textfield', |
'#type' => 'textfield', |
| 240 |
'#size' => 5, |
'#size' => 5, |
| 309 |
'#title' => t('How do you want to delimit the output?'), |
'#title' => t('How do you want to delimit the output?'), |
| 310 |
'#description' => t('Characters to insert between output numbers') |
'#description' => t('Characters to insert between output numbers') |
| 311 |
); |
); |
| 312 |
|
$form['randomizer_submit'] = array( |
| 313 |
|
'#type' => 'submit', |
| 314 |
|
'#value' => t('Randomize') |
| 315 |
|
); |
| 316 |
|
|
| 317 |
return $form; |
return $form; |
| 318 |
} |
} |