danielebarchiesi@4: fields(array('weight' => 20)) danielebarchiesi@4: ->condition('name', 'features') danielebarchiesi@4: ->condition('type', 'module') danielebarchiesi@4: ->execute(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_uninstall(). danielebarchiesi@4: */ danielebarchiesi@4: function features_uninstall() { danielebarchiesi@4: variable_del('features_codecache'); danielebarchiesi@4: variable_del('features_semaphore'); danielebarchiesi@4: variable_del('features_ignored_orphans'); danielebarchiesi@4: if (db_table_exists('menu_custom')) { danielebarchiesi@4: db_delete('menu_custom') danielebarchiesi@4: ->condition('menu_name', 'features') danielebarchiesi@4: ->execute(); danielebarchiesi@4: } danielebarchiesi@4: db_delete('menu_links') danielebarchiesi@4: ->condition('module', 'features') danielebarchiesi@4: ->execute(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Create menu. See menu.install for an example. danielebarchiesi@4: */ danielebarchiesi@4: function _features_install_menu() { danielebarchiesi@4: 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: $t = get_t(); danielebarchiesi@4: $id = db_insert('menu_custom') danielebarchiesi@4: ->fields(array( danielebarchiesi@4: 'menu_name' => 'features', danielebarchiesi@4: 'title' => $t('Features'), danielebarchiesi@4: 'description' => $t('Menu items for any enabled features.'), danielebarchiesi@4: )) danielebarchiesi@4: ->execute(); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Update 6100: Set module on all feature node types to 'features'. danielebarchiesi@4: danielebarchiesi@4: * This update can be re-run as needed to repair any node types that are not danielebarchiesi@4: * removed after disabling the associated feature. danielebarchiesi@4: * danielebarchiesi@4: * Any feature implementing a node component that was exported prior to this danielebarchiesi@4: * version of the features.module will need to have its 'module' declaration danielebarchiesi@4: * in hook_node_info() changed from 'node' to 'features'. danielebarchiesi@4: */ danielebarchiesi@4: function features_update_6100() { danielebarchiesi@4: $ret = array(); danielebarchiesi@4: danielebarchiesi@4: foreach (features_get_features(NULL, TRUE) as $feature) { danielebarchiesi@4: if (module_exists($feature->name) && $types = module_invoke($feature->name, 'node_info')) { danielebarchiesi@4: foreach ($types as $type => $type_data) { danielebarchiesi@4: $sql = "SELECT COUNT(*) FROM {node_type} WHERE module = 'node' AND type = '%s'"; danielebarchiesi@4: // Only update if the hook_node_info type's module is 'features' and the db type's danielebarchiesi@4: // module is 'node'. danielebarchiesi@4: if (($type_data['module'] == 'features') && db_query($sql, $type)->fetchField()) { danielebarchiesi@4: $ret[] = update_sql("UPDATE {node_type} SET module = 'features' WHERE type = '$type'"); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: return $ret; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Update 6101: Set codestate signature for all features. danielebarchiesi@4: * danielebarchiesi@4: * This update generates a codestate for all feature/component pairs which danielebarchiesi@4: * have been installed prior to this version of Features. This prevents danielebarchiesi@4: * automatic rebuilds from occurring against any rebuildable components danielebarchiesi@4: * that have been overridden. danielebarchiesi@4: */ danielebarchiesi@4: function features_update_6101() { danielebarchiesi@4: // Ensure all of our own API functions still exist in in this version danielebarchiesi@4: // of Features. It's possible that the "future me" will not have these danielebarchiesi@4: // functions, so I should check. danielebarchiesi@4: module_load_include('inc', 'features', "features.export"); danielebarchiesi@4: $functions = array( danielebarchiesi@4: 'features_include', danielebarchiesi@4: 'features_hook', danielebarchiesi@4: 'features_get_components', danielebarchiesi@4: 'features_get_features', danielebarchiesi@4: 'features_get_signature', danielebarchiesi@4: 'features_set_signature', danielebarchiesi@4: ); danielebarchiesi@4: $doit = TRUE; danielebarchiesi@4: foreach ($functions as $function) { danielebarchiesi@4: $doit = $doit && function_exists($function); danielebarchiesi@4: } danielebarchiesi@4: if ($doit) { danielebarchiesi@4: features_include(); danielebarchiesi@4: $features = array_keys(features_get_features(NULL, TRUE)); danielebarchiesi@4: $components = array_keys(features_get_components()); danielebarchiesi@4: foreach ($features as $feature) { danielebarchiesi@4: if (module_exists($feature)) { danielebarchiesi@4: foreach ($components as $component) { danielebarchiesi@4: if (features_hook($component, 'features_rebuild') && features_get_signature('cache', $feature, $component) === FALSE) { danielebarchiesi@4: features_set_signature($feature, $component, -1); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: return array(); danielebarchiesi@4: }