danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * Implements hook_features_api().
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6 function node_features_api() {
|
danielebarchiesi@4
|
7 return array(
|
danielebarchiesi@4
|
8 'node' => array(
|
danielebarchiesi@4
|
9 'name' => t('Content types'),
|
danielebarchiesi@4
|
10 'feature_source' => TRUE,
|
danielebarchiesi@4
|
11 'default_hook' => 'node_info',
|
danielebarchiesi@4
|
12 ),
|
danielebarchiesi@4
|
13 );
|
danielebarchiesi@4
|
14 }
|
danielebarchiesi@4
|
15
|
danielebarchiesi@4
|
16 /**
|
danielebarchiesi@4
|
17 * Implements hook_features_export_options().
|
danielebarchiesi@4
|
18 */
|
danielebarchiesi@4
|
19 function node_features_export_options() {
|
danielebarchiesi@4
|
20 return node_type_get_names();
|
danielebarchiesi@4
|
21 }
|
danielebarchiesi@4
|
22
|
danielebarchiesi@4
|
23 /**
|
danielebarchiesi@4
|
24 * Implements hook_features_export.
|
danielebarchiesi@4
|
25 */
|
danielebarchiesi@4
|
26 function node_features_export($data, &$export, $module_name = '') {
|
danielebarchiesi@4
|
27 $pipe = array();
|
danielebarchiesi@4
|
28 $map = features_get_default_map('node');
|
danielebarchiesi@4
|
29
|
danielebarchiesi@4
|
30 foreach ($data as $type) {
|
danielebarchiesi@4
|
31 // Poll node module to determine who provides the node type.
|
danielebarchiesi@4
|
32 if ($info = node_type_get_type($type)) {
|
danielebarchiesi@4
|
33 // If this node type is provided by a different module, add it as a dependency
|
danielebarchiesi@4
|
34 if (isset($map[$type]) && $map[$type] != $module_name) {
|
danielebarchiesi@4
|
35 $export['dependencies'][$map[$type]] = $map[$type];
|
danielebarchiesi@4
|
36 }
|
danielebarchiesi@4
|
37 // Otherwise export the node type.
|
danielebarchiesi@4
|
38 elseif (in_array($info->base, array('node_content', 'features'))) {
|
danielebarchiesi@4
|
39 $export['features']['node'][$type] = $type;
|
danielebarchiesi@4
|
40 $export['dependencies']['node'] = 'node';
|
danielebarchiesi@4
|
41 $export['dependencies']['features'] = 'features';
|
danielebarchiesi@4
|
42 }
|
danielebarchiesi@4
|
43
|
danielebarchiesi@4
|
44 $fields = field_info_instances('node', $type);
|
danielebarchiesi@4
|
45 foreach ($fields as $name => $field) {
|
danielebarchiesi@4
|
46 $pipe['field_instance'][] = "node-{$field['bundle']}-{$field['field_name']}";
|
danielebarchiesi@4
|
47 }
|
danielebarchiesi@4
|
48 }
|
danielebarchiesi@4
|
49 }
|
danielebarchiesi@4
|
50
|
danielebarchiesi@4
|
51 return $pipe;
|
danielebarchiesi@4
|
52 }
|
danielebarchiesi@4
|
53
|
danielebarchiesi@4
|
54 /**
|
danielebarchiesi@4
|
55 * Implements hook_features_export_render().
|
danielebarchiesi@4
|
56 */
|
danielebarchiesi@4
|
57 function node_features_export_render($module, $data, $export = NULL) {
|
danielebarchiesi@4
|
58 $elements = array(
|
danielebarchiesi@4
|
59 'name' => TRUE,
|
danielebarchiesi@4
|
60 'base' => FALSE,
|
danielebarchiesi@4
|
61 'description' => TRUE,
|
danielebarchiesi@4
|
62 'has_title' => FALSE,
|
danielebarchiesi@4
|
63 'title_label' => TRUE,
|
danielebarchiesi@4
|
64 'help' => TRUE,
|
danielebarchiesi@4
|
65 );
|
danielebarchiesi@4
|
66 $output = array();
|
danielebarchiesi@4
|
67 $output[] = ' $items = array(';
|
danielebarchiesi@4
|
68 foreach ($data as $type) {
|
danielebarchiesi@4
|
69 if ($info = node_type_get_type($type)) {
|
danielebarchiesi@4
|
70 // Force module name to be 'features' if set to 'node. If we leave as
|
danielebarchiesi@4
|
71 // 'node' the content type will be assumed to be database-stored by
|
danielebarchiesi@4
|
72 // the node module.
|
danielebarchiesi@4
|
73 $info->base = ($info->base === 'node') ? 'features' : $info->base;
|
danielebarchiesi@4
|
74 $output[] = " '{$type}' => array(";
|
danielebarchiesi@4
|
75 foreach ($elements as $key => $t) {
|
danielebarchiesi@4
|
76 if ($t) {
|
danielebarchiesi@4
|
77 $text = str_replace("'", "\'", $info->$key);
|
danielebarchiesi@4
|
78 $text = !empty($text) ? "t('{$text}')" : "''";
|
danielebarchiesi@4
|
79 $output[] = " '{$key}' => {$text},";
|
danielebarchiesi@4
|
80 }
|
danielebarchiesi@4
|
81 else {
|
danielebarchiesi@4
|
82 $output[] = " '{$key}' => '{$info->$key}',";
|
danielebarchiesi@4
|
83 }
|
danielebarchiesi@4
|
84 }
|
danielebarchiesi@4
|
85 $output[] = " ),";
|
danielebarchiesi@4
|
86 }
|
danielebarchiesi@4
|
87 }
|
danielebarchiesi@4
|
88 $output[] = ' );';
|
danielebarchiesi@4
|
89 $output[] = ' return $items;';
|
danielebarchiesi@4
|
90 $output = implode("\n", $output);
|
danielebarchiesi@4
|
91 return array('node_info' => $output);
|
danielebarchiesi@4
|
92 }
|
danielebarchiesi@4
|
93
|
danielebarchiesi@4
|
94 /**
|
danielebarchiesi@4
|
95 * Implements hook_features_revert().
|
danielebarchiesi@4
|
96 *
|
danielebarchiesi@4
|
97 * @param $module
|
danielebarchiesi@4
|
98 * name of module to revert content for
|
danielebarchiesi@4
|
99 */
|
danielebarchiesi@4
|
100 function node_features_revert($module = NULL) {
|
danielebarchiesi@4
|
101 if ($default_types = features_get_default('node', $module)) {
|
danielebarchiesi@4
|
102 foreach ($default_types as $type_name => $type_info) {
|
danielebarchiesi@4
|
103 // Delete node types
|
danielebarchiesi@4
|
104 // We don't use node_type_delete() because we do not actually
|
danielebarchiesi@4
|
105 // want to delete the node type (and invoke hook_node_type()).
|
danielebarchiesi@4
|
106 // This can lead to bad consequences like CCK deleting field
|
danielebarchiesi@4
|
107 // storage in the DB.
|
danielebarchiesi@4
|
108 db_delete('node_type')
|
danielebarchiesi@4
|
109 ->condition('type', $type_name)
|
danielebarchiesi@4
|
110 ->execute();
|
danielebarchiesi@4
|
111 }
|
danielebarchiesi@4
|
112 node_types_rebuild();
|
danielebarchiesi@4
|
113 menu_rebuild();
|
danielebarchiesi@4
|
114 }
|
danielebarchiesi@4
|
115 }
|
danielebarchiesi@4
|
116
|
danielebarchiesi@4
|
117 /**
|
danielebarchiesi@4
|
118 * Implements hook_features_disable().
|
danielebarchiesi@4
|
119 *
|
danielebarchiesi@4
|
120 * When a features module is disabled, modify any node types it provides so
|
danielebarchiesi@4
|
121 * they can be deleted manually through the content types UI.
|
danielebarchiesi@4
|
122 *
|
danielebarchiesi@4
|
123 * @param $module
|
danielebarchiesi@4
|
124 * Name of module that has been disabled.
|
danielebarchiesi@4
|
125 */
|
danielebarchiesi@4
|
126 function node_features_disable($module) {
|
danielebarchiesi@4
|
127 if ($default_types = features_get_default('node', $module)) {
|
danielebarchiesi@4
|
128 foreach ($default_types as $type_name => $type_info) {
|
danielebarchiesi@4
|
129 $type_info = node_type_load($type_name);
|
danielebarchiesi@4
|
130 $type_info->module = 'node';
|
danielebarchiesi@4
|
131 $type_info->custom = 1;
|
danielebarchiesi@4
|
132 $type_info->modified = 1;
|
danielebarchiesi@4
|
133 $type_info->locked = 0;
|
danielebarchiesi@4
|
134 node_type_save($type_info);
|
danielebarchiesi@4
|
135 }
|
danielebarchiesi@4
|
136 }
|
danielebarchiesi@4
|
137 }
|
danielebarchiesi@4
|
138
|
danielebarchiesi@4
|
139 /**
|
danielebarchiesi@4
|
140 * Implements hook_features_enable().
|
danielebarchiesi@4
|
141 *
|
danielebarchiesi@4
|
142 * When a features module is enabled, modify any node types it provides so
|
danielebarchiesi@4
|
143 * they can no longer be deleted manually through the content types UI.
|
danielebarchiesi@4
|
144 *
|
danielebarchiesi@4
|
145 * @param $module
|
danielebarchiesi@4
|
146 * Name of module that has been enabled.
|
danielebarchiesi@4
|
147 */
|
danielebarchiesi@4
|
148 function node_features_enable($module) {
|
danielebarchiesi@4
|
149 if ($default_types = features_get_default('node', $module)) {
|
danielebarchiesi@4
|
150 foreach ($default_types as $type_name => $type_info) {
|
danielebarchiesi@4
|
151 // Ensure the type exists.
|
danielebarchiesi@4
|
152 if ($type_info = node_type_load($type_name)) {
|
danielebarchiesi@4
|
153 $type_info->module = $module;
|
danielebarchiesi@4
|
154 $type_info->custom = 0;
|
danielebarchiesi@4
|
155 $type_info->modified = 0;
|
danielebarchiesi@4
|
156 $type_info->locked = 1;
|
danielebarchiesi@4
|
157 node_type_save($type_info);
|
danielebarchiesi@4
|
158 }
|
danielebarchiesi@4
|
159 }
|
danielebarchiesi@4
|
160 }
|
danielebarchiesi@4
|
161 }
|