taxonomy_csv.vocabulary.api.inc in Taxonomy CSV import/export 7.5
Same filename and directory in other branches
Prepare and manage vocabularies.
File
taxonomy_csv.vocabulary.api.incView source
<?php
/**
* @file
* Prepare and manage vocabularies.
*/
/**
* Creates vocabulary by its name and returns vocabulary object.
*
* @param $name
* (Optional) Name of vocabulary to create.
*
* @return
* Created vocabulary object.
*/
function taxonomy_csv_vocabulary_create($name = '') {
$name = _taxonomy_csv_vocabulary_name_create($name);
// Create an empty vocabulary with default Drupal 7 fields.
// Hierarchy is updated later.
$vocabulary = (object) array(
'name' => $name,
'machine_name' => taxonomy_csv_vocabulary_machine_name_create($name),
'description' => t('Vocabulary created automatically by Taxonomy csv import/export module'),
'hierarchy' => 2,
'module' => 'taxonomy',
'weight' => 0,
);
$result = taxonomy_vocabulary_save($vocabulary);
return $vocabulary;
}
/**
* Helper to create an unused vocabulary name from a string.
*/
function _taxonomy_csv_vocabulary_name_create($name = '') {
$name = preg_replace('/.csv$/', '', trim(basename(strval($name))));
$name = drupal_strlen($name) == 0 ? t('Auto created vocabulary') : drupal_substr($name, 0, 250);
// Invent a unused vocabulary name.
if (taxonomy_csv_vocabulary_name_check($name) || taxonomy_csv_vocabulary_machine_name_check(taxonomy_csv_vocabulary_machine_name_create($name))) {
for ($i = 2; taxonomy_csv_vocabulary_name_check("{$name} {$i}") || taxonomy_csv_vocabulary_machine_name_check(taxonomy_csv_vocabulary_machine_name_create("{$name} {$i}")); $i++) {
}
$name = "{$name} {$i}";
}
return $name;
}
/**
* Creates a machine name from a string.
*
* The name is created by replacing non alphanumeric character by an underscore.
* Machine name is defined as first 16 cleaned characters of name and a random
* five characters serial. Fields module prepends 'taxonomy_' to name and check
* if total lenght is 21 characters max.
*
* @param $name
* The string to process.
*
* @return
* The processed string.
*/
function taxonomy_csv_vocabulary_machine_name_create($name) {
// Get last vid.
$vid = 1 + db_query('SELECT max(vid) FROM {taxonomy_vocabulary}')
->fetchField();
$machine_name = drupal_substr(preg_replace('/_+/i', '_', preg_replace('/[^a-z0-9\\_]/i', '_', drupal_strtolower(trim(strval($name))))), 0, 16) . $vid . '_' . strval(rand(10000, 99999));
return drupal_substr($machine_name, 0, 21);
}
/**
* Checks if a name is a vocabulary machine_name.
*/
function taxonomy_csv_vocabulary_machine_name_check($name) {
return taxonomy_vocabulary_machine_name_load($name) != FALSE;
}
/**
* Check if a name is a vocabulary name.
*/
function taxonomy_csv_vocabulary_name_check($name) {
return taxonomy_vocabulary_load_multiple(FALSE, array(
'name' => $name,
)) != FALSE;
}
/**
* Return an array of all term ids of a given vocabulary.
*
* @param $vid
* The vocabulary id from where to fetch term ids.
*
* @return
* Array of term ids.
*/
function taxonomy_csv_vocabulary_get_tids($vid) {
// Tids are available in drupal_static('taxonomy_get_tree:terms'), but we
// prefer to use an entity query to avoid issue with cache, if not updated.
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'taxonomy_term')
->propertyCondition('vid', $vid);
$result = $query
->execute();
return isset($result['taxonomy_term']) ? array_keys($result['taxonomy_term']) : array();
}
/**
* Return an array of all full terms of a given vocabulary.
*
* @param $vid
* The vocabulary id from where to fetch term ids.
*
* @return
* Array of full term.
*/
function taxonomy_csv_vocabulary_get_terms($vid) {
$result = taxonomy_csv_vocabulary_get_tids($vid);
return taxonomy_term_load_multiple($result);
}
/**
* Calculate number of terms in a vocabulary or in all vocabularies.
*
* @param $vocabulary_id
* (Optional) Id or array of ids of the chosen vocabularies. If not specified,
* count terms in all vocabularies.
*
* @return
* Number of terms in specified vocabularies or in all vocabularies.
*/
function taxonomy_csv_vocabulary_count_terms($vocabulary_id = 0) {
if (!is_array($vocabulary_id)) {
$vocabulary_id = array(
$vocabulary_id,
);
}
$sql = "\n SELECT COUNT(*)\n FROM {taxonomy_term_data}\n ";
$args = array();
if ($vocabulary_id != array(
0,
) && $vocabulary_id != array(
'0',
)) {
$sql .= ' WHERE vid IN (:vid) ';
$args[':vid'] = $vocabulary_id;
}
$result = db_query($sql, $args)
->fetchField();
return $result;
}
/**
* Add or create a field to attach to a vocabulary.
*
* @param $vocabulary_machine_name
* Vocabulary machine_name.
* @param $field
* Field array to attach.
*
* @return
* TRUE if success, FALSE else.
*/
function taxonomy_csv_vocabulary_field_attach($vocabulary_machine_name, $field) {
// Check if vocabulary exist.
$vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
if ($vocabulary) {
// Check if field exists in order to create or to update it.
// No other check is made.
$prior_field = field_info_field($field['field_name']);
// The field doesn't exist, so creates it.
if (empty($prior_field)) {
$field = field_create_field($field);
}
elseif ($field['type'] == 'taxonomy_term_reference') {
$flag = FALSE;
foreach ($prior_field['settings']['allowed_values'] as $allowed_values) {
// Don't add new allowed values if they exist already.
if ($allowed_values == $field['settings']['allowed_values'][0]) {
$flag = TRUE;
break;
}
}
if (!$flag) {
$prior_field['settings']['allowed_values'][] = $field['settings']['allowed_values'][0];
$result = field_update_field($prior_field);
}
$field = field_info_field($field['field_name']);
}
else {
$field = $prior_field;
}
// Check if field is already instanced to vocabulary so attach it if needed.
$prior_instance = field_info_instance('taxonomy_term', $field['field_name'], $vocabulary->machine_name);
if (empty($prior_instance)) {
$result = field_create_instance(array(
'field_name' => $field['field_name'],
'entity_type' => 'taxonomy_term',
'bundle' => $vocabulary->machine_name,
'label' => isset($field['label']) ? $field['label'] : $field['field_name'],
'description' => isset($field['description']) ? $field['description'] : '',
));
}
return TRUE;
}
return FALSE;
}
Functions
Name![]() |
Description |
---|---|
taxonomy_csv_vocabulary_count_terms | Calculate number of terms in a vocabulary or in all vocabularies. |
taxonomy_csv_vocabulary_create | Creates vocabulary by its name and returns vocabulary object. |
taxonomy_csv_vocabulary_field_attach | Add or create a field to attach to a vocabulary. |
taxonomy_csv_vocabulary_get_terms | Return an array of all full terms of a given vocabulary. |
taxonomy_csv_vocabulary_get_tids | Return an array of all term ids of a given vocabulary. |
taxonomy_csv_vocabulary_machine_name_check | Checks if a name is a vocabulary machine_name. |
taxonomy_csv_vocabulary_machine_name_create | Creates a machine name from a string. |
taxonomy_csv_vocabulary_name_check | Check if a name is a vocabulary name. |
_taxonomy_csv_vocabulary_name_create | Helper to create an unused vocabulary name from a string. |