PriMoThemes — now s2Member® (official notice)

This is now a very OLD forum system. It's in READ-ONLY mode.
All community interaction now occurs at WP Sharks™. See: new forums @ WP Sharks™

Format of the export file

s2Member Plugin. A Membership plugin for WordPress®.

Format of the export file

Postby nashvillegeek » July 12th, 2011, 11:37 am

Hi,

Has anyone attempted to change to format of the custom fields in the member export file? My client needs the field key (i.e. 'address','mobile', etc) to appear in the first row with values in that column like the other wordpress key/values. This is necessary for import into other applications such as Salesforce and their local database.

Is this possible?

Also, is the solution for the custom fields cells shifting when empty to have a default entry in the custom field setup?

Thanks,
Scott
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby Cristián Lávaque » July 13th, 2011, 1:31 am

If the field is empty for a user, it won't be in the export file the way it works now. You could default it to some value, then it'd show up in the CSV, unless the user deleted it and left it empty. Spaces don't work, you'd need to default it to something with more substance.

Jason is looking at the possibility of having a column per custom field, instead of working with field-value pairs as it is at the moment.
Cristián Lávaque http://s2member.net
Is s2Member working for you? Please rate it Image at WordPress.org. Thanks! :)
User avatar
Cristián Lávaque
Developer
Developer
 
Posts: 6836
Joined: December 22, 2010

Re: Format of the export file

Postby nashvillegeek » July 14th, 2011, 12:35 pm

Cristian, would the &nbsp work instead of a space keypress? Perhaps add a check on submission/update, similar to the required fields, to see if the field is empty and add a default string. Or, just require all of the fields, right? That would probably get annoying though.

Any idea on a time frame for the export format update if it is on the docket? I know nothing about creating csv files or how to re-configure the script already in place. My client needs the format to be more uniform for import into other applications, but the custom fields setup make it difficult.
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby Cristián Lávaque » July 14th, 2011, 7:06 pm

Yeah, requiring every field on registration would get annoying.

Well, you could customize s2Member's export method to include every custom field for every user, in the column-per-field format. /wp-content/plugins/s2member-pro/includes/classes/exports-in.inc.php

Here's how you can get all the custom fields you defined:
Code: Select all
(array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true)


And an example of it in use: viewtopic.php?f=4&t=6546&p=16582#p16582

I hope that helps. :)
Cristián Lávaque http://s2member.net
Is s2Member working for you? Please rate it Image at WordPress.org. Thanks! :)
User avatar
Cristián Lávaque
Developer
Developer
 
Posts: 6836
Joined: December 22, 2010

Re: Format of the export file

Postby nashvillegeek » July 20th, 2011, 2:33 pm

Seems I've got it working assuming I didn't mess anything else up. I modified several areas of the 'exports-in.inc.php' file. The custom field label now appears at the top of the column, and the value is below.

Here is the code:

Code: Select all
<?php
/**
* Handles User Export requests ( innner processing routines ).
*
* Copyright: © 2009-2011
* {@link http://www.websharks-inc.com/ WebSharks, Inc.}
* ( coded in the USA )
*
* This WordPress® plugin ( s2Member Pro ) is comprised of two parts:
*
* o (1) Its PHP code is licensed under the GPL license, as is WordPress®.
*    You should have received a copy of the GNU General Public License,
*    along with this software. In the main directory, see: /licensing/
*    If not, see: {@link http://www.gnu.org/licenses/}.
*
* o (2) All other parts of ( s2Member Pro ); including, but not limited to:
*    the CSS code, some JavaScript code, images, and design;
*    are licensed according to the license purchased.
*    See: {@link http://www.s2member.com/prices/}
*
* Unless you have our prior written consent, you must NOT directly or indirectly license,
* sub-license, sell, resell, or provide for free; part (2) of the s2Member Pro Module;
* or make an offer to do any of these things. All of these things are strictly
* prohibited with part (2) of the s2Member Pro Module.
*
* Your purchase of s2Member Pro includes free lifetime upgrades via s2Member.com
* ( i.e. new features, bug fixes, updates, improvements ); along with full access
* to our video tutorial library: {@link http://www.s2member.com/videos/}
*
* @package s2Member\User_Exports
* @since 1.5
*/
if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
   exit ("Do not access this file directly.");
