You are here

function views_plugin_argument_validate_field_extractor::validate_argument in Views Arguments Extras 7

We are going to take the current argument, find the enitity object to which it relates and then change the argument to reflect a value from one if its fields

Overrides views_plugin_argument_validate::validate_argument

File

./views_arguments_extras_plugin_argument_validate_field.inc, line 73
Contains the php code argument validator plugin.

Class

views_plugin_argument_validate_field_extractor
Provide PHP code to validate whether or not an argument is ok.

Code

function validate_argument(&$argument) {

  // set up variables to make it easier to reference during the argument.
  // TODO parse arguement on , and allow for multiple values
  $view =& $this->view;
  $handler =& $this->argument;
  $id = $handler->argument;
  if ($this->options['field']) {
    global $language;
    list($plugin_id, $field_name) = explode("::", $this->options['field']);
    if ($this->options['entity_type'] == 'entity_boxes' && !is_numeric($id)) {
      $entity = array_pop(entity_boxes_load_delta($id));
    }
    else {
      $entity = array_pop(entity_load($this->options['entity_type'], array(
        $id,
      )));
    }
    $lang = isset($entity->{$field_name}[$language->language]) ? $language->language : LANGUAGE_NONE;
    $field = isset($entity->{$field_name}[$lang]) ? $entity->{$field_name}[$lang] : array();
    module_load_include("inc", "views_arguments_extras", "views_arguments_extras.field_plugins");
    module_load_include("inc", "views_arguments_extras", "views_plugin_argument_default_field");
    $plugin = views_plugin_argument_default_field($plugin_id);
    if ($arg_fun = ctools_plugin_get_function($plugin, "argument callback")) {
      $return = $arg_fun($field, $this->options['settings'], $entity, $this);
      $handler->argument = $return;
      return TRUE;
    }
  }
  return FALSE;
}