From: Steve Sutton Date: Wed, 7 Jun 2017 17:47:27 +0000 (-0400) Subject: Updates for member import X-Git-Tag: v2.10.0^2~11^2~27 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=98781d4a4fe5fb599f996ee85b3a88b9af580d69;p=WP-Plugins%2Fglm-member-db.git Updates for member import I have these going into the database now: Amenities Categories Cities Counties Regions Members and profile data (w/amenities and categories) --- diff --git a/models/admin/import/index.php b/models/admin/import/index.php index 091f898e..a657d1be 100644 --- a/models/admin/import/index.php +++ b/models/admin/import/index.php @@ -36,6 +36,13 @@ class GlmMembersAdmin_import_index */ public $config; + public $regions = array(); + public $counties = array(); + public $amenities = array(); + public $categories = array(); + public $cities = array(); + public $members = array(); + /** * Constructor * @@ -92,47 +99,59 @@ class GlmMembersAdmin_import_index */ public function modelAction ($actionData = false) { - $view = 'index.html'; - $failure = false; - $option = ''; + $view = 'index.html'; + $failure = false; + $option = ''; + $clearData = false; $fileData = array( + 'Amenity' => array( + 'field' => 'amenity_file', + 'name' => 'amenityData.csv', + 'exists' => false, + 'validate' => array( 'id', 'name' ), + 'type' => 'amenity', + ), + 'Category' => array( + 'field' => 'category_file', + 'name' => 'categoryData.csv', + 'exists' => false, + 'validate' => array( 'id', 'name', 'parent' ), + 'type' => 'category', + ), 'City' => array( 'field' => 'city_file', 'name' => 'cityData.csv', 'exists' => false, - 'validate' => function( $row ) { - return ( $row === array( 'id', 'name' ) ); - }, + 'validate' => array( 'id', 'name' ), 'type' => 'city', ), 'Region' => array( 'field' => 'region_file', 'name' => 'regionData.csv', 'exists' => false, - 'validate' => function( $row ) { - return ( $row === array( 'id', 'name' ) ); - }, + 'validate' => array( 'id', 'name' ), 'type' => 'region', ), 'County' => array( 'field' => 'county_file', 'name' => 'countyData.csv', 'exists' => false, - 'validate' => function( $row ) { - return ( $row === array( 'id', 'name' ) ); - }, + 'validate' => array( 'id', 'name' ), 'type' => 'county', ), 'Member' => array( 'field' => 'member_file', 'name' => 'memberData.csv', 'exists' => false, - 'validate' => function( $row ) { - return ( $row === array( 'id', 'member_name', 'status', 'descr', 'short_descr', 'addr1', 'addr2', 'city', 'state', 'country', 'zip', 'region', 'county', 'lat', 'lon', 'phone', 'toll_free', 'url', 'reservation_url', 'email', 'logo' ) ); - }, + 'validate' => array( + 'id', 'member_name', 'status', 'descr', 'short_descr', + 'addr1', 'addr2', 'city', 'state', 'country', 'zip', + 'region', 'county', 'lat', 'lon', 'phone', 'toll_free', + 'url', 'reservation_url', 'email', 'logo', 'categories', 'amenities' ), 'type' => 'member', ), ); + $readyToProcess = false; if (isset($_REQUEST['option']) && $_REQUEST['option'] != '') { $option = $_REQUEST['option']; @@ -148,8 +167,10 @@ class GlmMembersAdmin_import_index switch( $option ) { - case 'import_files'; - $view = 'validate.html'; + case 'validate'; + $validFiles = 0; + $view = 'validate.html'; + $fileCount = count( $fileData ); // Move any files uploaded //echo '
$_FILES: ' . print_r( $_FILES, true ) . '
'; if ( isset( $_FILES ) ) { @@ -164,14 +185,35 @@ class GlmMembersAdmin_import_index if ( is_file( $uploadPath . '/' . $file['name'] ) ) { $fileData[$fileHeader]['exists'] = true; $fData = $this->readCSVFileHeaders( $uploadPath . '/' . $file['name'] ); + $isValid = ( $file['validate'] == $fData ); + if ( $isValid ) { + $validFiles++; + } $fileData[$fileHeader]['data'] = $fData; - $fileData[$fileHeader]['isValid'] = call_user_func( $file['validate'], $fData ); + $fileData[$fileHeader]['isValid'] = $isValid; } } - + $readyToProcess = ( $validFiles == $fileCount ); + $clearData = ( filter_var( $_REQUEST['clear_data'], FILTER_VALIDATE_BOOLEAN ) ); break; case 'process': + $clearData = ( filter_var( $_REQUEST['clear_data'], FILTER_VALIDATE_BOOLEAN ) ); + if ( $clearData ) { + // empty tables + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenity_ref'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenities'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenity_groups'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'grouped_amenities'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'category_member_info'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'regions'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'counties'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'files'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'images'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_detail_stats'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info'); + $this->wpdb->query('DELETE FROM ' . GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members'); + } foreach ( $fileData as $fileHeader => $file ) { if ( is_file( $uploadPath . '/' . $file['name'] ) ) { $fileData[$fileHeader]['results'] = $this->processFile( $uploadPath . '/' . $file['name'], $file['type'] ); @@ -195,9 +237,11 @@ class GlmMembersAdmin_import_index } $templateData = array( - 'data' => false, - 'fileData' => $fileData, - 'csvData' => '
$fileData: ' . print_r( $fileData, true ) . '
', + 'data' => false, + 'fileData' => $fileData, + 'clearData' => $clearData, + 'csvData' => '
$fileData: ' . print_r( $fileData, true ) . '
', + 'readyToProcess' => $readyToProcess ); // Return status, suggested view, and data to controller return array( @@ -246,13 +290,67 @@ class GlmMembersAdmin_import_index public function processFile( $fileName, $type ) { - $city = $region = $county = $member = array(); $ret = ''; switch ( $type ) { + case 'amenity': + $amenityData = $this->readCSVFile( $fileName ); + $ret .= '

Processing Amenity File

'; + foreach ( $amenityData as $data ) { + // import amenity names if not found + $amenityId = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "amenities + WHERE name = %s", + $data['name'] + ) + ); + if ( $amenityId ) { + $this->amenities[$data['id']]['new_id'] = $amenityId; + } else { + $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenities', + array( + 'name' => $data['name'] + ), + '%s' + ); + $this->amenities[$data['id']]['new_id'] = $this->wpdb->insert_id; + } + } + $ret .= '