/**/
if (!class_exists ("c_ws_plugin__s2member_pro_exports_in"))
   {
      /**
      * Handles User Export requests ( innner processing routines ).
      *
      * @package s2Member\User_Exports
      * @since 1.5
      */
      class c_ws_plugin__s2member_pro_exports_in
         {
            /**
            * Handles the exportation of Users/Members.
            *
            * @package s2Member\User_Exports
            * @since 1.5
            *
            * @attaches-to ``add_action("init");``
            *
            * @return null Or exits script execution after issuing file download prompt with CSV file.
            */
            public static function export ()
               {
                  if (!empty ($_POST["ws_plugin__s2member_pro_export"]) && ($nonce = $_POST["ws_plugin__s2member_pro_export"]) && wp_verify_nonce ($nonce, "ws-plugin--s2member-pro-export") && current_user_can ("create_users"))
                     {
                        global $wpdb; /* Global database object reference. */
                        global $current_site, $current_blog; /* Multisite Networking. */
                        /**/
                        @set_time_limit (0); /* Make time for processing. */
                        @ini_set ("memory_limit", "256M"); /* RAM. */
                        /**/
                        $format = !empty ($_POST["ws_plugin__s2member_pro_export_format"]) ? $_POST["ws_plugin__s2member_pro_export_format"] : "";
                        $start = !empty ($_POST["ws_plugin__s2member_pro_export_start"]) ? (int)$_POST["ws_plugin__s2member_pro_export_start"] : 1;
                        /**/
                        $start = ($start >= 1) ? $start : 1; /* Must be 1 or higher. */
                        $sql_s = ($start === 1) ? 0 : $start; /* 1 should be 0. */
                        /**/
                        $export = ""; /* Initialize the export file variable. */
                        /**/
                        $s2map = array ( /* Map s2Member fields. */
                        "custom" => $wpdb->prefix . "s2member_custom",/**/
                        "subscr_id" => $wpdb->prefix . "s2member_subscr_id",/**/
                        "subscr_gateway" => $wpdb->prefix . "s2member_subscr_gateway",/**/
                        "auto_eot_time" => $wpdb->prefix . "s2member_auto_eot_time",/**/
                        "last_payment_time" => $wpdb->prefix . "s2member_last_payment_time",/**/
                        "paid_registration_times" => $wpdb->prefix . "s2member_paid_registration_times",/**/
                        "custom_fields" => $wpdb->prefix . "s2member_custom_fields");
                        /**/
                        if (is_array ($_users = $wpdb->get_results ("SELECT `" . $wpdb->users . "`.`ID` FROM `" . $wpdb->users . "`, `" . $wpdb->usermeta . "` WHERE `" . $wpdb->users . "`.`ID` = `" . $wpdb->usermeta . "`.`user_id` AND `" . $wpdb->usermeta . "`.`meta_key` = '" . esc_sql ($wpdb->prefix . "capabilities") . "' LIMIT " . $sql_s . ", 250")))
                           {
                              if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ())
                                 $export .= '"ID","Username","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"' . "\n";
                              else /* Otherwise, we use the standardized format for exportation.*/
                              
                              
                              
                              
                              // Start Modification to labels
                              $s2_customFieldLabel_array = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);
                                     $i = 0;
                                    
                                      foreach ($s2_customFieldLabel_array as $field) {
                                         ksort ($s2_customFieldLabel_array);
                                       if(i===0){
                                       $cfLabel .= "\"" . $field['id'] . "\"";
                                       }else{
                                       $cfLabel .= ",\"" . $field['id'] . "\"";
                                       }
                                       $i++;
                                      }
                                 // End Modification to labels - $cfLabel is called below
                              
                                 $export .= '"ID","Username","Password","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"' . $cfLabel .  "\n";
                              /**/
                              foreach ($_users as $_user) /* Go through each User/Member in this result set. */
                                 {
                                    if (is_object ($user = new WP_User ($_user->ID)) && $user->ID)
                                       {
                                          $custom_capabilities = ""; /* Reset each time. */
                                          /**/
                                          foreach ($user->allcaps as $cap => $cap_enabled)
                                             if (preg_match ("/^access_s2member_ccap_/", $cap))
                                                if ($cap = preg_replace ("/^access_s2member_ccap_/", "", $cap))
                                                   $custom_capabilities .= "," . $cap;
                                          /**/
                                          $custom_capabilities = trim ($custom_capabilities, ",");
                                          /**/
                                          $custom = (isset ($user->$s2map["custom"])) ? $user->$s2map["custom"] : "";
                                          $subscr_id = (isset ($user->$s2map["subscr_id"])) ? $user->$s2map["subscr_id"] : "";
                                          $subscr_gateway = (isset ($user->$s2map["subscr_gateway"])) ? $user->$s2map["subscr_gateway"] : "";
                                          /**/
                                          $auto_eot_time = (isset ($user->$s2map["auto_eot_time"])) ? $user->$s2map["auto_eot_time"] : "";
                                          $last_payment_time = (isset ($user->$s2map["last_payment_time"])) ? $user->$s2map["last_payment_time"] : "";
                                          $paid_registration_times = (isset ($user->$s2map["paid_registration_times"])) ? $user->$s2map["paid_registration_times"] : "";
                                          $custom_fields = (isset ($user->$s2map["custom_fields"]) && is_array ($user->$s2map["custom_fields"])) ? $user->$s2map["custom_fields"] : array ();
                                          /**/
                                          $paid_registration_date = ($paid_registration_times["level"]) ? date ("m/d/Y", $paid_registration_times["level"]) : "";
                                          $paid_registration_times = (is_array ($paid_registration_times) && !empty ($paid_registration_times)) ? serialize ($paid_registration_times) : "";
                                          $registration_date = ($user->user_registered) ? date ("m/d/Y", strtotime ($user->user_registered)) : "";
                                          $last_payment_date = ($last_payment_time) ? date ("m/d/Y", $last_payment_time) : "";
                                          $auto_eot_date = ($auto_eot_time) ? date ("m/d/Y", $auto_eot_time) : "";
                                          /**/
                                          ksort ($custom_fields); /* Make sure Custom Fields are always in the same order.
                                                /* This provides clarity/uniformity in the export file. */
                                          /**/
                                          if (is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ())
                                             {
                                                if ($format === "readable") /* Human readable format; easier for some. */
                                                   {
                                                      $line = '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->ID) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_login) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->first_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->last_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->display_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_email) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_url) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq (reset ($user->roles)) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_capabilities) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($paid_registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($last_payment_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($auto_eot_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_id) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_gateway) . '",';
                                                      /**/
                                                      foreach ($custom_fields as $custom_field_var => $custom_field_value)
                                                         {
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_field_var) . '",';
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq /* Implode array? */
                                                            (implode ("|", (array)$custom_field_value)) . '",';
                                                         }
                                                   }
                                                else /* Otherwise, we can just use the default re-importation format. */
                                                   {
                                                      $line = '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->ID) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_login) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->first_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->last_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->display_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_email) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_url) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq (reset ($user->roles)) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_capabilities) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($paid_registration_times) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($last_payment_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($auto_eot_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_id) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_gateway) . '",';
                                                      /**/
                                                      foreach ($custom_fields as $custom_field_var => $custom_field_value)
                                                         {
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_field_var) . '",';
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq /* Serialize? */
                                                            (maybe_serialize ($custom_field_value)) . '",';
                                                         }
                                                   }
                                             }
                                          else /* Otherwise, we use the standardized formats for exportation.*/
                                             {
                                                if ($format === "readable") /* Human readable format; easier for some. */
                                                   {
                                                      $line = '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->ID) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_login) . '",';
                                                      $line .= '"",'; /* The Password field is left blank on export. */
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->first_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->last_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->display_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_email) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_url) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq (reset ($user->roles)) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_capabilities) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($paid_registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($last_payment_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($auto_eot_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_id) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_gateway) . '",';
                                                      /**/
                                                      
                                                      $return = array();
                                                       $user = get_user_option('s2member_custom_fields', $user->ID);
                                                      $s2_customFieldValue_array = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);
                                                      
                                                      foreach ($s2_customFieldValue_array as $field) {
                                                         
                                                            $return[$field['id']]['value'] = $user[$field['id']];
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($return[$field['id']]['value']) . '",';
                                                         }
                                                      
                                                      /*  Original Script
                                                      
                                                      foreach ($custom_fields as $custom_field_var => $custom_field_value)
                                                         {
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_field_var) . '",';
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq // Implode array?
                                                            (implode ("|", (array)$custom_field_value)) . '",';
                                                         }*/
                                                   }
                                                else /* Otherwise, we can just use the default re-importation format. */
                                                   {
                                                      $line = '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->ID) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_login) . '",';
                                                      $line .= '"",'; /* The Password field is left blank on export. */
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->first_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->last_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->display_name) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_email) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($user->user_url) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq (reset ($user->roles)) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_capabilities) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($registration_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($paid_registration_times) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($last_payment_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($auto_eot_date) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_id) . '",';
                                                      $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($subscr_gateway) . '",';
                                                      /**/
                                                      
                                                      // Start Modification to values
                                                      
                                                      $return = array();
                                                       $user = get_user_option('s2member_custom_fields', $user->ID);
                                                      $s2_cf_array = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);
                                                      
                                                      foreach ($s2_cf_array as $field) {
                                                         
                                                             $return[$field['id']]['value'] = $user[$field['id']];
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($return[$field['id']]['value']) . '",';
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq // Serialize?
                                                            (maybe_serialize ($custom_field_value)) . '",';
                                                         }
                                                      
                                                      // End Modification to values
                                                      
                                                         
                                                         
                                                         
                                                         /*
                                                         //Original Code:
                                                         
                                                         foreach ($custom_fields as $custom_field_var => $custom_field_value)
                                                         {
                                                            
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($custom_field_var) . '",';
                                                            $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq // Serialize?
                                                            (maybe_serialize ($custom_field_value)) . '",';
                                                         }
                                                         */
                                                   }
                                             }
                                          /**/
                                          $export .= trim ($line, " \r\n\t\0\x0B,") . "\n";
                                       }
                                 }
                           }
                        /**/
                        @ini_set ("zlib.output_compression", 0);
                        /**/
                        header ("Accept-Ranges: none");
                        header ("Content-Encoding: none");
                        header ("Content-Type: text/csv; charset=utf-8");
                        header ("Content-Length: " . strlen ($export));
                        header ("Expires: " . gmdate ("D, d M Y H:i:s", strtotime ("-1 week")) . " GMT");
                        header ("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT");
                        header ("Cache-Control: no-cache, must-revalidate, max-age=0");
                        header ("Cache-Control: post-check=0, pre-check=0", false);
                        header ("Pragma: no-cache");
                        /**/
                        header ('Content-Disposition: attachment; filename="export-' . $start . '-' . ($start + 249) . '.csv"');
                        /**/
                        eval ('while (@ob_end_clean ());'); /* Clean output buffers. */
                        /**/
                        exit ($export);
                     }
               }
         }
   }
