function taxonomy_tools_copier_reference_fields in Taxonomy Tools 7
Same name and namespace in other branches
- 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;
}