123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- /**
- * Implements hook_features_api().
- */
- function image_features_api() {
- return array(
- 'image' => array(
- 'name' => t('Image styles'),
- 'feature_source' => TRUE,
- 'default_hook' => 'image_default_styles',
- 'alter_hook' => 'image_styles',
- )
- );
- }
- /**
- * Implements hook_features_export_options().
- */
- function image_features_export_options() {
- $options = array();
- foreach (image_styles() as $name => $style) {
- $options[$name] = $style['name'];
- }
- return $options;
- }
- /**
- * Implements hook_features_export().
- */
- function image_features_export($data, &$export, $module_name = '') {
- $pipe = array();
- $map = features_get_default_map('image');
- foreach ($data as $style) {
- $export['dependencies']['image'] = 'image';
- // If another module provides this style, add it as a dependency
- if (isset($map[$style]) && $map[$style] != $module_name) {
- $module = $map[$style];
- $export['dependencies'][$module] = $module;
- }
- // Otherwise, export the style
- elseif (image_style_load($style)) {
- $export['features']['image'][$style] = $style;
- }
- }
- return $pipe;
- }
- /**
- * Implements hook_features_export_render().
- */
- function image_features_export_render($module_name, $data, $export = NULL) {
- $code = array();
- $code[] = ' $styles = array();';
- $code[] = '';
- foreach ($data as $name) {
- if ($style = image_style_load($name)) {
- _image_features_style_sanitize($style);
- $style_export = features_var_export($style, ' ');
- $style_identifier = features_var_export($name);
- $code[] = " // Exported image style: {$name}.";
- $code[] = " \$styles[{$style_identifier}] = {$style_export};";
- $code[] = "";
- }
- }
- $code[] = ' return $styles;';
- $code = implode("\n", $code);
- return array('image_default_styles' => $code);
- }
- /**
- * Implements hook_features_revert().
- */
- function image_features_revert($module) {
- if ($default_styles = features_get_default('image', $module)) {
- foreach ($default_styles as $default_style_name => $default_style) {
- if ($style = image_style_load($default_style_name)) {
- if ($style['storage'] != IMAGE_STORAGE_DEFAULT) {
- image_default_style_revert($style);
- }
- else {
- // Verify that the loaded style still matches what's in code.
- if ($default_style['effects'] !== $style['effects']) {
- image_default_style_revert($style);
- }
- }
- }
- }
- }
- }
- /**
- * Remove unnecessary keys for export.
- */
- function _image_features_style_sanitize(array &$style) {
- // Sanitize style: Don't export numeric IDs and things which get overwritten
- // in image_styles() or are code/storage specific. The name property will be
- // the key of the exported $style array.
- $style = array_diff_key($style, array_flip(array(
- 'isid',
- 'name',
- 'module',
- 'storage',
- )));
- // Sanitize effects: all that needs to be kept is name, weight and data,
- // which holds all the style-specific configuration. Other keys are assumed
- // to belong to the definition of the effect itself, so not configuration.
- foreach ($style['effects'] as $id => $effect) {
- $style['effects'][$id] = array_intersect_key($effect, array_flip(array(
- 'name',
- 'data',
- 'weight',
- )));
- }
- }
|