*/
public $config;
+ public $regions = array();
+ public $counties = array();
+ public $amenities = array();
+ public $categories = array();
+ public $cities = array();
+ public $members = array();
+
/**
* Constructor
*
*/
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'];
switch( $option ) {
- case 'import_files';
- $view = 'validate.html';
+ case 'validate';
+ $validFiles = 0;
+ $view = 'validate.html';
+ $fileCount = count( $fileData );
// Move any files uploaded
//echo '<pre>$_FILES: ' . print_r( $_FILES, true ) . '</pre>';
if ( isset( $_FILES ) ) {
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'] );
}
$templateData = array(
- 'data' => false,
- 'fileData' => $fileData,
- 'csvData' => '<pre>$fileData: ' . print_r( $fileData, true ) . '</pre>',
+ 'data' => false,
+ 'fileData' => $fileData,
+ 'clearData' => $clearData,
+ 'csvData' => '<pre>$fileData: ' . print_r( $fileData, true ) . '</pre>',
+ 'readyToProcess' => $readyToProcess
);
// Return status, suggested view, and data to controller
return array(
public function processFile( $fileName, $type )
{
- $city = $region = $county = $member = array();
$ret = '';
switch ( $type ) {
+ case 'amenity':
+ $amenityData = $this->readCSVFile( $fileName );
+ $ret .= '<p>Processing Amenity File</p>';
+ 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 .= '<p>...</p>';
+ break;
+ case 'category':
+ $categoryData = $this->readCSVFile( $fileName );
+ $ret .= '<p>Processing Category File</p>';
+ 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 .= '<p>...</p>';
+ break;
case 'city':
$cityData = $this->readCSVFile( $fileName );
$ret .= '<p>Processing City File</p>';
- $ret .= '<pre>$cityData: ' . print_r( $cityData, true ) . '</pre>';
foreach ( $cityData as $data ) {
// import city names if not found
$cityId = $this->wpdb->get_var(
)
);
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',
),
'%s'
);
- $city[$data['id']]['new_id'] = $this->wpdb->insert_id;
+ $this->cities[$data['id']]['new_id'] = $this->wpdb->insert_id;
}
}
- $ret .= '<pre>$city: ' . print_r( $city, true ) . '</pre>';
+ $ret .= '<p>...</p>';
break;
case 'region':
$regionData = $this->readCSVFile( $fileName );
$ret .= '<p>Processing Region File</p>';
- $ret .= '<pre>$regionData: ' . print_r( $regionData, true ) . '</pre>';
foreach ( $regionData as $data ) {
// import region names if not found
$regionId = $this->wpdb->get_var(
)
);
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',
),
'%s'
);
- $region[$data['id']]['new_id'] = $this->wpdb->insert_id;
+ $this->regions[$data['id']]['new_id'] = $this->wpdb->insert_id;
}
}
- $ret .= '<pre>$region: ' . print_r( $region, true ) . '</pre>';
+ $ret .= '<p>...</p>';
break;
case 'county':
$countyData = $this->readCSVFile( $fileName );
- $ret = '<pre>$countyData: ' . print_r( $countyData, true ) . '</pre>';
+ $ret .= '<p>Processing County File</p>';
foreach ( $countyData as $data ) {
// import county names if not found
$countyId = $this->wpdb->get_var(
)
);
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',
),
'%s'
);
- $county[$data['id']]['new_id'] = $this->wpdb->insert_id;
+ $this->counties[$data['id']]['new_id'] = $this->wpdb->insert_id;
}
}
- $ret .= '<pre>$county: ' . print_r( $county, true ) . '</pre>';
+ $ret .= '<p>...</p>';
break;
case 'member':
$memberData = $this->readCSVFile( $fileName );
- $ret = '<pre>$memberData: ' . print_r( $memberData, true ) . '</pre>';
+ $ret .= '<p>Processing Member File</p>';
// Get default member type
$memberTypeId = $this->wpdb->get_var(
$this->wpdb->prepare(
);
$memberTypeId = $this->mpdb->insert_id;
}
+ $dupeNames = 0;
foreach ( $memberData as $data ) {
// Check for duplicate member
$memberId = $this->wpdb->get_var(
)
);
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 '<pre>$data: ' . print_r( $data, true ) . '</pre>';
+ 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 .= '<pre>$this->members: ' . print_r( $this->members, true ) . '</pre>';
+ $ret .= '<p>...</p>';
break;
default:
break;