summaryrefslogtreecommitdiffstats
path: root/devel_generate/taxonomy.devel_generate.inc
blob: 70c41629539f0c2b983d4b59a7bf12f07c08af1c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

function taxonomy_devel_generate($object, $field, $instance, $bundle) {
  if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_CUSTOM) {
    return devel_generate_multiple('_taxonomy_devel_generate', $object, $field, $instance, $bundle);
  }
  else {
    return _taxonomy_devel_generate($object, $field, $instance, $bundle);
  }
}

function _taxonomy_devel_generate($object, $field, $instance, $bundle) {
  $object_field = array();
  // TODO: For free tagging vocabularies that do not already have terms, this
  // will not result in any tags being added.
  $machine_name = $field['settings']['allowed_values'][0]['vocabulary'];
  $vocabulary = taxonomy_vocabulary_machine_name_load($machine_name);
  if ($max = db_query('SELECT MAX(tid) FROM {taxonomy_term_data} WHERE vid = :vid', array(':vid' => $vocabulary->vid))->fetchField()) {
    $candidate = mt_rand(1, $max);
    $query = db_select('taxonomy_term_data', 't');
    $tid = $query
              ->fields('t', array('tid'))
              ->condition('t.vid', $vocabulary->vid, '=')
              ->condition('t.tid', $candidate, '>=')
              ->range(0,1)
              ->execute()
              ->fetchField();
    // If there are no terms for the taxonomy, the query will fail, in which
    // case we return NULL.
    if ($tid === FALSE) {
      return NULL;
    }
    $object_field['tid'] = (int) $tid;
    return $object_field;
  }
}