uc_product.features.inc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * @file
  4. * Features integration for Ubercart product classes.
  5. */
  6. /**
  7. * Implements hook_features_export_options().
  8. */
  9. function uc_product_classes_features_export_options() {
  10. $classes = array();
  11. foreach (uc_product_node_info() as $type => $info) {
  12. $classes[$type] = $info['name'];
  13. }
  14. return $classes;
  15. }
  16. /**
  17. * Implements hook_features_export().
  18. */
  19. function uc_product_classes_features_export($data, &$export, $module_name = '') {
  20. $export['dependencies']['uc_product'] = 'uc_product';
  21. foreach ($data as $class) {
  22. $export['features']['uc_product_classes'][$class] = $class;
  23. }
  24. // Create a pipe for the CCK fields and variables to be exported.
  25. $pipe = node_features_export($data, $export, $module_name);
  26. // If strongarm is available, export the shippable and image settings.
  27. if (module_exists('strongarm')) {
  28. foreach ($data as $class) {
  29. $pipe['variable'][] = "uc_product_shippable_{$class}";
  30. $pipe['variable'][] = "uc_image_{$class}";
  31. }
  32. }
  33. return $pipe;
  34. }
  35. /**
  36. * Implements hook_features_export_render().
  37. */
  38. function uc_product_classes_features_export_render($module, $data, $export = NULL) {
  39. $output = node_features_export_render($module, $data, $export);
  40. return array('uc_product_default_classes' => $output['node_info']);
  41. }
  42. /**
  43. * Implements hook_features_revert().
  44. *
  45. * @see node_features_revert()
  46. */
  47. function uc_product_classes_features_revert($module) {
  48. if ($default_types = features_get_default('uc_product_classes', $module)) {
  49. foreach ($default_types as $type_name => $type_info) {
  50. // We need to de-activate any missing fields. De-activating allows us to
  51. // preserve data. We de-activate by setting the widget_active flag to 0;
  52. // widget_active is incorrectly named, and really should be
  53. // instance_active
  54. if (module_exists('content')) {
  55. // Our existing fields ($fields) needs to be the first argument here,
  56. // so only fields that don't exist in code can be de-activated.
  57. if ($deleted_fields = array_diff(content_features_fields_normal($type_name), content_features_fields_default($type_name))) {
  58. foreach ($deleted_fields as $field_name) {
  59. db_update(content_instance_tablename())
  60. ->fields(array(
  61. 'widget_active' => 0,
  62. ))
  63. ->condition('field_name', $field_name)
  64. ->condition('type_name', $type_name)
  65. ->execute();
  66. }
  67. }
  68. }
  69. // Delete node types
  70. // We don't use node_type_delete() because we do not actually
  71. // want to delete the node type (and invoke hook_node_type()).
  72. // This can lead to bad consequences like CCK deleting field
  73. // storage in the DB.
  74. db_delete('node_type')
  75. ->condition('type', $type_name)
  76. ->execute();
  77. db_delete('uc_product_classes')
  78. ->condition('pcid', $type_name)
  79. ->execute();
  80. }
  81. uc_product_node_info(TRUE);
  82. node_types_rebuild();
  83. menu_rebuild();
  84. }
  85. }