?>


Let me know if I can tighten it up a bit. Even better, would be an option added to the export options for this format.
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby nashvillegeek » July 20th, 2011, 2:52 pm

This modification is only for the Easy-read format on a single site install.
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby Cristián Lávaque » July 20th, 2011, 11:37 pm

Thanks for sharing that. :)

Code: Select all
// Start Modification to labels
$s2_customFieldLabel_array = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);
$i = 0;

foreach ($s2_customFieldLabel_array as $field) {
    ksort ($s2_customFieldLabel_array);
    if(i===0){
        $cfLabel .= "\"" . $field['id'] . "\"";
    }else{
        $cfLabel .= ",\"" . $field['id'] . "\"";
    }
    $i++;
}
// End Modification to labels - $cfLabel is called below
                              
$export 
.= '"ID","Username","Password","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"' . $cfLabel .  "\n";
 


In that part ksort should be before the foreach and $i in the condition is missing the $. The block could probably be written like this:

Code: Select all
$export .= '"ID","Username","Password","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"';

$cfields = ksort((array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true));
foreach ($cfields as $cfield)
    $export .= ',"' . $cfield['id'] . '"';
$export .= "\n";
 


And in this other part:

Code: Select all
// Start Modification to values
$return = array();
$user = get_user_option('s2member_custom_fields', $user->ID);
$s2_cf_array = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);