...

'; + break; + case 'category': + $categoryData = $this->readCSVFile( $fileName ); + $ret .= '

Processing Category File

'; + foreach ( $categoryData as $data ) { + // import category names if not found + $categoryId = $this->wpdb->get_var( + $this->wpdb->prepare( + "SELECT id + FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "categories + WHERE name = %s", + $data['name'] + ) + ); + if ( $categoryId ) { + $this->categories[$data['id']]['new_id'] = $categoryId; + } else { + $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'categories', + array( + 'name' => $data['name'] + ), + '%s' + ); + $this->categories[$data['id']]['new_id'] = $this->wpdb->insert_id; + } + } + $ret .= '

...

'; + break; case 'city': $cityData = $this->readCSVFile( $fileName ); $ret .= '

Processing City File

'; - $ret .= '
$cityData: ' . print_r( $cityData, true ) . '
'; foreach ( $cityData as $data ) { // import city names if not found $cityId = $this->wpdb->get_var( @@ -264,7 +362,7 @@ class GlmMembersAdmin_import_index ) ); if ( $cityId ) { - $city[$data['id']]['new_id'] = $cityId; + $this->cities[$data['id']]['new_id'] = $cityId; } else { $this->wpdb->insert( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'cities', @@ -273,15 +371,14 @@ class GlmMembersAdmin_import_index ), '%s' ); - $city[$data['id']]['new_id'] = $this->wpdb->insert_id; + $this->cities[$data['id']]['new_id'] = $this->wpdb->insert_id; } } - $ret .= '
$city: ' . print_r( $city, true ) . '
'; + $ret .= '

...

'; break; case 'region': $regionData = $this->readCSVFile( $fileName ); $ret .= '

Processing Region File

'; - $ret .= '
$regionData: ' . print_r( $regionData, true ) . '
'; foreach ( $regionData as $data ) { // import region names if not found $regionId = $this->wpdb->get_var( @@ -294,7 +391,7 @@ class GlmMembersAdmin_import_index ) ); if ( $regionId ) { - $region[$data['id']]['new_id'] = $regionId; + $this->regions[$data['id']]['new_id'] = $regionId; } else { $this->wpdb->insert( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'regions', @@ -305,14 +402,14 @@ class GlmMembersAdmin_import_index ), '%s' ); - $region[$data['id']]['new_id'] = $this->wpdb->insert_id; + $this->regions[$data['id']]['new_id'] = $this->wpdb->insert_id; } } - $ret .= '
$region: ' . print_r( $region, true ) . '
'; + $ret .= '

