Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

162 lines
4.5 KiB
PHP

<?php
/**
* Implements hook_features_api().
*/
function node_features_api() {
return array(
'node' => array(
'name' => t('Content types'),
'feature_source' => TRUE,
'default_hook' => 'node_info',
),
);
}
/**
* Implements hook_features_export_options().
*/
function node_features_export_options() {
return node_type_get_names();
}
/**
* Implements hook_features_export.
*/
function node_features_export($data, &$export, $module_name = '') {
$pipe = array();
$map = features_get_default_map('node');
foreach ($data as $type) {
// Poll node module to determine who provides the node type.
if ($info = node_type_get_type($type)) {
// If this node type is provided by a different module, add it as a dependency
if (isset($map[$type]) && $map[$type] != $module_name) {
$export['dependencies'][$map[$type]] = $map[$type];
}
// Otherwise export the node type.
elseif (in_array($info->base, array('node_content', 'features'))) {
$export['features']['node'][$type] = $type;
$export['dependencies']['node'] = 'node';
$export['dependencies']['features'] = 'features';
}
$fields = field_info_instances('node', $type);
foreach ($fields as $name => $field) {
$pipe['field'][] = "node-{$field['bundle']}-{$field['field_name']}";
}
}
}
return $pipe;
}
/**
* Implements hook_features_export_render().
*/
function node_features_export_render($module, $data, $export = NULL) {
$elements = array(
'name' => TRUE,
'base' => FALSE,
'description' => TRUE,
'has_title' => FALSE,
'title_label' => TRUE,
'help' => TRUE,
);
$output = array();
$output[] = ' $items = array(';
foreach ($data as $type) {
if ($info = node_type_get_type($type)) {
// Force module name to be 'features' if set to 'node. If we leave as
// 'node' the content type will be assumed to be database-stored by
// the node module.
$info->base = ($info->base === 'node') ? 'features' : $info->base;
$output[] = " '{$type}' => array(";
foreach ($elements as $key => $t) {
if ($t) {
$text = str_replace("'", "\'", $info->$key);
$text = !empty($text) ? "t('{$text}')" : "''";
$output[] = " '{$key}' => {$text},";
}
else {
$output[] = " '{$key}' => '{$info->$key}',";
}
}
$output[] = " ),";
}
}
$output[] = ' );';
$output[] = ' return $items;';
$output = implode("\n", $output);
return array('node_info' => $output);
}
/**
* Implements hook_features_revert().
*
* @param $module
* name of module to revert content for
*/
function node_features_revert($module = NULL) {
if ($default_types = features_get_default('node', $module)) {
foreach ($default_types as $type_name => $type_info) {
// Delete node types
// We don't use node_type_delete() because we do not actually
// want to delete the node type (and invoke hook_node_type()).
// This can lead to bad consequences like CCK deleting field
// storage in the DB.
db_delete('node_type')
->condition('type', $type_name)
->execute();
}
node_types_rebuild();
menu_rebuild();
}
}
/**
* Implements hook_features_disable().
*
* When a features module is disabled, modify any node types it provides so
* they can be deleted manually through the content types UI.
*
* @param $module
* Name of module that has been disabled.
*/
function node_features_disable($module) {
if ($default_types = features_get_default('node', $module)) {
foreach ($default_types as $type_name => $type_info) {
$type_info = node_type_load($type_name);
$type_info->module = 'node';
$type_info->custom = 1;
$type_info->modified = 1;
$type_info->locked = 0;
node_type_save($type_info);
}
}
}
/**
* Implements hook_features_enable().
*
* When a features module is enabled, modify any node types it provides so
* they can no longer be deleted manually through the content types UI.
*
* @param $module
* Name of module that has been enabled.
*/
function node_features_enable($module) {
if ($default_types = features_get_default('node', $module)) {
foreach ($default_types as $type_name => $type_info) {
// Ensure the type exists.
if ($type_info = node_type_load($type_name)) {
$type_info->module = $module;
$type_info->custom = 0;
$type_info->modified = 0;
$type_info->locked = 1;
node_type_save($type_info);
}
}
}
}