function fn_delete_profile_field($field_id, $no_match = false) { $matching_id = db_get_field("SELECT matching_id FROM ?:profile_fields WHERE field_id = ?i", $field_id); if (!$no_match && !empty($matching_id)) { fn_delete_profile_field($matching_id, true); } fn_delete_field_values($field_id); db_query("DELETE FROM ?:profile_fields WHERE field_id = ?i", $field_id); db_query("DELETE FROM ?:profile_fields_data WHERE field_id = ?i", $field_id); db_query("DELETE FROM ?:profile_field_descriptions WHERE object_id = ?i AND object_type = 'F'", $field_id); }
/** * Update or create profile field. Also can create fields matching. * * @param array $field_data Array of profile field data * @param int $field_id Profile field id to be updated. If empty - new field will be created * @param strging $lang_code 2-letters language code * * @return int $field_id New or updated field id */ function fn_update_profile_field($field_data, $field_id, $lang_code = DESCR_SL) { if (empty($field_id)) { $add_match = false; $field_name = $field_data['field_name']; if ($field_data['section'] == 'BS') { $field_data['section'] = 'B'; $field_data['field_name'] = !empty($field_name) ? 'b_' . $field_name : ''; $add_match = true; } // Insert main data $field_id = db_query("INSERT INTO ?:profile_fields ?e", $field_data); // Insert descriptions $_data = array('object_id' => $field_id, 'object_type' => 'F', 'description' => $field_data['description']); foreach (fn_get_translation_languages() as $_data['lang_code'] => $_v) { db_query("INSERT INTO ?:profile_field_descriptions ?e", $_data); } if (substr_count('SR', $field_data['field_type']) && is_array($field_data['add_values']) && $add_match == false) { fn_add_field_values($field_data['add_values'], $field_id); } if ($add_match == true) { $field_data['section'] = 'S'; $field_data['field_name'] = !empty($field_name) ? 's_' . $field_name : ''; $field_data['matching_id'] = $field_id; // Update match for the billing field $s_field_id = fn_update_profile_field($field_data, 0, $lang_code); if (!empty($s_field_id)) { db_query('UPDATE ?:profile_fields SET matching_id = ?i WHERE field_id = ?i', $s_field_id, $field_id); } } } else { db_query("UPDATE ?:profile_fields SET ?u WHERE field_id = ?i", $field_data, $field_id); if (!empty($field_data['matching_id']) && $field_data['section'] == 'S') { db_query('UPDATE ?:profile_fields SET field_type = ?s WHERE field_id = ?i', $field_data['field_type'], $field_data['matching_id']); } db_query("UPDATE ?:profile_field_descriptions SET ?u WHERE object_id = ?i AND object_type = 'F' AND lang_code = ?s", $field_data, $field_id, $lang_code); if (!empty($field_data['field_type'])) { if (strpos('SR', $field_data['field_type']) !== false) { if (!empty($field_data['values'])) { foreach ($field_data['values'] as $value_id => $vdata) { db_query("UPDATE ?:profile_field_values SET ?u WHERE value_id = ?i", $vdata, $value_id); db_query("UPDATE ?:profile_field_descriptions SET ?u WHERE object_id = ?i AND object_type = 'V' AND lang_code = ?s", $vdata, $value_id, $lang_code); } // Completely delete removed values $existing_ids = db_get_fields("SELECT value_id FROM ?:profile_field_values WHERE field_id = ?i", $field_id); $val_ids = array_diff($existing_ids, array_keys($field_data['values'])); if (!empty($val_ids)) { fn_delete_field_values($field_id, $val_ids); } } else { if (isset($field_data['add_values'])) { fn_delete_field_values($field_id); } } if (!empty($field_data['add_values']) && is_array($field_data['add_values'])) { fn_add_field_values($field_data['add_values'], $field_id); } } else { fn_delete_field_values($field_id); } } } return $field_id; }