/[drupal]/contributions/modules/finder_wizard/finder_wizard.module
ViewVC logotype

Diff of /contributions/modules/finder_wizard/finder_wizard.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.2.4.2 by danielb, Sat Jul 25 02:18:28 2009 UTC revision 1.2.4.3 by danielb, Mon Nov 23 08:11:37 2009 UTC
# Line 35  function finder_wizard_theme() { Line 35  function finder_wizard_theme() {
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'),
# Line 57  function finder_wizard_form_finder_admin Line 56  function finder_wizard_form_finder_admin
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',
# Line 75  function finder_wizard_form_finder_admin Line 72  function finder_wizard_form_finder_admin
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  /**  /**
# Line 188  function finder_wizard_finderapi(&$objec Line 188  function finder_wizard_finderapi(&$objec
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':
# Line 201  function finder_wizard_finderapi(&$objec Line 202  function finder_wizard_finderapi(&$objec
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  /**  /**
# Line 443  function theme_finder_wizard_form_button Line 448  function theme_finder_wizard_form_button
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  /**  /**
# Line 474  function theme_finder_wizard_responses() Line 481  function theme_finder_wizard_responses()
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

Legend:
Removed from v.1.2.4.2  
changed lines
  Added in v.1.2.4.3

  ViewVC Help
Powered by ViewVC 1.1.3