/**
 * Implementation of hook_form_alter().
 */
function fieldthief_form_alter($form_id, & $form) {
	if (isset ($form['type']) && $form['type']['#value'] . '_node_form' == $form_id && !isset ($form['nid']['#value'])) {
		$copy_rule = db_fetch_object(db_query("SELECT * FROM {copy_rule} WHERE to_type = '%s'", $form['type']['#value']));
		if ($copy_rule) {
			$nid = arg($copy_rule->src_arg);
			if (is_numeric($nid)) {
				$node = node_load($nid);
				if (isset ($node)) {
					$list = explode("\n", $copy_rule->fields_thief);
					$list = array_map('trim', $list);
					$list = array_filter($list, 'strlen');
					foreach ($list as $rule) {
						list ($from_name, $to) = explode(',', $rule);
						if (isset ($node-> $from_name)) {
							$from = $node-> $from_name;
							if (isset($form[$to]['0']['value'])) {
								//assuming this is a cck field
								if (is_array($from) && isset ($from['0']['value'])) {
									$form[$to]['0']['value']['#default_value'] = $from['0']['value'];
								} else {
									$form[$to]['0']['value']['#default_value'] = $from;
                                    }
							} else if (isset($form[$to]['key'])) {
								//assuming this is a cck integer options field
								if (is_array($from) && isset ($from['0']['value'])) {
									$form[$to]['key']['#default_value'] = array($from['0']['value']);
								} else {
									$form[$to]['key']['#default_value'] = array($from);
								}
							} else if (array_key_exists('nids',$form[$to])) {
								//assuming this is a cck node_reference field
								if (is_array($from) && isset ($from['0']['nid'])) {
									$form[$to]['nids']['#default_value'] = array($from['0']['nid']);
								} else {
									$form[$to]['nids']['#default_value'] = array($from);
								}
							} else if (array_key_exists('#default_value',$form[$to])) {
								// assuming this is a form api field
								if (is_array($from) && isset ($from['0']['value'])) {
									$form[$to]['#default_value'] = $from['0']['value'];
								} else {
									$form[$to]['#default_value'] = $from;
								}
							} else if (array_key_exists('upload',$form[$to])) {
								// assuming this is image field
								$testFrom = _imagefield_widget_form($node,array('field_name'=>$from_name),$from);
								$form[$to][] = $testFrom[$from_name]['0'];
							}
						}
					}
				}
			}
		}
	}
}

Comments

chriszz’s picture

The new part is:

 } else if (isset($form[$to]['key'])) {
//assuming this is a cck integer options field
if (is_array($from) && isset ($from['0']['value'])) {
$form[$to]['key']['#default_value'] = array($from['0']['value']);
} else {
$form[$to]['key']['#default_value'] = array($from);
}
}
doc2@drupalfr.org’s picture

suscribing