Example #1
0
 public static function purgeField(array $field)
 {
     $field = static::readFieldById($field['id']);
     if (empty($field['deleted'])) {
         throw new FieldException("Field not yet marked as deleted.");
     }
     if (!module_exists($field['storage']['module'])) {
         throw new FieldException("The {$field['storage']['module']} module needs to be enabled in order to delete field ID {$field['id']}.");
     }
     $instances = field_read_instances(array('field_id' => $field['id']), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
     if (count($instances) > 0) {
         throw new FieldException(t('Attempt to purge a field @field_name that still has instances.', array('@field_name' => $field['field_name'])));
     }
     db_delete('field_config')->condition('id', $field['id'])->execute();
     // Notify the storage engine.
     module_invoke($field['storage']['module'], 'field_storage_purge_field', $field);
     // Clear the cache.
     field_info_cache_clear();
     // Invoke external hooks after the cache is cleared for API consistency.
     module_invoke_all('field_purge_field', $field);
     watchdog('helper', "Field ID {$field['id']} completely removed.");
 }
 public static function mergeFields($old_field_name, $new_field_name)
 {
     $old_field = field_info_field($old_field_name);
     $new_field = field_info_field($new_field_name);
     if (empty($old_field)) {
         throw new FieldException("Field {$old_field_name} does not exist.");
     }
     if (empty($new_field)) {
         throw new FieldException("Field {$new_field_name} does not exist.");
     }
     if ($old_field['type'] != $new_field['type']) {
         throw new FieldException("Cannot merge fields because they are not the same field type.");
     }
     if ($old_field['storage']['type'] !== 'field_sql_storage') {
         throw new FieldException("Unable to change field type for field {$old_field['field_name']} using storage {$old_field['storage']['type']}.");
     }
     if ($new_field['storage']['type'] !== 'field_sql_storage') {
         throw new FieldException("Unable to change field type for field {$new_field['field_name']} using storage {$new_field['storage']['type']}.");
     }
     $instances = field_read_instances(array('field_name' => $old_field_name));
     foreach ($instances as $instance) {
         static::changeInstanceField($instance, $new_field_name);
     }
     // I don't think this is necessary since this will remove all the instances
     // for a field, which deletes the field as well.
     // FieldHelper::deleteField($old_field);
 }