function conditional_fields_update_7000 in Conditional Fields 7.3
Upgrade from Drupal 6 to Drupal 7.
File
- ./
conditional_fields.install, line 85 - Install, update and uninstall functions for the Conditional Fields module.
Code
function conditional_fields_update_7000() {
// Parachute for users who installed version 7.x-3.x-dev before 2011-Aug-10.
try {
$old_dependencies = db_select('conditional_fields', 'cf')
->fields('cf', array(
'control_field_name',
'field_name',
'type',
'trigger_values',
))
->execute();
} catch (Exception $e) {
// If the columns are not found, table doesn't need updating.
if ($e->errorInfo[0] == '42S22') {
return 'Conditional Fields schema was already up to date.';
}
else {
throw $e;
}
}
// We can only migrate dependencies after fields definitions have been
// migrated to Drupal 7 using the Content Migrate module.
if (!module_exists('content_migrate')) {
throw new DrupalUpdateException('Before upgrading Conditional Fields from Drupal 6 you must upgrade your fields definitions using the Content Migrate module. Follow the CCK migration to Drupal 7 documentation at http://drupal.org/node/1144136 and then run update.php again, leaving the Content Migrate module activated. After the update, you can safely disable the Content Migrate module. Warning: if you don\'t migrate your fields before rerunning this update you might lose all your defined dependencies!');
}
// Update permission to new name.
db_update('role_permission')
->fields(array(
'permission' => 'administer dependencies',
))
->condition('permission', 'administer conditional fields')
->execute();
$dependencies = array();
$node_types = node_type_get_names();
$administrator_roles = user_roles(FALSE, 'administer dependencies');
$default_options = array(
'selector' => '',
'selector_custom' => 0,
'state' => 'visible',
'condition' => 'value',
'values_set' => 1,
// CONDITIONAL_FIELDS_DEPENDENCY_VALUES_SET_SINGLE
'value' => array(),
'value_form' => array(),
'values' => array(),
'effect' => 'show',
'effect_options' => NULL,
'element_view' => array(
1 => 1,
// CONDITIONAL_FIELDS_ELEMENT_VIEW_EVALUATE
2 => 2,
// CONDITIONAL_FIELDS_ELEMENT_VIEW_HIDE_ORPHAN
5 => 0,
// CONDITIONAL_FIELDS_ELEMENT_VIEW_HIDE_ORPHAN_IF_UNTRIGGERED
3 => 0,
// CONDITIONAL_FIELDS_ELEMENT_VIEW_HIGHLIGHT
4 => 0,
),
'element_view_per_role' => 0,
'element_view_roles' => array(),
'element_edit' => array(
1 => 1,
// CONDITIONAL_FIELDS_ELEMENT_EDIT_HIDE_ORPHAN
2 => 0,
// CONDITIONAL_FIELDS_ELEMENT_EDIT_HIDE_ORPHAN_IF_UNTRIGGERED
3 => 0,
),
'element_edit_per_role' => 0,
'element_edit_roles' => array(),
);
// Convert old dependencies to new format.
foreach ($old_dependencies as $old_dependency) {
$options = array();
if (!isset($node_types[$old_dependency->type])) {
continue;
}
$type = $old_dependency->type;
$dependee = field_read_instance('node', $old_dependency->control_field_name, $type, array(
'include_inactive' => TRUE,
));
$dependent = field_read_instance('node', $old_dependency->field_name, $type, array(
'include_inactive' => TRUE,
));
if (!$dependee || !$dependent) {
continue;
}
$options['values_set'] = 2;
// CONDITIONAL_FIELDS_DEPENDENCY_VALUES_SET_AND
$options['values'] = array_keys(unserialize($old_dependency->trigger_values));
// Use Javascript.
switch (variable_get('c_fields_js_' . $type, 1)) {
case 0:
// C_FIELDS_JS_NO
$options['state'] = 'unchanged';
break;
case 2:
// C_FIELDS_JS_DISABLE
$options['state'] = '!disabled';
break;
}
// JS Animation.
$js_animation = variable_get('c_fields_animation_' . $type, 0);
switch ($js_animation) {
case 1:
// C_FIELDS_ANIMATION_FADE
$options['effect'] = 'fade';
break;
case 2:
// C_FIELDS_ANIMATION_SLIDE
$options['effect'] = 'slide';
break;
}
// JS Animation speed.
if ($js_animation != 0) {
switch (variable_get('c_fields_anim_speed_' . $type, 'normal')) {
case 'slow':
$speed = 600;
break;
case 'normal':
$speed = 400;
break;
case 'fast':
$speed = 200;
break;
}
$options['effect_options'] = array(
'speed' => $speed,
);
}
// Orphaned on view.
switch (variable_get('c_fields_view_' . $type, 1)) {
case 1:
// C_FIELDS_ORPHANED_SHOW_TRIGGERED
$options['element_view'][2] = 0;
// CONDITIONAL_FIELDS_ELEMENT_VIEW_HIDE_ORPHAN
$options['element_view'][5] = 5;
// CONDITIONAL_FIELDS_ELEMENT_VIEW_HIDE_ORPHAN_IF_UNTRIGGERED
break;
case 2:
// C_FIELDS_ORPHANED_SHOW_ALL
$options['element_view'][2] = 0;
break;
}
// Orphaned on edit.
switch (variable_get('c_fields_edit_' . $type, 1)) {
case 1:
// C_FIELDS_ORPHANED_SHOW_TRIGGERED
$options['element_edit'][1] = 0;
// CONDITIONAL_FIELDS_ELEMENT_EDIT_HIDE_ORPHAN
$options['element_edit'][2] = 2;
// CONDITIONAL_FIELDS_ELEMENT_EDIT_HIDE_ORPHAN_IF_UNTRIGGERED
break;
case 2:
// C_FIELDS_ORPHANED_SHOW_ALL
$options['element_edit'][2] = 0;
break;
}
// Reset if untriggered.
if (variable_get('c_fields_reset_default_' . $type, 1)) {
$options['element_edit'][3] = 3;
// CONDITIONAL_FIELDS_ELEMENT_EDIT_RESET_DEFAULTS_IF_UNTRIGGERED
}
// Show all values to administrators.
if (variable_get('c_fields_show_all_' . $type, 0) && !empty($administrator_roles)) {
$options['element_view_per_role'] = 1;
foreach ($administrator_roles as $rid => $role) {
$options['element_view_roles'][$rid] = array();
}
}
$options += $default_options;
$dependencies[] = array(
'dependee' => $dependee['id'],
'dependent' => $dependent['id'],
'options' => serialize($options),
);
}
// Delete the old table.
db_drop_table('conditional_fields');
// Create new table.
$schema = conditional_fields_schema_7000();
db_create_table('conditional_fields', $schema);
// Insert the new settings.
if (!empty($dependencies)) {
$query = db_insert('conditional_fields')
->fields(array(
'dependee',
'dependent',
'options',
));
foreach ($dependencies as $record) {
$query
->values($record);
}
$query
->execute();
}
// Delete obsolete variables, then clear the variables cache.
db_delete('variable')
->condition('name', 'c_fields_%', 'LIKE')
->execute();
cache_clear_all('variables', 'cache_bootstrap');
return 'Conditional Fields successfully upated dependencies to Drupal 7.';
}