Mercurial > hg > rr-repo
diff sites/all/modules/features/features.install @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/features/features.install Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,121 @@ +<?php + +/** + * @file + * Install, update and uninstall functions for the features module. + */ + +/** + * Implements hook_install(). + */ +function features_install() { + _features_install_menu(); + db_update('system') + ->fields(array('weight' => 20)) + ->condition('name', 'features') + ->condition('type', 'module') + ->execute(); +} + +/** + * Implements hook_uninstall(). + */ +function features_uninstall() { + variable_del('features_codecache'); + variable_del('features_semaphore'); + variable_del('features_ignored_orphans'); + if (db_table_exists('menu_custom')) { + db_delete('menu_custom') + ->condition('menu_name', 'features') + ->execute(); + } + db_delete('menu_links') + ->condition('module', 'features') + ->execute(); +} + +/** + * Create menu. See menu.install for an example. + */ +function _features_install_menu() { + if (db_table_exists('menu_custom') && !db_query("SELECT menu_name FROM {menu_custom} WHERE menu_name = :menu_name", array(':menu_name' => 'features'))->fetchField()) { + $t = get_t(); + $id = db_insert('menu_custom') + ->fields(array( + 'menu_name' => 'features', + 'title' => $t('Features'), + 'description' => $t('Menu items for any enabled features.'), + )) + ->execute(); + } +} + +/** + * Update 6100: Set module on all feature node types to 'features'. + + * This update can be re-run as needed to repair any node types that are not + * removed after disabling the associated feature. + * + * Any feature implementing a node component that was exported prior to this + * version of the features.module will need to have its 'module' declaration + * in hook_node_info() changed from 'node' to 'features'. + */ +function features_update_6100() { + $ret = array(); + + foreach (features_get_features(NULL, TRUE) as $feature) { + if (module_exists($feature->name) && $types = module_invoke($feature->name, 'node_info')) { + foreach ($types as $type => $type_data) { + $sql = "SELECT COUNT(*) FROM {node_type} WHERE module = 'node' AND type = '%s'"; + // Only update if the hook_node_info type's module is 'features' and the db type's + // module is 'node'. + if (($type_data['module'] == 'features') && db_query($sql, $type)->fetchField()) { + $ret[] = update_sql("UPDATE {node_type} SET module = 'features' WHERE type = '$type'"); + } + } + } + } + return $ret; +} + +/** + * Update 6101: Set codestate signature for all features. + * + * This update generates a codestate for all feature/component pairs which + * have been installed prior to this version of Features. This prevents + * automatic rebuilds from occurring against any rebuildable components + * that have been overridden. + */ +function features_update_6101() { + // Ensure all of our own API functions still exist in in this version + // of Features. It's possible that the "future me" will not have these + // functions, so I should check. + module_load_include('inc', 'features', "features.export"); + $functions = array( + 'features_include', + 'features_hook', + 'features_get_components', + 'features_get_features', + 'features_get_signature', + 'features_set_signature', + ); + $doit = TRUE; + foreach ($functions as $function) { + $doit = $doit && function_exists($function); + } + if ($doit) { + features_include(); + $features = array_keys(features_get_features(NULL, TRUE)); + $components = array_keys(features_get_components()); + foreach ($features as $feature) { + if (module_exists($feature)) { + foreach ($components as $component) { + if (features_hook($component, 'features_rebuild') && features_get_signature('cache', $feature, $component) === FALSE) { + features_set_signature($feature, $component, -1); + } + } + } + } + } + return array(); +}