From: Steve Sutton Date: Fri, 22 Jul 2016 17:46:35 +0000 (-0400) Subject: DB updates and getting the leads and interest fields to import. X-Git-Tag: v1.0.0^2~11 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=fa69e9ae2b42a97c52be55cd8e120495c6fc5002;p=WP-Plugins%2Fglm-member-db-leads.git DB updates and getting the leads and interest fields to import. For importing of the interest fields from the forms I setup new table for linking the gravity form field id to the interest. This is so we don't have duplicate named interest but can figure out which ones are coming from the gravity form on the GF import. GP import does 200 at a time now. --- diff --git a/index.php b/index.php index f16f667..1a47576 100644 --- a/index.php +++ b/index.php @@ -38,7 +38,7 @@ * version from this plugin. */ define('GLM_MEMBERS_LEADS_PLUGIN_VERSION', '0.0.1'); -define('GLM_MEMBERS_LEADS_PLUGIN_DB_VERSION', '0.0.4'); +define('GLM_MEMBERS_LEADS_PLUGIN_DB_VERSION', '0.0.6'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_LEADS_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.0.5'); diff --git a/models/admin/management/leads.php b/models/admin/management/leads.php index 05c228c..d53f9b8 100644 --- a/models/admin/management/leads.php +++ b/models/admin/management/leads.php @@ -125,7 +125,7 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement $import_fields = false; $importing = false; $option_name = GLM_MEMBERS_LEADS_PLUGIN_IMPORT_OPTION; - $page_size = 20; + $page_size = 200; $offset = false; $next_offset = false; @@ -155,15 +155,13 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement switch( $option2 ) { case 'import': + $total_imported_leads = 0; $result = ''; if ( isset( $_REQUEST['form_id'] ) ) { $form_id = filter_var( $_REQUEST['form_id'], FILTER_VALIDATE_INT ); - //$result = '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; } if ( $form_id ) { $form = GFAPI::get_form( $form_id ); - //$result = '
$form: ' . print_r( $form, true ) . '
'; - //$result = '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; } if ( $form_id ) { $option_name = GLM_MEMBERS_LEADS_PLUGIN_IMPORT_OPTION . '_form_' . $form_id; @@ -203,15 +201,18 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement $paging = array( 'offset' => $offset, 'page_size' => $page_size ); $total_count = 0; $entries = GFAPI::get_entries( $form_id, $search_criteria, $sorting, $paging, $total_count ); - $result = '
$import_fields: ' . print_r( $import_fields, true ) . '
'; - //$result .= '
$_REQUEST: ' . print_r( $_REQUEST, true ) . '
'; + $result = ''; + //$result = '
$import_fields: ' . print_r( $import_fields, true ) . '
'; $result .= '

Total Count: ' . $total_count . '

'; - //$result .= '
$entries: ' . print_r( $entries, true ) . '
'; if ( $entries ) { foreach ( $entries as $entry ) { - $this->addEntry( $entry, $import_fields ); + if ($this->addEntry( $entry, $import_fields ) ) { + ++$total_imported_leads; + } } } + $result .= '

Importing ' . $offset . ' - ' . $next_offset . '

'; + $result .= '

Total Leads Imported: ' . $total_imported_leads . '

'; } else { $next_offset = 0; /* If your here then it is the first page after the form setup @@ -227,7 +228,6 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement $this->addInterestGroup( $form, $group_id, $group_name ); } } - //$result .= '
$form: ' . print_r( $form, true ) . '
'; // anything in this $array_diff will be our new interest_groups } @@ -239,7 +239,6 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement default: $forms = GFAPI::get_forms(); - //$result = '
$forms: ' . print_r( $forms, true ) . '
'; break; } @@ -279,7 +278,6 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement case 'checkbox': if ( isset( $fields['inputs'] ) && is_array( $fields['inputs'] ) && !empty( $fields['inputs'] ) ) { $interests = $fields['inputs']; - //echo '
$fields[inputs]: ' . print_r( $fields['inputs'], true ) . '
'; } break; } @@ -293,7 +291,13 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement throw Exception( 'Group not added' ); } foreach ( $interests as $interest ) { - $this->addInterest( $group_id, $interest['id'], $interest['label'] ); + $int_object = array( + 'group_id' => $group_id, + 'gf_field_id' => $interest['id'], + 'name' => $interest['label'], + 'form_id' => $form['id'] + ); + $this->addInterest( $int_object ); } } } @@ -345,9 +349,22 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement * * @return int The id of the Interest */ - public function addInterest( $group_id, $gf_field_id, $name ) { + public function addInterest( $object ) { + $group_id = $object['group_id']; + $gf_field_id = $object['gf_field_id']; + $name = $object['name']; + $form_id = $object['form_id']; + if ( !filter_var( $group_id, FILTER_VALIDATE_INT ) ) { + return false; + } + if ( !filter_var( $form_id, FILTER_VALIDATE_INT ) ) { + return false; + } + if ( !$gf_field_id ) { + return false; + } // check for this interest first. - $interest = $this->wpdb->get_var( + $interest_id = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT id FROM " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . "interests @@ -357,8 +374,31 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement $group_id ) ); - if ( $interest ) { - return $interest; + if ( $interest_id ) { + // Check if the interest has the gf_interests for it. + $gf_interests_id = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . "gf_interests + WHERE form_id = %d + AND gf_field_id = %s", + $form_id, + $gf_field_id + ) + ); + if ( !$gf_interests_id ) { + // add the record for the gf_field_id + $this->wpdb->insert( + GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'gf_interests', + array( + 'interest_id' => $interest_id, + 'gf_field_id' => $gf_field_id, + 'form_id' => $form_id + ), + array( '%d', '%s', '%d' ) + ); + } + return $interest_id; } else { // It is not in the db so add it. $this->wpdb->insert( @@ -370,30 +410,66 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement ), array( '%s', '%d', '%s' ) ); - return $this->wpdb->insert_id; + $interest_id = $this->wpdb->insert_id; + // add the record for the gf_field_id + $this->wpdb->insert( + GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'gf_interests', + array( + 'interest_id' => $interest_id, + 'gf_field_id' => $gf_field_id, + 'form_id' => $form_id + ), + array( '%d', '%s', '%d' ) + ); + return $interest_id; } } + /** + * addEntry + * + * @param mixed $entry + * @param mixed $import_fields + * + * @access public + * @return boolean True if added false if not + */ public function addEntry( $entry, $import_fields ) { $lead = array(); $mapped_keys = $this->config['mapped_keys']; if ( $entry ) { $entry = array_filter( $entry ); - echo '
$entry: ' . print_r( $entry, true ) . '
'; foreach ( $import_fields as $field_id => $mapped_name ) { if ( isset( $entry[$field_id] ) ) { $lead[$mapped_name] = $entry[$field_id]; } } - echo '
$lead: ' . print_r( $lead, true ) . '
'; // If they don't have email then we cannot add them into leads table. if ( !isset( $lead['email'] ) ) { return false; } $member_lead_id = $this->addMemberLead( $lead ); - echo '
$member_lead_id: ' . print_r( $member_lead_id, true ) . '
'; - + if ( $member_lead_id ) { + // see if the gf_entry_id is already in + $entry_id = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . "lead_entry + WHERE gf_entry_id = %d", + $entry['id'] + ) + ); + if ( !$entry_id ) { + $entry_id = $this->addMemberLeadEntry( $member_lead_id, $lead, $entry ); + } + if ( $entry_id ) { + // now we can add the interest field for the entry record + $this->addMemberLeadInterests( $entry_id, $entry ); + return true; + } + } } + return false; } /** * addMemberLead @@ -427,14 +503,39 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'leads', array( 'email' => $lead['email'], - 'mail_ok' => ( $lead['mail_ok'] ) ? 1 : 0, + 'mail_ok' => ( $lead['mail_ok'] ) ? 1 : 0, 'member_ok' => ( $lead['member_ok'] ) ? 1 : 0, + 'created' => current_time( 'mysql' ), ), - array( '%s', '%s', '%s' ) + '%s' ); return $this->wpdb->insert_id; } } + public function getSourceId( $form_id ) { + $source_id = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . "sources + WHERE form_id = %d", + $form_id + ) + ); + if ( $source_id ) { + return $source_id; + } + // If no source_id then we have to add the new source and return id. + $form = GFAPI::get_form( $form_id ); + $this->wpdb->insert( + GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'sources', + array( + 'title' => $form['title'], + 'form_id' => $form_id, + ), + array( '%s', '%d' ) + ); + return $this->wpdb->insert_id; + } /** * addMemberLeadEntry * @@ -452,24 +553,96 @@ class GlmMembersAdmin_management_leads // extends GlmDataLeadsManagement if ( !isset( $lead ) || !is_array( $lead ) ) { return false; } + $source_id = $this->getSourceId( $entry['form_id'] ); $this->wpdb->insert( GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'lead_entry', array( - 'fname' => '', - 'lname' => '', - 'org' => '', - 'addr1' => '', - 'addr2' => '', - 'city' => '', - 'state' => '', - 'zip' => '', - 'country' => '', - 'phone' => '', - 'phone2' => '', - 'fax' => '', - 'user_trace_info' => '', + 'source_id' => $source_id, + 'lead_id' => $lead_id, + 'gf_entry_id' => $entry['id'], + 'fname' => ( ( $lead['fname'] ) ? $lead['fname'] : ''), + 'lname' => ( ( $lead['lname'] ) ? $lead['lname'] : ''), + 'org' => ( ( $lead['org'] ) ? $lead['org'] : ''), + 'addr1' => ( ( $lead['addr1'] ) ? $lead['addr1'] : ''), + 'addr2' => ( ( $lead['addr2'] ) ? $lead['addr2'] : ''), + 'city' => ( ( $lead['city'] ) ? $lead['city'] : ''), + 'state' => ( ( $lead['state'] ) ? $lead['state'] : ''), + 'zip' => ( ( $lead['zip'] ) ? $lead['zip'] : ''), + 'country' => ( ( $lead['country'] ) ? $lead['country'] : ''), + 'phone' => ( ( $lead['phone'] ) ? $lead['phone'] : ''), + 'phone2' => ( ( $lead['phone2'] ) ? $lead['phone2'] : ''), + 'fax' => ( ( $lead['fax'] ) ? $lead['fax'] : ''), + 'date_submitted' => current_time( 'mysql' ), + 'user_trace_info' => $entry['ip'], ), - array() + array( + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + ) + ); + return $this->wpdb->insert_id; + } + public function getMembersInterests( $form_id ) { + static $interest = array(); + if ( empty( $interest ) ) { + $ints = $this->wpdb->get_results( + $this->wpdb->prepare( + "SELECT i.id, gfi.gf_field_id + FROM " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . "interests i, + " . GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX. "gf_interests gfi + WHERE gfi.form_id = %d + AND gfi.interest_id = i.id", + $form_id + ), + ARRAY_A + ); + if ( $ints ) { + foreach ( $ints as $in ) { + $interest[$in['gf_field_id']] = $in['id']; + } + } + } + return $interest; + } + public function addMemberLeadInterests( $entry_id, $entry ) { + if ( !filter_var( $entry_id, FILTER_VALIDATE_INT ) ) { + return false; + } + if ( !is_array( $entry ) || empty( $entry ) ) { + return false; + } + $interest = $this->getMembersInterests( $entry['form_id'] ); + $interest_keys = array_keys( $interest ); + // Delete the old ones + $this->wpdb->delete( + GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'lead_interests', + array( 'lead_entry_id' => $entry_id ), + array( '%d' ) ); + foreach ( $entry as $fkey => $fvalue ) { + if ( in_array( $fkey, $interest_keys ) ) { + $this->wpdb->insert( + GLM_MEMBERS_LEADS_PLUGIN_DB_PREFIX . 'lead_interests', + array( + 'interest_id' => $interest[$fkey], + 'lead_entry_id' => $entry_id + ), + '%d' + ); + } + } } } diff --git a/setup/databaseScripts/create_database_V0.0.4.sql b/setup/databaseScripts/create_database_V0.0.4.sql index c03cdf9..c6ed18c 100644 --- a/setup/databaseScripts/create_database_V0.0.4.sql +++ b/setup/databaseScripts/create_database_V0.0.4.sql @@ -43,6 +43,7 @@ CREATE TABLE {prefix}lead_entry ( id INT NOT NULL AUTO_INCREMENT, source_id SMALLINT NULL, -- Pointer to sources entry - Form used to submit lead data lead_id INTEGER NULL, -- Pointer to lead - all submissions for same E-Mail address point to same leads entry + gf_entry_id INTEGER NULL, -- Reference to Gravity Form Entry fname TINYTEXT NULL, -- First Name lname TINYTEXT NULL, -- Last Name org TINYTEXT NULL, -- Organization name @@ -80,23 +81,36 @@ CREATE TABLE {prefix}interest_groups ( ---- --- Interests - Used to buil Interest fields in forms - Forms use ID as value +-- Interests - Used to build Interest fields in forms - Forms use ID as value CREATE TABLE {prefix}interests ( id INT NOT NULL AUTO_INCREMENT, title TINYTEXT NULL, -- Title group_id SMALLINT NULL, -- Pointer to interest group - gf_field_id TINYTEXT NULL, -- The field id from gravity forms for this interest PRIMARY KEY (id), INDEX (group_id) ); ---- +-- GF Interests - Used to relate the Gravity Form field id for interests +CREATE TABLE {prefix}gf_interests ( + id INT NOT NULL AUTO_INCREMENT, + interest_id INTEGER NULL, -- Id for the interests + gf_field_id TINYTEXT NULL, -- The field id from gravity forms for this interest + form_id INT NULL, -- The Gravity Form Id + PRIMARY KEY (id), + INDEX (gf_field_id(6)), + INDEX (interest_id), + INDEX (form_id) +); + +---- + -- Lead Interests - many to one links to lead-entry table CREATE TABLE {prefix}lead_interests ( id INT NOT NULL AUTO_INCREMENT, interest_id SMALLINT NULL, -- Pointer to Interest table - lead_entry_id INTEGER NULL, -- Pointer to lead_entry table + lead_entry_id INTEGER NULL, -- Pointer to lead_entry table PRIMARY KEY (id), INDEX (interest_id), INDEX (lead_entry_id) diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 3a628d2..7ffdae4 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -18,5 +18,7 @@ $glmMembersLeadsDbVersions = array( '0.0.2' => array('version' => '0.0.2', 'tables' => 10, 'date' => '7/12/2016'), '0.0.3' => array('version' => '0.0.3', 'tables' => 10, 'date' => '7/19/2016'), '0.0.4' => array('version' => '0.0.4', 'tables' => 10, 'date' => '7/21/2016'), + '0.0.5' => array('version' => '0.0.5', 'tables' => 10, 'date' => '7/22/2016'), + '0.0.6' => array('version' => '0.0.6', 'tables' => 11, 'date' => '7/22/2016'), ); diff --git a/setup/databaseScripts/update_database_V0.0.5.sql b/setup/databaseScripts/update_database_V0.0.5.sql new file mode 100644 index 0000000..d2f2973 --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.5.sql @@ -0,0 +1,11 @@ +-- Gaslight Media Members Database - Events Add-On +-- File Created: 16/07/19 16:16:16 +-- Database Version: 0.0.3 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashses + + +-- Add form_id +ALTER TABLE {prefix}lead_entry ADD COLUMN gf_entry_id INTEGER DEFAULT NULL; diff --git a/setup/databaseScripts/update_database_V0.0.6.sql b/setup/databaseScripts/update_database_V0.0.6.sql new file mode 100644 index 0000000..b5f6ab9 --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.6.sql @@ -0,0 +1,24 @@ +-- Gaslight Media Members Database - Events Add-On +-- File Created: 16/07/19 16:16:16 +-- Database Version: 0.0.3 +-- Database Update From Previous Version Script +-- +-- To permit each query below to be executed separately, +-- all queries must be separated by a line with four dashes + +-- drop column for gf_field_id +ALTER TABLE {prefix}interests DROP COLUMN gf_field_id; + +---- + +-- GF Interests - Used to relate the Gravity Form field id for interests +CREATE TABLE {prefix}gf_interests ( + id INT NOT NULL AUTO_INCREMENT, + interest_id INTEGER NULL, -- Id for the interests + gf_field_id TINYTEXT NULL, -- The field id from gravity forms for this interest + form_id INT NULL, -- The Gravity Form Id + PRIMARY KEY (id), + INDEX (gf_field_id(6)), + INDEX (interest_id), + INDEX (form_id) +); diff --git a/setup/frontHooks.php b/setup/frontHooks.php index a3279ed..6411622 100644 --- a/setup/frontHooks.php +++ b/setup/frontHooks.php @@ -50,11 +50,12 @@ add_filter( 'gform_pre_render', function( $form ) { ); foreach ( $form['fields'] as $k => $v ) { $inputs = $choices = array(); - if ( $v['type'] == 'leads' ) { + $groupData = new GlmDataInterestGroups( $this->wpdb, $this->config ); + $groups = $groupData->getList(); + switch ( $v['type'] ) { + case 'leads': $form_enabled = true; // check the inputName to see if it matches a group - $groupData = new GlmDataInterestGroups( $this->wpdb, $this->config ); - $groups = $groupData->getList(); if ( $groups ) { foreach ( $groups as $group ) { if ( $v['inputName'] == $group['title'] ) { @@ -82,7 +83,9 @@ add_filter( 'gform_pre_render', function( $form ) { } } } - + break; + case 'checkbox': + break; } } if ( !$result ) {