You are here

function ctools_entity_field_value_ctools_access_check in Chaos Tool Suite (ctools) 7

Check for access.

1 string reference to 'ctools_entity_field_value_ctools_access_check'
entity_field_value.inc in plugins/access/entity_field_value.inc

File

plugins/access/entity_field_value.inc, line 205

Code

function ctools_entity_field_value_ctools_access_check($conf, $context, $plugin) {
  if (!is_object($context) || empty($context->data)) {

    // If the context doesn't exist -- for example, a newly added entity
    // reference is used as a pane visibility criteria -- we deny access.
    return FALSE;
  }
  list($parent, $entity_type, $bundle_type, $field_name) = explode(':', $plugin['name']);
  if ($field_items = field_get_items($entity_type, $context->data, $field_name)) {
    $langcode = field_language($entity_type, $context->data, $field_name);

    // Get field storage columns.
    $instance = field_info_instance($entity_type, $field_name, $bundle_type);
    $field = field_info_field_by_id($instance['field_id']);
    $columns = array();
    foreach ($field['columns'] as $column => $attributes) {
      $columns[$column] = _field_sql_storage_columnname($field_name, $column);
    }
    if (isset($conf[$field_name])) {

      // We have settings for this field.
      $conf_value_array = _ctools_entity_field_value_ctools_access_get_conf_field_values($conf[$field_name], $langcode);
      if (empty($conf_value_array)) {
        return FALSE;
      }

      // Check field value.
      foreach ($field_items as $field_value) {

        // Iterate through config values.
        foreach ($conf_value_array as $conf_value) {
          $match = FALSE;
          foreach ($field_value as $field_column => $value) {

            // Check access only for stored in config column values.
            if (isset($conf_value[$field_column])) {
              if ($value == $conf_value[$field_column]) {
                $match = TRUE;
              }
              else {
                $match = FALSE;
                break;
              }
            }
          }
          if ($match) {
            return TRUE;
          }
        }
      }
      return FALSE;
    }
  }
  return FALSE;
}