content_type_groups.features.inc in Content type groups 7.2
Same filename and directory in other branches
Export functionality for the content type groups module.
File
content_type_groups.features.incView source
<?php
/**
 * @file
 * Export functionality for the content type groups module.
 */
/**
 * Implementation of hook_features_export_options().
 *
 * This hook tells features what items of this component are available for export.
 *
 * @return array
 *   A keyed array of items, suitable for use with a FormAPI select or checkboxes element.
 */
function content_type_groups_features_export_options() {
  // Get all group names, keyed by machine name
  $options = ContentTypeGroup::fetch();
  return $options;
}
/**
 * Implementation of hook_features_export().
 *
 * When one of these components is selected on the features page, this hook
 * includes the item (plus any dependencies) in the export array.
 *
 * @param array $data
 *   The machine name for this component.
 * @param array &$export
 *   An array of components to be exported.
 * @param string $module_name
 *   The name of the feature module that will be created.
 *
 * @return array
 *   An array of functions for further processing (if desired).
 */
function content_type_groups_features_export($data, &$export, $module_name) {
  // These are the dependencies for this module to function properly
  $export['dependencies']['content_type_groups'] = 'content_type_groups';
  // This is a simple straight object export.
  foreach ($data as $component) {
    $export['features']['content_type_groups'][$component] = $component;
  }
  return array();
}
/**
 * Implementation of hook_features_export_render().
 *
 * This hook is called to export the component(s) selected via the features UI.
 *
 * @param string $module_name
 *   The name of the feature module to be exported.
 * @param array $data
 *   An array of machine name identifiers for the rendered objects.
 * @param array $export
 *   An array with the full export for the feature (only called during update or recreate).
 *
 * @return array
 *   The PHP code (an array) that will be rendered.
 */
function content_type_groups_features_export_render($module_name, $data, $export = NULL) {
  $code = array(
    ' $content_type_groups = array();',
    '',
  );
  foreach ($data as $machine_name) {
    // Retrieve the content_type_group
    $group = new ContentTypeGroup($machine_name);
    // Format it in prep for export.
    $group_data = _content_type_groups_format_group_data($group);
    // Add the content type group to the feature.
    $code[] = ' $content_type_groups[\'' . $machine_name . '\'] = ' . features_var_export($group_data, ' ') . ';';
  }
  $code[] = '';
  $code[] = ' return $content_type_groups;';
  $code = implode("\n", $code);
  return array(
    'content_type_groups_features_default_settings' => $code,
  );
}
/**
 * Implementation of hook_features_rebuild(). [component_hook]
 *
 * This is called whenever a new feature is enabled, or reverted.
 */
function content_type_groups_features_rebuild($module) {
  // Look for exported content type groups
  $groups = module_invoke($module, 'content_type_groups_features_default_settings');
  // Recreate groups that are in the feature
  $node_types = _content_type_groups_get_node_types();
  foreach ($groups as $machine_name => $data) {
    _content_type_groups_store_group_data($data, $node_types);
  }
}
/**
 * Implementation of hook_features_revert(). [component_hook]
 */
function content_type_groups_features_revert($module) {
  content_type_groups_features_rebuild($module);
}
/**
 * Formats a content type group loaded with the API
 * into a data structure for export
 */
function _content_type_groups_format_group_data($group) {
  $group_data = array(
    'type' => $group->type,
    'name' => $group->name,
    'content_types' => $group->content_types,
  );
  return $group_data;
}
/**
 * Stores exported content type group data in the database
 *
 * @param array $data
 *   Information about a single content type from feature export.
 * @param array $node_types
 *   Results from node_type_get_types(). Passed through to avoid calling this each time this function is called.
 */
function _content_type_groups_store_group_data($data, $node_types = NULL) {
  if (!$node_types) {
    $node_types = _content_type_groups_get_node_types();
  }
  // Create the group
  $group = new ContentTypeGroup($data['type']);
  // If the group already exists, clear out the existing content types
  if ($group->name) {
    $group->content_types = array();
  }
  // Fill in the stored name and content types
  $group->name = $data['name'];
  foreach ($data['content_types'] as $content_type => $type_data) {
    if (in_array($content_type, $node_types)) {
      // Only add existing node types
      $group
        ->addContentType($content_type, $type_data['weight']);
    }
  }
  // Save the group
  $group
    ->save();
}
/**
 * Returns the site's content types.
 *
 * @return array
 *    Machine names of all content types on the site.
 */
function _content_type_groups_get_node_types() {
  $types = array();
  foreach (node_type_get_types() as $type) {
    $types[] = $type->type;
  }
  return $types;
}Functions
| Name   | Description | 
|---|---|
| content_type_groups_features_export | Implementation of hook_features_export(). | 
| content_type_groups_features_export_options | Implementation of hook_features_export_options(). | 
| content_type_groups_features_export_render | Implementation of hook_features_export_render(). | 
| content_type_groups_features_rebuild | Implementation of hook_features_rebuild(). [component_hook] | 
| content_type_groups_features_revert | Implementation of hook_features_revert(). [component_hook] | 
| _content_type_groups_format_group_data | Formats a content type group loaded with the API into a data structure for export | 
| _content_type_groups_get_node_types | Returns the site's content types. | 
| _content_type_groups_store_group_data | Stores exported content type group data in the database | 