foreach ($s2_cf_array as $field) {
    $return[$field['id']]['value'] = $user[$field['id']];
    $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq ($return[$field['id']]['value']) . '",';
    $line .= '"' . c_ws_plugin__s2member_utils_strings::esc_dq // Serialize?
    (maybe_serialize ($custom_field_value)) . '",';
}
// End Modification to values
 


You're assuming that the $user will have every custom field, which isn't true most of the time. You're not using maybe_serialize with the custom field values, some may be arrays. Also, the second $line concatenation was left from the original code but shouldn't be there, you don't even have $custom_field_value defined. The block could probably be written like this:

Code: Select all
foreach ($cfields as $cfield)
    $line .= '"' . (isset($custom_field[$cfield['id']]) ? c_ws_plugin__s2member_utils_strings::esc_dq(maybe_serialize($custom_field[$cfield['id']])) : '') . '",';
  


Let me know if that works and helps you. :)

And remember you'll have to re-apply these after every s2Member Pro update.
Cristián Lávaque http://s2member.net
Is s2Member working for you? Please rate it Image at WordPress.org. Thanks! :)
User avatar
Cristián Lávaque
Developer
Developer
 
Posts: 6836
Joined: December 22, 2010

Re: Format of the export file

Postby nashvillegeek » July 21st, 2011, 6:32 am

