Index: content_copy.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/cck/content_copy.module,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 content_copy.module --- content_copy.module 7 Jan 2007 14:43:32 -0000 1.1.2.5 +++ content_copy.module 14 Feb 2007 02:29:23 -0000 @@ -48,10 +48,23 @@ function content_copy_menu($may_cache) { 'type' => MENU_LOCAL_TASK, 'weight' => 4, ); + + // Surely, there is a better place for this. + content_copy_install_default_fields(); } return $items; } +function content_copy_install_default_fields() { + include_once('./'. drupal_get_path('module', 'content') .'/content_admin.inc'); + include_once('./'. drupal_get_path('module', 'content') .'/content_crud.inc'); + + $types = module_invoke_all('default_fields'); + foreach ($types as $type => $fields) { + content_copy_add_fields_to_type($type, $fields); + } +} + /** * A form to export field definitions. */ @@ -240,7 +253,6 @@ function content_copy_import_form($type_ * 2) execute the imported field macro to update the settings to the imported values */ function content_copy_import_form_submit($form_id, $form_values) { - // Get the content type we are importing into. $type_name = $form_values['type_name']; $type_label = node_get_types('name', $type_name); @@ -268,7 +280,7 @@ function content_copy_import_form_submit // Perform more pre-import error trapping. // If there are potential problems, exit without doing the import. - $not_enabled = array(); + $not_enabled = content_copy_verify_field_modules($imported_fields); // The groups array could be empty and still valid, make sure to cast it as an array. // If there are groups in the import, make sure the fieldgroup module is enabled. @@ -279,23 +291,8 @@ function content_copy_import_form_submit $not_enabled[] = 'fieldgroup'; } - // Make sure that all the field and widget modules in the import are enabled in this database. - foreach ($imported_fields as $field) { - if (empty($field['module'])) { - $not_enabled[] = $field['field_name']; - } - else { - $modules = explode(', ', $field['module']); - foreach ($modules as $module) { - if (!module_exists($module)) { - $not_enabled[] = $module; - } - } - } - } - // If any required module is not enabled, set an error message and exit. - if ($not_enabled) { + if (!empty($not_enabled)) { form_set_error('macro', t('The following modules must be enabled for this import to work: %modules.', array( '%modules' => implode(', ', array_unique($not_enabled)) ))); @@ -352,10 +349,65 @@ function content_copy_import_form_submit // Reset the static variable in fieldgroup_groups() with new data. fieldgroup_groups('', FALSE, TRUE); } + + $errors = content_copy_add_fields_to_type($type_name, $imported_fields); - // Iterate through the field forms in the import and execute each. - foreach ($imported_fields as $field) { + if (empty($errors)) { + if (sizeof($imported_fields) > 0 || sizeof($imported_groups) > 0) { + drupal_goto('admin/content/types/'. $content_info['content types'][$type_name]['url_str'] .'/fields'); + } + else { + drupal_goto('admin/content/types'); + } + } +} + +function content_copy_verify_field_modules($fields) { + // Perform more pre-import error trapping. + // If there are potential problems, exit without doing the import. + $not_enabled = array(); + + // Make sure that all the field and widget modules in the import are enabled in this database. + foreach ($fields as $field) { + if (empty($field['module'])) { + $not_enabled[] = $field['field_name']; + } + else { + $modules = explode(', ', $field['module']); + foreach ($modules as $module) { + if (!module_exists($module)) { + $not_enabled[] = $module; + } + } + } + } + return $not_enabled; +} + +function content_copy_add_fields_to_type($type_name, $fields) { + // Get all type and field info for this database. + $content_info = _content_type_info(); + + $errors = array(); + + // We srequire that the content type already exist. + if (!is_array($content_info['content types'][$type_name])) { + $errors[] = array('type_missing' => $type_name); + return $errors; + } + // Perform more pre-import error trapping. + // If there are potential problems, exit without doing the import. + $not_enabled = content_copy_verify_field_modules($fields); + + // If any required module is not enabled, set an error message and exit. + if ($not_enabled) { + $errors[] = array('modules_missing' => $not_enabled); + return $errors; + } + + // Iterate through the field forms in the import and execute each. + foreach ($fields as $field) { // Make sure the field doesn't already exist in the type. // If so, do nothing, fields can't be duplicated within a content type. $field_name = $field['field_name']; @@ -363,14 +415,9 @@ function content_copy_import_form_submit $field_label = $field_values['label']; if (!empty($field['field_name']) && is_array($content_info['content types'][$type_name]['fields'][$field_name])) { - drupal_set_message(t("The imported field %field_label (%field_name) was not added to %type because that field already exists in %type.", array( - '%field_label' => $field_label, - '%field_name' => $field_name, - '%type' => $type_name - ))); + $errors[] = array('field_exists' => array($field_label, $field_name, $type_name)); } else { - $values = array(); $errors = FALSE; @@ -384,11 +431,7 @@ function content_copy_import_form_submit $values['type_name'] = $type_name; $field_url = drupal_execute('_content_admin_field_add_new', $values, $type_name, $field_name); if (form_get_errors()) { - drupal_set_message(t("An error has occured adding the field %field_label (%field_name).
Please check the errors displayed for more details.", array( - '%field_label' => $field_label, - '%field_name' => $field_name - ))); - $errors = TRUE; + $errors[] = array('field_execute_error' => array($field_label, $field_name)); } else { // Retrieve the new field name by picking out the arg from the url returned by @@ -403,37 +446,22 @@ function content_copy_import_form_submit $values['type_name'] = $type_name; drupal_execute('_content_admin_field_add_existing', $values, $type_name); if (form_get_errors()) { - drupal_set_message(t("An error has occured adding the field %field_label (%field_name).
Please check the errors displayed for more details.", array( - '%field_label' => $field_label, - '%field_name' => $field_name - ))); - $errors = TRUE; + $errors[] = array('field_execute_error' => array($field_label, $field_name)); } } // Once the field has been added, update the settings with the macro values. // Replace the export type name with the import type name. - if (!$errors) { + if (empty($errors)) { $field_values['type_name'] = $type_name; drupal_execute('_content_admin_field', $field_values, $type_name, $field_name); if (form_get_errors()) { - drupal_set_message(t("The field %field_label (%field_name) was added to the content type %type, but an error has occured updating the field settings.
Please check the errors displayed for more details.", array( - '%field_label' => $field_label, - '%field_name' => $field_name, - '%type' => $type_label - ))); + $errors[] = array('type_execute_error' => array($field_label, $field_name, $type_name)); } } } } - if (!form_get_errors()) { - if (sizeof($imported_fields) > 0 || sizeof($imported_groups) > 0) { - drupal_goto('admin/content/types/'. $content_info['content types'][$type_name]['url_str'] .'/fields'); - } - else { - drupal_goto('admin/content/types'); - } - } + return $errors; } /** @@ -451,7 +479,6 @@ function content_copy_form_alter($form_i * Get all the fields for a content type. */ function content_copy_fields($type_name) { - $fields = array(); if (!$type_name) { return $fields;