| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- <?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') :
 
-     // Limit to 250 characters.
 
-     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 = "
 
-     SELECT COUNT(*)
 
-     FROM {taxonomy_term_data}
 
-   ";
 
-   $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);
 
-     }
 
-     // The field exists: check if an update is needed. Update is needed only
 
-     // with taxonomy_term_reference, because this type requires to use specific
 
-     // vocabularies.
 
-     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']);
 
-     }
 
-     // The field exists and doesn't need to be updated.
 
-     // Field is already created, so use it.
 
-     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;
 
- }
 
 
  |