More updates for the member import
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 16 Jun 2017 18:51:20 +0000 (14:51 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 16 Jun 2017 18:51:20 +0000 (14:51 -0400)
Working on short description. Removing it from the csv files.
Short description will be generated from the descr field.

models/admin/import/index.php
setup/shortcodes.php
views/admin/import/processMembers.html

index f9278fe..97e1360 100644 (file)
@@ -21,6 +21,7 @@
 class GlmMembersAdmin_import_index
 {
 
+    const CSV_CHARS_PER_LINE = 6000;
     /**
      * WordPress Database Object
      *
@@ -117,6 +118,14 @@ class GlmMembersAdmin_import_index
      */
     public $totalMembers = 0;
 
+    /**
+     * processingComplete
+     *
+     * @var bool
+     * @access public
+     */
+    public $processingComplete = false;
+
     /**
      * Constructor
      *
@@ -177,6 +186,9 @@ class GlmMembersAdmin_import_index
         $failure   = false;
         $option    = '';
         $clearData = false;
+        if ( isset( $_REQUEST['numberProcessed'] ) ) {
+            $this->numberProcessed = filter_var( $_REQUEST['numberProcessed'], FILTER_VALIDATE_INT );
+        }
         $fileData = array(
             'Amenity' => array(
                 'field'    => 'amenity_file',
@@ -218,7 +230,7 @@ class GlmMembersAdmin_import_index
                 'name'     => 'memberData.csv',
                 'exists'   => false,
                 'validate' => array(
-                    'id', 'member_name', 'status', 'descr', 'short_descr',
+                    'id', 'member_name', 'status', 'descr',
                     'addr1', 'addr2', 'city', 'state', 'country', 'zip',
                     'mailing_addr1', 'mailing_addr2', 'mailing_city', 'mailing_state', 'mailing_zip',
                     'region', 'county', 'lat', 'lon', 'phone', 'toll_free',
@@ -352,8 +364,10 @@ class GlmMembersAdmin_import_index
                 }
             }
             // Here we need to check to see if we processed all members.
-            // If not we need to use the process.html view.
             // Also the counter has to increment the total processed so far.
+            if ( $this->numberProcessed == $this->totalMembers ) {
+                $this->processingComplete = true;
+            }
             $view = 'processMembers.html';
             break;
 
@@ -374,6 +388,8 @@ class GlmMembersAdmin_import_index
         $templateData = array(
             'errors'          => $this->errors,
             'numberProcessed' => $this->numberProcessed,
+            'totalMembers'    => $this->totalMembers,
+            'completed'       => $this->processingComplete,
             'data'            => false,
             'fileData'        => $fileData,
             'clearData'       => $clearData,
@@ -406,7 +422,7 @@ class GlmMembersAdmin_import_index
         $fileHeaders = array();
         if ( ( $fp = fopen( $fileName, 'r' ) ) !== false ) {
             // get first line to use as headers
-            $fileHeaders = fgetcsv( $fp, 1000, ',' );
+            $fileHeaders = fgetcsv( $fp, SELF::CSV_CHARS_PER_LINE, ',' );
             fclose( $fp );
         }
 
@@ -430,7 +446,7 @@ class GlmMembersAdmin_import_index
         if ( ( $fp = fopen( $fileName, 'r' ) ) !== false ) {
             // get first line to use as headers
             $rowNumber = 0;
-            while ( ( $data = fgetcsv( $fp, 1000, ',' ) ) !== false ) {
+            while ( ( $data = fgetcsv( $fp, SELF::CSV_CHARS_PER_LINE, ',' ) ) !== false ) {
                 if ( $rowNumber == 0 ) {
                     $fileHeaders = $data;
                 } else {
@@ -639,6 +655,10 @@ class GlmMembersAdmin_import_index
             return ( $errorCount == 0 );
             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);
+
             $start = 1;
             if ( isset( $_REQUEST['start'] ) ) {
                 $start = filter_var( $_REQUEST['start'], FILTER_VALIDATE_INT );
@@ -714,7 +734,27 @@ class GlmMembersAdmin_import_index
                 $this->members[$data['id']]['new_id'] = $this->wpdb->insert_id;
 
                 // Logo needs to be a complete url.
+                if ( isset( $data['logo'] ) ) {
+                    $logo = filter_var( $data['logo'], FILTER_VALIDATE_URL );
+                    if ( $logo ) {
+                        $res = $ImageUpload->storeImage( $logo );
+                        if ($res['newFileName']) {
+                            $data['logo'] = $res['newFileName'];
+                        }
+                    }
+                }
 
+                // create truncated short_descr from descriptions - less tags, html encoded characters, newlines, tabs, etc.
+                $stripped = str_replace(
+                    php_eol,
+                    '',
+                    preg_replace( '/\t+/', '', preg_replace( "/&#?[a-z0-9]{2,8};/i", "", strip_tags( $data['descr'] ) ) )
+                );
+                $short_descr = implode(' ', array_slice(explode(' ', $stripped), 0, 30));
+
+                if (strlen($short_descr) < strlen($stripped)) {
+                    $short_descr .= ' ...';
+                }
 
                 // Add the member info record
                 $insert = $this->wpdb->insert(
@@ -725,7 +765,7 @@ class GlmMembersAdmin_import_index
                         'status'          => $this->config['status_numb']['Active'],
                         'reference_name'  => 'Imported Member Information',
                         'descr'           => $data['descr'],
-                        'short_descr'     => $data['short_descr'],
+                        'short_descr'     => $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),
@@ -765,7 +805,7 @@ class GlmMembersAdmin_import_index
                         '%s', // state
                         '%d', // country
                         '%d', // region
-                        '%s', // county
+                        '%d', // county
                         '%s', // zip
                         '%s', // mailing_addr1
                         '%s', // mailing_addr2
index c091a6c..a15c153 100644 (file)
@@ -74,7 +74,7 @@ if ( isset( $config['settings'] ) && $config['settings']['enable_members'] ) {
             'action'       => 'list',
             'table'        => GLM_MEMBERS_PLUGIN_DB_PREFIX.'settings_general',
             'cacheControl' => array(
-                'active' => true,
+                'active' => false,
                 'cacheTime' => '2 WEEK'                   // MySQL "DATE_ADD" time interval - see https://www.w3schools.com/sql/func_date_add.asp
             ),
             'attributes'   => array(
index ef702dc..5ac631a 100644 (file)
@@ -3,13 +3,22 @@
     <h2>Data Import Step 3: Process Members</h2>
 
     <table class="glm-admin-table">
-        {foreach $fileData as $fileHeader => $file}
         <tr>
-            <td>
-                {$file.results}
+            <th>Total Member</th>
+            <td>{$totalMembers}</td>
+        </tr>
+        <tr>
+            <th>Processed Member</th>
+            <td>{$numberProcessed}</td>
+        </tr>
+        {if !$completed}
+        <tr>
+            <td colspan="2">
+                <a href="{$thisUrl}?page={$thisPage}&glm_action=index&option=processMembers&start=&numberProcessed={$numberProcessed}"
+                   class="button">Process Next Count Members</a>
             </td>
         </tr>
-        {/foreach}
+        {/if}
 
         {if $errors}
             {foreach $errors as $error}