Beispiel #1
0
 /**
  * Wraps a string with the characters provided.
  *
  * This is useful when preparing an input array for ``c_ws_plugin__optimizemember_utils_arrays::in_regex_array()``.
  *
  * @package optimizeMember\Utilities
  * @since 3.5
  *
  * @param str|array $value Either a string, an array, or a multi-dimensional array, filled with integer and/or string values.
  * @param str $beg Optional. A string value to wrap at the beginning of each value.
  * @param str $end Optional. A string value to wrap at the ending of each value.
  * @param bool $wrap_e Optional. Defaults to false. Should empty strings be wrapped too?
  * @return str|array Either the input string, or the input array; after all data is wrapped up.
  */
 public static function wrap_deep($value = FALSE, $beg = FALSE, $end = FALSE, $wrap_e = FALSE)
 {
     if (is_array($value)) {
         foreach ($value as &$r) {
             /* Reference. */
             $r = c_ws_plugin__optimizemember_utils_strings::wrap_deep($r, $beg, $end, $wrap_e);
         }
         return $value;
         /* Return modified array. */
     }
     return strlen((string) $value) || $wrap_e ? (string) $beg . (string) $value . (string) $end : (string) $value;
 }
Beispiel #2
0
 /**
  * Adds Custom Fields to the admin Profile editing page.
  *
  * @package optimizeMember\Users_List
  * @since 3.5
  *
  * @attaches-to ``add_action("edit_user_profile");``
  * @attaches-to ``add_action("show_user_profile");``
  *
  * @param obj $user Expects a `WP_User` object passed in by the Action Hook.
  * @return null
  */
 public static function users_list_edit_cols($user = FALSE)
 {
     global $current_site, $current_blog;
     /* Multisite Networking. */
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_before_users_list_edit_cols", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $current_user = is_user_logged_in() ? wp_get_current_user() : false;
     /* Current User. */
     /**/
     if (is_object($user) && !empty($user->ID) && ($user_id = $user->ID) && is_object($current_user) && !empty($current_user->ID)) {
         $role = c_ws_plugin__optimizemember_user_access::user_access_role($user);
         /* This User's current WordPress Role. */
         $level = c_ws_plugin__optimizemember_user_access::user_access_level($user);
         /* User's Access Level for optimizeMember. */
         /**/
         if (current_user_can("edit_users") && (!is_multisite() || is_super_admin() || is_user_member_of_blog($user_id))) {
             echo '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
             /**/
             echo '<h3 style="position:relative;"><img src="' . esc_attr($GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["dir_url"]) . '/images/large-icon.png" title="optimizeMember ( a Membership management system for WordPress )" alt="" style="position:absolute; top:-15px; right:0; border:0;" />optimizeMember Configuration &amp; Profile Fields' . (is_multisite() ? ' ( for this Blog )' : '') . '</h3>' . "\n";
             /**/
             echo '<table class="form-table">' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             if (is_multisite() && is_super_admin()) {
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_originating_blog", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 echo '<tr>' . "\n";
                 echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-originating-blog">Originating Blog ID#:</label> <a href="#" onclick="alert(\'On a Multisite Network, this is how optimizeMember keeps track of which Blog each User/Member originated from. So this ID#, is automatically associated with a Blog in your Network, matching the User\\\'s point of origin. ~ ONLY a Super Admin can modify this.\\n\\nOn a Multisite Blog Farm, the Originating Blog ID# for your own Customers, will ALWAYS be associated with your ( Main Site ). It is NOT likely that you\\\'ll need to modify this manually, but optimizeMember makes it available; just in case.\\n\\n*Tip* - If you add Users ( and/or Blogs ) with the `Super Admin` Network Administration panel inside WordPress, then you WILL need to set everything manually. optimizeMember does NOT tamper with automation routines whenever YOU ( as a Super Administrator ) are working in that area.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
                 echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_originating_blog" id="ws-plugin--optimizemember-profile-optimizemember-originating-blog" value="' . format_to_edit(get_user_meta($user_id, "optimizemember_originating_blog", true)) . '" class="regular-text" /></td>' . "\n";
                 echo '</tr>' . "\n";
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_originating_blog", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
             }
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_subscr_gateway", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-subscr-gateway">Paid Subscr. Gateway:</label> <a href="#" onclick="alert(\'A Payment Gateway code is associated with the Paid Subscr. ID below. A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID ( with an s2 prefix ), an AliPay Trade No. ). This will be filled automatically by optimizeMember.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
             echo '<td><select name="ws_plugin__optimizemember_profile_optimizemember_subscr_gateway" id="ws-plugin--optimizemember-profile-optimizemember-subscr-gateway" style="width:25em;"><option value=""></option>' . "\n";
             foreach (apply_filters("ws_plugin__optimizemember_profile_optimizemember_subscr_gateways", array("paypal" => "PayPal ( code: paypal )"), get_defined_vars()) as $gateway => $gateway_name) {
                 echo '<option value="' . esc_attr($gateway) . '"' . ($gateway === get_user_option("optimizemember_subscr_gateway", $user_id) ? ' selected="selected"' : '') . '>' . esc_html($gateway_name) . '</option>' . "\n";
             }
             echo '</select>' . "\n";
             echo '</td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_subscr_gateway", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_subscr_id", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-subscr-id">Paid Subscr. ID:</label> <a href="#" onclick="alert(\'A Paid Subscription ID ( or a Buy Now Transaction ID ) is only valid for paid Members. Also known as ( a Recurring Profile ID, a ClickBank Receipt #, a Google TID/SID ( with an s2 prefix ), an AliPay Trade No. ). This will be filled automatically by optimizeMember.\\n\\nThis field will be empty for Free Subscribers, and/or anyone who is NOT paying you. This field is only editable for Customer Service purposes; just in case you ever need to update the Paid Subscr. Gateway/ID manually.\\n\\nThe value of Paid Subscr. ID, can be a PayPal Standard `Subscription ID`, or a PayPal Pro `Recurring Profile ID`, or a PayPal `Transaction ID`; depending on the type of sale. Your PayPal account will supply this information. If you\\\'re using Google Checkout, use the TID/SID value in the sale Description; it always starts with `s2-`. ClickBank provides a Receipt #, ccBill provides a Subscription ID, Authorize.Net provides a Subscription ID, and AliPay provides a Transaction ID. The general rule is... IF there\\\'s a Subscription ID, use that! If there\\\'s NOT, use the Transaction ID.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
             echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_subscr_id" id="ws-plugin--optimizemember-profile-optimizemember-subscr-id" value="' . format_to_edit(get_user_option("optimizemember_subscr_id", $user_id)) . '" class="regular-text" /></td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_subscr_id", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_custom", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-custom">Custom Value:</label> <a href="#" onclick="alert(\'A Paid Subscription is always associated with a Custom String that is passed through the custom=\\\'\\\'' . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(esc_attr($_SERVER["HTTP_HOST"]), 3) . '\\\'\\\' attribute of your Shortcode. This Custom Value, MUST always start with your domain name. However, you can also pipe delimit additional values after your domain, if you need to.\\n\\nFor example:\\n' . c_ws_plugin__optimizemember_utils_strings::esc_js_sq(esc_attr($_SERVER["HTTP_HOST"]), 3) . '|cv1|cv2|cv3\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
             echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_custom" id="ws-plugin--optimizemember-profile-optimizemember-custom" value="' . format_to_edit(get_user_option("optimizemember_custom", $user_id)) . '" class="regular-text" /></td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_custom", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_registration_ip", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-registration-ip">Registration IP:</label> <a href="#" onclick="alert(\'This is the IP Address the User had at the time of registration. If you don\\\'t know the User\\\'s IP Address, just leave this blank. If this is left empty, optimizeMember will make attempts in the future to grab the User\\\'s IP Address.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
             echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_registration_ip" id="ws-plugin--optimizemember-profile-optimizemember-registration-ip" value="' . format_to_edit(get_user_option("optimizemember_registration_ip", $user_id)) . '" class="regular-text" /></td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_registration_ip", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             if (!is_multisite() || !c_ws_plugin__optimizemember_utils_conds::is_multisite_farm() || is_main_site()) {
                 foreach ($user->allcaps as $cap => $cap_enabled) {
                     if (preg_match("/^access_optimizemember_ccap_/", $cap)) {
                         $ccaps[] = preg_replace("/^access_optimizemember_ccap_/", "", $cap);
                     }
                 }
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_ccaps", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 echo '<tr>' . "\n";
                 echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-ccaps">Packages/Custom Capabilities:</label> <a href="#" onclick="alert(\'Optional. This is VERY advanced.\\nSee: optimizeMember -> API Scripting -> Custom Capabilities.' . (is_multisite() ? '\\n\\nCustom Capabilities are assigned on a per-Blog basis. So having a set of Custom Capabilities for one Blog, and having NO Custom Capabilities on another Blog - is very common. This is how permissions are designed to work.' : '') . '\'); return false;" tabindex="-1">[?]</a>' . (is_multisite() ? '<br /><small>( for this Blog )</small>' : '') . '</th>' . "\n";
                 echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_ccaps" id="ws-plugin--optimizemember-profile-optimizemember-ccaps" value="' . format_to_edit(!empty($ccaps) ? implode(",", $ccaps) : "") . '" class="regular-text" onkeyup="if(this.value.match(/[^a-z_0-9,]/)) this.value = jQuery.trim (jQuery.trim (this.value).replace (/[ \\-]/g, \'_\').replace (/[^a-z_0-9,]/gi, \'\').toLowerCase ());" /></td>' . "\n";
                 echo '</tr>' . "\n";
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_ccaps", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
             }
             /**/
             if (!$user->has_cap("administrator")) {
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_auto_eot_time", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 echo '<tr>' . "\n";
                 $auto_eot_time = get_user_option("optimizemember_auto_eot_time", $user_id);
                 $auto_eot_time = $auto_eot_time ? date("D M j, Y g:i a T", $auto_eot_time) : "";
                 echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-auto-eot-time">Automatic EOT Time:</label> <a href="#" onclick="alert(\'EOT = End Of Term. ( i.e. Account Expiration / Termination. ).\\n\\nIf you leave this empty, optimizeMember will configure an EOT Time automatically, based on the paid Subscription associated with this account. In other words, if a paid Subscription expires, is cancelled, terminated, refunded, reversed, or charged back to you; optimizeMember will deal with the EOT automatically.\\n\\nThat being said, if you would rather take control over this, you can. If you type in a date manually, optimizeMember will obey the Auto-EOT Time that you\\\'ve given, no matter what. In other words, you can force certain Members to expire automatically, at a time that you specify. optimizeMember will obey.\\n\\nValid formats for Automatic EOT Time:\\n\\nmm/dd/yyyy\\nyyyy-mm-dd\\n+1 year\\n+2 weeks\\n+2 months\\n+10 minutes\\nnext thursday\\ntomorrow\\ntoday\\n\\n* anything compatible with PHP\\\'s strtotime() function.\'); return false;" tabindex="-1">[?]</a>' . ($auto_eot_time ? '<br /><small>( <a href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time" target="_blank" rel="external">Universal Time / GMT</a> )</small>' : '') . '</th>' . "\n";
                 echo '<td><input type="text" autocomplete="off" name="ws_plugin__optimizemember_profile_optimizemember_auto_eot_time" id="ws-plugin--optimizemember-profile-optimizemember-auto-eot-time" value="' . format_to_edit($auto_eot_time) . '" class="regular-text" /></td>' . "\n";
                 echo '</tr>' . "\n";
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_auto_eot_time", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
             }
             /**/
             if (c_ws_plugin__optimizemember_list_servers::list_servers_integrated()) {
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_opt_in", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 echo '<tr>' . "\n";
                 echo '<th><label for="ws-plugin--optimizemember-profile-opt-in">Re-process List Servers:</label> <a href="#" onclick="alert(\'You have at least one List Server integrated with optimizeMember. Would you like to re-process a confirmation request for this User? If not, just leave the box un-checked.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
                 echo '<td><label><input type="checkbox" name="ws_plugin__optimizemember_profile_opt_in" id="ws-plugin--optimizemember-profile-opt-in" value="1" /> Yes, send a mailing list confirmation email to this User.</label></td>' . "\n";
                 echo '</tr>' . "\n";
                 /**/
                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                 do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_opt_in", get_defined_vars());
                 unset($__refs, $__v);
                 /* Unset defined __refs, __v. */
                 /**/
                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_auto_opt_out_transitions"]) {
                     if ($custom_reg_auto_op_outs = c_ws_plugin__optimizemember_utils_strings::wrap_deep($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_auto_opt_outs"], "/^", "\$/i")) {
                         if (c_ws_plugin__optimizemember_utils_arrays::in_regex_array("user-role-change", $custom_reg_auto_op_outs) || c_ws_plugin__optimizemember_utils_arrays::in_regex_array("modification", $custom_reg_auto_op_outs)) {
                             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_auto_opt_out_transitions", get_defined_vars());
                             unset($__refs, $__v);
                             /* Unset defined __refs, __v. */
                             /**/
                             echo '<tr>' . "\n";
                             echo '<th><label for="ws-plugin--optimizemember-custom-reg-auto-opt-out-transitions">Allow List Transitioning:</label> <a href="#" onclick="alert(\'You\\\'ve configured optimizeMember with List Transitions enabled. By leaving this box checked, optimizeMember will Transition the User\\\'s mailing list subscription(s) automatically. For example, if a Member is demoted from Level #2, down to Level #1; optimizeMember will add them to the Level #1 List(s) after it removes them from the Level #2 List(s).\\n\\nHowever, the transition will ONLY occur, if optimizeMember IS able to successfully remove them from an existing List. In other words, if they are currently NOT subscribed to any List(s), optimizeMember will NOT transition them to any new Lists ( intended behavior ).\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
                             echo '<td><label><input type="checkbox" name="ws_plugin__optimizemember_custom_reg_auto_opt_out_transitions" id="ws-plugin--optimizemember-custom-reg-auto-opt-out-transitions" value="1" checked="checked" /> Yes, automatically transition this User\'s mailing list subscription(s) when/if I change their Role.</label></td>' . "\n";
                             echo '</tr>' . "\n";
                             /**/
                             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_auto_opt_out_transitions", get_defined_vars());
                             unset($__refs, $__v);
                             /* Unset defined __refs, __v. */
                         }
                     }
                 }
             }
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_ip_restrictions", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-ip-restrictions">Reset IP Restrictions:</label> <a href="#" onclick="alert(\'A single Username is only valid for a certain number of unique IP addresses ( as configured in your optimizeMember -> General Options ). Once that limit is reached, optimizeMember assumes there has been a security breach. At that time, optimizeMember will place a temporary ban ( preventing access ).\\n\\nIf you have spoken to a legitimate Customer that is receiving an error upon logging in ( ex: 503 / too many IP addresses ), you can remove this temporary ban by checking the box below. If the abusive behavior continues, optimizeMember will automatically re-instate IP Restrictions in the future. If you would like to gain further control over IP Restrictions, please check your General Options panel for optimizeMember.\'); return false;" tabindex="-1">[?]</a></th>' . "\n";
             echo '<td><label><input type="checkbox" name="ws_plugin__optimizemember_profile_ip_restrictions" id="ws-plugin--optimizemember-profile-ip-restrictions" value="1" /> Yes, delete/reset IP Restrictions associated with this Username.</label>' . (c_ws_plugin__optimizemember_ip_restrictions::specific_ip_restriction_breached_security(strtolower($user->user_login)) ? '<br /><em>*Note* this User HAS breached security through existing IP Restrictions.</em>' : '<br /><em>*Note* this User is NOT currently banned by any of your IP Restrictions.</em>') . '</td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_ip_restrictions", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_fields"]) {
                 /* Only if configured. */
                 if ($fields_applicable = c_ws_plugin__optimizemember_custom_reg_fields::custom_fields_configured_at_level($level, "administrative")) {
                     echo '<tr>' . "\n";
                     echo '<td colspan="2">' . "\n";
                     echo '<div style="height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
                     echo '</td>' . "\n";
                     echo '</tr>' . "\n";
                     /**/
                     $fields = get_user_option("optimizemember_custom_fields", $user_id);
                     /* Existing fields. */
                     /**/
                     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                     do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_custom_fields", get_defined_vars());
                     unset($__refs, $__v);
                     /* Unset defined __refs, __v. */
                     /**/
                     foreach (json_decode($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_fields"], true) as $field) {
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_before", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         if (in_array($field["id"], $fields_applicable)) {
                             $field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"]));
                             $field_id_class = preg_replace("/_/", "-", $field_var);
                             /**/
                             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                             if (apply_filters("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_display", true, get_defined_vars())) {
                                 if (!empty($field["section"]) && $field["section"] === "yes") {
                                     /* Starts a new section? */
                                     echo '<tr><td colspan="2"><div class="ws-plugin--optimizemember-profile-divider-section' . (!empty($field["sectitle"]) ? '-title' : '') . '">' . (!empty($field["sectitle"]) ? $field["sectitle"] : '') . '</div></td></tr>';
                                 }
                                 /**/
                                 echo '<tr>' . "\n";
                                 echo '<th><label for="ws-plugin--optimizemember-profile-' . esc_attr($field_id_class) . '">' . (preg_match("/^(checkbox|pre_checkbox)\$/", $field["type"]) ? ucwords(preg_replace("/_/", " ", $field_var)) : $field["label"]) . ':</label></th>' . "\n";
                                 echo '<td>' . c_ws_plugin__optimizemember_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__optimizemember_profile_", "ws-plugin--optimizemember-profile-", "", preg_match("/^(text|textarea|select|selects)\$/", $field["type"]) ? "width:99%;" : "", "", "", $fields, $fields[$field_var], "administrative") . '</td>' . "\n";
                                 echo '</tr>' . "\n";
                             }
                             unset($__refs, $__v);
                             /* Unset defined __refs, __v. */
                         }
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_after", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                     }
                     /**/
                     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                     do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_custom_fields", get_defined_vars());
                     unset($__refs, $__v);
                     /* Unset defined __refs, __v. */
                     /**/
                     echo '<tr>' . "\n";
                     echo '<td colspan="2">' . "\n";
                     echo '<div style="height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
                     echo '</td>' . "\n";
                     echo '</tr>' . "\n";
                 }
             }
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_notes", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '<tr>' . "\n";
             echo '<th><label for="ws-plugin--optimizemember-profile-optimizemember-notes">Administrative Notes:</label> <a href="#" onclick="alert(\'This is for Administrative purposes. You can keep a list of Notations about this account. These Notations are private; Users/Members will never see these.\\n\\n*Note* The optimizeMember software may `append` Notes to this field occasionally, under special circumstances. For example, when/if optimizeMember demotes a paid Member to a Free Subscriber, optimizeMember will leave a Note in this field.\'); return false;" tabindex="-1">[?]</a><br /><br /><small>These Notations are private; Users/Members will never see any of these notes.</small></th>' . "\n";
             echo '<td><textarea name="ws_plugin__optimizemember_profile_optimizemember_notes" id="ws-plugin--optimizemember-profile-optimizemember-notes" rows="5" wrap="off" spellcheck="false" style="width:99%;">' . format_to_edit(get_user_option("optimizemember_notes", $user_id)) . '</textarea></td>' . "\n";
             echo '</tr>' . "\n";
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_notes", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             echo '</table>' . "\n";
             /**/
             echo '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
         } else {
             if ($current_user->ID === $user->ID) {
                 if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_fields"]) {
                     if ($fields_applicable = c_ws_plugin__optimizemember_custom_reg_fields::custom_fields_configured_at_level($level, "profile")) {
                         echo '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
                         /**/
                         echo '<h3>' . _x("Additional Profile Fields", "s2member-front", "s2member") . (is_multisite() ? ' ' . _x("( for this site )", "s2member-front", "s2member") : "") . '</h3>' . "\n";
                         /**/
                         echo '<table class="form-table">' . "\n";
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         $fields = get_user_option("optimizemember_custom_fields", $user_id);
                         /* Existing fields. */
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_before_custom_fields", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         foreach (json_decode($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["custom_reg_fields"], true) as $field) {
                             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_before", get_defined_vars());
                             unset($__refs, $__v);
                             /* Unset defined __refs, __v. */
                             /**/
                             if (in_array($field["id"], $fields_applicable)) {
                                 $field_var = preg_replace("/[^a-z0-9]/i", "_", strtolower($field["id"]));
                                 $field_id_class = preg_replace("/_/", "-", $field_var);
                                 /**/
                                 eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                                 if (apply_filters("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_display", true, get_defined_vars())) {
                                     if (!empty($field["section"]) && $field["section"] === "yes") {
                                         /* Starts a new section? */
                                         echo '<tr><td colspan="2"><div class="ws-plugin--optimizemember-profile-divider-section' . (!empty($field["sectitle"]) ? '-title' : '') . '">' . (!empty($field["sectitle"]) ? $field["sectitle"] : '') . '</div></td></tr>';
                                     }
                                     /**/
                                     echo '<tr>' . "\n";
                                     echo '<th><label for="ws-plugin--optimizemember-profile-' . esc_attr($field_id_class) . '">' . (preg_match("/^(checkbox|pre_checkbox)\$/", $field["type"]) ? ucwords(preg_replace("/_/", " ", $field_var)) : $field["label"]) . ':</label></th>' . "\n";
                                     echo '<td>' . c_ws_plugin__optimizemember_custom_reg_fields::custom_field_gen(__FUNCTION__, $field, "ws_plugin__optimizemember_profile_", "ws-plugin--optimizemember-profile-", "", preg_match("/^(text|textarea|select|selects)\$/", $field["type"]) ? "width:99%;" : "", "", "", $fields, $fields[$field_var], "profile") . '</td>' . "\n";
                                     echo '</tr>' . "\n";
                                 }
                                 unset($__refs, $__v);
                                 /* Unset defined __refs, __v. */
                             }
                             /**/
                             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                             do_action("ws_plugin__optimizemember_during_users_list_edit_cols_during_custom_fields_after", get_defined_vars());
                             unset($__refs, $__v);
                             /* Unset defined __refs, __v. */
                         }
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after_custom_fields", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__optimizemember_during_users_list_edit_cols_after", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         echo '</table>' . "\n";
                         /**/
                         echo '<div style="margin:25px 0 25px 0; height:1px; line-height:1px; background:#CCCCCC;"></div>' . "\n";
                     }
                 }
             }
         }
     }
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__optimizemember_after_users_list_edit_cols", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     return;
     /* Return for uniformity. */
 }