/** * 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); }
/** * Deletes an individual View field. Called when a field is deleted. * * @param integer $view_id * @param integer $field_id */ function ft_delete_view_field($view_id, $field_id) { global $g_table_prefix; mysql_query("DELETE FROM {$g_table_prefix}view_columns WHERE view_id = {$view_id} AND field_id = {$field_id}"); mysql_query("DELETE FROM {$g_table_prefix}view_fields WHERE view_id = {$view_id} AND field_id = {$field_id}"); mysql_query("DELETE FROM {$g_table_prefix}view_filters WHERE view_id = {$view_id} AND field_id = {$field_id}"); // now update the view field order to ensure there are no gaps ft_auto_update_view_field_order($view_id); }