Working on update member data from csv import files
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 22 Feb 2019 21:48:51 +0000 (16:48 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 22 Feb 2019 21:48:51 +0000 (16:48 -0500)
Updating the import script to also do member and member info updates

models/admin/import/index.php

index e2d34db..8182b9b 100644 (file)
@@ -1204,79 +1204,112 @@ class GlmMembersAdmin_import_index
             break;
         case 'member':
             // Setup the image processing
-            require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php';
-            $ImageUpload = new GlmMembersAdmin_ajax_imageUpload($this->wpdb, $this->config);
+            require_once GLM_MEMBERS_PLUGIN_PATH . '/models/admin/ajax/imageUpload.php';
+            $ImageUpload = new GlmMembersAdmin_ajax_imageUpload( $this->wpdb, $this->config );
 
+            // Set start to 1
             $start = 1;
+
+            // Unless there's a start in $_REQUEST
             if ( isset( $_REQUEST['start'] ) ) {
                 $start = filter_var( $_REQUEST['start'], FILTER_VALIDATE_INT );
             }
+
+            // Get $memberData from csv file
             $memberData = $this->readCSVFile( $fileName );
-            $ret .= '<p>Processing Member File</p>';
-            $dupeNames    = 0;
+            $ret       .= '<p>Processing Member File</p>';
+            $dupeNames  = 0;
+
+            // Get total number of members
             $this->totalMembers = count( $memberData );
 
             // Find out how many are left to process.
             $testEnd = $start + $this->memberProcessCountPerRound;
             $ending  = ( $testEnd <= $this->totalMembers ) ? $testEnd : $this->totalMembers;
 
+            // Turn on wpdb errors
             $this->wpdb->show_errors();
 
             // We have to add one to $ending (array starts at 1 not 0).
             $ending++;
+            // Starting iterating over memberData
             for ( $index = $start; $index < $ending; $index++ ) {
                 $data = $memberData[$index];
-                // Check for duplicate member
-                $memberId = $this->wpdb->get_var(
+                // First check to see if this member is already in system
+                $memberNeedsUpdate = $this->wpdb->get_var(
                     $this->wpdb->prepare(
                         "SELECT id
-                           FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
-                          WHERE name = %s",
-                        $data['member_name']
+                           FROM " . GLM_MEMBERS_PLUGIN_PATH . "members
+                          WHERE old_member_id = %d",
+                        $data['old_member_id']
                     )
                 );
-                if ( $memberId ) {
-                    // We need to get a unique name for this member
-                    $dupeNames++;
-                    $data['member_name'] .= ' DUPE-' . $dupeNames;
+                if ( $memberNeedsUpdate ) {
+                    // This member needs an update
+                } else {
+                    // Check for duplicate member
+                    $memberId = $this->wpdb->get_var(
+                        $this->wpdb->prepare(
+                            "SELECT id
+                               FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
+                              WHERE name = %s",
+                            $data['member_name']
+                        )
+                    );
+                    if ( $memberId ) {
+                        // We need to get a unique name for this member
+                        $dupeNames++;
+                        $data['member_name'] .= ' DUPE-' . $dupeNames;
+                    }
                 }
                 if ( $data['status'] == 'Moderated' ) {
                     $access = $this->config['access_numb']['Moderated'];
                 } else {
                     $access = $this->config['access_numb']['NotDisplayedModerated'];
                 }
-                $this->wpdb->insert(
-                    GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members',
-                    array(
-                        'access'        => $access,
-                        'member_type'   => ((isset($data['member_type']) && isset($this->membertypes[$data['member_type']])) ? $this->membertypes[$data['member_type']]: 0),
-                        'created'       => date( 'Y-m-d' ),
-                        'name'          => $data['member_name'],
-                        'member_slug'   => sanitize_title( $data['member_name'] ),
-                        'old_member_id' => $data['old_member_id']
-                    ),
-                    array(
-                        '%d',
-                        '%d',
-                        '%s',
-                        '%s',
-                        '%s',
-                        '%s'
-                    )
+                $memberRecordData = array(
+                    'access'        => $access,
+                    'member_type'   => ((isset($data['member_type']) && isset($this->membertypes[$data['member_type']])) ? $this->membertypes[$data['member_type']]: 0),
+                    'created'       => date( 'Y-m-d' ),
+                    'name'          => $data['member_name'],
+                    'member_slug'   => sanitize_title( $data['member_name'] ),
+                    'old_member_id' => $data['old_member_id']
+                );
+                $memberRecordDataFormat = array(
+                    '%d',
+                    '%d',
+                    '%s',
+                    '%s',
+                    '%s',
+                    '%s'
                 );
-                $memberId = $this->wpdb->insert_id;
-                $this->members[$data['id']]['new_id'] = $this->wpdb->insert_id;
+                if ( $memberNeedsUpdate ) {
+                    $this->wpdb->update(
+                        GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members',
+                        $memberRecordData,
+                        array( 'id' => $memberNeedsUpdate ),
+                        $memberRecordDataFormat,
+                        array( '%d' )
+                    );
+                    $memberId = $memberNeedsUpdate;
+                    $this->members[$data['id']]['new_id'] = $memberId;
+                } else {
+                    $this->wpdb->insert(
+                        GLM_MEMBERS_PLUGIN_DB_PREFIX . 'members',
+                        $memberRecordData,
+                        $memberRecordDataFormat
+                    );
+                    $memberId = $this->wpdb->insert_id;
+                    $this->members[$data['id']]['new_id'] = $memberId;
+                }
 
                 // Logo needs to be a complete url.
                 if ( isset( $data['logo'] ) ) {
                     $logo = filter_var( $data['logo'], FILTER_VALIDATE_URL );
                     if ( $logo ) {
                         // Transfer the image over to temp directory.
-                        // echo '<pre>$logo: ' . print_r( $logo, true ) . '</pre>';
                         $logoImage = $this->fetchRemoteImage( $logo, '/tmp' );
-                        // echo '<pre>$logoImage: ' . print_r( '/tmp/'. $logoImage, true ) . '</pre>';
                         $res = $ImageUpload->storeImage( '/tmp/'. $logoImage );
-                        // echo '<pre>$res: ' . print_r( $res, true ) . '</pre>';
                         if ($res['newFileName']) {
                             $data['logo'] = $res['newFileName'];
                         }
@@ -1309,83 +1342,99 @@ class GlmMembersAdmin_import_index
                     }
                 }
 
-                // 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'          => $profileStatus,
-                        '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'],
-                        'mailing_addr1'   => $data['mailing_addr1'],
-                        'mailing_addr2'   => $data['mailing_addr2'],
-                        'mailing_city'    => ((isset($data['mailing_city']) && isset($this->cities[$data['mailing_city']]['new_id'])) ? $this->cities[$data['mailing_city']]['new_id']: 0),
-                        'mailing_state'   => $data['mailing_state'],
-                        'mailing_zip'     => $data['mailing_zip'],
-                        'lat'             => $data['lat'],
-                        'lon'             => $data['lon'],
-                        'phone'           => $data['phone'],
-                        'toll_free'       => $data['toll_free'],
-                        'url'             => ((strlen($data['url']) > 255) ?  substr($data['url'], 0, 250) : $data['url']),
-                        'reservation_url' => $data['reservation_url'],
-                        'email'           => $data['email'],
-                        'logo'            => $data['logo'],
-                        'notes'           => '',
-                        'create_time'     => date( 'Y-m-d' ),
-                        'modify_time'     => date( 'Y-m-d' ),
-                        'cc_type'         => 0,
-                    ),
-                    array(
-                        '%d', // member
-                        '%s', // member_name
-                        '%d', // status
-                        '%s', // reference_name
-                        '%s', // descr
-                        '%s', // short_descr
-                        '%s', // addr1
-                        '%s', // addr2
-                        '%d', // city
-                        '%s', // state
-                        '%d', // country
-                        '%d', // region
-                        '%d', // county
-                        '%s', // zip
-                        '%s', // mailing_addr1
-                        '%s', // mailing_addr2
-                        '%d', // mailing_city
-                        '%s', // mailing_state
-                        '%s', // mailing_zip
-                        '%s', // lat
-                        '%s', // lon
-                        '%s', // phone
-                        '%s', // toll_free
-                        '%s', // url
-                        '%s', // reservation_url
-                        '%s', // email
-                        '%s', // logo
-                        '%s', // notes
-                        '%s', // create_time
-                        '%s', // modify_time
-                        '%d', // cc_type
-                    )
+                $memberInfoData = array(
+                    'member'          => $memberId,
+                    'member_name'     => $data['member_name'],
+                    'status'          => $profileStatus,
+                    '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'],
+                    'mailing_addr1'   => $data['mailing_addr1'],
+                    'mailing_addr2'   => $data['mailing_addr2'],
+                    'mailing_city'    => ((isset($data['mailing_city']) && isset($this->cities[$data['mailing_city']]['new_id'])) ? $this->cities[$data['mailing_city']]['new_id']: 0),
+                    'mailing_state'   => $data['mailing_state'],
+                    'mailing_zip'     => $data['mailing_zip'],
+                    'lat'             => $data['lat'],
+                    'lon'             => $data['lon'],
+                    'phone'           => $data['phone'],
+                    'toll_free'       => $data['toll_free'],
+                    'url'             => ((strlen($data['url']) > 250) ?  substr($data['url'], 0, 250) : $data['url']),
+                    'reservation_url' => $data['reservation_url'],
+                    'email'           => $data['email'],
+                    'logo'            => $data['logo'],
+                    'notes'           => '',
+                    'create_time'     => date( 'Y-m-d' ),
+                    'modify_time'     => date( 'Y-m-d' ),
+                    'cc_type'         => 0,
                 );
-                if ( !$insert ) {
-                    echo '<pre>$data: ' . print_r( $data, true ) . '</pre>';
-                    echo '<pre>Errors: '.$this->wpdb->print_error().'</pre>';
-                    die( 'Error importing member data' );
+                $memberInfoDataFormat = array(
+                    '%d', // member
+                    '%s', // member_name
+                    '%d', // status
+                    '%s', // reference_name
+                    '%s', // descr
+                    '%s', // short_descr
+                    '%s', // addr1
+                    '%s', // addr2
+                    '%d', // city
+                    '%s', // state
+                    '%d', // country
+                    '%d', // region
+                    '%d', // county
+                    '%s', // zip
+                    '%s', // mailing_addr1
+                    '%s', // mailing_addr2
+                    '%d', // mailing_city
+                    '%s', // mailing_state
+                    '%s', // mailing_zip
+                    '%s', // lat
+                    '%s', // lon
+                    '%s', // phone
+                    '%s', // toll_free
+                    '%s', // url
+                    '%s', // reservation_url
+                    '%s', // email
+                    '%s', // logo
+                    '%s', // notes
+                    '%s', // create_time
+                    '%s', // modify_time
+                    '%d', // cc_type
+                );
+
+                if ( $memberNeedsUpdate ) {
+                    // Get the active member info id
+                    $profileId = $memberInfoObj->getActiveInfoIdForMember( $memberNeedsUpdate );
+                    // Update the member info record
+                    $insert = $this->wpdb->update(
+                        GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info',
+                        $memberInfoData,
+                        array( 'id' => $profileId ),
+                        $memberInfoDataFormat,
+                        array( '%d' )
+                    );
+                } else {
+                    // Add the member info record
+                    $insert = $this->wpdb->insert(
+                        GLM_MEMBERS_PLUGIN_DB_PREFIX . 'member_info',
+                        $memberInfoData,
+                        $memberInfoDataFormat
+                    );
+                    if ( !$insert ) {
+                        echo '<pre>$data: ' . print_r( $data, true ) . '</pre>';
+                        echo '<pre>Errors: '.$this->wpdb->print_error().'</pre>';
+                        die( 'Error importing member data' );
+                    }
+                    $profileId = $this->wpdb->insert_id;
                 }
                 // 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'] );
@@ -1434,6 +1483,8 @@ class GlmMembersAdmin_import_index
                 }
                 // Add this record to the processed counter.
                 $this->numberProcessed++;
+
+                // Ending iterating over memberData
             }
             //$ret .= '<pre>$this->members: ' . print_r( $this->members, true ) . '</pre>';
             $ret .= '<p>...</p>';