danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Install, update and uninstall functions for the features module.
|
danielebarchiesi@4
|
6 */
|
danielebarchiesi@4
|
7
|
danielebarchiesi@4
|
8 /**
|
danielebarchiesi@4
|
9 * Implements hook_install().
|
danielebarchiesi@4
|
10 */
|
danielebarchiesi@4
|
11 function features_install() {
|
danielebarchiesi@4
|
12 _features_install_menu();
|
danielebarchiesi@4
|
13 db_update('system')
|
danielebarchiesi@4
|
14 ->fields(array('weight' => 20))
|
danielebarchiesi@4
|
15 ->condition('name', 'features')
|
danielebarchiesi@4
|
16 ->condition('type', 'module')
|
danielebarchiesi@4
|
17 ->execute();
|
danielebarchiesi@4
|
18 }
|
danielebarchiesi@4
|
19
|
danielebarchiesi@4
|
20 /**
|
danielebarchiesi@4
|
21 * Implements hook_uninstall().
|
danielebarchiesi@4
|
22 */
|
danielebarchiesi@4
|
23 function features_uninstall() {
|
danielebarchiesi@4
|
24 variable_del('features_codecache');
|
danielebarchiesi@4
|
25 variable_del('features_semaphore');
|
danielebarchiesi@4
|
26 variable_del('features_ignored_orphans');
|
danielebarchiesi@4
|
27 if (db_table_exists('menu_custom')) {
|
danielebarchiesi@4
|
28 db_delete('menu_custom')
|
danielebarchiesi@4
|
29 ->condition('menu_name', 'features')
|
danielebarchiesi@4
|
30 ->execute();
|
danielebarchiesi@4
|
31 }
|
danielebarchiesi@4
|
32 db_delete('menu_links')
|
danielebarchiesi@4
|
33 ->condition('module', 'features')
|
danielebarchiesi@4
|
34 ->execute();
|
danielebarchiesi@4
|
35 }
|
danielebarchiesi@4
|
36
|
danielebarchiesi@4
|
37 /**
|
danielebarchiesi@4
|
38 * Create menu. See menu.install for an example.
|
danielebarchiesi@4
|
39 */
|
danielebarchiesi@4
|
40 function _features_install_menu() {
|
danielebarchiesi@4
|
41 if (db_table_exists('menu_custom') && !db_query("SELECT menu_name FROM {menu_custom} WHERE menu_name = :menu_name", array(':menu_name' => 'features'))->fetchField()) {
|
danielebarchiesi@4
|
42 $t = get_t();
|
danielebarchiesi@4
|
43 $id = db_insert('menu_custom')
|
danielebarchiesi@4
|
44 ->fields(array(
|
danielebarchiesi@4
|
45 'menu_name' => 'features',
|
danielebarchiesi@4
|
46 'title' => $t('Features'),
|
danielebarchiesi@4
|
47 'description' => $t('Menu items for any enabled features.'),
|
danielebarchiesi@4
|
48 ))
|
danielebarchiesi@4
|
49 ->execute();
|
danielebarchiesi@4
|
50 }
|
danielebarchiesi@4
|
51 }
|
danielebarchiesi@4
|
52
|
danielebarchiesi@4
|
53 /**
|
danielebarchiesi@4
|
54 * Update 6100: Set module on all feature node types to 'features'.
|
danielebarchiesi@4
|
55
|
danielebarchiesi@4
|
56 * This update can be re-run as needed to repair any node types that are not
|
danielebarchiesi@4
|
57 * removed after disabling the associated feature.
|
danielebarchiesi@4
|
58 *
|
danielebarchiesi@4
|
59 * Any feature implementing a node component that was exported prior to this
|
danielebarchiesi@4
|
60 * version of the features.module will need to have its 'module' declaration
|
danielebarchiesi@4
|
61 * in hook_node_info() changed from 'node' to 'features'.
|
danielebarchiesi@4
|
62 */
|
danielebarchiesi@4
|
63 function features_update_6100() {
|
danielebarchiesi@4
|
64 $ret = array();
|
danielebarchiesi@4
|
65
|
danielebarchiesi@4
|
66 foreach (features_get_features(NULL, TRUE) as $feature) {
|
danielebarchiesi@4
|
67 if (module_exists($feature->name) && $types = module_invoke($feature->name, 'node_info')) {
|
danielebarchiesi@4
|
68 foreach ($types as $type => $type_data) {
|
danielebarchiesi@4
|
69 $sql = "SELECT COUNT(*) FROM {node_type} WHERE module = 'node' AND type = '%s'";
|
danielebarchiesi@4
|
70 // Only update if the hook_node_info type's module is 'features' and the db type's
|
danielebarchiesi@4
|
71 // module is 'node'.
|
danielebarchiesi@4
|
72 if (($type_data['module'] == 'features') && db_query($sql, $type)->fetchField()) {
|
danielebarchiesi@4
|
73 $ret[] = update_sql("UPDATE {node_type} SET module = 'features' WHERE type = '$type'");
|
danielebarchiesi@4
|
74 }
|
danielebarchiesi@4
|
75 }
|
danielebarchiesi@4
|
76 }
|
danielebarchiesi@4
|
77 }
|
danielebarchiesi@4
|
78 return $ret;
|
danielebarchiesi@4
|
79 }
|
danielebarchiesi@4
|
80
|
danielebarchiesi@4
|
81 /**
|
danielebarchiesi@4
|
82 * Update 6101: Set codestate signature for all features.
|
danielebarchiesi@4
|
83 *
|
danielebarchiesi@4
|
84 * This update generates a codestate for all feature/component pairs which
|
danielebarchiesi@4
|
85 * have been installed prior to this version of Features. This prevents
|
danielebarchiesi@4
|
86 * automatic rebuilds from occurring against any rebuildable components
|
danielebarchiesi@4
|
87 * that have been overridden.
|
danielebarchiesi@4
|
88 */
|
danielebarchiesi@4
|
89 function features_update_6101() {
|
danielebarchiesi@4
|
90 // Ensure all of our own API functions still exist in in this version
|
danielebarchiesi@4
|
91 // of Features. It's possible that the "future me" will not have these
|
danielebarchiesi@4
|
92 // functions, so I should check.
|
danielebarchiesi@4
|
93 module_load_include('inc', 'features', "features.export");
|
danielebarchiesi@4
|
94 $functions = array(
|
danielebarchiesi@4
|
95 'features_include',
|
danielebarchiesi@4
|
96 'features_hook',
|
danielebarchiesi@4
|
97 'features_get_components',
|
danielebarchiesi@4
|
98 'features_get_features',
|
danielebarchiesi@4
|
99 'features_get_signature',
|
danielebarchiesi@4
|
100 'features_set_signature',
|
danielebarchiesi@4
|
101 );
|
danielebarchiesi@4
|
102 $doit = TRUE;
|
danielebarchiesi@4
|
103 foreach ($functions as $function) {
|
danielebarchiesi@4
|
104 $doit = $doit && function_exists($function);
|
danielebarchiesi@4
|
105 }
|
danielebarchiesi@4
|
106 if ($doit) {
|
danielebarchiesi@4
|
107 features_include();
|
danielebarchiesi@4
|
108 $features = array_keys(features_get_features(NULL, TRUE));
|
danielebarchiesi@4
|
109 $components = array_keys(features_get_components());
|
danielebarchiesi@4
|
110 foreach ($features as $feature) {
|
danielebarchiesi@4
|
111 if (module_exists($feature)) {
|
danielebarchiesi@4
|
112 foreach ($components as $component) {
|
danielebarchiesi@4
|
113 if (features_hook($component, 'features_rebuild') && features_get_signature('cache', $feature, $component) === FALSE) {
|
danielebarchiesi@4
|
114 features_set_signature($feature, $component, -1);
|
danielebarchiesi@4
|
115 }
|
danielebarchiesi@4
|
116 }
|
danielebarchiesi@4
|
117 }
|
danielebarchiesi@4
|
118 }
|
danielebarchiesi@4
|
119 }
|
danielebarchiesi@4
|
120 return array();
|
danielebarchiesi@4
|
121 }
|