Report abuse

/**
 * Implementation of hook_widget().
 */
function optionwidgets_widget($op, &$node, $field, &$items) {
  switch ($op) {
    case 'prepare form values':
      $options = _optionwidgets_options($field, $node);
      $items_transposed = content_transpose_array_rows_cols($items);
      $values = (isset($items_transposed['value']) && is_array($items_transposed['value'])) ? $items_transposed['value'] : array();

      $keys = array();
      foreach ($values as $value) {
        $key = array_search($value, array_keys($options));
        if (isset($key)) {
          $keys[] = $value;
        }
      }
      if ($field['multiple'] || $field['widget']['type'] == 'options_onoff') {
        $items['default keys'] = $keys;
      }
      else {
        $items['default key'] = reset($keys);
      }
      break;

    case 'form':
      $options = _optionwidgets_options($field, $node);

      $form = array();

      $form[$field['field_name']] = array('#tree' => TRUE);

      switch ($field['widget']['type']) {
        case 'options_select':
              if ($field['multiple']) {
                $form[$field['field_name']]['keys'] = array(
                  '#type' => 'select',
                  '#title' => t($field['widget']['label']),
                  '#default_value' => $items['default keys'],
                  '#multiple' => TRUE,
                  '#size' => min(count($options), 6),
                  '#options' => $options,
                  '#required' => $field['required'],
                  '#description' => t($field['widget']['description']),
                );
              }
              else {
                $form[$field['field_name']]['key'] = array(
                  '#type' => 'select',
                  '#title' => t($field['widget']['label']),
                  '#default_value' => $items['default key'],
                  '#multiple' => FALSE,
                  '#options' => $options,
                  '#required' => $field['required'],
                  '#description' => t($field['widget']['description']),
                );
              }

              if ($field['field_name'] == 'field_breed') {       
                foreach($options as $value) {
            if(((arg(2) == 'content_pet_profile') || ($node->type == 'content_pet_profile')) && ($value == 'Unspecified')) {
            continue;
            }
                  $units = explode('::', $value);
                  $count = count($units);
                  if ($count > 1) {
                    $type = strtolower(str_replace('/', '_', $units[0]));
                  } else {
                    $type = trim(strtolower(str_replace('/', '_', $units[0])));
                  }
                  if ($units[1] == 'Critter') {
                    $type = 'critter';
                  } elseif (stristr($units[1], 'farm')) {
                    $type = 'farm';
                  }
                  $option_stack[$value]['bg'] = $units[0];
                  $option_stack[$value]['class'] = "$type-level$count";
                  $option_stack[$value]['view'] = array_pop($units);
                  $option_stack[$value]['value'] = trim($value);
                }

                $form[$field['field_name']]['key']['#type'] = 'markup';      
                $form[$field['field_name']]['key']['#size'] = '10';      
                $form[$field['field_name']]['key']['#value'] = '
          <div id="fix_stupid_ie_bugs" style="display: none;">
          <img src="themes/petentials/images/selectors/all.gif" />
          <img src="themes/petentials/images/selectors/bird.gif" />
          <img src="themes/petentials/images/selectors/cat.gif" />
          <img src="themes/petentials/images/selectors/critter.gif" />
          <img src="themes/petentials/images/selectors/dog.gif" />
          <img src="themes/petentials/images/selectors/farm.gif" />
          <img src="themes/petentials/images/selectors/horse.gif" />
          <img src="themes/petentials/images/selectors/insect.gif" />
          <img src="themes/petentials/images/selectors/marine.gif" />
          <img src="themes/petentials/images/selectors/other.gif" />
          <img src="themes/petentials/images/selectors/othermammal.gif" />
          <img src="themes/petentials/images/selectors/reptile.gif" />
          <img src="'.url('themes/petentials/images/selectors/all.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/bird.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/cat.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/critter.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/dog.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/farm.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/horse.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/insect.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/marine.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/other.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/othermammal.gif').'" />
          <img src="'.url('themes/petentials/images/selectors/reptile.gif').'" />
          </div>
          <div id="breed_widget">
          <span class="breed_steps">1. Pick a Category</span><br />
          <table id="breed_icons"><tr>
          <td><a href="javascript:reset_breed_selector();" title="Show all breeds"><img src="'.url('themes/petentials/images/categ-all.gif').'" alt="all breeds"><br />ALL</a></td>
          <td><a href="javascript:update_breed_selector(\'^Bird\', 1)" title="Just show birds"><img src="'.url('themes/petentials/images/categ-bird.gif').'" alt="birds"><br />BIRD</a></td>
          <td><a href="javascript:update_breed_selector(\'^Cat\', 1)" title="Just show cats"><img src="'.url('themes/petentials/images/categ-cat.gif').'" alt="cats"><br />CAT</a></td>
          <td><a href="javascript:update_breed_selector(\'^Dog\', 1)" title="Just show dogs"><img src="'.url('themes/petentials/images/categ-dog.gif').'" alt="dogs"><br />DOG</a></td>
          <td><a href="javascript:update_breed_selector(\'::Critter\', 1)" title="Just show critters"><img src="'.url('themes/petentials/images/categ-critter.gif').'" alt="critters"><br />CRITTER</a></td>
          <td><a href="javascript:update_breed_selector(\'::Farm\', 1)" title="Just show farm animals"><img src="'.url('themes/petentials/images/categ-farm.gif').'" alt="farm animals"><br />FARM</a></td>
          <td><a href="javascript:update_breed_selector(\'^Horse\', 1)" title="Just show horses"><img src="'.url('themes/petentials/images/categ-horse.gif').'" alt="horses"><br />HORSE</a></td>
          <td><a href="javascript:update_breed_selector(\'^Insect\', 1)" title="Just show insects and arachnids"><img src="'.url('themes/petentials/images/categ-insect.gif').'" alt="insects and arachnids"><br />INSECT</a></td>
          <td><a href="javascript:update_breed_selector(\'^Mammal\', 1)" title="Just show other mammals"><img src="'.url('themes/petentials/images/categ-othermammal.gif').'" alt="mammals"><br />MAMMAL</a></td>
          <td><a href="javascript:update_breed_selector(\'^Marine\', 1)" title="Just show marine life"><img src="'.url('themes/petentials/images/categ-marine.gif').'" alt="marine life"><br />MARINE</a></td>
          <td><a href="javascript:update_breed_selector(\'^Reptiles\', 1)" title="Just show reptiles and amphibians"><img src="'.url('themes/petentials/images/categ-reptile.gif').'" alt="reptiles and amphibians"><br />REPTILE</a></td>
          <td><a href="javascript:update_breed_selector(\'^Other\', 1)" title="Just show other creatures"><img src="'.url('themes/petentials/images/categ-other.gif').'" alt="other creatures"><br />OTHER</a></td>
          </tr></table>

          <div id="breed_narrow">
            <span class="breed_steps">Start typing for fewer choices:</span> <span style="display: none;" id="breed_selector_processing"><img src="'.url('themes/petentials/images/breed_search.gif').'" /></span><br /> 
            <INPUT NAME="regexp" onKeyUp="update_breed_selector(this.value, 0)">
            <!--<INPUT TYPE="button" onClick="update_breed_selector(this.form.regexp.value, 0)" value="Search">-->
            <INPUT TYPE="button" onClick="reset_breed_selector();this.form.regexp.value=\'\'" value="Reset"><br />
            <span class="description">Be sure to make a selection from the box to the left; even if there is only one choice, you\'re not official until you see "Your Selection" below.</span>
            <div>
            <span class="breed_steps" id="breed_choice_span" style="color: #E4E9A3;">Your Selection:</span><br />
            <span id="breed_choice">
            &nbsp;</span>
            </div>
          </div>

          <div id="breed_filter">
          <a class="breed_steps">2. Pick a Species/Breed</a><br />';      
          //$form[$field['field_name']]['key']['#value'] .= '<SELECT id="edit-field_breed-key" name="edit[field_breed][key]" class="form-select required" onChange="breedpicker();" size=\"10\">';
          $form[$field['field_name']]['key']['#value'] .= '<input type="hidden" id="edit-field_breed-key" name="edit[field_breed][key]" class="form-select required" />';
          $form[$field['field_name']]['key']['#value'] .= '<div id="edit-field_breed-div" class="form-select" style="overflow:auto;height:10em;width:220px;background:#FFF;border:2px #848484 solid;border-right:2px #FFF solid;border-bottom:2px #FFF solid;color:#3C331E;">';
          foreach($option_stack as $value => $view) {
                  if ($view['view'] != '- -' AND $view['view'] != '') {
                    if ($view['value'] == $items['default key']) {
                      $form[$field['field_name']]['key']['#value'] .= "<a id=\"selected\" class=\"{$view['class']}\" name=\"{$view['value']}\" onClick=\"setbreed(this);\">{$view['view']}</a>";
                    } else {
                      $form[$field['field_name']]['key']['#value'] .= "<a class=\"{$view['class']}\" name=\"{$view['value']}\" onClick=\"setbreed(this);\">{$view['view']}</a>";

                    }
                  }
                }

                $form[$field['field_name']]['key']['#value'] .= '</div><br />
          <span class="description">Highlight your Species Breed. Don\'t see it in the list? let us know!</span><br />
          <SCRIPT TYPE="text/javascript" SRC="'.check_url(url('files/filterlist.js', NULL, NULL, 1)).'"></SCRIPT>
          <SCRIPT TYPE="text/javascript">
          <!--
            var bf_orig = document.getElementById("edit-field_breed-div");

            var bf = new filterlist(bf_orig);
            bf.set_ignore_case(1)
            //bf.show_debug = true;

            function reset_breed_selector() {
              bf.reset();
            }

            function anim_off() {
              breed_anim = document.getElementsByTagName("span");
              for (i=0; i<breed_anim.length; i++) {
                if (breed_anim[i].id == "breed_selector_processing") {
                  breed_anim[i].style.display = "none";
                }
              }
            }

            function anim_on() {
              breed_anim = document.getElementsByTagName("span");
              for (i=0; i<breed_anim.length; i++) {
                if (breed_anim[i].id == "breed_selector_processing") {
                  breed_anim[i].style.display = "";
                }
              }
            }

            function update_breed_selector(val, arg) {
              bf.set(val, arg);  
            }

            function setbreed(newselected) {
              var breedselected = $(\'selected\');
              if(breedselected) {
                breedselected.id = "";
              }
              newselected.id = "selected";
              breedpicker();
            }

            function breedpicker() {
              var breedselected = $(\'selected\');
              if(breedselected){
                  $(\'breed_choice\').innerHTML = breedselected.name;
                  $(\'edit-field_breed-key\').value = breedselected.name;
                  $(\'breed_choice_span\').style.color = "#3C331E";
                }
              else{
                  $(\'breed_choice\').innerHTML = "( no selection yet )";
                  $(\'breed_choice_span\').style.color = "#3C331E";
                }
            }
            
            function hidesubmit() {
              var classElements = getElementsByClass(\'form-submit\',document);
              var elsLen = classElements.length;
              for (i = 0; i < elsLen; i++) {
                classElements[i].style.display = "none";
              }
            }
            
            addLoadEvent(breedpicker);
            addLoadEvent(hidesubmit);
          -->
          </SCRIPT>
          </div>
          <br style="clear:both" /></div>';
    }

               break;

        case 'options_onoff':
          // Display only the 'On' value of $options;
          $vals = array_keys($options);
          $on_value = $vals[1];
          $form[$field['field_name']]['keys'] = array(
            '#type' => 'checkbox',
            '#title' => $options[$on_value],
            '#default_value' => $items['default keys'][0],
            '#return_value' => $on_value,
            '#description' => t($field['widget']['description']),
            '#required' => FALSE,
          );
          break;

        case 'options_buttons':
          if ($field['multiple']) {
            $form[$field['field_name']]['keys'] = array(
              '#type' => 'checkboxes',
              '#title' => t($field['widget']['label']),
              '#default_value' => $items['default keys'],
              '#options' => $options,
              '#required' => $field['required'],
              '#description' => t($field['widget']['description']),
            );
          }
          else {
            $form[$field['field_name']]['key'] = array(
              '#type' => 'radios',
              '#title' => t($field['widget']['label']),
              '#default_value' => $items['default key'],
              '#options' => $options,
              '#required' => $field['required'],
              '#description' => t($field['widget']['description']),
            );
          }
          break;
      }
      return $form;

    case 'process form values':
      $options = _optionwidgets_options($field, $node);

      if ($field['multiple'] || $field['widget']['type'] == 'options_onoff') {
        $keys = (array) $items['keys'];
      }
      else {
        $keys = array($items['key']);
      }

      $values = array();
      foreach ($keys as $key) {
        if (isset($options[$key])) {
          $values[] = $key;
        }
      }

      if ($field['widget']['type'] == 'options_onoff' && empty($values)) {
        $keys = array_keys($options);
        $values[] = $keys[0];
      }

      $items = content_transpose_array_rows_cols(array('value' => $values));

      // Remove the widget's data representation so it isn't saved.
      unset($items['keys']);
      unset($items['key']);
      break;
  }
}