Thanks, Cristian. I will try these out today. As far as re-applying after every update, can this be overcome by adding the script to the mu-plugin folder?
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby nashvillegeek » July 21st, 2011, 6:56 am

The only thing i need to change was in the following:

Code: Select all
    $export .= '"ID","Username","Password","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"';

    $cfields = ksort((array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true));
    foreach ($cfields as $cfield)
        $export .= ',"' . $cfield['id'] . '"';
    $export .= "\n";
      


I had to move the ksort out of the $cfields declaration, as it was throwing an error. I changed it to this and it works fine:

Code: Select all
$export .= '"ID","Username","Password","First Name","Last Name","Display Name","Email","Website","Role","Custom Capabilities","Registration Date","First Payment Date","Last Payment Date","Auto-EOT Date","Custom Value","Paid Subscr. ID","Paid Subscr. Gateway"';

$cfields = (array)json_decode($GLOBALS['WS_PLUGIN__']['s2member']['o']['custom_reg_fields'], true);
ksort($cfields);
foreach ($cfields as $cfield)
    
$export .= ',"' . $cfield['id'] . '"';
$export .= "\n"; 


Thanks for the input. I would definitely be interested to know if there is a way to avoid reapplying after each update.
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby Cristián Lávaque » July 21st, 2011, 9:42 am

Ah, thanks for catching that, sorry for my mistake. Actually, it may not even be needed to ksort them, I'm not sure now, can't remember if it's an associative array. You can most probably take it out and it'll be the same.
Cristián Lávaque http://s2member.net
Is s2Member working for you? Please rate it Image at WordPress.org. Thanks! :)
User avatar
Cristián Lávaque
Developer
Developer
 
Posts: 6836
Joined: December 22, 2010

Re: Format of the export file

Postby nashvillegeek » July 21st, 2011, 9:53 am

It's working. I'll probably just leave it the way it is. It's amazing how much shorter the code is once you get a hold of it.

Any thoughts on dropping the script into the s2-hacks.php to avoid having to re-upload when updates are applied?
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN

Re: Format of the export file

Postby Cristián Lávaque » July 21st, 2011, 1:21 pm

It's good to know it works. :)

Well, I've got a bit of practice compacting code and I particularly like doing it with other people's code more than with writing my own from scratch. Glad I could help you.

This can't really be applied to your s2hacks.php file because it's not using any hooks... Just make sure you keep a copy of the code outside the s2member-pro directory so it's not replaced with the new copy and you can re-apply the change. Hopefully it won't be many more releases before something like this gets added to the plugin.
Cristián Lávaque http://s2member.net
Is s2Member working for you? Please rate it Image at WordPress.org. Thanks! :)
User avatar
Cristián Lávaque
Developer
Developer
 
Posts: 6836
Joined: December 22, 2010

Re: Format of the export file

Postby nashvillegeek » July 21st, 2011, 1:27 pm

That's cool. The client is reluctant to apply updates, anyways. Given this is only affecting the 'Easy-Read' format, you guys could just drop this code in there. I'm sure there would need to be some tweaks for the other formats.
User avatar
nashvillegeek
Registered User
Registered User
 
Posts: 36
Joined: June 3, 2011
Location: Nashville TN


Return to s2Member Plugin

Who is online

Users browsing this forum: Exabot [Bot], Google [Bot] and 1 guest

cron