コード例 #1
0
ファイル: fields.php プロジェクト: jdearaujo/core
/**
 * 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);
}
コード例 #2
0
<?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;