summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/comment/comment.install2
-rw-r--r--modules/node/node.module55
2 files changed, 40 insertions, 17 deletions
diff --git a/modules/comment/comment.install b/modules/comment/comment.install
index 8e0f345f3..36d5c3f95 100644
--- a/modules/comment/comment.install
+++ b/modules/comment/comment.install
@@ -69,7 +69,7 @@ function comment_enable() {
// and a comment_field_attach_create_bundle() function should be added to
// handle the creation of the comment body field instance.
foreach (node_type_get_types() as $type => $info) {
- if (!field_info_instance('comment', 'comment_body', 'comment_node_' . $info->type)) {
+ if (!($info->is_new) && !($info->disabled) && !field_info_instance('comment', 'comment_body', 'comment_node_' . $info->type)) {
_comment_body_field_instance_create($info);
}
}
diff --git a/modules/node/node.module b/modules/node/node.module
index 9bdcf0b65..665599369 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -375,6 +375,9 @@ function _node_extract_type($node) {
/**
* Returns a list of all the available node types.
*
+ * This list can include types that are queued for addition or deletion.
+ * See _node_types_build() for details.
+ *
* @return
* An array of node types, keyed by the type.
*
@@ -394,10 +397,8 @@ function node_type_get_types() {
* A single node type, as an object, or FALSE if the node type is not found.
* The node type is an object containing fields from hook_node_info() return
* values, as well as the field 'type' (the machine-readable type) and other
- * fields used internally and defined in _node_types_build() and
- * node_type_set_defaults().
- *
- * @see hook_node_info()
+ * fields used internally and defined in _node_types_build(),
+ * hook_node_info(), and node_type_set_defaults().
*/
function node_type_get_type($node) {
$type = _node_extract_type($node);
@@ -408,15 +409,17 @@ function node_type_get_type($node) {
/**
* Returns the node type base of the passed node or node type string.
*
- * The base indicates which module implement this node type and is used to
- * execute node type specific hooks.
- *
- * @see node_invoke()
+ * The base indicates which module implements this node type and is used to
+ * execute node-type-specific hooks. For types defined in the user interface
+ * and managed by node.module, the base is 'node_content'.
*
* @param $node
* A node object or string that indicates the node type to return.
+ *
* @return
* The node type base or FALSE if the node type is not found.
+ *
+ * @see node_invoke()
*/
function node_type_get_base($node) {
$type = _node_extract_type($node);
@@ -425,7 +428,10 @@ function node_type_get_base($node) {
}
/**
- * Returns a list of available node names.
+ * Returns a list of available node type names.
+ *
+ * This list can include types that are queued for addition or deletion.
+ * See _node_types_build() for details.
*
* @return
* An array of node type names, keyed by the type.
@@ -450,9 +456,12 @@ function node_type_get_name($node) {
}
/**
- * Resets the database cache of node types.
+ * Updates the database cache of node types.
*
- * All new or non-modified module-defined node types are saved to the database.
+ * All new module-defined node types are saved to the database via a call to
+ * node_type_save(), and obsolete ones are deleted via a call to
+ * node_type_delete(). See _node_types_build() for an explanation of the new
+ * and obsolete types.
*/
function node_types_rebuild() {
// Reset and load updated node types.
@@ -468,11 +477,11 @@ function node_types_rebuild() {
}
/**
- * Menu argument loader; Load a node type by string.
+ * Menu argument loader: loads a node type by string.
*
* @param $name
- * The machine-readable name of a node type to load; having '_' replaced with
- * '-'.
+ * The machine-readable name of a node type to load, where '_' is replaced
+ * with '-'.
*
* @return
* A node type object or FALSE if $name does not exist.
@@ -659,9 +668,23 @@ function node_type_update_nodes($old_type, $type) {
/**
* Builds and returns the list of available node types.
*
- * The list of types is built by querying hook_node_info() in all modules, and
- * by comparing this information with the node types in the {node_type} table.
+ * The list of types is built by invoking hook_node_info() on all modules and
+ * comparing this information with the node types in the {node_type} table.
+ * These two information sources are not synchronized during module installation
+ * until node_types_rebuild() is called.
*
+ * @return
+ * Associative array with two components:
+ * - names: Associative array of the names of node types, keyed by the type.
+ * - types: Associative array of node type objects, keyed by the type.
+ * Both of these arrays will include new types that have been defined by
+ * hook_node_info() implementations but not yet saved in the {node_type}
+ * table. These are indicated in the type object by $type->is_new being set
+ * to the value 1. These arrays will also include obsolete types: types that
+ * were previously defined by modules that have now been disabled, or for
+ * whatever reason are no longer being defined in hook_node_info()
+ * implementations, but are still in the database. These are indicated in the
+ * type object by $type->disabled being set to TRUE.
*/
function _node_types_build() {
$_node_types = &drupal_static(__FUNCTION__);