| 35 |
function finder_wizard_form_finder_admin_edit_alter(&$form, $form_state) { |
function finder_wizard_form_finder_admin_edit_alter(&$form, $form_state) { |
| 36 |
$finder = &$form_state['storage']['finder']; |
$finder = &$form_state['storage']['finder']; |
| 37 |
$finder_wizard = (object)$finder->settings['finder_wizard']; |
$finder_wizard = (object)$finder->settings['finder_wizard']; |
|
|
|
| 38 |
$form['settings']['finder_wizard'] = array( |
$form['settings']['finder_wizard'] = array( |
| 39 |
'#type' => 'fieldset', |
'#type' => 'fieldset', |
| 40 |
'#title' => t('Finder wizard'), |
'#title' => t('Finder wizard'), |
| 56 |
'#collapsible' => TRUE, |
'#collapsible' => TRUE, |
| 57 |
'#collapsed' => FALSE, |
'#collapsed' => FALSE, |
| 58 |
); |
); |
| 59 |
$form['settings']['finder_wizard']['settings']['skip_single_choice'] = array( |
$form['settings']['finder_wizard']['settings']['step_skip'] = array( |
| 60 |
'#type' => 'checkbox', |
'#type' => 'checkbox', |
| 61 |
'#title' => t('Skip steps where there is only a single choice.'), |
'#title' => t('Skip steps where there are zero or one choices.'), |
| 62 |
'#weight' => 8, |
'#weight' => 8, |
| 63 |
'#default_value' => isset($finder_wizard->settings['skip_single_choice']) ? $finder_wizard->settings['skip_single_choice'] : 1, |
'#default_value' => isset($finder_wizard->settings['step_skip']) ? $finder_wizard->settings['step_skip'] : 1, |
|
|
|
| 64 |
'#disabled' => TRUE, |
'#disabled' => TRUE, |
| 65 |
'#description' => 'Not implemented yet', |
'#description' => 'Not implemented yet', |
|
|
|
| 66 |
); |
); |
| 67 |
$form['settings']['finder_wizard']['settings']['invalid_path'] = array( |
$form['settings']['finder_wizard']['settings']['invalid_path'] = array( |
| 68 |
'#type' => 'textfield', |
'#type' => 'textfield', |
| 72 |
'#size' => 30, |
'#size' => 30, |
| 73 |
'#maxlength' => 128, |
'#maxlength' => 128, |
| 74 |
'#weight' => 12, |
'#weight' => 12, |
|
|
|
| 75 |
'#disabled' => TRUE, |
'#disabled' => TRUE, |
| 76 |
'#description' => 'Not implemented yet', |
'#description' => 'Not implemented yet', |
|
|
|
| 77 |
); |
); |
| 78 |
$form['settings']['advanced']['hide_args']['#disabled'] = TRUE; |
if ($finder_wizard->is_wizard) { |
| 79 |
$form['settings']['advanced']['hide_args']['#description'] .= t(" <strong>Always hidden in Finder Wizards.</strong>"); |
$form['settings']['advanced']['hide_args']['#disabled'] = TRUE; |
| 80 |
|
$form['settings']['advanced']['hide_args']['#description'] .= t(" <strong>Always hidden in Finder Wizards.</strong>"); |
| 81 |
|
$form['settings']['advanced']['cache_finder_find']['#disabled'] = TRUE; |
| 82 |
|
$form['settings']['advanced']['cache_finder_find']['#required'] = FALSE; |
| 83 |
|
$form['settings']['advanced']['cache_finder_find']['#description'] .= t(" <strong>Not currently compatible with Finder Wizards.</strong>"); |
| 84 |
|
} |
| 85 |
} |
} |
| 86 |
|
|
| 87 |
/** |
/** |
| 188 |
} |
} |
| 189 |
$finder = &$object; |
$finder = &$object; |
| 190 |
$finder->settings['advanced']['hide_args'] = 1; |
$finder->settings['advanced']['hide_args'] = 1; |
| 191 |
|
$finder->settings['advanced']['cache_finder_find'] = 0; |
| 192 |
break; |
break; |
| 193 |
|
|
| 194 |
case 'finder_results': |
case 'finder_results': |
| 202 |
} |
} |
| 203 |
} |
} |
| 204 |
|
|
| 205 |
|
|
| 206 |
/** |
/** |
| 207 |
* Implementation of hook_form_FORM_ID_alter(). |
* Implementation of hook_form_FORM_ID_alter(). |
| 208 |
*/ |
*/ |
| 209 |
function finder_wizard_form_finder_form_alter(&$form, &$form_state) { |
function finder_wizard_form_alter(&$form, &$form_state, $form_id) { |
| 210 |
|
if (strpos($form_id, 'finder_form_') === 0) { |
| 211 |
|
$finder = finder_load($form['finder_id']['#value']); |
| 212 |
|
|
| 213 |
|
$finder_wizard = (object)$finder->settings['finder_wizard']; |
| 214 |
|
if (!$finder_wizard->is_wizard) { |
| 215 |
|
return; |
| 216 |
|
} |
| 217 |
|
// Set or get the current step |
| 218 |
|
$step = 0; |
| 219 |
|
|
| 220 |
$finder = finder_load($form['finder_id']['#value']); |
if (isset($form_state['storage']['step'])) { |
| 221 |
|
$step = $form_state['storage']['step']; |
| 222 |
|
} |
| 223 |
|
else { |
| 224 |
|
$form_state['storage']['step'] = $step; |
| 225 |
|
} |
| 226 |
|
|
| 227 |
$finder_wizard = (object)$finder->settings['finder_wizard']; |
$finder_element_id = $finder->elements[$step] ? $finder->elements[$step]->finder_element_id : 'results'; |
| 228 |
if (!$finder_wizard->is_wizard) { |
$weight = 0; |
|
return; |
|
|
} |
|
|
// Set or get the current step |
|
|
$step = 0; |
|
|
if (isset($form_state['storage']['step'])) { |
|
|
$step = $form_state['storage']['step']; |
|
|
} |
|
|
else { |
|
|
$form_state['storage']['step'] = $step; |
|
|
} |
|
| 229 |
|
|
| 230 |
$finder_element_id = $finder->elements[$step] ? $finder->elements[$step]->finder_element_id : 'results'; |
$weight = $form['finder_form']['submit']['#weight']; |
| 231 |
$weight = 0; |
unset($form['finder_form']['submit']); |
| 232 |
|
unset($form['finder_form']['go']); |
| 233 |
|
|
| 234 |
$weight = $form['finder_form']['submit']['#weight']; |
$elements = !empty($finder->elements) ? $finder->elements : $finder->original_elements; |
|
unset($form['finder_form']['submit']); |
|
|
unset($form['finder_form']['go']); |
|
| 235 |
|
|
| 236 |
$elements = !empty($finder->elements) ? $finder->elements : $finder->original_elements; |
foreach ($elements as $key => $element) { |
| 237 |
|
|
| 238 |
foreach ($elements as $key => $element) { |
if (intval($key) !== intval($step)/* && isset($form_state['values'][$element->finder_element_id]) && !isset($form['finder_form'][$element->finder_element_id])*/) { |
| 239 |
|
$feid = &$element->finder_element_id; |
| 240 |
|
$form['finder_form'][$feid] = array( |
| 241 |
|
'#type' => 'value', |
| 242 |
|
'#value' => $form_state['values'][$feid], |
| 243 |
|
); |
| 244 |
|
} |
| 245 |
|
|
| 246 |
if (intval($key) !== intval($step)/* && isset($form_state['values'][$element->finder_element_id]) && !isset($form['finder_form'][$element->finder_element_id])*/) { |
if ($form['finder_form'][$element->finder_element_id]['#options']) { |
|
$feid = &$element->finder_element_id; |
|
|
$form['finder_form'][$feid] = array( |
|
|
'#type' => 'value', |
|
|
'#value' => $form_state['values'][$feid], |
|
|
); |
|
|
} |
|
| 247 |
|
|
| 248 |
if ($form['finder_form'][$element->finder_element_id]['#options']) { |
$form_state['storage']['answers'][$step] = $form['finder_form'][$element->finder_element_id]['#options']; |
|
$form_state['storage']['answers'][$step] = $form['finder_form'][$element->finder_element_id]['#options']; |
|
|
} |
|
|
if ($form['finder_form'][$element->finder_element_id]['#required']) { |
|
|
$form['finder_form'][$element->finder_element_id]['#required'] = FALSE; // finder wizard sucks with FAPI handling of #required |
|
|
$form['finder_form'][$element->finder_element_id]['#mandatory'] = TRUE; // we will handle it ourselves |
|
|
} |
|
|
} |
|
| 249 |
|
|
| 250 |
$form['finder_wizard_header'] = array( |
} |
| 251 |
'#type' => 'markup', |
if ($form['finder_form'][$element->finder_element_id]['#required']) { |
| 252 |
'#value' => theme('finder_wizard_header', $finder, $finder_element_id), |
$form['finder_form'][$element->finder_element_id]['#required'] = FALSE; // finder wizard sucks with FAPI handling of #required |
| 253 |
'#weight' => -815, |
$form['finder_form'][$element->finder_element_id]['#mandatory'] = TRUE; // we will handle it ourselves |
| 254 |
); |
} |
| 255 |
|
} |
| 256 |
|
|
| 257 |
$form['finder_form']['buttons'] = array( |
$form['finder_wizard_header'] = array( |
| 258 |
'#prefix' => '<div class="finder-wizard-buttons">', |
'#type' => 'markup', |
| 259 |
'#suffix' => '<br class="finder-clear" style="clear:both;" /></div>', |
'#value' => theme('finder_wizard_header', $finder, $finder_element_id), |
| 260 |
'#weight' => $weight, |
'#weight' => -815, |
| 261 |
); |
); |
|
$form['finder_form']['buttons']['back'] = array( |
|
|
'#type' => 'submit', |
|
|
'#finder_wizard_step' => $step, |
|
|
'#finder_element_id' => $finder_element_id, |
|
|
'#value' => t('« Back'), |
|
|
'#theme' => 'finder_wizard_form_button', |
|
|
'#attributes' => array( |
|
|
'class' => 'finder-wizard-back', |
|
|
), |
|
|
); |
|
|
$form['finder_form']['buttons']['next'] = array( |
|
|
'#type' => 'submit', |
|
|
'#finder_wizard_step' => $step, |
|
|
'#finder_element_id' => $finder_element_id, |
|
|
'#value' => t('Next »'), |
|
|
'#theme' => 'finder_wizard_form_button', |
|
|
'#attributes' => array( |
|
|
'class' => 'finder-wizard-next', |
|
|
), |
|
|
); |
|
| 262 |
|
|
| 263 |
if ($finder->settings['advanced']['ahah']) { |
$form['finder_form']['buttons'] = array( |
| 264 |
$ahah = array( |
'#prefix' => '<div class="finder-wizard-buttons">', |
| 265 |
'path' => 'finder/finder_ahah/'. $finder->finder_id, |
'#suffix' => '<br class="finder-clear" style="clear:both;" /></div>', |
| 266 |
'wrapper' => $finder->finder_view_build_id, |
'#weight' => $weight, |
| 267 |
'method' => 'replace', |
); |
| 268 |
'effect' => $finder->settings['advanced']['ahah_effect'], |
$form['finder_form']['buttons']['back'] = array( |
| 269 |
|
'#type' => 'submit', |
| 270 |
|
'#finder_wizard_step' => $step, |
| 271 |
|
'#finder_element_id' => $finder_element_id, |
| 272 |
|
'#value' => t('« Back'), |
| 273 |
|
'#theme' => 'finder_wizard_form_button', |
| 274 |
|
'#attributes' => array( |
| 275 |
|
'class' => 'finder-wizard-back', |
| 276 |
|
), |
| 277 |
|
); |
| 278 |
|
$form['finder_form']['buttons']['next'] = array( |
| 279 |
|
'#type' => 'submit', |
| 280 |
|
'#finder_wizard_step' => $step, |
| 281 |
|
'#finder_element_id' => $finder_element_id, |
| 282 |
|
'#value' => t('Next »'), |
| 283 |
|
'#theme' => 'finder_wizard_form_button', |
| 284 |
|
'#attributes' => array( |
| 285 |
|
'class' => 'finder-wizard-next', |
| 286 |
|
), |
| 287 |
); |
); |
|
$form['finder_form']['buttons']['back']['#ahah'] = $ahah; |
|
|
$form['finder_form']['buttons']['next']['#ahah'] = $ahah; |
|
|
} |
|
| 288 |
|
|
| 289 |
if ($step <= 0) { |
if ($finder->settings['advanced']['ahah']) { |
| 290 |
$form['finder_form']['buttons']['back']['#disabled'] = TRUE; |
$ahah = array( |
| 291 |
$form['finder_form']['buttons']['back']['#attributes']['class'] .= ' finder-wizard-back-disabled'; |
'path' => 'finder/finder_ahah/'. $finder->finder_id, |
| 292 |
} |
'wrapper' => $finder->finder_view_build_id, |
| 293 |
else if ($step >= count($finder->elements)) { |
'method' => 'replace', |
| 294 |
$form['finder_form']['buttons']['next']['#disabled'] = TRUE; |
'effect' => $finder->settings['advanced']['ahah_effect'], |
| 295 |
$form['finder_form']['buttons']['next']['#attributes']['class'] .= ' finder-wizard-next-disabled'; |
); |
| 296 |
} |
$form['finder_form']['buttons']['back']['#ahah'] = $ahah; |
| 297 |
|
$form['finder_form']['buttons']['next']['#ahah'] = $ahah; |
| 298 |
|
} |
| 299 |
|
|
| 300 |
$form['#validate'][] = 'finder_wizard_form_validate'; |
if ($step <= 0) { |
| 301 |
|
$form['finder_form']['buttons']['back']['#disabled'] = TRUE; |
| 302 |
|
$form['finder_form']['buttons']['back']['#attributes']['class'] .= ' finder-wizard-back-disabled'; |
| 303 |
|
} |
| 304 |
|
else if ($step > count($finder->elements)) { |
| 305 |
|
$form['finder_form']['buttons']['next']['#disabled'] = TRUE; |
| 306 |
|
$form['finder_form']['buttons']['next']['#attributes']['class'] .= ' finder-wizard-next-disabled'; |
| 307 |
|
} |
| 308 |
|
|
| 309 |
|
$form['#validate'][] = 'finder_wizard_form_validate'; |
| 310 |
|
} |
| 311 |
} |
} |
| 312 |
|
|
| 313 |
/** |
/** |
| 448 |
else { |
else { |
| 449 |
$element['#attributes']['class'] = 'form-'. $element['#button_type']; |
$element['#attributes']['class'] = 'form-'. $element['#button_type']; |
| 450 |
} |
} |
| 451 |
return '<input type="submit" '. (empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') .'id="'. $element['#id'] .'" value="'. $element['#value'] .'" '. drupal_attributes($element['#attributes']) ." />\n"; |
return '<input type="submit" '. |
| 452 |
|
(empty($element['#name']) ? '' : 'name="'. $element['#name'] .'" ') . |
| 453 |
|
'id="'. $element['#id'] .'" value="'. $element['#value'] .'" '. drupal_attributes($element['#attributes']) ." />\n"; |
| 454 |
} |
} |
| 455 |
|
|
| 456 |
/** |
/** |
| 481 |
*/ |
*/ |
| 482 |
function theme_finder_wizard_header($finder = NULL, $finder_element_id = NULL) { |
function theme_finder_wizard_header($finder = NULL, $finder_element_id = NULL) { |
| 483 |
drupal_add_css(drupal_get_path('module', 'finder_wizard') .'/finder_wizard.css'); |
drupal_add_css(drupal_get_path('module', 'finder_wizard') .'/finder_wizard.css'); |
| 484 |
$output = "<div class=\"finder-wizard-header\">\n"; |
$responses = theme('finder_wizard_responses'); |
|
$output .= theme('finder_wizard_responses'); |
|
| 485 |
if (is_object($finder) && is_numeric($finder_element_id)) { |
if (is_object($finder) && is_numeric($finder_element_id)) { |
| 486 |
$element = &$finder->elements[$finder->elements_index[$finder_element_id]]; |
$element = &$finder->elements[$finder->elements_index[$finder_element_id]]; |
| 487 |
if ($element) { |
if ($element) { |
| 488 |
$finder_wizard_step = &$element->settings['finder_wizard_step']; |
$finder_wizard_step = &$element->settings['finder_wizard_step']; |
| 489 |
if ($finder_wizard_step['question']) { |
if ($finder_wizard_step['question']) { |
| 490 |
$output .= " <div class=\"finder-wizard-question finder-wizard-question-". $finder_element_id ."\">\n"; |
$question .= " <div class=\"finder-wizard-question finder-wizard-question-". $finder_element_id ."\">\n"; |
| 491 |
$output .= ' '. check_markup($finder_wizard_step['question']); |
$question .= ' '. check_markup($finder_wizard_step['question']); |
| 492 |
$output .= " </div>\n"; |
$question .= " </div>\n"; |
| 493 |
} |
} |
| 494 |
} |
} |
| 495 |
} |
} |
| 496 |
$output .= "</div>\n"; |
if ($responses || $question) { |
| 497 |
return $output; |
$output = "<div class=\"finder-wizard-header\">\n"; |
| 498 |
|
$output .= !empty($responses) ? $responses : ''; |
| 499 |
|
$output .= !empty($question) ? $question : ''; |
| 500 |
|
$output .= "</div>\n"; |
| 501 |
|
return $output; |
| 502 |
|
} |
| 503 |
} |
} |
| 504 |
|
|
| 505 |
// TO DO: Skip steps with only one choice. |
// TO DO: Skip steps with only one choice. |
| 506 |
// TO DO: redirect for bad textfield values. -- equivelant to redirect if there are no valid choices left. |
// TO DO: redirect for bad textfield values. -- equivelant to redirect if there are no valid choices left. |
| 507 |
|
|
| 508 |
|
// TO DO: filter forms for question/response |