private static function fix_leading_and_trailing_spaces() { global $wpdb; $meta_table_name = GFFormsModel::get_meta_table_name(); $lead_details_table = GFFormsModel::get_lead_details_table_name(); $lead_details_long_table = GFFormsModel::get_lead_details_long_table_name(); $result = $wpdb->query("UPDATE {$lead_details_table} SET value = TRIM(value)"); $result = $wpdb->query("UPDATE {$lead_details_long_table} SET value = TRIM(value)"); $results = $wpdb->get_results("SELECT form_id, display_meta, confirmations, notifications FROM {$meta_table_name}", ARRAY_A); foreach ($results as &$result) { $form_id = $result['form_id']; $form = GFFormsModel::unserialize($result['display_meta']); $form_updated = false; $form = GFFormsModel::trim_form_meta_values($form, $form_updated); if ($form_updated) { GFFormsModel::update_form_meta($form_id, $form); } $confirmations = GFFormsModel::unserialize($result['confirmations']); $confirmations_updated = false; $confirmations = GFFormsModel::trim_conditional_logic_values($confirmations, $form, $confirmations_updated); if ($confirmations_updated) { GFFormsModel::update_form_meta($form_id, $confirmations, 'confirmations'); } $notifications = GFFormsModel::unserialize($result['notifications']); $notifications_updated = false; $notifications = GFFormsModel::trim_conditional_logic_values($notifications, $form, $notifications_updated); if ($notifications_updated) { GFFormsModel::update_form_meta($form_id, $notifications, 'notifications'); } } return $results; }
public static function count_search_leads($form_id, $search_criteria = array()) { global $wpdb; $detail_table_name = GFFormsModel::get_lead_details_table_name(); $lead_table_name = GFFormsModel::get_lead_table_name(); $where = self::get_search_where($form_id, $search_criteria); $sql = "SELECT count(distinct l.id)\n FROM {$lead_table_name} l\n INNER JOIN {$detail_table_name} ld ON l.id = ld.lead_id\n {$where}\n "; return $wpdb->get_var($sql); }
public static function is_valid_table($table_name) { global $wpdb; $tables = array(GFFormsModel::get_form_table_name(), GFFormsModel::get_form_view_table_name(), GFFormsModel::get_meta_table_name(), GFFormsModel::get_lead_table_name(), GFFormsModel::get_lead_notes_table_name(), GFFormsModel::get_lead_details_table_name(), GFFormsModel::get_lead_details_long_table_name(), GFFormsModel::get_lead_meta_table_name(), GFFormsModel::get_incomplete_submissions_table_name(), "{$wpdb->prefix}gf_addon_feed", "{$wpdb->prefix}gf_addon_payment_transaction", "{$wpdb->prefix}gf_addon_payment_callback"); return in_array($table_name, $tables); }
public static function count_search_leads($form_id, $search_criteria) { global $wpdb; if (!is_numeric($form_id)) { return ""; } $detail_table_name = GFFormsModel::get_lead_details_table_name(); $lead_table_name = GFFormsModel::get_lead_table_name(); $where_arr = array(); $search_where = self::get_search_where($form_id, $search_criteria); if (!empty($search_where)) { $where_arr[] = $search_where; } $info_search_where = self::get_info_search_where($search_criteria); if (!empty($info_search_where)) { $where_arr[] = $info_search_where; } $form_id_where = $form_id > 0 ? $wpdb->prepare("l.form_id=%d", $form_id) : ""; if (!empty($form_id_where)) { $where_arr[] = $form_id_where; } $where = empty($where_arr) ? "" : "WHERE " . join($where_arr, " AND "); $sql = "SELECT count(distinct l.id)\n FROM {$lead_table_name} l\n INNER JOIN {$detail_table_name} ld ON l.id = ld.lead_id\n {$where}\n "; return $wpdb->get_var($sql); }
/** * Deletes all rows in the lead table that don't have corresponding rows in the details table. * * @since 2.0.0 * @access public * @static * @global $wpdb */ public static function delete_orphaned_entries() { global $wpdb; GFCommon::log_debug(__METHOD__ . '(): Starting to delete orphaned entries'); $lead_table = GFFormsModel::get_lead_table_name(); $lead_details_table = GFFormsModel::get_lead_details_table_name(); $sql = "DELETE FROM {$lead_table} WHERE id NOT IN( SELECT lead_id FROM {$lead_details_table} )"; $result = $wpdb->query($sql); GFCommon::log_debug(__METHOD__ . '(): Delete result: ' . print_r($result, true)); }
/** * Updates a single Entry object. * * @since 1.8 * @access public * @static * * @param array $entry The Entry object * @param int $entry_id Optional. If specified, the ID in the Entry object will be ignored * * @return mixed Either True or a WP_Error instance */ public static function update_entry($entry, $entry_id = null) { global $wpdb; if (empty($entry_id)) { $entry_id = $entry["id"]; } if (empty($entry_id)) { return new WP_Error("missing_entry_id", __("Missing entry id", "gravityforms")); } $current_entry = self::get_entry($entry_id); if (!$current_entry) { return new WP_Error("not_found", __("Entry not found", "gravityforms"), $entry_id); } if (is_wp_error($current_entry)) { return $current_entry; } // make sure the form id exists $form_id = rgar($entry, "form_id"); if (empty($form_id)) { $form_id = rgar($current_entry, "form_id"); } if (false === self::form_id_exists($form_id)) { return new WP_Error("invalid_form_id", __("The form for this entry does not exist", "gravityforms")); } // use values in the entry object if present $post_id = isset($entry["post_id"]) ? intval($entry["post_id"]) : 'NULL'; $date_created = isset($entry["date_created"]) ? sprintf("'%s'", mysql_real_escape_string($entry["date_created"])) : "utc_timestamp()"; $is_starred = isset($entry["is_starred"]) ? $entry["is_starred"] : 0; $is_read = isset($entry["is_read"]) ? $entry["is_read"] : 0; $ip = isset($entry["ip"]) ? $entry["ip"] : GFFormsModel::get_ip(); $source_url = isset($entry["source_url"]) ? $entry["source_url"] : GFFormsModel::get_current_page_url(); $user_agent = isset($entry["user_agent"]) ? $entry["user_agent"] : "API"; $currency = isset($entry["currency"]) ? $entry["currency"] : GFCommon::get_currency(); $payment_status = isset($entry["payment_status"]) ? sprintf("'%s'", mysql_real_escape_string($entry["payment_status"])) : 'NULL'; $payment_date = strtotime(rgar($entry, "payment_date")) ? "'" . gmdate('Y-m-d H:i:s', strtotime("{$entry["payment_date"]}")) . "'" : "NULL"; $payment_amount = isset($entry["payment_amount"]) ? (double) $entry["payment_amount"] : 'NULL'; $payment_method = isset($entry["payment_method"]) ? $entry["payment_method"] : ''; $transaction_id = isset($entry["transaction_id"]) ? sprintf("'%s'", mysql_real_escape_string($entry["transaction_id"])) : 'NULL'; $is_fulfilled = isset($entry["is_fulfilled"]) ? intval($entry["is_fulfilled"]) : 'NULL'; $status = isset($entry["status"]) ? $entry["status"] : "active"; global $current_user; $user_id = isset($entry["created_by"]) ? mysql_real_escape_string($entry["created_by"]) : ""; if (empty($user_id)) { $user_id = $current_user && $current_user->ID ? $current_user->ID : 'NULL'; } $transaction_type = isset($entry["transaction_type"]) ? intval($entry["transaction_type"]) : 'NULL'; $lead_table = GFFormsModel::get_lead_table_name(); $result = $wpdb->query($wpdb->prepare("\n UPDATE {$lead_table}\n SET\n form_id = %d,\n post_id = {$post_id},\n date_created = {$date_created},\n is_starred = %d,\n is_read = %d,\n ip = %s,\n source_url = %s,\n user_agent = %s,\n currency = %s,\n payment_status = {$payment_status},\n payment_date = {$payment_date},\n payment_amount = {$payment_amount},\n transaction_id = {$transaction_id},\n is_fulfilled = {$is_fulfilled},\n created_by = {$user_id},\n transaction_type = {$transaction_type},\n status = %s,\n payment_method = %s\n WHERE\n id = %d\n ", $form_id, $is_starred, $is_read, $ip, $source_url, $user_agent, $currency, $status, $payment_method, $entry_id)); if (false === $result) { return new WP_Error("update_entry_properties_failed", __("There was a problem while updating the entry properties", "gravityforms"), $wpdb->last_error); } // only save field values for fields that currently exist in the form. The rest in entry_id will be ignored. The rest in current_entry will get deleted. $lead_detail_table = GFFormsModel::get_lead_details_table_name(); $current_fields = $wpdb->get_results($wpdb->prepare("SELECT id, field_number FROM {$lead_detail_table} WHERE lead_id=%d", $entry_id)); $form = GFFormsModel::get_form_meta($form_id); foreach ($form["fields"] as $field) { $type = GFFormsModel::get_input_type($field); if (in_array($type, array("html", "page", "section"))) { continue; } if (isset($field["inputs"]) && is_array($field["inputs"])) { foreach ($field["inputs"] as $input) { $input_id = (string) $input["id"]; if (isset($entry[$input_id])) { $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $input_id); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $input_id, $entry[$input_id]); if (false === $result) { return new WP_Error("update_input_value_failed", __("There was a problem while updating one of the input values for the entry", "gravityforms"), $wpdb->last_error); } unset($current_entry[$input_id]); } } } else { $field_id = $field["id"]; $field_value = isset($entry[(string) $field_id]) ? $entry[(string) $field_id] : ""; $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $field_id); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $field_id, $field_value); if (false === $result) { return new WP_Error("update_field_values_failed", __("There was a problem while updating the field values", "gravityforms"), $wpdb->last_error); } unset($current_entry[$field_id]); } } // add save the entry meta values - only for the entry meta currently available for the form, ignore the rest $entry_meta = GFFormsModel::get_entry_meta($form_id); if (is_array($entry_meta)) { foreach (array_keys($entry_meta) as $key) { if (isset($entry[$key])) { gform_update_meta($entry_id, $key, $entry[$key]); unset($current_entry[$key]); } } } // now delete remaining values from the old entry if (is_array($entry_meta)) { foreach (array_keys($entry_meta) as $meta_key) { if (isset($current_entry[$meta_key])) { gform_delete_meta($entry_id, $meta_key); unset($current_entry[$meta_key]); } } } foreach ($current_entry as $k => $v) { $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $k); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $k, ""); if (false === $result) { return new WP_Error("update_field_values_failed", __("There was a problem while updating the field values", "gravityforms"), $wpdb->last_error); } } return true; }
private static function fix_leading_and_trailing_spaces() { global $wpdb; $meta_table_name = GFFormsModel::get_meta_table_name(); $lead_details_table = GFFormsModel::get_lead_details_table_name(); $lead_details_long_table = GFFormsModel::get_lead_details_long_table_name(); //fast but doesn't allow for the gform_trim_input_value filter //$result = $wpdb->query("UPDATE $lead_details_table SET value = TRIM(value)"); //$result = $wpdb->query("UPDATE $lead_details_long_table SET value = TRIM(value)"); $results = $wpdb->get_results("SELECT form_id, display_meta FROM {$meta_table_name}", ARRAY_A); foreach ($results as &$result) { $form_id = $result["form_id"]; $form = GFFormsModel::unserialize($result["display_meta"]); $form_updated = false; if (isset($form["fields"]) && is_array($form["fields"])) { $fields_to_update = array(); foreach ($form["fields"] as &$field) { $trim_value = apply_filters("gform_trim_input_value", true, $form_id, $field); if (!$trim_value) { continue; } if (isset($field["label"]) && $field["label"] != trim($field["label"])) { $field["label"] = trim($field["label"]); $form_updated = true; } if (isset($field["choices"]) && is_array($field["choices"])) { foreach ($field["choices"] as &$choice) { if (isset($choice["text"]) && $choice["text"] != trim($choice["text"])) { $choice["text"] = trim($choice["text"]); $form_updated = true; } if (isset($choice["value"]) && $choice["value"] != trim($choice["value"])) { $choice["value"] = trim($choice["value"]); $form_updated = true; } } } if (isset($field["inputs"]) && is_array($field["inputs"])) { foreach ($field["inputs"] as &$input) { if (isset($input["label"]) && $input["label"] != trim($input["label"])) { $input["label"] = trim($input["label"]); $form_updated = true; } } } $field_id = (int) $field["id"]; $field_number_min = $field_id - 0.001; $field_number_max = $field_id + 0.999; $fields_to_update[] = sprintf("field_number BETWEEN %s AND %s", $field_number_min, $field_number_max); } if (!empty($fields_to_update)) { $fields_to_update_str = join(" OR ", $fields_to_update); //slow - may cause timeouts on sites with high volume of entries $result = $wpdb->query("UPDATE {$lead_details_table} SET value = TRIM(value) WHERE form_id = {$form_id} AND ({$fields_to_update_str})"); $result = $wpdb->query("UPDATE {$lead_details_long_table} SET value = TRIM(value) WHERE lead_detail_id IN (SELECT id FROM {$lead_details_table} WHERE form_id = {$form_id} AND ({$fields_to_update_str}))"); } } if ($form_updated) { GFFormsModel::update_form_meta($form_id, $form); } } return $results; }
/** * Updates a form id of an entry. * * @param int $entry_id The ID of the Entry object * @param int $form_id The Form ID of the Entry object * * @param mixed $value The value to which the field should be set * * @return bool Whether the entry property was updated successfully */ function update_entry_form_id($entry_id, $form_id) { global $wpdb; $lead_table = GFFormsModel::get_lead_table_name(); $lead_detail_table = GFFormsModel::get_lead_details_table_name(); $lead_meta_table = GFFormsModel::get_lead_meta_table_name(); $result = $wpdb->query($wpdb->prepare("UPDATE {$lead_table} SET form_id={$form_id} WHERE id=%d ", $entry_id)); $wpdb->query($wpdb->prepare("UPDATE {$lead_detail_table} SET form_id={$form_id} WHERE lead_id=%d ", $entry_id)); $wpdb->query($wpdb->prepare("UPDATE {$lead_meta_table} SET form_id={$form_id} WHERE lead_id=%d ", $entry_id)); return $result; }
/** * Updates a single field of an entry. * * @since 1.9 * @access public * @static * * @param int $entry_id The ID of the Entry object * @param string $input_id The id of the input to be updated. For single input fields such as text, paragraph, website, drop down etc... this will be the same as the field ID. * For multi input fields such as name, address, checkboxes, etc... the input id will be in the format {FIELD_ID}.{INPUT NUMBER}. ( i.e. "1.3" ) * The $input_id can be obtained by inspecting the key for the specified field in the $entry object. * * @param mixed $value The value to which the field should be set * * @return bool Whether the entry property was updated successfully */ public static function update_entry_field($entry_id, $input_id, $value) { global $wpdb; $entry = self::get_entry($entry_id); if (is_wp_error($entry)) { return $entry; } $form = self::get_form($entry['form_id']); if (!$form) { return false; } $field = GFFormsModel::get_field($form, $input_id); $input_id_min = (double) $input_id - 0.0001; $input_id_max = (double) $input_id + 0.0001; $lead_details_table_name = GFFormsModel::get_lead_details_table_name(); $lead_detail_id = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$lead_details_table_name} WHERE lead_id=%d AND field_number BETWEEN %s AND %s", $entry_id, $input_id_min, $input_id_max)); $result = true; if (!isset($entry[$input_id]) || $entry[$input_id] != $value) { $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $input_id, $value); } return $result; }
function sort_by_field_count($form_id, $searching) { global $wpdb; $search_value = isset($searching['value']) ? $searching['value'] : ''; $lead_detail_table_name = GFFormsModel::get_lead_details_table_name(); $lead_table_name = GFFormsModel::get_lead_table_name(); $search_160 = "(field_number BETWEEN '159.9999' AND '160.9999' AND value like ( '%{$search_value}%' ))"; $search_158 = "(field_number BETWEEN '157.9999' AND '158.9999' AND value like ( '%{$search_value}%' ))"; $search_155 = "(field_number BETWEEN '154.9999' AND '155.9999' AND value like ( '%{$search_value}%' ))"; $search_166 = "(field_number BETWEEN '165.9999' AND '166.9999' AND value like ( '%{$search_value}%' ))"; $search_157 = "(field_number BETWEEN '156.9999' AND '157.9999' AND value like ( '%{$search_value}%' ))"; $search_159 = "(field_number BETWEEN '158.9999' AND '159.9999' AND value like ( '%{$search_value}%' ))"; $search_154 = "(field_number BETWEEN '153.9999' AND '154.9999' AND value like ( '%{$search_value}%' ))"; $search_109 = "(field_number BETWEEN '108.9999' AND '109.9999' AND value like ( '%{$search_value}%' ))"; $search_151 = "(field_number BETWEEN '150.9999' AND '151.9999' AND value like ( '%{$search_value}%' ))"; $search_16 = "(field_number BETWEEN '15.9999' AND '16.9999' AND value like ( '%{$search_value}%' ))"; $accepted_criteria = "(field_number BETWEEN '302.9999' AND '303.9999' AND value = 'Accepted' )"; $sql = "SELECT\n\tcount(distinct l.lead_id) as total_count\n\tfrom {$lead_detail_table_name} as l\n\tINNER JOIN \n\t\t\t\t (\n\t\t\t\t SELECT\n\t\t\t\t\t\tlead_id as id\n\t\t\t\t\t\tfrom {$lead_detail_table_name}\n\t\t\t\t\t\tWHERE {$accepted_criteria}\n\t\t\t\t\t\tAND form_id in ({$form_id}) \n\t\t\t\t\t\t) accepted on l.lead_id=accepted.id\n\tWHERE ( {$search_160} OR {$search_158} OR {$search_155} OR {$search_166} OR {$search_157} OR {$search_159} OR {$search_154} OR {$search_109} OR {$search_151} OR {$search_16})\n\tAND form_id in ({$form_id}) \n\t"; return $sql; }
/** * Updates a single Entry object. * * @since 1.8 * @access public * @static * * @param array $entry The Entry object * @param int $entry_id Optional. If specified, the ID in the Entry object will be ignored * * @return mixed Either True or a WP_Error instance */ public static function update_entry($entry, $entry_id = null) { global $wpdb; if (empty($entry_id)) { $entry_id = absint($entry['id']); } else { $entry['id'] = absint($entry_id); } if (empty($entry_id)) { return new WP_Error('missing_entry_id', __('Missing entry id', 'gravityforms')); } $current_entry = $original_entry = self::get_entry($entry_id); if (!$current_entry) { return new WP_Error('not_found', __('Entry not found', 'gravityforms'), $entry_id); } if (is_wp_error($current_entry)) { return $current_entry; } // make sure the form id exists $form_id = rgar($entry, 'form_id'); if (empty($form_id)) { $form_id = rgar($current_entry, 'form_id'); } if (false === self::form_id_exists($form_id)) { return new WP_Error('invalid_form_id', __('The form for this entry does not exist', 'gravityforms')); } $entry = apply_filters('gform_entry_pre_update', $entry, $original_entry); // use values in the entry object if present $post_id = isset($entry['post_id']) ? intval($entry['post_id']) : 'NULL'; $date_created = isset($entry['date_created']) ? sprintf("'%s'", esc_sql($entry['date_created'])) : 'utc_timestamp()'; $is_starred = isset($entry['is_starred']) ? $entry['is_starred'] : 0; $is_read = isset($entry['is_read']) ? $entry['is_read'] : 0; $ip = isset($entry['ip']) ? $entry['ip'] : GFFormsModel::get_ip(); $source_url = isset($entry['source_url']) ? $entry['source_url'] : GFFormsModel::get_current_page_url(); $user_agent = isset($entry['user_agent']) ? $entry['user_agent'] : 'API'; $currency = isset($entry['currency']) ? $entry['currency'] : GFCommon::get_currency(); $payment_status = isset($entry['payment_status']) ? sprintf("'%s'", esc_sql($entry['payment_status'])) : 'NULL'; $payment_date = strtotime(rgar($entry, 'payment_date')) ? "'" . gmdate('Y-m-d H:i:s', strtotime("{$entry['payment_date']}")) . "'" : 'NULL'; $payment_amount = isset($entry['payment_amount']) ? (double) $entry['payment_amount'] : 'NULL'; $payment_method = isset($entry['payment_method']) ? $entry['payment_method'] : ''; $transaction_id = isset($entry['transaction_id']) ? sprintf("'%s'", esc_sql($entry['transaction_id'])) : 'NULL'; $is_fulfilled = isset($entry['is_fulfilled']) ? intval($entry['is_fulfilled']) : 'NULL'; $status = isset($entry['status']) ? $entry['status'] : 'active'; global $current_user; $user_id = isset($entry['created_by']) ? absint($entry['created_by']) : ''; if (empty($user_id)) { $user_id = $current_user && $current_user->ID ? absint($current_user->ID) : 'NULL'; } $transaction_type = isset($entry['transaction_type']) ? intval($entry['transaction_type']) : 'NULL'; $lead_table = GFFormsModel::get_lead_table_name(); $result = $wpdb->query($wpdb->prepare("\n UPDATE {$lead_table}\n SET\n form_id = %d,\n post_id = {$post_id},\n date_created = {$date_created},\n is_starred = %d,\n is_read = %d,\n ip = %s,\n source_url = %s,\n user_agent = %s,\n currency = %s,\n payment_status = {$payment_status},\n payment_date = {$payment_date},\n payment_amount = {$payment_amount},\n transaction_id = {$transaction_id},\n is_fulfilled = {$is_fulfilled},\n created_by = {$user_id},\n transaction_type = {$transaction_type},\n status = %s,\n payment_method = %s\n WHERE\n id = %d\n ", $form_id, $is_starred, $is_read, $ip, $source_url, $user_agent, $currency, $status, $payment_method, $entry_id)); if (false === $result) { return new WP_Error('update_entry_properties_failed', __('There was a problem while updating the entry properties', 'gravityforms'), $wpdb->last_error); } // only save field values for fields that currently exist in the form. The rest in $entry will be ignored. The rest in $current_entry will get deleted. $lead_detail_table = GFFormsModel::get_lead_details_table_name(); $current_fields = $wpdb->get_results($wpdb->prepare("SELECT id, field_number FROM {$lead_detail_table} WHERE lead_id=%d", $entry_id)); $form = GFFormsModel::get_form_meta($form_id); foreach ($form['fields'] as $field) { /* @var GF_Field $field */ $type = GFFormsModel::get_input_type($field); if (in_array($type, array('html', 'page', 'section'))) { continue; } $inputs = $field->get_entry_inputs(); if (is_array($inputs)) { foreach ($field->inputs as $input) { $input_id = (string) $input['id']; if (isset($entry[$input_id])) { if ($entry[$input_id] != $current_entry[$input_id]) { $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $input_id); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $input_id, $entry[$input_id]); if (false === $result) { return new WP_Error('update_input_value_failed', __('There was a problem while updating one of the input values for the entry', 'gravityforms'), $wpdb->last_error); } } unset($current_entry[$input_id]); } } } else { $field_id = $field->id; $field_value = isset($entry[(string) $field_id]) ? $entry[(string) $field_id] : ''; if ($field_value != $current_entry[$field_id]) { $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $field_id); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $field_id, $field_value); if (false === $result) { return new WP_Error('update_field_values_failed', __('There was a problem while updating the field values', 'gravityforms'), $wpdb->last_error); } } unset($current_entry[$field_id]); } } // save the entry meta values - only for the entry meta currently available for the form, ignore the rest $entry_meta = GFFormsModel::get_entry_meta($form_id); if (is_array($entry_meta)) { foreach (array_keys($entry_meta) as $key) { if (isset($entry[$key])) { if ($entry[$key] != $current_entry[$key]) { gform_update_meta($entry_id, $key, $entry[$key]); } unset($current_entry[$key]); } } } // now delete remaining values from the old entry if (is_array($entry_meta)) { foreach (array_keys($entry_meta) as $meta_key) { if (isset($current_entry[$meta_key])) { gform_delete_meta($entry_id, $meta_key); unset($current_entry[$meta_key]); } } } foreach ($current_entry as $k => $v) { $lead_detail_id = GFFormsModel::get_lead_detail_id($current_fields, $k); $field = GFFormsModel::get_field($form, $k); $result = GFFormsModel::update_lead_field_value($form, $entry, $field, $lead_detail_id, $k, ''); if (false === $result) { return new WP_Error('update_field_values_failed', __('There was a problem while updating the field values', 'gravityforms'), $wpdb->last_error); } } do_action('gform_post_update_entry', $entry, $original_entry); return true; }
public function save_entry($form, &$lead, $editable_fields) { global $wpdb; gravity_flow()->log_debug(__METHOD__ . '(): Saving entry.'); $lead_detail_table = GFFormsModel::get_lead_details_table_name(); $is_new_lead = $lead == null; // Bailing if null if ($is_new_lead) { return; } $current_fields = $wpdb->get_results($wpdb->prepare("SELECT id, field_number FROM {$lead_detail_table} WHERE lead_id=%d", $lead['id'])); $total_fields = array(); /* @var $calculation_fields GF_Field[] */ $calculation_fields = array(); $recalculate_total = false; GFCommon::log_debug(__METHOD__ . '(): Saving entry fields.'); foreach ($form['fields'] as &$field) { /* @var $field GF_Field */ //Ignore fields that are marked as display only if ($field->displayOnly && $field->type != 'password') { continue; } //ignore pricing fields in the entry detail if (RG_CURRENT_VIEW == 'entry' && GFCommon::is_pricing_field($field->type)) { //continue; } //process total field after all fields have been saved if ($field->type == 'total') { $total_fields[] = $field; continue; } // process calculation fields after all fields have been saved (moved after the is hidden check) if ($field->has_calculation()) { $calculation_fields[] = $field; continue; } if (!in_array($field->id, $editable_fields)) { continue; } if (!$this->conditional_logic_editable_fields_enabled) { $field->conditionalLogic = null; } gravity_flow()->log_debug(__METHOD__ . "(): Saving field {$field->label}(#{$field->id} - {$field->type})."); if ($field->type == 'post_category') { $field = GFCommon::add_categories_as_choices($field, ''); } $inputs = $field->get_entry_inputs(); if (is_array($inputs)) { foreach ($inputs as $input) { GFFormsModel::save_input($form, $field, $lead, $current_fields, $input['id']); } } else { GFFormsModel::save_input($form, $field, $lead, $current_fields, $field->id); } } if (!empty($calculation_fields)) { foreach ($calculation_fields as $calculation_field) { gravity_flow()->log_debug(__METHOD__ . "(): Saving calculated field {$calculation_field->label}(#{$calculation_field->id} - {$calculation_field->type})."); // Make sure that the value gets recalculated $calculation_field->conditionalLogic = null; $inputs = $calculation_field->get_entry_inputs(); if (is_array($inputs)) { if (!in_array($calculation_field->id, $editable_fields)) { // Make sure calculated product names and quantities are saved as if they're submitted. $value = array($calculation_field->id . '.1' => $lead[$calculation_field->id . '.1']); $_POST['input_' . $calculation_field->id . '_1'] = $calculation_field->get_field_label(false, $value); $quantity = trim($lead[$calculation_field->id . '.3']); if ($calculation_field->disableQuantity && empty($quantity)) { $_POST['input_' . $calculation_field->id . '_3'] = 1; } else { $_POST['input_' . $calculation_field->id . '_3'] = $quantity; } } foreach ($inputs as $input) { GFFormsModel::save_input($form, $calculation_field, $lead, $current_fields, $input['id']); GFFormsModel::refresh_lead_field_value($lead['id'], $input['id']); } } else { GFFormsModel::save_input($form, $calculation_field, $lead, $current_fields, $calculation_field->id); GFFormsModel::refresh_lead_field_value($lead['id'], $calculation_field->id); } } } GFFormsModel::refresh_product_cache($form, $lead = RGFormsModel::get_lead($lead['id'])); //saving total field as the last field of the form. if (!empty($total_fields)) { foreach ($total_fields as $total_field) { gravity_flow()->log_debug(__METHOD__ . '(): Saving total field.'); GFFormsModel::save_input($form, $total_field, $lead, $current_fields, $total_field->id); GFFormsModel::refresh_lead_field_value($lead['id'], $total_field->id); } } }
/** * Used by the gform_delete_entries hook to delete any signatures for the entries currently being deleted. * * @param int $form_id The ID of the form for which the entries are being deleted. */ public function delete_entries($form_id) { $form = RGFormsModel::get_form_meta($form_id); $signature_fields = GFAPI::get_fields_by_type($form, 'signature'); if (!empty($signature_fields)) { global $wpdb; $lead_details_table_name = GFFormsModel::get_lead_details_table_name(); foreach ($signature_fields as $field) { $input_id_min = (double) $field->id - 0.0001; $input_id_max = (double) $field->id + 0.0001; $filenames = $wpdb->get_col($wpdb->prepare("SELECT value FROM {$lead_details_table_name} WHERE form_id=%d AND field_number BETWEEN %s AND %s", $form_id, $input_id_min, $input_id_max)); if (is_array($filenames)) { foreach ($filenames as $filename) { $this->delete_signature_file($filename); } } } } }
function sort_by_field_count($form_id, $searching) { global $wpdb; $search_value = isset($searching['value']) ? $searching['value'] : ''; $search_key = isset($searching['key']) ? $searching['key'] : ''; $searchfield_number_min = $search_key - 0.0001; $searchfield_number_max = $search_key + 0.9999; $lead_detail_table_name = GFFormsModel::get_lead_details_table_name(); $lead_table_name = GFFormsModel::get_lead_table_name(); $accepted_criteria = "(field_number BETWEEN '302.9999' AND '303.9999' AND value = 'Accepted' )"; $sql = "SELECT count( distinct accepted.id ) as total_count\n\t\t\t\t\t\tfrom {$lead_detail_table_name}\n\t\t\t\t\t\tINNER JOIN \n\t\t\t\t (\n\t\t\t\t SELECT\n\t\t\t\t\t\tlead_id as id\n\t\t\t\t\t\tfrom {$lead_detail_table_name}\n\t\t\t\t\t\tWHERE {$accepted_criteria}\n\t\t\t\t\t\tAND form_id in ({$form_id}) \n\t\t\t\t\t\t) accepted on {$lead_detail_table_name}.lead_id=accepted.id\n\t\t\t\t\t\tWHERE (field_number BETWEEN '{$searchfield_number_min}' AND '{$searchfield_number_max}' AND value IN ( '{$search_value}' ))\n\t\t\t\t\t\tAND form_id in ({$form_id})\n\t"; return $sql; }