Saves a node type to the database.
object $info: The node type to save; an object with the following properties:
int A status flag indicating the outcome of the operation, either SAVED_NEW or SAVED_UPDATED.
function node_type_save($info) {
$existing_type = !empty($info->old_type) ? $info->old_type : $info->type;
$is_existing = (bool) db_query_range('SELECT 1 FROM {node_type} WHERE type = :type', 0, 1, array(
':type' => $existing_type,
))
->fetchField();
$type = node_type_set_defaults($info);
$fields = array(
'type' => (string) $type->type,
'name' => (string) $type->name,
'base' => (string) $type->base,
'has_title' => (int) $type->has_title,
'title_label' => (string) $type->title_label,
'description' => (string) $type->description,
'help' => (string) $type->help,
'custom' => (int) $type->custom,
'modified' => (int) $type->modified,
'locked' => (int) $type->locked,
'disabled' => (int) $type->disabled,
'module' => $type->module,
);
if ($is_existing) {
db_update('node_type')
->fields($fields)
->condition('type', $existing_type)
->execute();
if (!empty($type->old_type) && $type->old_type != $type->type) {
field_attach_rename_bundle('node', $type->old_type, $type->type);
}
module_invoke_all('node_type_update', $type);
$status = SAVED_UPDATED;
}
else {
$fields['orig_type'] = (string) $type->orig_type;
db_insert('node_type')
->fields($fields)
->execute();
field_attach_create_bundle('node', $type->type);
module_invoke_all('node_type_insert', $type);
$status = SAVED_NEW;
}
// Clear the node type cache.
node_type_cache_reset();
return $status;
}