Setting up member packaging import script.
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 16 Aug 2016 17:11:40 +0000 (13:11 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 16 Aug 2016 17:11:40 +0000 (13:11 -0400)
This will pull all member packages from the old site and insert them.

classes/data/dataPackages.php
models/admin/management/packaging.php
views/admin/management/packaging.html

index 9eb0238..47f829c 100644 (file)
@@ -208,7 +208,7 @@ class GlmDataPackages extends GlmDataAbstract
             'pricing' => array (
                 'field' => 'pricing',
                 'type' => 'text',
-                'required' => true,
+                'required' => false,
                 'use' => 'a'
             ),
 
@@ -247,7 +247,7 @@ class GlmDataPackages extends GlmDataAbstract
                 'required' => true,
                 'use' => 'lged'
             ),
-            
+
             // Title
             'offsite_url' => array (
                 'field' => 'offsite_url',
@@ -352,4 +352,4 @@ class GlmDataPackages extends GlmDataAbstract
     }
 }
 
-?>
\ No newline at end of file
+?>
index 941fb24..a8c5577 100644 (file)
@@ -14,7 +14,8 @@
  */
 
 // Load Management Packaging data abstract
-require_once(GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH.'/data/dataManagement.php');
+require_once GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH . '/data/dataManagement.php';
+require_once GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH . '/data/dataPackages.php';
 
 /**
  * GlmMembersAdmin_management_packaging
@@ -39,7 +40,16 @@ class GlmMembersAdmin_management_packaging extends GlmDataPackagingManagement
      */
     public $wpdb;
 
