getAllSettings(); // no fields to migrate if (!$settings['user_defined_fields']) { return true; } $order = array(); $remove_settings = array(); // make sure we have a name and type foreach ($settings as $k => $v) { if (!preg_match('/admin_defined_profile_([0-9]+)/i', $k, $matches)) { continue; } $i = $matches[1]; $type_name = "admin_defined_profile_type_$i"; $type = elgg_extract($type_name, $settings, null); if ($type) { // field name elgg_save_config($k, $v); // field value elgg_save_config($type_name, $type); $order[] = $i; $remove_settings[] = $k; $remove_settings[] = $type_name; } } if ($order) { // these will always need to be in order, but there might be gaps ksort($order); $order_str = implode(',', $order); elgg_save_config('profile_custom_fields', $order_str); foreach ($remove_settings as $name) { $plugin->unsetSetting($name); } $plugin->unsetSetting('user_defined_fields'); }