Exemple #1
0
 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;
 }
Exemple #2
0
 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));
 }
Exemple #6
0
 /**
  * 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;
}
Exemple #9
0
 /**
  * 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;
}
Exemple #11
0
 /**
  * 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;
}