/** * Deletes unwanted form fields. Called by administrator when creating an external form and when * editing a form. * * Note: field types that require additional functionality when deleting a field type (e.g. * file fields which need to delete uploaded files), they need to define the appropriate hook. * Generally this means the "delete_fields" hook in the ft_update_form_fields_tab() function. * * @param integer $form_id * @param array an array of field IDs to delete * @return array Returns array with indexes:<br/> * [0]: true/false (success / failure)<br/> * [1]: message string<br/> */ function ft_delete_form_fields($form_id, $field_ids) { global $g_table_prefix, $LANG; // default return values $success = true; $message = ""; // find out if the form exists and is complete $form_info = ft_get_form($form_id); $form_table_exists = $form_info["is_complete"] == "yes" ? true : false; // stores the Views IDs of any View that is affected by deleting one of the form field, regardless of the field or form $affected_views = array(); $removed_field_ids = array(); $deleted_field_info = array(); foreach ($field_ids as $field_id) { $field_id = trim($field_id); if (empty($field_id)) { continue; } // ignore brand new fields - nothing to delete! if (preg_match("/^NEW/", $field_id)) { continue; } $old_field_info = ft_get_form_field($field_id); $deleted_field_info[] = $old_field_info; @mysql_query("DELETE FROM {$g_table_prefix}form_fields WHERE field_id = {$field_id}"); if (!$form_table_exists) { continue; } mysql_query("DELETE FROM {$g_table_prefix}new_view_submission_defaults WHERE field_id = {$field_id}"); // see if this field had been flagged as an email field (either as the email field, first or last name). // if it's the email field, delete the whole row. If it's either the first or last name, just empty the value $query = mysql_query("SELECT form_email_id FROM {$g_table_prefix}form_email_fields WHERE email_field_id = {$field_id}"); while ($row = mysql_fetch_assoc($query)) { ft_unset_field_as_email_field($row["email_form_id"]); } mysql_query("UPDATE {$g_table_prefix}form_email_fields SET first_name_field_id = '' WHERE first_name_field_id = {$field_id}"); mysql_query("UPDATE {$g_table_prefix}form_email_fields SET last_name_field_id = '' WHERE last_name_field_id = {$field_id}"); // get a list of any Views that referenced this form field $view_query = mysql_query("SELECT view_id FROM {$g_table_prefix}view_fields WHERE field_id = {$field_id}"); while ($row = mysql_fetch_assoc($view_query)) { $affected_views[] = $row["view_id"]; ft_delete_view_field($row["view_id"], $field_id); } $drop_column = $old_field_info["col_name"]; mysql_query("ALTER TABLE {$g_table_prefix}form_{$form_id} DROP {$drop_column}"); // if any Views had this field as the default sort order, reset them to having the submission_date // field as the default sort order mysql_query("\n UPDATE {$g_table_prefix}views\n SET default_sort_field = 'submission_date',\n default_sort_field_order = 'desc'\n WHERE default_sort_field = '{$drop_column}' AND\n form_id = {$form_id}\n "); $removed_field_ids[] = $field_id; } // update the list_order of this form's fields if ($form_table_exists) { ft_auto_update_form_field_order($form_id); } // update the order of any Views that referenced this field foreach ($affected_views as $view_id) { ft_auto_update_view_field_order($view_id); } // determine the return message if (count($removed_field_ids) > 1) { $message = $LANG["notify_form_fields_removed"]; } else { $message = $LANG["notify_form_field_removed"]; } extract(ft_process_hook_calls("end", compact("deleted_field_info", "form_id", "field_ids", "success", "message"), array("success", "message")), EXTR_OVERWRITE); return array($success, $message); }
<?php if (isset($request["update_email_settings"])) { list($g_success, $g_message) = ft_set_field_as_email_field($form_id, $request); } if (isset($request["delete_form_email_id"])) { list($g_success, $g_message) = ft_unset_field_as_email_field($request["delete_form_email_id"]); } $form_info = ft_get_form($form_id); $form_fields = ft_get_form_fields($form_id); $registered_form_emails = ft_get_email_fields($form_id); // remove any columns that are already used in $registered_form_emails $used_cols = array(); foreach ($registered_form_emails as $row) { $used_cols[] = $row["email_field_id"]; $used_cols[] = $row["first_name_field_id"]; $used_cols[] = $row["last_name_field_id"]; } $trimmed_cols = array(); foreach ($form_fields as $field_info) { if (!in_array($field_info["field_id"], $used_cols) && $field_info["is_system_field"] == "no") { $trimmed_cols[$field_info["field_id"]] = $field_info["field_title"]; } } // compile the templates information $page_vars["page"] = "email_settings"; $page_vars["page_url"] = ft_get_page_url("edit_form_email_settings", array("form_id" => $form_id)); $page_vars["head_title"] = "{$LANG["phrase_edit_form"]} - {$LANG["phrase_email_settings"]}"; $page_vars["form_info"] = $form_info; $page_vars["columns"] = $trimmed_cols; $page_vars["registered_form_emails"] = $registered_form_emails;