Ejemplo n.º 1
0
/**
 * 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);
}
Ejemplo n.º 2
0
/**
 * 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);
}