/**
  * check for duplicate entries created in the last minute
  * @return boolean
  */
 public static function is_duplicate($new_values, $values)
 {
     if (defined('WP_IMPORTING') && WP_IMPORTING) {
         return false;
     }
     $duplicate_entry_time = apply_filters('frm_time_to_check_duplicates', 60, $new_values);
     if (empty($duplicate_entry_time)) {
         return false;
     }
     $check_val = $new_values;
     $check_val['created_at >'] = date('Y-m-d H:i:s', strtotime($new_values['created_at']) - absint($duplicate_entry_time));
     unset($check_val['created_at'], $check_val['updated_at']);
     unset($check_val['is_draft'], $check_val['id'], $check_val['item_key']);
     if ($new_values['item_key'] == $new_values['name']) {
         unset($check_val['name']);
     }
     global $wpdb;
     $entry_exists = FrmDb::get_col($wpdb->prefix . 'frm_items', $check_val, 'id', array('order_by' => 'created_at DESC'));
     if (!$entry_exists || empty($entry_exists) || !isset($values['item_meta'])) {
         return false;
     }
     $is_duplicate = false;
     foreach ($entry_exists as $entry_exist) {
         $is_duplicate = true;
         //add more checks here to make sure it's a duplicate
         $metas = FrmEntryMeta::get_entry_meta_info($entry_exist);
         $field_metas = array();
         foreach ($metas as $meta) {
             $field_metas[$meta->field_id] = $meta->meta_value;
         }
         // If prev entry is empty and current entry is not, they are not duplicates
         $filtered_vals = array_filter($values['item_meta']);
         if (empty($field_metas) && !empty($filtered_vals)) {
             return false;
         }
         $diff = array_diff_assoc($field_metas, array_map('maybe_serialize', $values['item_meta']));
         foreach ($diff as $field_id => $meta_value) {
             if (!empty($meta_value)) {
                 $is_duplicate = false;
                 continue;
             }
         }
         if ($is_duplicate) {
             break;
         }
     }
     return $is_duplicate;
 }
 function create($values)
 {
     global $wpdb, $frmdb, $frm_entry_meta;
     $new_values = array();
     $new_values['item_key'] = FrmAppHelper::get_unique_key($values['item_key'], $frmdb->entries, 'item_key');
     $new_values['name'] = isset($values['name']) ? $values['name'] : $values['item_key'];
     $new_values['ip'] = $_SERVER['REMOTE_ADDR'];
     if (isset($values['description']) and !empty($values['description'])) {
         $new_values['description'] = $values['description'];
     } else {
         $referrerinfo = FrmAppHelper::get_referer_info();
         $new_values['description'] = serialize(array('browser' => $_SERVER['HTTP_USER_AGENT'], 'referrer' => $referrerinfo));
     }
     $new_values['form_id'] = isset($values['form_id']) ? (int) $values['form_id'] : null;
     $new_values['created_at'] = $new_values['updated_at'] = isset($values['created_at']) ? $values['created_at'] : current_time('mysql', 1);
     //if(isset($values['id']) and is_numeric($values['id']))
     //    $new_values['id'] = $values['id'];
     if (isset($values['frm_user_id']) and is_numeric($values['frm_user_id'])) {
         $new_values['user_id'] = $new_values['updated_by'] = $values['frm_user_id'];
     } else {
         global $user_ID;
         if ($user_ID) {
             $new_values['user_id'] = $new_values['updated_by'] = $user_ID;
         }
     }
     //check for duplicate entries created in the last 5 minutes
     $create_entry = true;
     if (!defined('WP_IMPORTING')) {
         $check_val = $new_values;
         $check_val['created_at >'] = date('Y-m-d H:i:s', strtotime($new_values['created_at']) - 60 * 60 * 5);
         unset($check_val['created_at']);
         unset($check_val['id']);
         unset($check_val['item_key']);
         if ($new_values['item_key'] == $new_values['name']) {
             unset($check_val['name']);
         }
         $entry_exists = $frmdb->get_records($frmdb->entries, $check_val, 'created_at DESC', '', 'id');
         if ($entry_exists and !empty($entry_exists)) {
             foreach ($entry_exists as $entry_exist) {
                 if ($create_entry) {
                     $create_entry = false;
                     //add more checks here to make sure it's a duplicate
                     if (isset($values['item_meta'])) {
                         $metas = FrmEntryMeta::get_entry_meta_info($entry_exist->id);
                         $field_metas = array();
                         foreach ($metas as $meta) {
                             $field_metas[$meta->field_id] = $meta->meta_value;
                         }
                         $diff = array_diff_assoc($field_metas, $values['item_meta']);
                         foreach ($diff as $field_id => $meta_value) {
                             if (!empty($meta_value) and !$create_entry) {
                                 $create_entry = true;
                             }
                         }
                     }
                 }
             }
         }
     }
     if ($create_entry) {
         $query_results = $wpdb->insert($frmdb->entries, $new_values);
     }
     if (isset($query_results) and $query_results) {
         $entry_id = $wpdb->insert_id;
         global $frm_saved_entries;
         $frm_saved_entries[] = (int) $entry_id;
         if (isset($values['item_meta'])) {
             $frm_entry_meta->update_entry_metas($entry_id, $values['item_meta']);
         }
         do_action('frm_after_create_entry', $entry_id, $new_values['form_id']);
         return $entry_id;
     } else {
         return false;
     }
 }