function file_content_migrate_instance_alter in Content Construction Kit (CCK) 7.3
Implements hook_content_migrate_instance_alter().
Use this to tweak the conversion of instance or widget settings from the D6 style to the D7 style for specific situations not handled by basic conversion, as when formatter or widget names or settings are changed.
File
- modules/
content_migrate/ modules/ content_migrate.file.inc, line 52 - content_migrate.file.inc Code to implement Content Migrate hooks on behalf of the File module.
Code
function file_content_migrate_instance_alter(&$instance_value, $field_value) {
// Translate formatters.
// There are a bunch of custom imagefield / filefield widgets. If they at
// least start the widget name with 'imagefield' / 'filefield', we can detect
// them and translate formatters accordingly
if (substr($instance_value['widget']['type'], 0, 10) == 'imagefield') {
foreach ($instance_value['display'] as $context => $settings) {
switch ($settings['type']) {
case 'image_plain':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => '',
'image_link' => '',
);
break;
case 'image_nodelink':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => '',
'image_link' => 'content',
);
break;
case 'image_imagelink':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => '',
'image_link' => 'file',
);
break;
default:
// Handle formatters using imagecache. D7 does not store them in the same way.
if (function_exists('image_styles')) {
foreach (image_styles() as $style_name => $style) {
if (substr($settings['type'], 0, strlen($style_name)) == $style_name) {
switch (substr($settings['type'], strlen($style_name))) {
case '_default':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => $style_name,
'image_link' => '',
);
break;
case '_linked':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => $style_name,
'image_link' => 'content',
);
break;
case '_imagelink':
$instance_value['display'][$context]['type'] = 'image';
$instance_value['display'][$context]['module'] = 'image';
$instance_value['display'][$context]['settings'] = array(
'image_style' => $style_name,
'image_link' => 'file',
);
break;
case '_path':
case '_uri':
// Not supported in core D7.
break;
}
}
}
}
}
}
}
if (substr($instance_value['widget']['type'], 0, 9) == 'filefield') {
foreach ($instance_value['display'] as $context => $settings) {
// Note; the 'path_plain' D6 formatter has disappeared.
if (in_array($settings['type'], array(
'default',
'url_plain',
))) {
$instance_value['display'][$context]['type'] = 'file_' . $settings['type'];
$instance_value['display'][$context]['module'] = 'file';
}
}
}
// Translate the original imagefield and fielfield widgets.
switch ($instance_value['widget']['module']) {
case 'imagefield':
// Module names and types changed.
$instance_value['widget']['module'] = 'image';
$instance_value['widget']['type'] = 'image';
// Most settings became instance settings instead of widget settings, with a couple name changes.
$instance_value['settings']['file_directory'] = isset($instance_value['widget']['settings']['file_path']) ? $instance_value['widget']['settings']['file_path'] : '';
unset($instance_value['widget']['settings']['file_path']);
$instance_value['settings']['max_filesize'] = isset($instance_value['widget']['settings']['max_filesize_per_file']) ? $instance_value['widget']['settings']['max_filesize_per_file'] : 0;
unset($instance_value['widget']['settings']['max_filesize_per_file']);
$instance_value['settings']['file_extensions'] = isset($instance_value['widget']['settings']['file_extensions']) ? $instance_value['widget']['settings']['file_extensions'] : '';
unset($instance_value['widget']['settings']['file_extensions']);
$settings = array(
'max_resolution' => 0,
'min_resolution' => 0,
);
foreach ($settings as $setting => $default_value) {
$instance_value['settings'][$setting] = isset($instance_value['widget']['settings'][$setting]) ? $instance_value['widget']['settings'][$setting] : $default_value;
unset($instance_value['widget']['settings'][$setting]);
}
// What is the difference between alt and custom_alt on the old field?
$instance_value['settings']['alt_field'] = $instance_value['widget']['settings']['custom_alt'];
unset($instance_value['widget']['settings']['custom_alt']);
$instance_value['settings']['title_field'] = $instance_value['widget']['settings']['custom_title'];
unset($instance_value['widget']['settings']['custom_title']);
// Many settings have no place in the new field array.
unset($instance_value['widget']['settings']['title']);
unset($instance_value['widget']['settings']['alt']);
unset($instance_value['widget']['settings']['max_filesize_per_node']);
unset($instance_value['widget']['settings']['title_type']);
// default_image is now a field setting.
unset($instance_value['widget']['settings']['default_image']);
break;
case 'filefield':
// Module names and types changed.
$instance_value['widget']['module'] = 'file';
$instance_value['widget']['type'] = 'file_generic';
// Some settings had name changes, or moved from the widget to the
// instance.
$instance_value['settings']['file_directory'] = $instance_value['widget']['settings']['file_path'];
unset($instance_value['widget']['settings']['file_path']);
$instance_value['settings']['file_extensions'] = $instance_value['widget']['settings']['file_extensions'];
unset($instance_value['widget']['settings']['file_extensions']);
if (array_key_exists('max_filesize_per_file', $instance_value['widget']['settings'])) {
$instance_value['settings']['max_filesize'] = $instance_value['widget']['settings']['max_filesize_per_file'];
unset($instance_value['widget']['settings']['max_filesize_per_file']);
}
// This setting is gone.
unset($instance_value['widget']['settings']['max_filesize_per_node']);
break;
}
}