You are here

function taxonomy_tools_copier_reference_fields in Taxonomy Tools 7

Same name and namespace in other branches
  1. 8 taxonomy_tools_copier/taxonomy_tools_copier.admin.inc \taxonomy_tools_copier_reference_fields()

Returns term reference fields that need to be filled.

Parameters

string $machine_name: Vocabulary machine name.

string $bundle: Node type.

string $action: Action what to do with the node.

int $nid: Node identificator.

1 call to taxonomy_tools_copier_reference_fields()
taxonomy_tools_copier_node_handler in taxonomy_tools_copier/taxonomy_tools_copier.admin.inc
Handles node copying or linking.

File

taxonomy_tools_copier/taxonomy_tools_copier.admin.inc, line 821
Administrative page callbacks for the Taxonomy Copier module.

Code

function taxonomy_tools_copier_reference_fields($machine_name, $bundle, $action, $nid) {
  $result = array();

  // Get term reference fields.
  $query = db_select('field_config', 'fc');
  $query
    ->addField('fc', 'field_name');
  $query
    ->addField('fc', 'data');
  $query
    ->addField('fc', 'cardinality');
  $query
    ->condition('fc.deleted', 0);
  $query
    ->condition('fc.type', 'taxonomy_term_reference');
  if ($action == 'link') {
    $query
      ->condition('fc.cardinality', 1, '<>');
  }
  $query
    ->join('field_config_instance', 'fci', 'fci.field_name = fc.field_name');
  $query
    ->condition('fci.entity_type', 'node');
  $query
    ->condition('fci.bundle', $bundle);
  $result = $query
    ->execute()
    ->fetchAll();

  // Filter out fields by vocabulary and free value slots.
  foreach ($result as $key => $field) {
    $data = unserialize($field->data);
    if ($data['settings']['allowed_values'][0]['vocabulary'] != $machine_name) {
      unset($result[$key]);
    }
    elseif ($action == 'link' && $field->cardinality != -1) {
      $values = taxonomy_tools_copier_field_value_count($field->field_name, $bundle, $nid);
      if ($values == $field->cardinality) {
        unset($result[$key]);
      }
    }
  }
  return $result;
}