Add in the file import for trailmaps.
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 21 Apr 2017 17:32:06 +0000 (13:32 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 21 Apr 2017 17:32:06 +0000 (13:32 -0400)
This is setup to import files from the current member db.
Could be used then for other member databases that use this version of
member database.

models/admin/management/import.php
models/admin/management/import/trailmapsFiles.php [new file with mode: 0644]
views/admin/management/import.html
views/admin/management/import/trailmapsFiles.html [new file with mode: 0644]

index a1f15b5..f2ea68e 100644 (file)
@@ -154,6 +154,10 @@ class GlmMembersAdmin_management_import
                 require GLM_MEMBERS_PLUGIN_PATH.'/models/admin/management/import/brewbakersFiles.php';
                 break;
 
+            case 'trailmapsFiles':
+                require GLM_MEMBERS_PLUGIN_PATH.'/models/admin/management/import/trailmapsFiles.php';
+                break;
+
             case 'importOldMemberIds':
                 require GLM_MEMBERS_PLUGIN_PATH.'/models/admin/management/import/oldMemberIds.php';
                 break;
diff --git a/models/admin/management/import/trailmapsFiles.php b/models/admin/management/import/trailmapsFiles.php
new file mode 100644 (file)
index 0000000..428a5bb
--- /dev/null
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Import Brewbakers Files
+ * Will have to do these 10 to 20 at a time.
+ */
+
+// Setup the database connection to postgres
+$dbServer    = 'ds4';
+$dbName      = 'michigantrailmaps';
+$dbUser      = 'postgres';
+$resetdb     = true;
+$start       = ( isset( $_REQUEST['start'] ) ) ? filter_var( $_REQUEST['start'], FILTER_VALIDATE_INT ): 0;
+$limit       = ( $start === 0 ) ? 20 : 100;
+$totalFiles  = 0;
+$failure     = false;
+
+$connString = "host=$dbServer dbname=$dbName user=$dbUser";
+$db = @pg_connect( $connString );
+
+require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/fileUpload.php';
+$FileUpload  = new GlmMembersAdmin_ajax_fileUpload($this->wpdb, $this->config);
+$refType     = $this->config['ref_type_numb']['MemberInfo'];
+$refTable    = $this->config['ref_type_table'][$refType];
+$fileBaseURL = 'http://www.michigantrailmaps.com/uploads/member_files/';
+
+
+// Read in all member files.
+$file = array();
+$numbFilesFound = 0;
+if (!$failure && $start === 0) {
+    // Grab the files for members
+    $sql = "
+    SELECT *
+      FROM members.member_files
+     ORDER BY member_id";
+    $res = pg_query($db, $sql);
+    $rows = pg_num_rows($res);
+    if ($rows == 0) {
+        $templateData['genError']  = 'There does not appear to be any member files listed in this database!';
+        $failure = true;
+    } else {
+        $tmp = pg_fetch_all($res);
+        if (count($tmp) != $rows) {
+            $notice = pg_last_notice($res);
+            $templateData['genError']  = 'While reading member photo data, we did not receive the expected number of member files! ';
+            if ($notice) {
+                $templateData['genError'] .= 'Perhaps the following message will help.<br>'.$notice;
+            }
+            $failure = true;
+        } else {
+
+            // Reprocess into array grouped by member with the main index the member ID
+            foreach ($tmp as $x) {
+
+                // If member entry hasn't been created yet, add it now
+                if (!isset($file['members'][$x['member_id']])) {
+                    $file['members'][$x['member_id']] = array(
+                        'member_id' => $x['member_id'],
+                        'files' => array()
+                    );
+                }
+
+                $file['members'][$x['member_id']]['files'][] = $x;
+                $numbFilesFound++;
+            }
+            //echo '<pre>$file: ' . print_r( $file, true ) . '</pre>';
+        }
+    }
+}
+//echo '<pre>$file: ' . print_r( $file, true ) . '</pre>';
+//exit;
+function getMemberInfoIdFromOldMemberId( $wpdb, $oldMemberId )
+{
+    return $wpdb->get_var(
+        $wpdb->prepare(
+            "SELECT id
+               FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info
+              WHERE member IN (
+                    SELECT id
+                      FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
+                     WHERE old_member_id = %d)",
+            $oldMemberId
+        )
+    );
+}
+//echo '<pre>$file: ' . print_r( $file, true ) . '</pre>';
+//exit;
+// Reset member files data tables if needed
+if ( !$failure && $resetdb && $start === 0 ) {
+    // Reset the data
+    $this->wpdb->query( "DELETE FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX."files" );
+
+    // Delete Files
+    foreach( new RecursiveIteratorIterator(
+
+        new RecursiveDirectoryIterator( GLM_MEMBERS_PLUGIN_FILES_PATH, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS ),
+        RecursiveIteratorIterator::CHILD_FIRST ) as $value ) {
+            if ($value->isFile()) {
+                unlink( $value );
+            }
+        }
+}
+// If we have file URLs
+if ($file != false) {
+
+    // For each member
+    foreach ($file as $memType) {
+        foreach ($memType as $oldMemberId => $m) {
+
+            $newMemberId = getMemberInfoIdFromOldMemberId( $this->wpdb, $oldMemberId);
+
+            // For each file in this member's gallery
+            if ($m['files']) {
+                foreach ($m['files'] as $i) {
+                    $fileURL  = $fileBaseURL.$i['name_on_disk'];
+                    $fileName = ( $i['file_name'] ) ? $i['file_name'] : $i['original_name'];
+                    $res = $FileUpload->storeFile ($fileURL, $refType, $refTable, $newMemberId, $fileName );
+                }
+            }
+
+        }
+    }
+
+}
+
+$templateData['newStart']       = $start + $limit;
+$templateData['start']          = $start;
+$templateData['total']          = $totalFiles;
+$templateData['numbFilesFound'] = $numbFilesFound;
+
+$requestedView = 'import/trailmapsFiles.html';
index af3b513..5cdffad 100644 (file)
                     <input type="radio" name="option" value="importTrailMaps" class="import-type"> Import Trail Maps
                 </td>
             </tr>
-            <tr class="for-brewbakers glm-hidden">
+            <tr class="for-trailmaps glm-hidden">
                 <td colspan="2">
-                    <p><a href="{$thisUrl}?page={$thisPage}&glm_action=import&option=brewbakersImages">Import Images</a></p>
-                    <p><a href="{$thisUrl}?page={$thisPage}&glm_action=import&option=brewbakersFiles">Import Files</a></p>
-                    <p><a href="{$thisUrl}?page={$thisPage}&glm_action=import&option=brewbakersBrands">Fix Brands</a></p>
+                    <p><a href="{$thisUrl}?page={$thisPage}&glm_action=import&option=trailmapsFiles">Import Files</a></p>
                 </td>
             </tr>
             <tr class="for-member-import all-import-fields">
                 $('.for-member-import').addClass('glm-hidden');
             } else if (selected == 'importMailingAddresses') {
                 $('.for-member-import').addClass('glm-hidden');
-            } else if (selected == 'importBrewbakers') {
+            } else if (selected == 'importTrailMaps') {
                 $('.for-member-import').addClass('glm-hidden');
                 $('.all-import-fields').addClass('glm-hidden');
-                $('.for-brewbakers').removeClass('glm-hidden');
+                $('.for-trailmaps').removeClass('glm-hidden');
             } else {
                 $('.for-member-import').addClass('glm-hidden');
                 $('.all-import-fields').addClass('glm-hidden');
diff --git a/views/admin/management/import/trailmapsFiles.html b/views/admin/management/import/trailmapsFiles.html
new file mode 100644 (file)
index 0000000..46b5c27
--- /dev/null
@@ -0,0 +1,37 @@
+{include file='admin/management/header.html'}
+
+    <h2>Data Import - Test Database</h2>
+    <ol>
+        <li>Provide legacy database information and import member data.</li>
+        <li>Import any images.</li>
+        <li class="glm-ol-selected">Review results</li>
+    </ol>
+
+
+    <h3>Data Import Step 3: Review Results.</h3>
+{if isset($genError)}
+    <p>
+        <h3 class="glm-error">Oops!</h3>
+        <p class="glm-error">{$genError}</p>
+    </p>
+{/if}
+
+<pre>
+Found: {$numbFilesFound} files
+Start: {$start}
+End: {$newStart}
+Total: {$total}
+</pre>
+    <a href="{$thisUrl}?page={$thisPage}&glm_action=import&option=brewbakersFiles&start={$newStart}">Next Set of Files</a>
+
+    {if $newStart > $total }
+    <h2>Process Complete</h2>
+    <p>
+        The data and image import process is complete. You should now have all member data and images imported.
+    <p>
+    <p>
+        You should now go to the "Member List" and make sure the data and images have been imported properly.
+    </p>
+    {/if}
+
+{include file='admin/footer.html'}