You are here

function _uc_dropdown_attributes_kit_build in Dropdown Attributes 7

Same name and namespace in other branches
  1. 8 uc_dropdown_attributes.module \_uc_dropdown_attributes_kit_build()

Form build for product kits.

Callback for $form['#after_build'] for product kits. Renders the dependent attributes and stores the html as a Javascript array.

1 string reference to '_uc_dropdown_attributes_kit_build'
uc_dropdown_attributes_form_alter in ./uc_dropdown_attributes.module
Implements hook_form_alter().

File

./uc_dropdown_attributes.module, line 410
Show/hide attributes based on the values of other attributes.

Code

function _uc_dropdown_attributes_kit_build($form, &$form_state) {
  foreach ($form['products'] as $key => $value) {
    if (is_numeric($key)) {
      $type = uc_dropdown_attributes_dependency_type($key);
      switch ($type) {
        case 'node':
          $sql = 'SELECT aid, parent_aid, parent_values, required
            FROM {uc_dropdown_attributes} WHERE nid=:nid';
          $id = $key;
          $attributes = db_query($sql, array(
            ':nid' => $key,
          ));
          break;
        case 'class':
          $sql = 'SELECT aid, parent_aid, parent_values, required
            FROM {uc_dropdown_classes} WHERE pcid=:pcid';
          $pcid = uc_dropdown_attributes_get_type($key);
          $id = $pcid;
          $attributes = db_query($sql, array(
            ':pcid' => $pcid,
          ));
          break;
        default:
          $attributes = array();
      }
      if (isset($form_state['triggering_element'])) {
        $parents = $form_state['triggering_element']['#parents'];
        $parent_aid = $parents[count($parents) - 1];
        $parent_value = $form_state['triggering_element']['#value'];
        uc_dropdown_attributes_remove_values($parent_aid, $parent_value, $id, $type, $form_state['values']['products'][$key]);
      }
      foreach ($attributes as $attribute) {
        $aid = $attribute->aid;
        $parent_aid = $attribute->parent_aid;
        $parent_value = $form_state['values']['products'][$key]['attributes'][$parent_aid];
        if ($parent_value) {

          // A value has been entered in parent attribute.
          $values = unserialize($attribute->parent_values);
          if (array_key_exists($parent_value, $values)) {

            // Show dependent attribute.
            if ($attribute->required) {
              $form['products'][$key]['attributes'][$aid]['#required'] = TRUE;
            }
          }
          else {

            // Hide dependent attribute.
            $form['products'][$key]['attributes'][$aid]['#post_render'][] = 'uc_dropdown_attributes_post_render';
            if ($form['products'][$key]['attributes'][$aid]['#required'] && $form['products'][$key]['attributes'][$aid]['#value'] != '') {
              $form['products'][$key]['attributes'][$aid]['#value'] = '';
            }
          }
        }
        else {
          $form['products'][$key]['attributes'][$aid]['#post_render'][] = 'uc_dropdown_attributes_post_render';
          if ($form['products'][$key]['attributes'][$aid]['#required'] && $form['products'][$key]['attributes'][$aid]['#value'] != '') {
            $form['products'][$key]['attributes'][$aid]['#value'] = '';
          }
        }
      }
    }
  }
  return $form;
}