...

'; break; case 'county': $countyData = $this->readCSVFile( $fileName ); - $ret = '
$countyData: ' . print_r( $countyData, true ) . '
'; + $ret .= '

Processing County File

'; foreach ( $countyData as $data ) { // import county names if not found $countyId = $this->wpdb->get_var( @@ -325,7 +422,7 @@ class GlmMembersAdmin_import_index ) ); if ( $countyId ) { - $county[$data['id']]['new_id'] = $countyId; + $this->counties[$data['id']]['new_id'] = $countyId; } else { $this->wpdb->insert( GLM_MEMBERS_PLUGIN_DB_PREFIX . 'counties', @@ -336,14 +433,14 @@ class GlmMembersAdmin_import_index ), '%s' ); - $county[$data['id']]['new_id'] = $this->wpdb->insert_id; + $this->counties[$data['id']]['new_id'] = $this->wpdb->insert_id; } } - $ret .= '
$county: ' . print_r( $county, true ) . '
'; + $ret .= '

...

'; break; case 'member': $memberData = $this->readCSVFile( $fileName ); - $ret = '
$memberData: ' . print_r( $memberData, true ) . '
'; + $ret .= '

Processing Member File

'; // Get default member type $memberTypeId = $this->wpdb->get_var( $this->wpdb->prepare( @@ -364,6 +461,7 @@ class GlmMembersAdmin_import_index ); $memberTypeId = $this->mpdb->insert_id; } + $dupeNames = 0; foreach ( $memberData as $data ) { // Check for duplicate member $memberId = $this->wpdb->get_var( @@ -375,88 +473,143 @@ class GlmMembersAdmin_import_index ) ); if ( $memberId ) { - $member[$data['id']]['new_id'] = $memberId; - } else { - $access = $this->config['access_numb']['Moderated']; - $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members', - array( - 'access' => $access, - 'member_type' => $memberTypeId, - 'created' => date( 'Y-m-d' ), - 'name' => $data['member_name'], - 'member_slug' => sanitize_title( $data['member_name'] ), - 'old_member_id' => $data['id'] - ), - array( - '%d', - '%d', - '%s', - '%s', - '%s', - '%d' - ) - ); - $memberId = $this->wpdb->insert_id; - $member[$data['id']]['new_id'] = $this->wpdb->insert_id; + // We need to get a unique name for this member + $dupeNames++; + $data['member_name'] .= ' DUPE-' . $dupeNames; + } + $access = $this->config['access_numb']['Moderated']; + $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members', + array( + 'access' => $access, + 'member_type' => $memberTypeId, + 'created' => date( 'Y-m-d' ), + 'name' => $data['member_name'], + 'member_slug' => sanitize_title( $data['member_name'] ), + 'old_member_id' => $data['id'] + ), + array( + '%d', + '%d', + '%s', + '%s', + '%s', + '%d' + ) + ); + $memberId = $this->wpdb->insert_id; + $this->members[$data['id']]['new_id'] = $this->wpdb->insert_id; + // Add the member info record + $insert = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info', + array( + 'member' => $memberId, + 'member_name' => $data['member_name'], + 'status' => $this->config['status_numb']['Active'], + 'reference_name' => 'Imported Member Information', + 'descr' => $data['descr'], + 'short_descr' => $data['short_descr'], + 'addr1' => $data['addr1'], + 'addr2' => $data['addr2'], + 'city' => ((isset($data['city']) && isset($this->cities[$data['city']]['new_id'])) ? $this->cities[$data['city']]['new_id']: 0), + 'state' => $data['state'], + 'country' => $data['country'], + 'region' => ((isset($data['region']) && isset($this->regions[$data['region']]['new_id'])) ? $this->regions[$data['region']]['new_id']: 0), + 'county' => ((isset($data['county']) && isset($this->counties[$data['county']]['new_id'])) ? $this->counties[$data['county']]['new_id']: 0), + 'zip' => $data['zip'], + 'lat' => $data['lat'], + 'lon' => $data['lon'], + 'phone' => $data['phone'], + 'toll_free' => $data['toll_free'], + 'url' => $data['url'], + 'email' => $data['email'], + 'logo' => $data['logo'], + 'notes' => '', + 'create_time' => date( 'Y-m-d' ), + 'modify_time' => date( 'Y-m-d' ), + ), + array( + '%d', + '%s', + '%d', + '%s', + '%s', + '%s', + '%s', + '%s', + '%d', + '%s', + '%s', + '%d', + '%d', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + '%s', + ) + ); + if ( !$insert ) { + echo '
$data: ' . print_r( $data, true ) . '
'; + die( 'Error importing member data' ); + } + // get last id for member_info table to use for profile id + $profileId = $this->wpdb->insert_id; + // Setup the categories for this profile record + if ( $data['categories'] ) { + $categories = explode( ',', $data['categories'] ); + foreach ( $categories as $catData ) { + if ( $catId = filter_var( $catData, FILTER_VALIDATE_INT ) ) { + $catMembInfId = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'category_member_info', + array( + 'category' => $this->categories[$catId]['new_id'], + 'member_info' => $profileId + ), + array( + '%d', + '%d' + ) + ); + if ( !$catMembInfId ) { + die('Something wrong no insert to category_member_info table'); + } + } + } + } + // Setup the amenities for this profile record + if ( $data['amenities'] ) { + $amenities = explode( ',', $data['amenities'] ); + foreach ( $amenities as $amenData ) { + if ( $amenData = filter_var( $amenData, FILTER_VALIDATE_INT ) ) { + $amenRefId = $this->wpdb->insert( + GLM_MEMBERS_PLUGIN_DB_PREFIX . 'amenity_ref', + array( + 'amenity' => $this->amenities[$amenData]['new_id'], + 'ref_type' => $this->config['ref_type_numb']['MemberInfo'], + 'ref_dest' => $profileId + ), + array( + '%d', + '%d', + '%d', + ) + ); + if ( !$amenRefId ) { + die('Something wrong no insert to amenity_ref table'); + } + } + } } } - // Add the member info record - $this->wpdb->insert( - GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info', - array( - 'member' => $memberId, - 'member_name' => $data['member_name'], - 'status' => $this->config['status_numb']['Active'], - 'reference_name' => 'Imported Member Information', - 'descr' => $data['descr'], - 'short_descr' => $data['short_descr'], - 'addr1' => $data['addr1'], - 'addr2' => $data['addr2'], - 'city' => ((isset($data['city']) && isset($city[$data['city']]['new_id'])) ? $city[$data['city']]['new_id']: 0), - 'state' => $data['state'], - 'country' => $data['country'], - 'region' => ((isset($data['region']) && isset($region[$data['region']]['new_id'])) ? $region[$data['region']]['new_id']: 0), - 'county' => $data['county'], - 'zip' => $data['zip'], - 'lat' => $data['lat'], - 'lon' => $data['lon'], - 'phone' => $data['phone'], - 'toll_free' => $data['toll_free'], - 'url' => $data['url'], - 'email' => $data['email'], - 'logo' => $data['logo'], - 'notes' => '', - 'create_time' => date( 'Y-m-d' ), - 'modify_time' => date( 'Y-m-d' ), - ), - array( - '%d', - '%s', - '%d', - '%s', - '%s', - '%s', - '%s', - '%s', - '%d', - '%s', - '%s', - '%d', - '%d', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - '%s', - ) - ); + //$ret .= '
$this->members: ' . print_r( $this->members, true ) . '
'; + $ret .= '

...

'; break; default: break; diff --git a/views/admin/import/index.html b/views/admin/import/index.html index 4ce1eea2..521c3394 100644 --- a/views/admin/import/index.html +++ b/views/admin/import/index.html @@ -4,7 +4,7 @@
- + {foreach $fileData as $fileHeader => $file} @@ -25,6 +25,13 @@ {/foreach} + + + +
Clear Data + + +
diff --git a/views/admin/import/process.html b/views/admin/import/process.html index 9abc56b5..98676f5f 100644 --- a/views/admin/import/process.html +++ b/views/admin/import/process.html @@ -11,7 +11,6 @@ {/foreach} - Process Files {include file='admin/footer.html'} diff --git a/views/admin/import/validate.html b/views/admin/import/validate.html index 84610f7e..b4c1b554 100644 --- a/views/admin/import/validate.html +++ b/views/admin/import/validate.html @@ -20,7 +20,21 @@ {/foreach} - Process Files + {if $clearData} + + + All Member Data will be cleared before importing any files. + + + {/if} + + {if $readyToProcess} + + + Process Files + + + {/if} {include file='admin/footer.html'}