-    /*
+    /**
+     * dbh Postgres DB Object PDO
+     *
+     * @var mixed
+     * @access public
+     */
+    public $dbh;
+    public $imageUrl;
+
+    /**
      * Constructor
      *
      * This contructor performs the work for this model. This model returns
@@ -78,84 +88,222 @@ class GlmMembersAdmin_management_packaging extends GlmDataPackagingManagement
 
      }
 
+    /**
+     * modelAction
+     *
+     * @param bool $actionData
+     *
+     * @access public
+     * @return void
+     */
     public function modelAction($actionData = false)
     {
-        $packageSettings = false;
-        $settingsUpdated = false;
+        $packageSettings     = false;
+        $settingsUpdated     = false;
         $settingsUpdateError = false;
+        $import_results      = false;
 
 
         // Determine if current user can edit configurations
-        if (!current_user_can('glm_members_management')) {
+        if ( !current_user_can( 'glm_members_management' ) ) {
             return array(
-                    'status' => false,
-                    'menuItemRedirect' => 'error',
-                    'modelRedirect' => 'index',
-                    'view' => 'admin/error/index.html',
-                    'data' => array(
-                            'reason' => 'User does not have rights to make configuration changes.'
-                    )
+                'status'           => false,
+                'menuItemRedirect' => 'error',
+                'modelRedirect'    => 'index',
+                'view'             => 'admin/error/index.html',
+                'data'             => array(
+                    'reason' => 'User does not have rights to make configuration changes.'
+                )
             );
         }
 
         // Check for submission option
         $option = '';
-        if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'submit') {
+        if ( isset( $_REQUEST['option'] ) && ( $_REQUEST['option'] === 'submit' || $_REQUEST['option'] === 'import' ) ) {
             $option = $_REQUEST['option'];
         }
 
-        switch($option) {
-
-            // Update the settings and redisplay the form
-            case 'submit':
-
-                // Update the package management settings
-                $packageSettings = $this->updateEntry(1);
-                if ($packageSettings['status']) {
-                    $settingsUpdated = true;
-                } else {
-                    $settingsUpdateError = true;
-                }
-
-                break;
+        switch( $option ) {
+        // Import of old member packages
+        case 'import':
+            $import_results = '<pre>$_REQUEST: ' . print_r( $_REQUEST, true ) . '</pre>';
+            $this->connect_db(
+                filter_var( $_REQUEST['db_host'], FILTER_SANITIZE_STRING ),
+                filter_var( $_REQUEST['db_name'], FILTER_SANITIZE_STRING ),
+                filter_var( $_REQUEST['db_user'], FILTER_SANITIZE_STRING ),
+                ''
+            );
+            $this->imageUrl = filter_var( $_REQUEST['image_url'], FILTER_VALIDATE_URL);
+            $import_results = $this->import_member_packaging();
+            break;
 
-            // Default is to get the current settings and display the form
-            default:
+        // Update the settings and redisplay the form
+        case 'submit':
+            // Update the package management settings
+            $packageSettings = $this->updateEntry(1);
+            if ($packageSettings['status']) {
+                $settingsUpdated = true;
+            } else {
+                $settingsUpdateError = true;
+            }
+            break;
 
-                // Try to get the first (should be only) entry for general settings.
-                $packageSettings = $this->editEntry(1);
+        // Default is to get the current settings and display the form
+        default:
+            // Try to get the first (should be only) entry for general settings.
+            $packageSettings = $this->editEntry( 1 );
 
-                if ($packageSettings === false) {
-
-                    if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
-                        glmMembersAdmin::addNotice("<b>&nbsp;&nbsp;/models/admin/management/packaging.php: Unable to load packaging management settings.", 'Alert');
-                    }
+            if ( $packageSettings === false ) {
 
+                if (GLM_MEMBERS_PLUGIN_ADMIN_DEBUG) {
+                    glmMembersAdmin::addNotice( '<b>&nbsp;&nbsp;/models/admin/management/packaging.php: Unable to load packaging management settings.', 'Alert' );
                 }
 
-                break;
+            }
+            break;
 
         }
 
         // Compile template data
         $templateData = array(
-            'reason' => '',
-            'packagingSettings' => $packageSettings,
-            'settingsUpdated' => $settingsUpdated,
-            'settingsUpdateError' => $settingsUpdateError
+            'reason'              => '',
+            'option'              => $option,
+            'packagingSettings'   => $packageSettings,
+            'settingsUpdated'     => $settingsUpdated,
+            'settingsUpdateError' => $settingsUpdateError,
+            'importResults'       => $import_results,
        );
 
         // Return status, suggested view, and data to controller
         return array(
-            'status' => true,
+            'status'           => true,
             'menuItemRedirect' => false,
-            'modelRedirect' => false,
-            'view' => 'admin/management/packaging.html',
-            'data' => $templateData
+            'modelRedirect'    => false,
+            'view'             => 'admin/management/packaging.html',
+            'data'             => $templateData
         );
+    }
+    /**
+     * connect_db
+     *
+     * Make a connection to the given database for the site. (postgres)
+     * Sets the $this->dbh with the postgers database connection
+     *
+     * @param mixed $db_host
+     * @param mixed $db_name
+     * @param mixed $db_user
+     * @param mixed $db_password
+     * @access public
+     * @return void
+     */
+    public function connect_db($db_host, $db_name, $db_user, $db_password)
+    {
+        $conn_str = "pgsql:";
+        if ( $db_host ) {
+            $conn_part[] = "host={$db_host}";
+        }
+        if ( $db_name ) {
+            $conn_part[] = "dbname={$db_name}";
+        }
+        if ( $db_user ) {
+            $conn_part[] = "user={$db_user}";
+        }
+        if ( $db_password ) {
+            $conn_part[] = "password={$db_password}";
+        }
+        if ( !empty($conn_part) ) {
+             $conn_str .= implode( " ", $conn_part );
+        }
+        $driver_options = array(
+            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOTH,
+        );
+        try {
+            $this->dbh = new PDO($conn_str, null, null, $driver_options);
+            $this->dbh->setAttribute(
+                PDO::ATTR_ERRMODE,
+                PDO::ERRMODE_EXCEPTION
+            );
+        } catch(PDOException $e) {
+            echo '<pre>$e: ' . print_r($e, true) . '</pre>';
+            wp_die();
+        }
+    }
+
+    public function import_member_packaging()
+    {
+        $package_count = 0;
+        require_once GLM_MEMBERS_PLUGIN_PATH.'/models/admin/ajax/imageUpload.php';
+        $image_upload     = new GlmMembersAdmin_ajax_imageUpload( $this->wpdb, $this->config );
+        $package_abstract = new GlmDataPackages( $this->wpdb, $this->config );
+        $sql = "
+        SELECT *
+          FROM members.member_packages";
+        $results = $this->dbh->query( $sql )->fetchAll( PDO::FETCH_ASSOC );
 
+        if ( $results ) {
+            foreach ( $results as $package ) {
+                // get the new member id
+                $member_id = $this->wpdb->get_var(
+                    $this->wpdb->prepare(
+                        "SELECT id
+                           FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "members
+                          WHERE old_member_id = %d",
+                        $package['member_id']
+                    )
+                );
 
+                $intro = mb_substr( strip_tags( $package['description'] ), 0, 80 );
+                $image = '';
+                if ( $package['image'] ) {
+                    $res = $image_upload->storeImage( $this->imageUrl . $package['image'] );
+                    if ( $res['newFileName'] ) {
+                        $image = $res['newFileName'];
+                    }
+                }
+                $package_data = array(
+                    'active'       => (($package['pending'] ) ? 0: 1),
+                    'title'        => $package['title'],
+                    'package_slug' => $package['title'],
+                    'descr'        => $package['description'],
+                    'short_descr'  => $package['intro'],
+                    'image'        => $image,
+                    'start_date'   => $package['sdate'],
+                    'end_date'     => $package['edate'],
+                    'expire_date'  => $package['edate'],
+                    'position'     => $package['pos'],
+                    'pricing'      => '',
+                    'ref_type'     => 10,
+                    'ref_dest'     => $member_id,
+                    'offsite_url'  => '',
+                );
+                $this->wpdb->insert(
+                    GLM_MEMBERS_PACKAGING_PLUGIN_DB_PREFIX . 'packages',
+                    $package_data,
+                    array(
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%s',
+                        '%d',
+                        '%s',
+                        '%d',
+                        '%s',
+                        '%s',
+                    )
+                );
+                $package_id = $this->wpdb->insert_id;
+
+                // Update the package name slug after the insert
+                $package_abstract->updateSlug( $package_id );
+                ++$package_count;
+            }
+        }
+
+        return '<p>Adding ' . $package_count . ' packages</p>';
     }
 }
-
-?>
\ No newline at end of file
index 900c3f6..cd325ec 100644 (file)
@@ -1,20 +1,21 @@
 {include file='admin/management/header.html'}
-    
 
-    <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
+
+    <form id="package-setting-form" action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
         <input type="hidden" name="glm_action" value="packaging">
         <input type="hidden" name="option" value="submit">
-        
+
         <h2 class="nav-tab-wrapper" style="margin-bottom: 1em;">
-            <a id="glm-settings-general" data-show-table="glm-table-packaging-general" class="glm-settings-tab nav-tab nav-tab-active">Packaging General</a>
+            <a id="glm-settings-general" data-show-table="glm-table-packaging-general" class="glm-settings-tab nav-tab{if $option==''} nav-tab-active{/if}">Packaging General</a>
             <a id="glm-settings-list" data-show-table="glm-table-packaging-list" class="glm-settings-tab nav-tab">Package List</a>
             <a id="glm-settings-detail" data-show-table="glm-table-packaging-detail" class="glm-settings-tab nav-tab">Package Detail</a>
+            <a id="glm-packaging-import" data-show-table="glm-table-packaging-import" class="glm-settings-tab nav-tab{if $option=='import'} nav-tab-active{/if}">Import Packages</a>
             {if $settingsUpdated}<span class="glm-notice glm-flash-updated glm-right">Settings Updated</span>{/if}
             {if $settingsUpdateError}<span class="glm-error glm-flash-updated glm-right">Settings Update Error</span>{/if}
         </h2>
-        
+
         <!-- General Packaging Settings -->
-        <table id="glm-table-packaging-general" class="glm-admin-table glm-settings-table">
+        <table id="glm-table-packaging-general" class="glm-admin-table glm-settings-table{if $option=='import'} glm-hidden{/if}">
             <tr>
               <th {if $packagingSettings.fieldRequired.canonical_package_page}class="glm-required"{/if}>Package Detail Page Permalink Name:</th>
               <td {if $packagingSettings.fieldFail.canonical_package_page}class="glm-form-bad-input glm-form-bad-input-misc"{/if}>
@@ -22,8 +23,9 @@
                   {if $packagingSettings.fieldFail.canonical_package_page}<p>{$packagingSettings.fieldFail.canonical_package_page}</p>{/if}
               </td>
           </tr>
+            <tr><td><input class="updateSettings button" type="submit" value="Update Settings" /></td></tr>
         </table>
-        
+
         <!-- Package List Settings -->
         <table id="glm-table-packaging-list" class="glm-admin-table glm-settings-table glm-hidden">
             <tr>
                         <tr><th>Show Member Address:</th><td><input type="checkbox" name="package_list_show_member_address"{if $packagingSettings.fieldData.package_list_show_member_address.value} checked="checked"{/if}></td></tr>
                         <tr>
                             <th>Address Options:</th>
-                            <td>  
+                            <td>
                                 <table class="glm-admin-table">
                                     <tr><th>Show Member Street:</th><td><input type="checkbox" name="package_list_show_member_street"{if $packagingSettings.fieldData.package_list_show_member_street.value} checked="checked"{/if}></td></tr>
                                     <tr><th>Show Member Second Address:</th><td><input type="checkbox" name="package_list_show_member_second_address"{if $packagingSettings.fieldData.package_list_show_member_second_address.value} checked="checked"{/if}></td></tr>
-                                    <tr><th>Show Member City, State and Zip</th><td><input type="checkbox" name="package_list_show_member_citystatezip"{if $packagingSettings.fieldData.package_list_show_member_citystatezip.value} checked="checked"{/if}></td></tr>                      
-                                    <tr><th>Show Member Country:</th><td><input type="checkbox" name="package_list_show_member_country"{if $packagingSettings.fieldData.package_list_show_member_country.value} checked="checked"{/if}></td></tr>                      
-                                    <tr><th>Show Member Region</th><td><input type="checkbox" name="package_list_show_member_region"{if $packagingSettings.fieldData.package_list_show_member_region.value} checked="checked"{/if}></td></tr>                                         
+                                    <tr><th>Show Member City, State and Zip</th><td><input type="checkbox" name="package_list_show_member_citystatezip"{if $packagingSettings.fieldData.package_list_show_member_citystatezip.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Member Country:</th><td><input type="checkbox" name="package_list_show_member_country"{if $packagingSettings.fieldData.package_list_show_member_country.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Member Region</th><td><input type="checkbox" name="package_list_show_member_region"{if $packagingSettings.fieldData.package_list_show_member_region.value} checked="checked"{/if}></td></tr>
                                 </table>
                             </td>
-                        </tr> 
+                        </tr>
                         <tr><th>Show Member Phone Number:</th><td><input type="checkbox" name="package_list_show_member_phone"{if $packagingSettings.fieldData.package_list_show_member_phone.value} checked="checked"{/if}></td></tr>
                         <tr><th>Show Member Toll Free Number:</th><td><input type="checkbox" name="package_list_show_member_tollfree"{if $packagingSettings.fieldData.package_list_show_member_tollfree.value} checked="checked"{/if}></td></tr>
                         <tr>
                         </tr>
                         <tr><th>Show Member E-mail:</th><td><input type="checkbox" name="package_list_show_member_email"{if $packagingSettings.fieldData.package_list_show_member_email.value} checked="checked"{/if}></td></tr>
                     </table>
-                </td>   
+                </td>
             </tr>
+            <tr><td><input class="updateSettings button" type="submit" value="Update Settings" /></td></tr>
         </table>
-        
+
         <!-- Package Detail Settings -->
         <table id="glm-table-packaging-detail" class="glm-admin-table glm-settings-table glm-hidden">
             <tr>
                         <tr><th>Show Member Address:</th><td><input type="checkbox" name="package_detail_show_member_address"{if $packagingSettings.fieldData.package_detail_show_member_address.value} checked="checked"{/if}></td></tr>
                         <tr>
                             <th>Address Options:</th>
-                            <td>  
+                            <td>
                                 <table class="glm-admin-table">
                                     <tr><th>Show Member Street:</th><td><input type="checkbox" name="package_detail_show_member_street"{if $packagingSettings.fieldData.package_detail_show_member_street.value} checked="checked"{/if}></td></tr>
-                                    <tr><th>Show Member City, State and Zip</th><td><input type="checkbox" name="package_detail_show_member_citystatezip"{if $packagingSettings.fieldData.package_detail_show_member_citystatezip.value} checked="checked"{/if}></td></tr>                      
-                                    <tr><th>Show Member Country:</th><td><input type="checkbox" name="package_detail_show_member_country"{if $packagingSettings.fieldData.package_detail_show_member_country.value} checked="checked"{/if}></td></tr>                      
-                                    <tr><th>Show Member Region</th><td><input type="checkbox" name="package_detail_show_member_region"{if $packagingSettings.fieldData.package_detail_show_member_region.value} checked="checked"{/if}></td></tr>                                         
+                                    <tr><th>Show Member City, State and Zip</th><td><input type="checkbox" name="package_detail_show_member_citystatezip"{if $packagingSettings.fieldData.package_detail_show_member_citystatezip.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Member Country:</th><td><input type="checkbox" name="package_detail_show_member_country"{if $packagingSettings.fieldData.package_detail_show_member_country.value} checked="checked"{/if}></td></tr>
+                                    <tr><th>Show Member Region</th><td><input type="checkbox" name="package_detail_show_member_region"{if $packagingSettings.fieldData.package_detail_show_member_region.value} checked="checked"{/if}></td></tr>
                                 </table>
                             </td>
-                        </tr> 
+                        </tr>
                         <tr><th>Show Member Phone Number:</th><td><input type="checkbox" name="package_detail_show_member_phone"{if $packagingSettings.fieldData.package_detail_show_member_phone.value} checked="checked"{/if}></td></tr>
                         <tr><th>Show Member Toll Free Number:</th><td><input type="checkbox" name="package_detail_show_member_tollfree"{if $packagingSettings.fieldData.package_detail_show_member_tollfree.value} checked="checked"{/if}></td></tr>
                         <tr>
                         </tr>
                         <tr><th>Show Member E-mail:</th><td><input type="checkbox" name="package_detail_show_member_email"{if $packagingSettings.fieldData.package_detail_show_member_email.value} checked="checked"{/if}></td></tr>
                     </table>
-                </td>   
+                </td>
             </tr>
+            <tr><td><input class="updateSettings button" type="submit" value="Update Settings" /></td></tr>
         </table>
-        
-        
-        <input id="updateSettings" type="submit" value="Update Settings" class="">
+
+
+
     </form>
-    
+
+    <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
+        <input type="hidden" name="glm_action" value="packaging">
+        <input type="hidden" name="option" value="import">
+
+        <table id="glm-table-packaging-import" class="glm-admin-table glm-settings-table{if $option!='import'} glm-hidden{/if}">
+            {if $importResults}
+                <tr><td>{$importResults}</td></tr>
+            {else}
+            <tr>
+                <th>Database Server:</th>
+                <td>
+                    <input class="glm-form-text-input-medium" type="text" name="db_host" value="" placeholder="(host name or IP address)" />
+                </td>
+            </tr>
+            <tr>
+                <th>Database Name:</th>
+                <td>
+                    <input class="glm-form-text-input-medium" type="text" name="db_name" value="" placeholder="(name of database)" />
+                </td>
+            </tr>
+            <tr>
+                <th>Database User:</th>
+                <td>
+                    <input class="glm-form-text-input-medium" type="text" name="db_user" value="" placeholder="(user with read access to database)" />
+                </td>
+            </tr>
+            <tr>
+                <th>Base Image URL:</th>
+                <td>
+                    <input class="glm-form-text-input-medium-long" type="text" name="image_url" value="" placeholder="(i.e. http://is0.gaslightmedia.com/mountpleasantwow/CKImage/" />
+                </td>
+            </tr>
+            <tr>
+                <th>Reset database Before Import:</th>
+                <td>
+                    <input type="checkbox" name="db_reset" value="" />
+                </td>
+            </tr>
+            <tr><td><input id="ImportPackages" type="submit" value="Import Packages" class="button" /></td></tr>
+            {/if}
+        </table>
+
+    </form>
+
     <script type="text/javascript">
-        
+
         jQuery(document).ready(function($) {
-            
+
             /*
              * Edit area tabs
              */
             $('.glm-settings-tab').click( function() {
 
-                // Clear tabl highlights and hide all tables
+                // Clear table highlights and hide all tables
                 $('.glm-settings-tab').removeClass('nav-tab-active');
                 $('.glm-settings-table').addClass('glm-hidden');
-                
+
                 // Highlight selected tab
                 $(this).addClass('nav-tab-active');
-                
+
                 // Show selected table
                 var table = $(this).attr('data-show-table');
                 $('#' + table).removeClass('glm-hidden');
-                
+
                 if (table == 'glm-table-address') {
                     initMap();
                 }
-                
+
             });
-            
-            // Flash certain elements for a short time after display      
+
+            // Flash certain elements for a short time after display
             $(".glm-flash-updated").fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500);
-                    
+
             /*
              * Check for bad input or input changes
              */
-             
+
             // Check for any field errors and if found change related tab to error color.
             if ($('.glm-form-bad-input-general').length) {
                 $('#glm-settings-general').addClass('glm-bad-input-area');
             }
-            
+
             // Check for most input changes
-            $('input, textarea, select, checkbox').on( 'change', function() {
+            $('#package-setting-form').find('input, textarea, select, checkbox').on( 'change', function() {
                 glmPageUpdateRequired();
-            }); 
+            });
 
             /*
              * Checks for leaving the page
              */
             var glmSubmitRequired = false;
-             
+
             // Flag submit button when updates are required.
             function glmPageUpdateRequired() {
-                $('#updateSettings').addClass('glm-bad-input-area');
+                $('.updateSettings').addClass('glm-bad-input-area');
                 glmSubmitRequired = true;
             }
-            // When submit button is clicked, disable the beforeunload message
-            $('#updateSettings').on('click', function() {
+            // When submit button is clicked, disable the before unload message
+            $('.updateSettings').on('click', function() {
                 glmSubmitRequired = false;
                 return true;
             });
-            
+
             // If submit is required and we're leaving the page, alert the user
             $(window).bind('beforeunload', function() {
                 if (glmSubmitRequired) {