/** * Creates a new blank submission in the database and returns the unique submission ID. If the * operation fails for whatever reason (e.g. the form doesn't exist), it just returns the empty * string. * * @param integer $form_id * @param integer $view_id * @param boolean $is_finalized whether the submission is finalized or not. */ function ft_create_blank_submission($form_id, $view_id, $is_finalized = false) { global $g_table_prefix; if (!ft_check_form_exists($form_id)) { return ""; } $now = ft_get_current_datetime(); $ip = $_SERVER["REMOTE_ADDR"]; // if the administrator has specified any default values for submissions created through this View $default_insert_pairs = array("submission_date" => $now, "last_modified_date" => $now, "ip_address" => $ip, "is_finalized" => $is_finalized ? "yes" : "no"); $special_defaults = ft_get_new_view_submission_defaults($view_id); if (!empty($special_defaults)) { // find the field's DB column names so we can do our insert $field_id_to_value_map = array(); foreach ($special_defaults as $curr_default_info) { $field_id_to_value_map[$curr_default_info["field_id"]] = ft_sanitize($curr_default_info["default_value"]); } $field_ids = array_keys($field_id_to_value_map); $field_id_to_column_name_map = ft_get_field_col_by_field_id($form_id, $field_ids); while (list($field_id, $col_name) = each($field_id_to_column_name_map)) { $default_insert_pairs[$col_name] = $field_id_to_value_map[$field_id]; } } $col_names = implode(", ", array_keys($default_insert_pairs)); $col_values = "'" . implode("', '", array_values($default_insert_pairs)) . "'"; mysql_query("\n INSERT INTO {$g_table_prefix}form_{$form_id} ({$col_names})\n VALUES ({$col_values})\n "); $new_submission_id = mysql_insert_id(); extract(ft_process_hook_calls("end", compact("form_id", "now", "ip", "new_submission_id"), array()), EXTR_OVERWRITE); return $new_submission_id; }
// this updates all four sections of the view at once (since all may have been modified) if (isset($request["update_view"])) { $request["form_id"] = $form_id; $request["view_fields_sortable_id"] = $view_fields_sortable_id; $request["submission_list_sortable_id"] = $submission_list_sortable_id; list($g_success, $g_message) = ft_update_view($view_id, $request); } $form_info = ft_get_form($form_id); $form_fields = ft_get_form_fields($form_id, array("include_field_type_info" => true)); $view_info = ft_get_view($view_id); $form_database_column_info = ft_get_form_column_names($form_id); $view_clients = ft_get_view_clients($view_id); $view_tabs = ft_get_view_tabs($view_id); $grouped_fields = ft_get_grouped_view_fields($view_id); $field_types = ft_get_field_type_names(); $new_view_submission_defaults = ft_get_new_view_submission_defaults($view_id); // this returns ALL filters: standard and client map $standard_filters = ft_get_view_filters($view_id, "standard"); $client_map_filters = ft_get_view_filters($view_id, "client_map"); $num_standard_filters = count($standard_filters); $num_client_map_filters = count($client_map_filters); $edit_view_tab = isset($_SESSION["ft"]["inner_tabs"]["edit_view"]) ? $_SESSION["ft"]["inner_tabs"]["edit_view"] : 1; if (isset($request["edit_view_tab"])) { $edit_view_tab = $request["edit_view_tab"]; $_SESSION["ft"]["inner_tabs"]["edit_view"] = $edit_view_tab; } $view_omit_list = ft_get_public_view_omit_list($view_id); $num_clients_on_omit_list = count($view_omit_list); // assumes view_ns.all_form_fields and view_ns.view_tabs JS arrays have been defined in manage_views.js // The form fields info is needed throughout the Edit View tabs, so stashing them in the page JS makes sense $js_string = "";
/** * Creates a new form View. If the $view_id parameter is set, it makes a copy of that View. * Otherwise, it creates a new blank view has *all* fields associated with it by default, a single tab * that is not enabled by default, no filters, and no clients assigned to it. * * @param integer $form_id the unique form ID * @param integer $group_id the view group ID that we're adding this View to * @param integer $create_from_view_id (optional) either the ID of the View from which to base this new View on, * or "blank_view_no_fields" or "blank_view_all_fields" * @return integer the new view ID */ function ft_create_new_view($form_id, $group_id, $view_name = "", $create_from_view_id = "") { global $g_table_prefix, $LANG; // figure out the next View order number $count_query = mysql_query("SELECT count(*) as c FROM {$g_table_prefix}views WHERE form_id = {$form_id}"); $count_hash = mysql_fetch_assoc($count_query); $num_form_views = $count_hash["c"]; $next_order = $num_form_views + 1; $view_name = empty($view_name) ? $LANG["phrase_new_view"] : ft_sanitize($view_name); if ($create_from_view_id == "blank_view_no_fields" || $create_from_view_id == "blank_view_all_fields") { // add the View with default values mysql_query("\r\n INSERT INTO {$g_table_prefix}views (form_id, view_name, view_order, is_new_sort_group, group_id)\r\n VALUES ({$form_id}, '{$view_name}', {$next_order}, 'yes', {$group_id})\r\n "); $view_id = mysql_insert_id(); // add the default tab mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 1, '{$LANG["phrase_default_tab_label"]}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 2, '')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 3, '')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 4, '')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 5, '')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 6, '')"); if ($create_from_view_id == "blank_view_all_fields") { _ft_populate_new_view_fields($form_id, $view_id); } } else { $view_info = ft_get_view($create_from_view_id); $view_info = ft_sanitize($view_info); // Main View Settings $view_order = $view_info["view_order"]; $access_type = $view_info["access_type"]; $num_submissions_per_page = $view_info["num_submissions_per_page"]; $default_sort_field = $view_info["default_sort_field"]; $default_sort_field_order = $view_info["default_sort_field_order"]; $may_add_submissions = $view_info["may_add_submissions"]; $may_edit_submissions = $view_info["may_edit_submissions"]; $may_delete_submissions = $view_info["may_delete_submissions"]; $has_standard_filter = $view_info["has_standard_filter"]; $has_client_map_filter = $view_info["has_client_map_filter"]; mysql_query("\r\n INSERT INTO {$g_table_prefix}views (form_id, access_type, view_name, view_order, is_new_sort_group, group_id,\r\n num_submissions_per_page, default_sort_field, default_sort_field_order, may_add_submissions, may_edit_submissions,\r\n may_delete_submissions, has_client_map_filter, has_standard_filter)\r\n VALUES ({$form_id}, '{$access_type}', '{$view_name}', {$next_order}, 'yes', {$group_id}, {$num_submissions_per_page},\r\n '{$default_sort_field}', '{$default_sort_field_order}', '{$may_add_submissions}', '{$may_edit_submissions}',\r\n '{$may_delete_submissions}', '{$has_client_map_filter}', '{$has_standard_filter}')\r\n "); $view_id = mysql_insert_id(); foreach ($view_info["client_info"] as $client_info) { $account_id = $client_info["account_id"]; mysql_query("INSERT INTO {$g_table_prefix}client_views (account_id, view_id) VALUES ({$account_id}, {$view_id})"); } // View Tabs $tabs = $view_info["tabs"]; $tab1 = $tabs[1]["tab_label"]; $tab2 = $tabs[2]["tab_label"]; $tab3 = $tabs[3]["tab_label"]; $tab4 = $tabs[4]["tab_label"]; $tab5 = $tabs[5]["tab_label"]; $tab6 = $tabs[6]["tab_label"]; mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 1, '{$tab1}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 2, '{$tab2}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 3, '{$tab3}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 4, '{$tab4}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 5, '{$tab5}')"); mysql_query("INSERT INTO {$g_table_prefix}view_tabs (view_id, tab_number, tab_label) VALUES ({$view_id}, 6, '{$tab6}')"); // with 2.1.0, all View fields are now grouped. We need to duplicate all the groups as well as the fields $group_id_map = ft_duplicate_view_field_groups($create_from_view_id, $view_id); $field_view_inserts = array(); foreach ($view_info["fields"] as $field_info) { $field_id = $field_info["field_id"]; $new_group_id = $group_id_map[$field_info["group_id"]]; $is_editable = $field_info["is_editable"]; $is_searchable = $field_info["is_searchable"]; $list_order = $field_info["list_order"]; $is_new_sort_group = $field_info["is_new_sort_group"]; $field_view_inserts[] = "({$view_id}, {$field_id}, {$new_group_id}, '{$is_editable}', '{$is_searchable}', {$list_order}, '{$is_new_sort_group}')"; } if (!empty($field_view_inserts)) { $field_view_inserts_str = implode(",\n", $field_view_inserts); mysql_query("\r\n INSERT INTO {$g_table_prefix}view_fields (view_id, field_id, group_id, is_editable,\r\n is_searchable, list_order, is_new_sort_group)\r\n VALUES {$field_view_inserts_str}\r\n "); } $view_column_inserts = array(); foreach ($view_info["columns"] as $field_info) { $field_id = $field_info["field_id"]; $list_order = $field_info["list_order"]; $is_sortable = $field_info["is_sortable"]; $auto_size = $field_info["auto_size"]; $custom_width = $field_info["custom_width"]; $truncate = $field_info["truncate"]; $view_column_inserts[] = "({$view_id}, {$field_id}, {$list_order}, '{$is_sortable}', '{$auto_size}', '{$custom_width}', '{$truncate}')"; } if (!empty($view_column_inserts)) { $view_column_insert_str = implode(",\n", $view_column_inserts); mysql_query("\r\n INSERT INTO {$g_table_prefix}view_columns (view_id, field_id, list_order, is_sortable, auto_size, custom_width, truncate)\r\n VALUES {$view_column_insert_str}\r\n "); } // View Filters foreach ($view_info["filters"] as $filter_info) { $field_id = $filter_info["field_id"]; $filter_type = $filter_info["filter_type"]; $operator = $filter_info["operator"]; $filter_values = $filter_info["filter_values"]; $filter_sql = $filter_info["filter_sql"]; mysql_query("\r\n INSERT INTO {$g_table_prefix}view_filters (view_id, filter_type, field_id, operator, filter_values, filter_sql)\r\n VALUES ({$view_id}, '{$filter_type}', {$field_id}, '{$operator}', '{$filter_values}', '{$filter_sql}')\r\n "); } // default submission values $submission_defaults = ft_get_new_view_submission_defaults($create_from_view_id); foreach ($submission_defaults as $row) { $field_id = $row["field_id"]; $default_value = ft_sanitize($row["default_value"]); $list_order = $row["list_order"]; mysql_query("\r\n \t INSERT INTO {$g_table_prefix}new_view_submission_defaults (view_id, field_id, default_value, list_order)\r\n \t VALUES ({$view_id}, {$field_id}, '{$default_value}', {$list_order})\r\n \t"); } // public View omit list $client_ids = ft_get_public_view_omit_list($create_from_view_id); foreach ($client_ids as $client_id) { mysql_query("\r\n INSERT INTO {$g_table_prefix}public_view_omit_list (view_id, account_id)\r\n VALUES ({$view_id}, {$client_id})\r\n "); } } extract(ft_process_hook_calls("end", compact("view_id"), array()), EXTR_OVERWRITE); return $view_id; }