/**
 * status widget : multiple instance
 * admin instance
 *
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_status_admin($widget_args = 1)
{
    global $wp_registered_widgets, $mgm_sidebar_widget;
    static $updated = false;
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    $options = $mgm_sidebar_widget->status_widget;
    if (!is_array($options)) {
        $options = array();
    }
    // sidebar
    $m_sidebar = mgm_post_var('sidebar');
    // update
    if (!$updated && !empty($m_sidebar)) {
        $sidebar = (string) $m_sidebar;
        $sidebars_widgets = wp_get_sidebars_widgets();
        if (isset($sidebars_widgets[$sidebar])) {
            $this_sidebar =& $sidebars_widgets[$sidebar];
        } else {
            $this_sidebar = array();
        }
        foreach ($this_sidebar as $_widget_id) {
            // check
            if (isset($wp_registered_widgets[$_widget_id]['callback']) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number'])) {
                if ('mgm_widget_status' == $wp_registered_widgets[$_widget_id]['callback']) {
                    $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
                    if (!in_array("status-{$widget_number}", mgm_post_var('widget-id'))) {
                        // the widget has been removed.
                        unset($options[$widget_number]);
                    }
                }
            }
        }
        foreach ((array) mgm_post_var('mgm_widget_status') as $widget_number => $mgm_widget_status) {
            if (!isset($mgm_widget_status['title']) && isset($options[$widget_number])) {
                // user clicked cancel
                continue;
            }
            // set vars
            $title = isset($mgm_widget_status['title']) ? stripslashes($mgm_widget_status['title']) : '';
            $active_intro = isset($mgm_widget_status['active_intro']) ? stripslashes($mgm_widget_status['active_intro']) : '';
            $inactive_intro = isset($mgm_widget_status['inactive_intro']) ? stripslashes($mgm_widget_status['inactive_intro']) : '';
            $logged_out_intro = isset($mgm_widget_status['logged_out_intro']) ? stripslashes($mgm_widget_status['logged_out_intro']) : '';
            $hide_logged_out = isset($mgm_widget_status['hide_logged_out']) ? (int) $mgm_widget_status['hide_logged_out'] : false;
            // set
            $options[$widget_number] = compact('title', 'active_intro', 'inactive_intro', 'logged_out_intro', 'hide_logged_out');
        }
        $mgm_sidebar_widget->status_widget = $options;
        // update_option('mgm_sidebar_widget', $mgm_sidebar_widget);
        $mgm_sidebar_widget->save();
        // updated
        $updated = true;
    }
    // get selected
    if (-1 == $number) {
        $number = '%i%';
        $title = __('Membership Status', 'mgm');
        $active_intro = trim($mgm_sidebar_widget->default_text['active_intro']);
        $inactive_intro = trim($mgm_sidebar_widget->default_text['inactive_intro']);
        $logged_out_intro = trim($mgm_sidebar_widget->default_text['logged_out_intro']);
        $hide_logged_out = 0;
    } else {
        $title = stripslashes($options[$number]['title']);
        $active_intro = stripslashes($options[$number]['active_intro']);
        $inactive_intro = stripslashes($options[$number]['inactive_intro']);
        $logged_out_intro = stripslashes($options[$number]['logged_out_intro']);
        $hide_logged_out = (int) $options[$number]['hide_logged_out'];
    }
    // html
    $html = '<input type="hidden" name="mgm_sidebar_widget_submit" id="mgm_sidebar_widget_submit" value="1" />
				<p>
				<div class="mgm_margin_bottom_5px">
				<label for="mgm_sidebar_widget_title">
					<div><strong>' . __('Widget Title', 'mgm') . '</strong></div>
					<input class="mgm_width_300px" type="text" value="' . $title . '" id="mgm_widget_status_title_' . $number . '" name="mgm_widget_status[' . $number . '][title]" />
				</label>
				</div>
				<div class="mgm_margin_bottom_5px">
				<label for="mgm_sidebar_widget_active_intro">
					<div><strong>' . __('User Active Introduction', 'mgm') . '</strong> - Use [membership_type] and [expiry_date]</div>
					<textarea rows="6" cols="50" id="mgm_widget_status_active_intro_' . $number . '" name="mgm_widget_status[' . $number . '][active_intro]">' . $active_intro . '</textarea>
				</label>
				</div>
				<div class="mgm_margin_bottom_5px">				
				<label for="mgm_sidebar_widget_inactive_intro">
					<div><strong>' . __('User Inactive Introduction', 'mgm') . '</strong></div>
					<textarea rows="6" cols="50" id="mgm_widget_status_inactive_intro_' . $number . '" name="mgm_widget_status[' . $number . '][inactive_intro]">' . $inactive_intro . '</textarea>
				</label>
				</div>
				<div class="mgm_margin_bottom_5px">				
				<label for="mgm_sidebar_widget_logged_out_intro">
					<div><strong>' . __('User Logged Out Introduction', 'mgm') . '</strong></div>
					<textarea rows="6" cols="50" id="mgm_widget_status_logged_out_intro_' . $number . '" name="mgm_widget_status[' . $number . '][logged_out_intro]">' . $logged_out_intro . '</textarea>
				</label>
				</div>
				<div class="mgm_margin_bottom_5px">				
				<label for="mgm_sidebar_widget_hide_logged_out">
					<div><strong>' . __('Hide widget when user logged out?', 'mgm') . '</strong>
					<input type="checkbox" id="mgm_widget_status_hide_logged_out_' . $number . '" name="mgm_widget_status[' . $number . '][hide_logged_out]" value="1" ' . ($hide_logged_out ? 'checked="checked"' : '') . ' />
				</div>
				</label>
				</div>				
			</p>';
    // print
    print $html;
}
/**
 * register widget : multiple instance
 * admin instance
 *
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_registration_admin($widget_args = 1)
{
    global $wp_registered_widgets, $mgm_sidebar_widget;
    static $updated = false;
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    // options init
    $options = $mgm_sidebar_widget->register_widget;
    // default
    if (!is_array($options)) {
        $options = array();
    }
    // m_sidebar
    $m_sidebar = mgm_post_var('sidebar');
    // update
    if (!$updated && !empty($m_sidebar)) {
        $sidebar = (string) $m_sidebar;
        $sidebars_widgets = wp_get_sidebars_widgets();
        if (isset($sidebars_widgets[$sidebar])) {
            $this_sidebar =& $sidebars_widgets[$sidebar];
        } else {
            $this_sidebar = array();
        }
        foreach ($this_sidebar as $_widget_id) {
            // check
            if (isset($wp_registered_widgets[$_widget_id]['callback']) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number'])) {
                if ('mgm_widget_registration' == $wp_registered_widgets[$_widget_id]['callback']) {
                    $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
                    if (!in_array("registration-{$widget_number}", mgm_post_var('widget-id'))) {
                        // the widget has been removed.
                        unset($options[$widget_number]);
                    }
                }
            }
        }
        // update
        foreach ((array) mgm_post_var('mgm_widget_registration') as $widget_number => $mgm_widget_registration) {
            if (!isset($mgm_widget_registration['title']) && isset($options[$widget_number])) {
                // user clicked cancel
                continue;
            }
            // set vars
            $title = isset($mgm_widget_registration['title']) ? stripslashes($mgm_widget_registration['title']) : '';
            $intro = isset($mgm_widget_registration['intro']) ? stripslashes($mgm_widget_registration['intro']) : '';
            $use_custom_fields = isset($mgm_widget_registration['use_custom_fields']) ? $mgm_widget_registration['use_custom_fields'] : false;
            //Issue #777
            $default_subscription_pack = isset($mgm_widget_registration['default_subscription_pack']) ? $mgm_widget_registration['default_subscription_pack'] : 'free';
            // set
            $options[$widget_number] = compact('title', 'intro', 'use_custom_fields', 'default_subscription_pack');
        }
        // update
        $mgm_sidebar_widget->register_widget = $options;
        // save
        $mgm_sidebar_widget->save();
        // updated
        $updated = true;
    }
    // get selected
    if (-1 == $number) {
        $number = '%i%';
        // convert to js expression
        $js_number = '_i_';
        $title = __('Register', 'mgm');
        $intro = trim($mgm_sidebar_widget->default_text['active_intro']);
        $use_custom_fields = false;
        $default_subscription_pack = 'free';
    } else {
        // convert to js expression
        $js_number = $number;
        $title = stripslashes($options[$number]['title']);
        $intro = stripslashes($options[$number]['intro']);
        $use_custom_fields = $options[$number]['use_custom_fields'];
        $default_subscription_pack = $options[$number]['default_subscription_pack'];
    }
    // Issue #777
    $subscription_pack_list = sprintf('<option value="-">%s</option>', __('Select', 'mgm'));
    foreach ($packages = mgm_get_subscription_packages() as $pack) {
        if ($default_subscription_pack == $pack['key']) {
            $subscription_pack_list .= sprintf('<option selected="selected" value="%s">%s</option>', $pack['key'], $pack['label']);
        } else {
            $subscription_pack_list .= sprintf('<option value="%s">%s</option>', $pack['key'], $pack['label']);
        }
    }
    // generate html
    $html = '<input type="hidden" name="mgm_widget_registration[' . $number . '][submit]" id="mgm_widget_registration_submit_' . $js_number . '" value="1" />
			 <p>
				<div class="mgm_margin_bottom_5px">
					<label for="mgm_register_sidebar_widget_title">
						<div><strong>' . __('Widget Title', 'mgm') . '</strong></div>
						<input class="mgm_width_300px" type="text" name="mgm_widget_registration[' . $number . '][title]" id="mgm_widget_registration_title_' . $js_number . '"  value="' . $title . '"/>
					</label>
				</div>
				<div class="mgm_margin_bottom_5px">
					<label for="mgm_register_sidebar_widget_use_custom_fields">						
						<input class="mgm_width_30px" type="checkbox" ' . ($use_custom_fields ? 'checked="checked"' : '') . ' 
						name="mgm_widget_registration[' . $number . '][use_custom_fields]" id="mgm_widget_registration_use_custom_fields_' . $js_number . '" value="1"/>
						<strong>' . __('Use Custom Fields in form?', 'mgm') . '</strong>
					</label>
				</div>
				<div class="mgm_margin_bottom_5px" id="cusFldDropdown_' . $number . '">
					<label for="mgm_register__widget_default_subscription_pack">						
						<div><strong>' . __('Select default subscription pack ', 'mgm') . '</strong></div>
						<select class="mgm_width_300px" name="mgm_widget_registration[' . $number . '][default_subscription_pack]" 
						id="mgm_widget_registration_default_subscription_pack_' . $js_number . '">' . $subscription_pack_list . '</select>
					</label>
				</div>
				<div class="mgm_margin_bottom_5px">
					<label for="mgm_register_sidebar_widget_active_intro">
						<div><strong>' . __('Introduction', 'mgm') . '</strong></div>
						<textarea rows="6" cols="50" name="mgm_widget_registration[' . $number . '][intro]" id="mgm_widget_registration_intro_' . $js_number . '" >' . $intro . '</textarea>
					</label>
				</div>
			 </p>';
    // script
    $html .= '<script language="javascript">
	jQuery(document).ready(function(){			
		if(jQuery("#mgm_widget_registration_use_custom_fields_' . $js_number . '").val() == 1){
			//issue #1298
			if(jQuery("#mgm_widget_registration_use_custom_fields_' . $js_number . '").is(":checked")){			
				jQuery("#cusFldDropdown_' . $js_number . '").hide();
			}
		}else{
			jQuery("#cusFldDropdown_' . $js_number . '").show();
		}
	
		jQuery("#mgm_widget_registration_use_custom_fields_' . $js_number . '").click(function() {			
			if(this.checked){	
				jQuery("#cusFldDropdown_' . $js_number . '").hide();
				jQuery("#mgm_widget_registration_use_custom_fields_' . $js_number . '").val(1);
			}else{
				jQuery("#cusFldDropdown_' . $js_number . '").show();
				jQuery("#mgm_widget_registration_use_custom_fields_' . $js_number . '").val(1);				  
			}
		});
	});	
	</script>';
    // print
    print $html;
}
/**
 * text widget : multiple instance
 * admin instance
 *
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_text_admin($widget_args = 1)
{
    global $wp_registered_widgets, $mgm_sidebar_widget;
    static $updated = false;
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    $options = $mgm_sidebar_widget->text_widget;
    if (!is_array($options)) {
        $options = array();
    }
    // m_sidebar
    $m_sidebar = mgm_post_var('sidebar');
    // updated
    if (!$updated && !empty($m_sidebar)) {
        $sidebar = (string) $m_sidebar;
        $sidebars_widgets = wp_get_sidebars_widgets();
        if (isset($sidebars_widgets[$sidebar])) {
            $this_sidebar =& $sidebars_widgets[$sidebar];
        } else {
            $this_sidebar = array();
        }
        foreach ($this_sidebar as $_widget_id) {
            // check
            if (isset($wp_registered_widgets[$_widget_id]['callback']) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number'])) {
                if ('mgm_widget_text' == $wp_registered_widgets[$_widget_id]['callback']) {
                    $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
                    if (!in_array("text-{$widget_number}", mgm_post_var('widget-id'))) {
                        // the widget has been removed.
                        unset($options[$widget_number]);
                    }
                }
            }
        }
        foreach ((array) mgm_post_var('mgm_widget_text') as $widget_number => $mgm_widget_text) {
            if (!isset($mgm_widget_text['text']) && isset($options[$widget_number])) {
                // user clicked cancel
                continue;
            }
            // title
            $title = isset($mgm_widget_text['title']) ? strip_tags(stripslashes($mgm_widget_text['title'])) : '';
            // text
            if (current_user_can('unfiltered_html')) {
                $text = isset($mgm_widget_text['text']) ? stripslashes($mgm_widget_text['text']) : '';
            } else {
                $text = isset($mgm_widget_text['text']) ? stripslashes(wp_filter_post_kses($mgm_widget_text['text'])) : '';
            }
            // types
            $access_membership_types = isset($mgm_widget_text['access_membership_types']) ? implode('|', $mgm_widget_text['access_membership_types']) : '';
            // set
            $options[$widget_number] = compact('title', 'text', 'access_membership_types');
        }
        // set
        $mgm_sidebar_widget->text_widget = $options;
        // update_option('mgm_sidebar_widget', $mgm_sidebar_widget);
        $mgm_sidebar_widget->save();
        // updated
        $updated = true;
    }
    // get available membership types
    $membership_types = mgm_get_class('membership_types')->membership_types;
    // selected
    $selected_membership_types = array();
    // get selected
    if (-1 == $number) {
        $number = '%i%';
        $title = '';
        $text = '';
        $selected_membership_types = implode(';', $membership_types);
    } else {
        $title = esc_attr($options[$number]['title']);
        $text = format_to_edit($options[$number]['text']);
        if (isset($options[$number]['access_membership_types'])) {
            $selected_membership_types = explode('|', $options[$number]['access_membership_types']);
        }
    }
    echo '<p>' . __('Available to', 'mgm') . ':<br />';
    foreach ((array) $membership_types as $type_code => $type_name) {
        if (is_array($selected_membership_types)) {
            $c = in_array($type_code, $selected_membership_types) ? 'checked="checked"' : '';
        } else {
            $c = '';
        }
        echo '<input type="checkbox" id="mgm_widget_text_' . $number . '" class="checkbox" name="mgm_widget_text[' . $number . '][access_membership_types][]" value="' . $type_code . '" ' . $c . ' />
			  &nbsp;&nbsp;<label class="mgm_font_italic" for="' . __($type_code, 'mgm') . '">' . __($type_name, 'mgm') . '</label>&nbsp;&nbsp;';
    }
    echo '</p>';
    ?>

	<p>
		<label><?php 
    _e('Title', 'mgm');
    ?>
:</label> 		
		<input class="widefat" id="mgm_widget_text_<?php 
    echo $number;
    ?>
" name="mgm_widget_text[<?php 
    echo $number;
    ?>
][title]" type="text" value="<?php 
    echo $title;
    ?>
" />
	</p>
	<p>
		<label><?php 
    _e('Text', 'mgm');
    ?>
: </label>
		<textarea class="widefat" rows="16" cols="20" id="mgm_widget_text_<?php 
    echo $number;
    ?>
" name="mgm_widget_text[<?php 
    echo $number;
    ?>
][text]"><?php 
    echo $text;
    ?>
</textarea>
		<input type="hidden" name="mgm_widget_text[<?php 
    echo $number;
    ?>
][submit]" value="1" />
	</p>
	<?php 
}
 /**
  * API method save settings, callback main and quick settings data save
  *
  * must be overriden in module	 
  *
  * @param none
  * @return none	 
  */
 function settings_update()
 {
     // form type
     switch (mgm_post_var('setting_form')) {
         case 'box':
             // from box
             break;
         case 'main':
             // form main
             break;
     }
     // return
     return true;
 }
 function payment_history_export()
 {
     global $wpdb;
     // data
     $data = array();
     // filter
     $sql_filter = $payment_type = '';
     // check
     if (isset($_POST['search_field_name'])) {
         // issue#: 219
         $search_field_name = $_POST['search_field_name'];
         // for sql
         $search_field_value = mgm_escape($_POST['search_field_value']);
         // for sql
         $search_field_value = trim($search_field_value);
         // by field
         switch ($search_field_name) {
             case 'username':
                 // issue#: 347(LIKE SEARCH)
                 $sql_filter = " AND user.user_login LIKE '%{$search_field_value}%'";
                 break;
             case 'id':
                 $sql_filter = " AND user.ID = '" . (int) $search_field_value . "'";
                 break;
             case 'email':
                 // issue#: 347(LIKE SEARCH)
                 $sql_filter = " AND user.user_email LIKE '%{$search_field_value}%'";
                 break;
             case 'membership_type':
                 // members
                 $members = mgm_get_members_with('membership_type', $search_field_value);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND user.ID IN ({$members_in})";
                 break;
             case 'payment_type':
                 $payment_type = $search_field_value;
                 break;
             case 'first_name':
             case 'last_name':
                 // members
                 $members = mgm_get_members_with($search_field_name, $search_field_value);
                 //check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND user.ID IN ({$members_in})";
                 break;
         }
     }
     if (!empty($payment_type)) {
         $con = " AND transaction.payment_type =  '" . $payment_type . "' ";
     } else {
         $con = '';
     }
     //payment success check
     $pay_succ = " AND transaction.status_text =  'Last payment was successful'";
     $transaction_sql = "SELECT SQL_CALC_FOUND_ROWS * FROM " . TBL_MGM_TRANSACTION . " transaction LEFT JOIN {$wpdb->users} user ON transaction.user_id = user.ID ";
     $transaction_sql .= "WHERE transaction.module IS NOT NULL";
     $transaction_sql .= $pay_succ;
     $transaction_sql .= $con;
     $transaction_sql .= $sql_filter;
     $transaction_sql .= " ORDER BY transaction.transaction_dt DESC {$sql_limit}";
     $data['transactions'] = $wpdb->get_results($transaction_sql);
     $export_transactions = array();
     if (count($data['transactions']) > 0) {
         foreach ($data['transactions'] as $tran_log) {
             $json_decoded = json_decode($tran_log->data);
             $user_obj = get_userdata($json_decoded->user_id);
             //empty obj
             $row = new stdClass();
             if (!empty($user_obj)) {
                 //export fields
                 $row->id = $user_obj->ID;
                 $row->username = $user_obj->user_login;
                 $row->firstname = $user_obj->first_name;
                 $row->lastname = $user_obj->last_name;
                 $row->email = $user_obj->user_email;
                 $row->payment_type = ucwords(str_replace('_', ' ', $tran_log->payment_type));
                 $row->module = ucwords($tran_log->module);
                 $row->amount = $json_decoded->trial_on ? $json_decoded->trial_cost : $json_decoded->cost;
                 $row->transaction_date = date(MGM_DATE_FORMAT_SHORT, strtotime($tran_log->transaction_dt));
             }
             // cache
             $export_transactions[] = $row;
             // unset
             unset($row);
         }
     }
     // message
     $message = __('Error while exporting transactions. Could not find any transaction with requested search parameters.', 'mgm');
     // default response
     $response = array('status' => 'error', 'message' => $message);
     // check
     if (count($export_transactions) > 0) {
         // success
         $success = count($export_transactions);
         // create
         if (mgm_post_var('export_format') == 'csv') {
             $filename = mgm_create_csv_file($export_transactions, 'export_transactions');
         } else {
             $filename = mgm_create_xls_file($export_transactions, 'export_transactions');
         }
         // src
         $file_src = MGM_FILES_EXPORT_URL . $filename;
         // message
         $response['message'] = sprintf(__('Successfully exported %d %s.', 'mgm'), $success, $success > 1 ? 'transactions' : 'transaction');
         $response['status'] = 'success';
         $response['src'] = $file_src;
     }
     // return response
     echo json_encode($response);
     exit;
 }
 /**
  * Validate credit card fields.
  * Modules can override this function
  * @param unknown_type $calling_fun
  * @return unknown
  */
 function validate_cc_fields($calling_fun)
 {
     // init error
     $error = new WP_Error();
     // post
     $post = array();
     // post data
     $post['mgm_card_holder_name'] = mgm_post_var('mgm_card_holder_name');
     $post['mgm_card_number'] = mgm_post_var('mgm_card_number');
     $post['mgm_card_code'] = mgm_post_var('mgm_card_code');
     $post['mgm_card_type'] = mgm_post_var('mgm_card_type');
     // card exp
     $post['mgm_card_expiry_month'] = mgm_post_var('mgm_card_expiry_month');
     $post['mgm_card_expiry_year'] = mgm_post_var('mgm_card_expiry_year');
     // trim
     $post = array_map('trim', $post);
     // check
     if (empty($post['mgm_card_holder_name'])) {
         $error->add('invalid_card_holder_name', __('<strong>ERROR</strong>: Invalid Card Holder Name', 'mgm'));
     }
     if (!is_numeric($post['mgm_card_number']) || strlen($post['mgm_card_number']) > 16 && strlen($post['mgm_card_number']) < 13) {
         $error->add('invalid_card_number', __('<strong>ERROR</strong>: Invalid Credit Card Number', 'mgm'));
     }
     if (!is_numeric($post['mgm_card_expiry_month']) || !is_numeric($post['mgm_card_expiry_year'])) {
         $error->add('invalid_expiry', __('<strong>ERROR</strong>: Invalid Credit Card Expiry', 'mgm'));
     }
     if (!is_numeric($post['mgm_card_code']) || strlen($post['mgm_card_code']) > 4 && strlen($post['mgm_card_code']) < 3) {
         $error->add('invalid_card_code', __('<strong>ERROR</strong>: Invalid CVV', 'mgm'));
     }
     if (empty($post['mgm_card_type'])) {
         $error->add('invalid_cctype', __('<strong>ERROR</strong>: Invalid Card Type', 'mgm'));
     }
     // no error
     if ($error->get_error_message() == '') {
         return false;
     }
     // return
     return $error;
 }
 function purchase_export()
 {
     global $wpdb;
     // data
     $data = array();
     // filter
     $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
     $search_field_name = mgm_post_var('search_field_name');
     // check
     if (!empty($search_field_name)) {
         // post
         $search_field_value = mgm_post_var('search_field_value');
         $search_field_value_two = mgm_post_var('search_field_value_two');
         // view data
         $data['search_field_name'] = $search_field_name;
         // for display
         //issue #1281
         $data['search_field_value'] = htmlentities($search_field_value, ENT_QUOTES, "UTF-8");
         // for display
         $data['search_field_value_two'] = htmlentities($search_field_value_two, ENT_QUOTES, "UTF-8");
         // for display
         //searc value
         $search_field_value = esc_sql($search_field_value);
         // for sql
         // end date value
         $search_field_value_two = esc_sql($search_field_value_two);
         // for sql
         //current date
         $curr_date = mgm_get_current_datetime();
         $current_date = $curr_date['timestamp'];
         // by field
         switch ($search_field_name) {
             case 'user_login':
                 $sql_filter = " AND (`user_login` LIKE '%{$search_field_value}%')";
                 break;
             case 'addon_option':
                 $sql_filter = " AND (`option` LIKE '%{$search_field_value}%')";
                 break;
             case 'purchase_dt':
                 // date start
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date end
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                 $search_field_value_two = mgm_format_inputdate_to_mysql($search_field_value_two);
                 // set
                 $sql_filter = " AND (DATE_FORMAT(`purchase_dt`,'%Y-%m-%d') BETWEEN '{$search_field_value}' AND '{$search_field_value_two}')";
                 break;
         }
     }
     // order
     $sql_order = " ORDER BY `user_login`, `purchase_dt`";
     // sql
     $sql = "SELECT SQL_CALC_FOUND_ROWS A.id, A.purchase_dt, B.option AS addon_option, C.user_login\r\r\n\t\t        FROM `" . TBL_MGM_ADDON_PURCHASES . "` A \r\r\n\t\t\t\tLEFT JOIN " . TBL_MGM_ADDON_OPTION . " B ON (B.id = A.addon_option_id) \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->users . " C ON (C.ID = A.user_id) WHERE 1 \r\r\n\t\t\t\t{$sql_filter} {$sql_order} ";
     // store
     $data['addon_purchases'] = $wpdb->get_results($sql);
     // date format
     $date_format = mgm_get_date_format('date_format');
     // init
     $purchases = array();
     // check
     if (count($data['addon_purchases']) > 0) {
         //purchases
         foreach ($data['addon_purchases'] as $purchase) {
             // int
             $row = new stdClass();
             // export fields
             $row->username = $purchase->user_login;
             $row->addon_option = $purchase->addon_option;
             $row->purchase_date = date($date_format, strtotime($purchase->purchase_dt));
             // cache
             $purchases[] = $row;
             // unset
             unset($row);
         }
     }
     // default response
     $response = array('status' => 'error', 'message' => __('Error while exporting addon purchases.', 'mgm'));
     // check
     if (count($purchases) > 0) {
         // success
         $success = count($purchases);
         // create
         if (mgm_post_var('export_format') == 'csv') {
             $filename = mgm_create_csv_file($purchases, 'addon_purchases');
         } else {
             $filename = mgm_create_xls_file($purchases, 'addon_purchases');
         }
         // src
         $file_src = MGM_FILES_EXPORT_URL . $filename;
         // message
         $message = sprintf(__('Successfully exported %d addon %s.', 'mgm'), $success, $success > 1 ? 'purchases' : 'purchase');
         // init
         $response = array('status' => 'success', 'message' => $message, 'src' => $file_src);
     }
     // return response
     echo json_encode($response);
     exit;
 }
/**
 * get post purchase buttons
 * final step for post purchase
 *
 * @param void
 * @return $html
 */
function mgm_get_post_purchase_buttons()
{
    // get current user data - issue #1421
    $user = wp_get_current_user();
    // pack
    $pack = NULL;
    // addon options
    if ($addon_option_ids = mgm_post_var('addon_options')) {
        $addon_options = mgm_get_addon_options_only($addon_option_ids);
        // mgm_pr($addon_options);
    }
    // post purchase
    if (isset($_POST['post_id'])) {
        //issue #1250
        if (isset($_POST['mgm_postpurchase_field']['coupon']) && !empty($_POST['mgm_postpurchase_field']['coupon'])) {
            //issue #1250 - Coupon validation
            if (!empty($_POST['form_action'])) {
                // check if its a valid coupon
                if (!($coupon = mgm_get_coupon_data($_POST['mgm_postpurchase_field']['coupon']))) {
                    //redirect back to the form
                    $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'error_field_value' => $_POST['mgm_postpurchase_field']['coupon']);
                    $redirect = add_query_arg($q_arg, $_POST['form_action']);
                    mgm_redirect($redirect);
                    exit;
                }
            }
        }
        // post id
        $post_id = $_POST['post_id'];
        // gete mgm data
        $post_obj = mgm_get_post($post_id);
        $cost = mgm_convert_to_currency($post_obj->purchase_cost);
        $product = $post_obj->product;
        $allowed_modules = $post_obj->allowed_modules;
        // post data
        $post = get_post($post_id);
        $title = $post->post_title;
        // item name -issue #1380
        $item_name = apply_filters('mgm_post_purchase_itemname', sprintf(__('Purchase Post - %s', 'mgm'), $title));
        // set pack
        $pack = array('duration' => 1, 'item_name' => $item_name, 'buypost' => 1, 'cost' => $cost, 'title' => $title, 'product' => $product, 'post_id' => $post_id, 'allowed_modules' => $allowed_modules);
    } else {
        if (isset($_POST['postpack_id'])) {
            // post pack purchase
            //issue #1250
            if (isset($_POST['mgm_postpurchase_field']['coupon']) && !empty($_POST['mgm_postpurchase_field']['coupon'])) {
                //issue #1250 - Coupon validation
                if (!empty($_POST['form_action'])) {
                    // check if its a valid coupon
                    if (!($coupon = mgm_get_coupon_data($_POST['mgm_postpurchase_field']['coupon']))) {
                        //redirect back to the form
                        $q_arg = array('error_field' => 'Coupon', 'error_type' => 'invalid', 'error_field_value' => $_POST['mgm_postpurchase_field']['coupon']);
                        $redirect = add_query_arg($q_arg, $_POST['form_action']);
                        mgm_redirect($redirect);
                        exit;
                    }
                }
            }
            // post pack purchase
            $postpack_id = $_POST['postpack_id'];
            // pcak id
            $postpack_post_id = $_POST['postpack_post_id'];
            // post id where pack is listed, redirect here
            // get pack
            $postpack = mgm_get_postpack($postpack_id);
            $cost = mgm_convert_to_currency($postpack->cost);
            $product = json_decode($postpack->product, true);
            $modules = json_decode($postpack->modules, true);
            //mgm_pr($postpack);
            // item name -issue #1380
            $item_name = apply_filters('mgm_postpack_purchase_itemname', sprintf(__('Purchase Post Pack - %s', 'mgm'), $postpack->name));
            // post id
            $post_id = mgm_get_postpack_posts_csv($postpack_id);
            // set pack
            $pack = array('duration' => 1, 'item_name' => $item_name, 'buypost' => 1, 'cost' => $cost, 'title' => $postpack->name, 'product' => $product, 'post_id' => $post_id, 'postpack_id' => $postpack_id, 'postpack_post_id' => $postpack_post_id, 'allowed_modules' => $modules);
        }
    }
    // check
    if (!$pack) {
        return __('Error in Payment! No data available ');
        exit;
    }
    // guest token	-issue #1421
    if (isset($_POST['guest_purchase']) && $_POST['guest_purchase'] == TRUE && $user->ID <= 0) {
        $pack['guest_token'] = sanitize_title_for_query(mgm_create_token());
    }
    // addon options
    if (isset($addon_options) && !empty($addon_options)) {
        $pack['addon_options'] = $addon_options;
    }
    // get coupon
    $post_purchase_coupon = mgm_save_partial_fields(array('on_postpurchase' => true), 'mgm_postpurchase_field', $pack['cost'], false, 'postpurchase');
    // alter
    mgm_get_post_purchase_coupon_pack($post_purchase_coupon, $pack);
    // Eg: $_POST['mgm_payment_gateways'] = mgm_paypal
    $cf_payment_gateways = isset($_POST['mgm_payment_gateways']) && !empty($_POST['mgm_payment_gateways']) ? $_POST['mgm_payment_gateways'] : null;
    // bypass step2 if payment gateway is submitted: issue #: 469
    if (!is_null($cf_payment_gateways)) {
        // get pack
        // mgm_get_upgrade_coupon_pack($member, $selected_pack);
        // cost
        if ((double) $pack['cost'] > 0) {
            //get an object of the payment gateway:
            $mod_obj = mgm_get_module($cf_payment_gateways, 'payment');
            // tran options
            $tran_options = array('user_id' => $user->ID);
            // is register & purchase
            if (isset($_POST['post_id'])) {
                $tran_options['post_id'] = (int) $_POST['post_id'];
            }
            // postpack id
            if (isset($_POST['postpack_id'])) {
                $tran_options['postpack_id'] = (int) $_POST['postpack_id'];
            }
            // is register & purchase postpack
            if (isset($_POST['postpack_post_id']) && isset($_POST['postpack_id'])) {
                $tran_options['postpack_post_id'] = (int) $_POST['postpack_post_id'];
                $tran_options['postpack_id'] = (int) $_POST['postpack_id'];
            }
            // create transaction
            $tran_id = mgm_add_transaction($pack, $tran_options);
            // bypass directly to process return if manual payment:
            if ($cf_payment_gateways == 'mgm_manualpay') {
                // set
                $_POST['custom'] = $tran_id;
                // direct call to module return function:
                $mod_obj->process_return();
                // exit
                exit;
            }
            // encode id:
            $tran_id = mgm_encode_id($tran_id);
            $redirect = $mod_obj->_get_endpoint('html_redirect', true);
            $redirect = add_query_arg(array('tran_id' => $tran_id), $redirect);
            // redirect
            mgm_redirect($redirect);
            // this goes to subscribe, mgm_functions.php/mgm_get_subscription_buttons
            // exit
            exit;
        }
    }
    // get payment modules
    $a_payment_modules = mgm_get_class('system')->get_active_modules('payment');
    // init
    $payment_modules = array();
    // when active
    if ($a_payment_modules) {
        // loop
        foreach ($a_payment_modules as $payment_module) {
            // not trial
            if (in_array($payment_module, array('mgm_free', 'mgm_trial'))) {
                continue;
            }
            // store
            $payment_modules[] = $payment_module;
        }
    }
    // init
    $button = '';
    // transaction
    $tran_id = NULL;
    $button_printed = 0;
    // loop modules
    foreach ($payment_modules as $module) {
        // object
        $mod_obj = mgm_get_module($module, 'payment');
        // check buypost support
        if (in_array('buypost', $mod_obj->supported_buttons)) {
            // create transaction
            if (!$tran_id) {
                $tran_id = mgm_add_transaction($pack);
            }
            // button code
            if (isset($pack['allowed_modules'])) {
                // Issue #1562: If no payment module is selected, display all supported modules
                if (!empty($pack['allowed_modules']) && FALSE === in_array($module, $pack['allowed_modules'])) {
                    continue;
                }
            }
            $button_code = $mod_obj->get_button_buypost(array('pack' => $pack, 'tran_id' => $tran_id), true);
            $button_printed++;
            // get button
            $button .= "<div class='mgm_custom_filed_table'>" . $button_code . "</div>";
        }
    }
    // none active
    if ($button_printed == 0) {
        $button .= sprintf('<p class="mgm-no-module"> %s </p>', __('No Payment module active for this Content Purchase.', 'mgm'));
    }
    // if Cost is zero, then process using free module.: issue#: 883
    if ($tran_id && $pack['cost'] == 0 && in_array('mgm_free', $a_payment_modules) && mgm_get_module('mgm_free')->is_enabled()) {
        // module
        $module = 'mgm_free';
        // payments url
        $payments_url = mgm_get_custom_url('transactions');
        // query_args
        $query_args = array('method' => 'payment_return', 'module' => $module, 'custom' => $tran_id);
        // redirector
        if (isset($_REQUEST['redirector'])) {
            // set
            $query_args['redirector'] = $_REQUEST['redirector'];
        }
        // redirect to module to mark the payment as complete
        $redirect = add_query_arg($query_args, $payments_url);
        // redirect
        mgm_redirect($redirect);
    }
    // html
    $return = '<div class="post_purchase_select_gateway">' . __('Please Select a Payment Gateway.', 'mgm') . '</div>' . $button;
    // return
    return $return;
}
/**
 * login widget : multiple instance
 * admin instance
 *
 * @param array $widget_args
 * @return void
 * @since 1.0
 */
function mgm_sidebar_widget_login_admin($widget_args = 1)
{
    global $wp_registered_widgets, $mgm_sidebar_widget;
    static $updated = false;
    if (is_numeric($widget_args)) {
        $widget_args = array('number' => $widget_args);
    }
    $widget_args = wp_parse_args($widget_args, array('number' => -1));
    extract($widget_args, EXTR_SKIP);
    // options init
    $options = $mgm_sidebar_widget->login_widget;
    // default
    if (!is_array($options)) {
        $options = array();
    }
    // m_sidebar
    $m_sidebar = mgm_post_var('sidebar');
    // update
    if (!$updated && !empty($m_sidebar)) {
        $sidebar = (string) $m_sidebar;
        $sidebars_widgets = wp_get_sidebars_widgets();
        if (isset($sidebars_widgets[$sidebar])) {
            $this_sidebar =& $sidebars_widgets[$sidebar];
        } else {
            $this_sidebar = array();
        }
        foreach ($this_sidebar as $_widget_id) {
            // check
            if (isset($wp_registered_widgets[$_widget_id]['callback']) && isset($wp_registered_widgets[$_widget_id]['params'][0]['number'])) {
                if ('mgm_widget_login' == $wp_registered_widgets[$_widget_id]['callback']) {
                    $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number'];
                    if (!in_array("login-{$widget_number}", mgm_post_var('widget-id'))) {
                        // the widget has been removed.
                        unset($options[$widget_number]);
                    }
                }
            }
        }
        // update
        foreach ((array) mgm_post_var('mgm_widget_login') as $widget_number => $mgm_widget_login) {
            if (!isset($mgm_widget_login['title_logged_in']) && isset($options[$widget_number])) {
                // user clicked cancel
                continue;
            }
            // set vars
            $title_logged_in = isset($mgm_widget_login['title_logged_in']) ? stripslashes($mgm_widget_login['title_logged_in']) : '';
            $title_logged_out = isset($mgm_widget_login['title_logged_out']) ? stripslashes($mgm_widget_login['title_logged_out']) : '';
            $profile_text = isset($mgm_widget_login['profile_text']) ? stripslashes($mgm_widget_login['profile_text']) : '';
            $membership_details_text = isset($mgm_widget_login['membership_details_text']) ? stripslashes($mgm_widget_login['membership_details_text']) : '';
            $membership_contents_text = isset($mgm_widget_login['membership_contents_text']) ? stripslashes($mgm_widget_login['membership_contents_text']) : '';
            $logout_text = isset($mgm_widget_login['logout_text']) ? stripslashes($mgm_widget_login['logout_text']) : '';
            $register_text = isset($mgm_widget_login['register_text']) ? stripslashes($mgm_widget_login['register_text']) : '';
            $lostpassword_text = isset($mgm_widget_login['lostpassword_text']) ? stripslashes($mgm_widget_login['lostpassword_text']) : '';
            $logged_out_intro = isset($mgm_widget_login['logged_out_intro']) ? stripslashes($mgm_widget_login['logged_out_intro']) : '';
            $logged_in_template = isset($mgm_widget_login['logged_in_template']) ? stripslashes($mgm_widget_login['logged_in_template']) : '';
            // set
            $options[$widget_number] = compact('title_logged_in', 'title_logged_out', 'profile_text', 'membership_contents_text', 'membership_details_text', 'logout_text', 'register_text', 'logged_out_intro', 'lostpassword_text', 'logged_in_template');
        }
        // set
        $mgm_sidebar_widget->login_widget = $options;
        // save
        $mgm_sidebar_widget->save();
        // updated
        $updated = true;
    }
    // get selected
    if (-1 == $number) {
        $number = '%i%';
        $title_logged_in = __('Membership Details', 'mgm');
        $title_logged_out = __('Login', 'mgm');
        $profile_text = __('Profile', 'mgm');
        $membership_contents_text = __('Membership Contents', 'mgm');
        $membership_details_text = __('Membership Details', 'mgm');
        $logout_text = __('Logout', 'mgm');
        $register_text = __('Register', 'mgm');
        $lostpassword_text = __('Lost your Password?', 'mgm');
        $logged_out_intro = '';
        $logged_in_template = $mgm_sidebar_widget->default_text['logged_in_template'];
    } else {
        $title_logged_in = stripslashes($options[$number]['title_logged_in']);
        $title_logged_out = stripslashes($options[$number]['title_logged_out']);
        $profile_text = stripslashes($options[$number]['profile_text']);
        $membership_contents_text = stripslashes($options[$number]['membership_contents_text']);
        $membership_details_text = stripslashes($options[$number]['membership_details_text']);
        $logout_text = stripslashes($options[$number]['logout_text']);
        $register_text = stripslashes($options[$number]['register_text']);
        $lostpassword_text = stripslashes($options[$number]['lostpassword_text']);
        $logged_out_intro = stripslashes($options[$number]['logged_out_intro']);
        $logged_in_template = stripslashes($options[$number]['logged_in_template']);
    }
    // print
    $html = '<p>' . __('When logged out the user will see a login form. Removing the text from the "Register link text" or "Lost password link text" will subsequently remove the links they produce.', 'mgm') . '</p>
	<input type="hidden" name="mgm_widget_login[' . $number . '][submit]" id="mgm-login-widget-submit-' . $number . '" value="1" />
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-widget-title"><strong>' . __('Widget Title (Logged in):', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $title_logged_in . '" id="mgm-login-widget-widget-title-logged-in-' . $number . '" name="mgm_widget_login[' . $number . '][title_logged_in]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-widget-title-logged-out"><strong>' . __('Widget Title (Logged out):', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $title_logged_out . '" id="mgm-login-widget-widget-title-logged-out-' . $number . '" name="mgm_widget_login[' . $number . '][title_logged_out]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-profile-text"><strong>' . __('Profile link text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $profile_text . '" id="mgm-login-widget-profile-text-' . $number . '" name="mgm_widget_login[' . $number . '][profile_text]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-membership-details-text"><strong>' . __('Membership Details link text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $membership_details_text . '" id="mgm-login-widget-membership-details-text-' . $number . '" name="mgm_widget_login[' . $number . '][membership_details_text]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-membership-contents-text"><strong>' . __('Membership Contents link text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $membership_contents_text . '" id="mgm-login-widget-membership-contents-text-' . $number . '" name="mgm_widget_login[' . $number . '][membership_contents_text]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-logout-text"><strong>' . __('Logout text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $logout_text . '" id="mgm-login-widget-logout-text-' . $number . '" name="mgm_widget_login[' . $number . '][logout_text]" />
		</label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-register-text"><strong>' . __('Register link text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $register_text . '" id="mgm-login-widget-register-text-' . $number . '" name="mgm_widget_login[' . $number . '][register_text]" />
		</label>
	</div>
	<div class="mgm_margin_bottom_5px">
		<div><label for="mgm-login-widget-lostpassword-text"><strong>' . __('Lost password link text:', 'mgm') . '</strong></div>
		<input class="mgm_width_300px" value="' . $lostpassword_text . '" id="mgm-login-widget-lostpassword-text-' . $number . '"	name="mgm_widget_login[' . $number . '][lostpassword_text]" /></label>
	</div>
	<div class="mgm_margin_bottom_5px">				
		<label for="mgm-login-widget-logged-out-intro">
			<div><strong>' . __('Logged Out Introduction', 'mgm') . '</strong></div>
			<textarea rows="2" cols="50" id="mgm-login-widget-logged-out-intro-' . $number . '" name="mgm_widget_login[' . $number . '][logged_out_intro]">' . esc_html($logged_out_intro) . '</textarea>
		</label>
	</div>
	<div class="mgm_margin_bottom_5px">				
		<label for="mgm-login-widget-logged-in-template">
			<div><strong>' . __('Logged In Template', 'mgm') . '</strong> - Use the following hooks: [display_name], [profile_url], [profile_link], [membership_details_url], [membership_details_link],[membership_contents_url], [membership_contents_link], [logout_url], [logout_link]</div>
			<textarea rows="6" cols="50" id="mgm-login-widget-logged-in-template-' . $number . '" name="mgm_widget_login[' . $number . '][logged_in_template]">' . $logged_in_template . '</textarea>
		</label>
	</div>
	';
    // print
    print $html;
}
 function _buy_membership()
 {
     // system
     $system_obj = mgm_get_class('system');
     $s_packs = mgm_get_class('subscription_packs');
     $dge = bool_from_yn($system_obj->get_setting('disable_gateway_emails'));
     $dpne = bool_from_yn($system_obj->get_setting('disable_payment_notify_emails'));
     // get passthrough, stop further process if fails to parse
     $custom = $this->_get_transaction_passthrough($_POST['custom']);
     // local var
     extract($custom);
     // currency
     if (!$currency) {
         $currency = $system_obj->get_setting('currency');
     }
     // find user
     $user = get_userdata($user_id);
     //another_subscription modification
     if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) {
         $member = mgm_get_member_another_purchase($user_id, $custom['membership_type']);
     } else {
         $member = mgm_get_member($user_id);
     }
     // Get the current AC join date
     if (!($join_date = $member->join_date)) {
         $member->join_date = time();
     }
     // Set current AC join date
     // if there is no duration set in the user object then run the following code
     if (empty($duration_type)) {
         //if there is no duration type then use Months
         $duration_type = 'm';
     }
     // membership type default
     if (empty($membership_type)) {
         //if there is no account type in the custom string then use the existing type
         $membership_type = md5($member->membership_type);
     }
     // validate parent method
     $membership_type_verified = $this->_validate_membership_type($membership_type, 'md5|plain');
     // verified
     if (!$membership_type_verified) {
         // check
         if (strtolower($member->membership_type) != 'free') {
             // notify admin, only if gateway emails on
             if (!$dge) {
                 mgm_notify_admin_membership_verification_failed($this->name);
             }
             // abort
             return;
         } else {
             $membership_type_verified = $member->membership_type;
         }
     }
     // set
     $membership_type = $membership_type_verified;
     // sub pack
     $subs_pack = $s_packs->get_pack($pack_id);
     // verify product for another purchase
     if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) {
         // check pack
         if (isset($subs_pack['product']['1shoppingcart_product_id']) && !empty($subs_pack['product']['1shoppingcart_product_id'])) {
             // pack
             $pack_product_id = $subs_pack['product']['1shoppingcart_product_id'];
             // match
             if ($post_product_id = mgm_post_var('product_id')) {
                 // match
                 if (trim($post_product_id) != trim($pack_product_id)) {
                     // log
                     mgm_log(sprintf('Product mismatch: pack[%s] => post[%s]', $pack_product_id, $post_product_id), $_POST['custom'] . '_' . __FUNCTION__);
                     // exit
                     exit;
                 }
             }
         }
     }
     // if trial on
     if ($subs_pack['trial_on']) {
         $member->trial_on = $subs_pack['trial_on'];
         $member->trial_cost = $subs_pack['trial_cost'];
         $member->trial_duration = $subs_pack['trial_duration'];
         $member->trial_duration_type = $subs_pack['trial_duration_type'];
         $member->trial_num_cycles = $subs_pack['trial_num_cycles'];
     }
     //pack currency over rides genral setting currency - issue #1602
     if (isset($subs_pack['currency']) && $subs_pack['currency'] != $currency) {
         $currency = $subs_pack['currency'];
     }
     // duration
     $member->duration = $duration;
     $member->duration_type = strtolower($duration_type);
     $member->amount = $amount;
     $member->currency = $currency;
     $member->membership_type = $membership_type;
     $member->pack_id = $pack_id;
     $member->payment_type = 'subscription';
     $member->transaction_id = $_POST['custom'];
     $member->active_num_cycles = isset($num_cycles) && !empty($num_cycles) ? $num_cycles : $subs_pack['num_cycles'];
     // tracking fields module_field => post_field, will be used to unsubscribe
     $tracking_fields = array('txn_type' => 'status', 'subscr_id' => 'client_id', 'txn_id' => isset($_POST['order_id']) ? 'order_id' : 'transaction_id');
     // save tracking fields
     $this->_save_tracking_fields($tracking_fields, $member);
     // process response
     $new_status = $update_role = false;
     // errors
     $errors = array();
     // by status
     switch ($_POST['status']) {
         case "Approved":
         case "Accepted":
             $new_status = MGM_STATUS_ACTIVE;
             $member->status_str = __('Last payment was successful', 'mgm');
             $time = time();
             $last_pay_date = isset($member->last_pay_date) ? $member->last_pay_date : null;
             $member->last_pay_date = date('Y-m-d', $time);
             // check subscription_option
             if (isset($subscription_option)) {
                 // on option
                 switch ($subscription_option) {
                     // @ToDo, apply expire date login
                     case 'create':
                         // expire date will be based on current time
                     // expire date will be based on current time
                     case 'upgrade':
                         // expire date will be based on current time
                         // already on top
                         break;
                     case 'downgrade':
                         // expire date will be based on expire_date if exists, current time other wise
                     // expire date will be based on expire_date if exists, current time other wise
                     case 'extend':
                         // expire date will be based on expire_date if exists, current time other wise
                         // extend/expire date
                         // calc expiry	- issue #1226
                         // membership extend functionality broken if we try to extend the same day so removed && $last_pay_date != date('Y-m-d', $time) check
                         if (!empty($member->expire_date)) {
                             $expiry = strtotime($member->expire_date);
                             if ($expiry > 0 && $expiry > $time) {
                                 $time = $expiry;
                             }
                         }
                         break;
                 }
             }
             // type expanded
             $duration_exprs = $s_packs->get_duration_exprs();
             // if not lifetime/date range
             if (in_array($member->duration_type, array_keys($duration_exprs))) {
                 // take only date exprs
                 //consider trial duration if trial period is applicable
                 if (isset($trial_on) && $trial_on == 1) {
                     //Do it only once
                     if (!isset($member->rebilled) && isset($member->active_num_cycles) && $member->active_num_cycles != 1) {
                         $time = strtotime("+{$trial_duration} {$duration_exprs[$trial_duration_type]}", $time);
                     }
                 } else {
                     // time - issue #1068
                     $time = strtotime("+{$member->duration} {$duration_exprs[$member->duration_type]}", $time);
                 }
                 // formatted
                 $time_str = date('Y-m-d', $time);
                 // date extended
                 if (!$member->expire_date || strtotime($time_str) > strtotime($member->expire_date)) {
                     $member->expire_date = $time_str;
                 }
             } else {
                 // if lifetime
                 if ($member->duration_type == 'l') {
                     // el = lifetime
                     $member->expire_date = '';
                 }
                 //issue #1096
                 if ($member->duration_type == 'dr') {
                     // el = /date range
                     $member->expire_date = $duration_range_end_dt;
                 }
             }
             // update rebill: issue #: 489
             if ($member->active_num_cycles != 1 && (int) $member->rebilled < (int) $member->active_num_cycles) {
                 // rebill
                 $member->rebilled = !$member->rebilled ? 1 : (int) $member->rebilled + 1;
             }
             // role
             if ($role) {
                 $update_role = true;
             }
             //cancel previous subscription:
             //issue#: 565
             $this->cancel_recurring_subscription($_POST['custom'], null, null, $pack_id);
             // transaction_id
             $transaction_id = $this->_get_transaction_id();
             // hook args
             $args = array('user_id' => $user_id, 'transaction_id' => $transaction_id);
             // after succesful payment hook
             do_action('mgm_membership_transaction_success', $args);
             // backward compatibility
             do_action('mgm_subscription_purchase_payment_success', $args);
             // new organized name
             break;
         case "Declined":
             $new_status = MGM_STATUS_NULL;
             $member->status_str = __('Last payment was refunded or denied', 'mgm');
             // error
             $errors[] = $member->status_str;
             break;
         case "Pending":
             $new_status = MGM_STATUS_PENDING;
             $reason = 'Unnown';
             $member->status_str = sprintf(__('Last payment is pending. Reason: %s', 'mgm'), $reason);
             // error
             $errors[] = $member->status_str;
             break;
         default:
             $new_status = MGM_STATUS_ERROR;
             $member->status_str = sprintf(__('Last payment status: %s', 'mgm'), $ctransaction);
             // error
             $errors[] = $member->status_str;
             break;
     }
     // old status
     $old_status = $member->status;
     // set new status
     $member->status = $new_status;
     // whether to acknowledge the user - This should happen only once
     $acknowledge_user = $this->send_payment_email($_POST['custom']);
     // whether to subscriber the user to Autoresponder - This should happen only once
     $acknowledge_ar = mgm_subscribe_to_autoresponder($member, $_POST['custom']);
     // another_subscription modification
     if (isset($custom['is_another_membership_purchase']) && bool_from_yn($custom['is_another_membership_purchase'])) {
         //issue #1227
         if ($subs_pack['hide_old_content']) {
             $member->hide_old_content = $subs_pack['hide_old_content'];
         }
         // save
         mgm_save_another_membership_fields($member, $user_id);
         // Multiple membership upgrade: first time
         if (isset($custom['multiple_upgrade_prev_packid']) && is_numeric($custom['multiple_upgrade_prev_packid'])) {
             mgm_multiple_upgrade_save_memberobject($custom, $member->transaction_id);
         }
     } else {
         // update
         $member->save();
     }
     // status change event
     do_action('mgm_user_status_change', $user_id, $new_status, $old_status, 'module_' . $this->module, $member->pack_id);
     //update coupon usage
     do_action('mgm_update_coupon_usage', array('user_id' => $user_id));
     // update role
     if ($update_role) {
         // role;
         $obj_role = new mgm_roles();
         // set
         $obj_role->add_user_role($user_id, $role);
     }
     // return action
     do_action('mgm_return_' . $this->module, array('user_id' => $user_id));
     // backward compatibility
     do_action('mgm_return_subscription_payment_' . $this->module, array('user_id' => $user_id));
     // new , individual
     do_action('mgm_return_subscription_payment', array('user_id' => $user_id, 'acknowledge_ar' => $acknowledge_ar, 'mgm_member' => $member));
     // new, global: pass mgm_member object to consider multiple level purchases as well.
     // transaction status
     mgm_update_transaction_status($member->transaction_id, $member->status, $member->status_str);
     // send email notification to client
     $blogname = get_option('blogname');
     // notify
     if ($acknowledge_user) {
         // notify user, only if gateway emails on
         if (!$dpne) {
             // notify
             if (mgm_notify_user_membership_purchase($blogname, $user, $member, $custom, $subs_pack, $s_packs, $system_obj)) {
                 // update as email sent
                 $this->update_paymentemail_sent($alt_tran_id);
             }
         }
         // notify admin, only if gateway emails on
         if (!$dge) {
             // pack duration
             $pack_duration = $s_packs->get_pack_duration($subs_pack);
             // notify admin,
             mgm_notify_admin_membership_purchase($blogname, $user, $member, $pack_duration);
         }
     }
     // error condition redirect
     if (count($errors) > 0) {
         mgm_redirect(add_query_arg(array('status' => 'error', 'errors' => implode('|', $errors)), $this->_get_thankyou_url()));
     }
 }
 function _get_notification_data()
 {
     // notificationCode
     $notification_code = mgm_post_var('notificationCode');
     // code
     $notification_type = mgm_post_var('notificationType');
     // transaction
     // check
     if ($notification_code) {
         // parse the pagseguro URL
         $notification_url = $this->_get_endpoint('notification');
         // build
         $notification_url = add_query_arg(array('email' => $this->setting['receiver_email'], 'token' => $this->setting['token']), trailingslashit($notification_url . $notification_code));
         // headers
         $http_headers = array('Content-Type' => 'application/x-www-form-urlencoded');
         // just in case
         // get
         $http_response = mgm_remote_get($notification_url, null, array('headers' => $http_headers, 'timeout' => 30, 'sslverify' => false));
         // log xml as came
         mgm_log('http_response: ' . $http_response, $this->module . '_' . __FUNCTION__);
         // parse as xml
         if ($xml = @simplexml_load_string($http_response)) {
             // parse
             $_POST['code'] = (string) $xml->code;
             $_POST['custom'] = (string) $xml->reference;
             $_POST['type'] = (string) $xml->type;
             $_POST['status'] = (string) $xml->status;
             // code
             $_POST['status_code'] = $this->_get_status_code($_POST['status']);
             // log
             mgm_log('PagSeguro IPN : processed :' . print_r($_POST, true), $this->module . '_' . __FUNCTION__);
         }
     }
 }
/**
 * login errors display fix for email as username
 *
 * @param string $errors
 * @return string $errors
 * @since 2.7
 */
function mgm_login_errors($errors)
{
    if (bool_from_yn(mgm_get_setting('enable_email_as_username'))) {
        $errors = preg_replace('#username <strong>(.*)</strong> is#', 'email <strong>' . mgm_post_var('log') . '</strong> is', $errors);
        //issue #1412
        if (!preg_match('#' . __('unfinished', 'mgm') . '#', $errors)) {
            $errors = preg_replace('#' . __('username', 'mgm') . '#', __('Email', 'mgm'), $errors);
        }
    }
    return $errors;
}
 private function _save_member_object($user_id, $member, $previous_membership)
 {
     // pack
     $pack = mgm_get_class('subscription_packs')->get_pack($member->pack_id);
     // multiple_level_purchase
     $multiple_level_purchase = bool_from_yn(mgm_get_class('system')->get_setting('enable_multiple_level_purchase'));
     // update options
     $update_options = mgm_post_var('update_opt');
     // new level
     if (in_array('subscription', $update_options) && mgm_post_var('insert_new_level') == 'new') {
         // save flag
         $save = true;
         // guest
         if ($previous_membership->membership_type == "guest" && $previous_membership->amount == 0) {
             // check selected membership already selected:
             if ($previous_membership->membership_type == $member->membership_type) {
                 $save = false;
             }
         } else {
             // old
             $old_subtypes = mgm_get_subscribed_membershiptypes($user_id);
             //check selected membership already selected:
             if (in_array($member->membership_type, $old_subtypes)) {
                 $save = false;
             } else {
                 if (isset($member->custom_fields)) {
                     unset($member->custom_fields);
                 }
                 if (isset($member->other_membership_types) || empty($member->other_membership_types)) {
                     unset($member->other_membership_types);
                 }
             }
         }
         // save
         if ($save) {
             // multiple
             if ($multiple_level_purchase) {
                 mgm_save_another_membership_fields($member, $user_id);
             } else {
                 $member->save();
             }
         }
         // assign role:
         $change_order = isset($_POST['highlight_role']) && isset($_POST['upd_subscription_pack']) && $_POST['upd_subscription_pack'] != '-' ? true : false;
         // set
         $obj_role = new mgm_roles();
         $obj_role->add_user_role($user_id, $pack['role'], $change_order);
     } else {
         if (isset($_POST['ps_mem'][$user_id]) && !empty($_POST['ps_mem'][$user_id])) {
             if (isset($member->custom_fields)) {
                 unset($member->custom_fields);
             }
             if (isset($member->other_membership_types) || empty($member->other_membership_types)) {
                 unset($member->other_membership_types);
             }
             $prev_index = isset($_POST['ps_mem_index'][$user_id][$previous_membership->membership_type]) ? $_POST['ps_mem_index'][$user_id][$previous_membership->membership_type] : null;
             //uncomment
             mgm_save_another_membership_fields($member, $user_id, $prev_index);
         } else {
             $member->save();
         }
         if ($member->status == MGM_STATUS_EXPIRED) {
             //remove role from user:
             mgm_remove_userroles($user_id, $member);
         } else {
             //if($member->membership_type != $previous_membership->membership_type) {//check this condition
             //mgm role object:
             $change_order = isset($_POST['highlight_role']) && isset($_POST['upd_subscription_pack']) && $_POST['upd_subscription_pack'] != '-' ? true : false;
             $obj_role = new mgm_roles();
             //update role/change order
             $obj_role->add_user_role($user_id, $pack['role'], $change_order);
             //}
         }
     }
     return true;
 }
/**
 */
function mgm_replace_email_username($code, $error_str)
{
    switch ($code) {
        case 'empty_username':
        case 'invalid_username':
            if (bool_from_yn(mgm_get_setting('enable_email_as_username'))) {
                $error_str = preg_replace('#' . __('username', 'mgm') . '#', __('Email', 'mgm'), $error_str);
            }
            break;
        case 'incorrect_password':
            if (bool_from_yn(mgm_get_setting('enable_email_as_username'))) {
                $error_str = preg_replace('#username <strong>(.*)</strong> is#', 'email <strong>' . mgm_post_var('log') . '</strong> is', $error_str);
            }
            break;
    }
    return $error_str;
}
/**
 * Custom user profile form
 */
function mgm_user_profile_form($user_id = NULL, $temp_edit = false, $args = array())
{
    global $wpdb;
    // get mgm_system
    $system_obj = mgm_get_class('system');
    // current user
    $current_user = $user_id ? get_userdata($user_id) : wp_get_current_user();
    // current or voew
    if ($current_user->ID) {
        // current
        $user = mgm_get_userdata($current_user->ID);
    } else {
        // query string
        $user = mgm_get_user_from_querystring();
    }
    // if no user
    if (!isset($user) || !$user->ID || is_super_admin($user->ID)) {
        return mgm_user_login_form();
        exit;
    }
    // mgm member
    $member = mgm_get_member($user->ID);
    // edit mode, on for current user
    $edit_mode = $current_user->ID == $user->ID ? true : false;
    $temp = 0;
    // form action
    $form_action = get_permalink();
    // reset
    if ($form_action == null) {
        $form_action = mgm_get_current_url();
        $form_action = str_replace(array('&updated=true', '?updated=true'), '', $form_action);
    }
    //init - issue #1573
    $show_membership_fields_arr = array();
    if (isset($args['membership']) && !empty($args['membership'])) {
        // membership
        $membership = $args['membership'];
        // get active custom fields on register
        $cf_profile_by_membership_types = mgm_get_class('member_custom_fields')->get_fields_where(array('attributes' => array('profile_by_membership_types' => true)));
        //check
        if (!empty($cf_profile_by_membership_types)) {
            //loop
            foreach ($cf_profile_by_membership_types as $cf_profile_by_membership_type) {
                //membership_type
                $membership_types_string = isset($cf_profile_by_membership_type['attributes']['profile_membership_types_field_alias']) ? $cf_profile_by_membership_type['attributes']['profile_membership_types_field_alias'] : null;
                //check
                if (preg_match('/\\b' . $membership . '\\b/', $membership_types_string) && $membership_types_string != null) {
                    $show_fields_arr[] = $cf_profile_by_membership_type['name'];
                    $show_membership_fields_arr[] = $cf_profile_by_membership_type;
                    if ($cf_profile_by_membership_type['name'] == 'password') {
                        foreach ($cf_profile_by_membership_types as $cf_profile_by_membership) {
                            if ($cf_profile_by_membership['name'] == 'password_conf') {
                                $show_membership_fields_arr[] = $cf_profile_by_membership;
                            }
                        }
                    }
                }
            }
        }
    }
    // get default fields
    $profile_fields = mgm_get_config('default_profile_fields', array());
    // get active custom fields on profile page
    $cf_profile_page = mgm_get_class('member_custom_fields')->get_fields_where(array('display' => array('on_profile' => true)));
    $cf_noton_profile = mgm_get_class('member_custom_fields')->get_fields_where(array('display' => array('on_profile' => false)));
    //merge - issue #1573
    if (isset($show_membership_fields_arr) && is_array($show_membership_fields_arr) && !empty($show_membership_fields_arr)) {
        $cf_profile_page = array_merge($cf_profile_page, $show_membership_fields_arr);
        $cf_noton_profile = array_merge($cf_noton_profile, $show_membership_fields_arr);
    }
    $error_html = '';
    //issue #867
    $css_group = mgm_get_css_group();
    if ($css_group != 'none') {
        // error_html
        $error_html .= '<link rel="stylesheet" href="' . MGM_ASSETS_URL . 'css/' . $css_group . '/mgm.messages.css' . '" type="text/css" media="all" />';
    }
    // update
    if ($edit_mode) {
        // updated
        if (isset($_POST['method']) && $_POST['method'] == 'update_user') {
            // check security before processing form
            if (!wp_verify_nonce(mgm_post_var('_mgmnonce_user_profile'), 'user_profile')) {
                mgm_security_error('user_profile');
            }
            // user lib
            if (mgm_compare_wp_version('3.1', '<')) {
                // only before 3.1
                require_once ABSPATH . WPINC . '/registration.php';
            }
            // callback
            do_action('personal_options_update', $current_user->ID);
            // not multisite, duplicate email allowed ?
            if (!is_multisite()) {
                // save
                $errors = mgm_user_profile_update($current_user->ID);
            } else {
                // multi site
                // get user
                $user = get_userdata($current_user->ID);
                // update here:
                // Update the email address, if present. duplicate check
                if ($user->user_login && isset($_POST['user_email']) && is_email($_POST['user_email']) && $wpdb->get_var($wpdb->prepare("SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $user->user_login))) {
                    $wpdb->query($wpdb->prepare("UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $_POST['user_email'], $user->user_login));
                }
                // edit
                if (!isset($errors) || isset($errors) && is_object($errors) && false == $errors->get_error_codes()) {
                    $errors = mgm_user_profile_update($current_user->ID);
                }
            }
            // trap erros
            if (!is_wp_error($errors)) {
                // redirect
                mgm_redirect(add_query_arg(array('updated' => 'true'), $form_action));
            }
            // errors
            if (isset($errors) && !is_numeric($errors)) {
                // get error
                $error_html .= mgm_set_errors($errors, true);
            }
        }
    }
    // updated
    if ($edit_mode && isset($_GET['updated'])) {
        $error_html .= '<div class="mgm_message_success">';
        $message = apply_filters('mgm_profile_edit_message', __('User updated.', 'mgm'));
        $error_html .= '<div><strong>' . $message . '</strong></div></div>';
    }
    // 	get row row template
    $form_row_template = $system_obj->get_template('profile_form_row_template');
    // get template row filter, mgm_profile_form_row_template for edit, mgm_profile_form_row_template_view for public view
    $form_row_template = apply_filters('mgm_profile_form_row_template' . (!$edit_mode ? '_view' : ''), $form_row_template);
    $cf_order = array();
    foreach ($cf_profile_page as $fld) {
        $cf_order[] = array('field' => $fld['name']);
    }
    // auto generate form template
    // form_template
    $form_template = '';
    // captured
    $fields_captured = array();
    // get field_groups
    $field_groups = mgm_get_config('profile_field_groups', array());
    // loop groups
    foreach ($field_groups as $group => $group_fields) {
        if ($group == 'Photo') {
            $photo_exists = false;
            foreach ($cf_profile_page as $photo) {
                if ($photo['name'] == 'photo') {
                    $photo_exists = true;
                    break;
                }
            }
            if (!$photo_exists) {
                continue;
            }
        }
        $fields_with_order = array();
        //issue #1197
        $css_title = function_exists('mb_strtolower') ? @mb_strtolower($group) : strtolower($group);
        $css_title = str_replace(' ', '_', $css_title);
        // group
        // PREV CODE
        $form_template .= sprintf('<span class="profile_group_%s">%s</span>', $css_title, $group);
        // loop to create form template
        foreach ($group_fields as $group_field) {
            // skip password
            //if(!$edit_mode && $group_field == 'password') continue;
            if (!$edit_mode && in_array($group_field, array('password', 'password_conf'))) {
                continue;
            }
            // set not found
            $captured = false;
            // first check if in custom fields
            foreach ($cf_profile_page as $field) {
                // skip password in non edit mode
                if ($field['name'] == $group_field) {
                    // set found
                    $captured = true;
                    // skip password
                    //if(!$edit_mode && $field['name'] == 'password') continue;
                    if (!$edit_mode && in_array($field['name'], array('password', 'password_conf'))) {
                        continue;
                    }
                    // store for no repeat
                    $fields_captured[] = $field['name'];
                    // field wrapper
                    $wrapper_ph = sprintf('[user_field_wrapper_%s]', $field['name']);
                    // field label
                    $label_ph = sprintf('[user_field_label_%s]', $field['name']);
                    // field/html element
                    $element_ph = sprintf('[user_field_element_%s]', $field['name']);
                    // set element name
                    // PREV CODE
                    //$form_template .= str_replace(array('[user_field_wrapper]','[user_field_label]','[user_field_element]'),array($wrapper_ph,$label_ph,$element_ph),$form_row_template);
                    // Issue #1149
                    foreach ($cf_order as $index => $cfo) {
                        if ($cfo['field'] == $field['name']) {
                            $fields_with_order[$index] = str_replace(array('[user_field_wrapper]', '[user_field_label]', '[user_field_element]'), array($wrapper_ph, $label_ph, $element_ph), $form_row_template);
                            break;
                        }
                    }
                    // break;
                    break;
                }
            }
            // if not captured
            if (!$captured) {
                $continue = false;
                foreach ($cf_noton_profile as $cffield) {
                    if ($cffield['name'] == $group_field) {
                        $continue = true;
                        break;
                    }
                }
                // break;
                if ($continue) {
                    continue;
                }
                // check set
                if (!isset($profile_fields[$group_field]['name'])) {
                    continue;
                }
                // field wrapper
                $wrapper_ph = sprintf('[user_field_wrapper_%s]', $profile_fields[$group_field]['name']);
                // field label
                $label_ph = sprintf('[user_field_label_%s]', $profile_fields[$group_field]['name']);
                // field/html element
                $element_ph = sprintf('[user_field_element_%s]', $profile_fields[$group_field]['name']);
                // set element name
                // PREV CODE
                // $form_template .= str_replace(array('[user_field_wrapper]','[user_field_label]','[user_field_element]'),array($wrapper_ph,$label_ph,$element_ph),$form_row_template);
                // Issue #1149
                $field_added = false;
                foreach ($cf_order as $index => $cfo) {
                    if ($cfo['field'] == $group_field) {
                        $fields_with_order[$index] = str_replace(array('[user_field_wrapper]', '[user_field_label]', '[user_field_element]'), array($wrapper_ph, $label_ph, $element_ph), $form_row_template);
                        $field_added = true;
                        break;
                    }
                }
                if (!$field_added) {
                    /*$fields_with_order[$index+1] = str_replace(array('[user_field_wrapper]','[user_field_label]','[user_field_element]'),array($wrapper_ph,$label_ph,$element_ph),$form_row_template);*/
                    // default profile instalation fields - issue #1207
                    if (in_array($group_field, array('username', 'email', 'password', 'password', 'password_conf'))) {
                        $fields_with_order[$temp++] = str_replace(array('[user_field_wrapper]', '[user_field_label]', '[user_field_element]'), array($wrapper_ph, $label_ph, $element_ph), $form_row_template);
                    }
                }
            }
        }
        // Issue #1149
        // Process custom field form_template with order
        if (!empty($fields_with_order)) {
            // Sort by key
            ksort($fields_with_order);
            // Loop through fields and attach html
            foreach ($fields_with_order as $fworder) {
                $form_template .= $fworder;
            }
        }
    }
    // other
    $other_header = false;
    // loop to create form template
    foreach ($cf_profile_page as $field) {
        // skip password in non edit mode
        //if(!$edit_mode && $field['name'] == 'password') continue;
        if (!$edit_mode && in_array($field['name'], array('password', 'password_conf'))) {
            continue;
        }
        // skip captured
        if (in_array($field['name'], $fields_captured)) {
            continue;
        }
        // header
        if (!$other_header) {
            // rest
            $form_template .= sprintf('<span class="profile_group_others">%s</span>', __('Others', 'mgm'));
            $other_header = true;
        }
        // field wrapper
        $wrapper_ph = sprintf('[user_field_wrapper_%s]', $field['name']);
        // field label
        $label_ph = sprintf('[user_field_label_%s]', $field['name']);
        // field/html element
        $element_ph = sprintf('[user_field_element_%s]', $field['name']);
        // template for show_public_profile
        if ($field['name'] == 'show_public_profile') {
            // template
            $form_row_template_pf = $system_obj->get_template('register_form_row_autoresponder_template');
            // set element place holders
            $form_template .= str_replace(array('[user_field_wrapper]', '[user_field_label]', '[user_field_element]'), array($wrapper_ph, $label_ph, $element_ph), $form_row_template_pf);
        } else {
            // set element name
            $form_template .= str_replace(array('[user_field_wrapper]', '[user_field_label]', '[user_field_element]'), array($wrapper_ph, $label_ph, $element_ph), $form_row_template);
        }
    }
    // get template filter, mgm_profile_form_template for edit, mgm_profile_form_template_view for public view
    $form_template = apply_filters('mgm_profile_form_template' . (!$edit_mode ? '_view' : ''), $form_template);
    // now replace and create the fields
    $form_html = $form_template;
    // get mgm_form_fields generator
    $form_fields = new mgm_form_fields(array('wordpres_form' => false));
    $arr_images = array();
    // loop custom fields to replace form labels/elements
    foreach ($cf_profile_page as $field) {
        // skip password in non edit mode
        //if(!$edit_mode && $field['name'] == 'password') continue;
        if (!$edit_mode && in_array($field['name'], array('password', 'password_conf'))) {
            continue;
        }
        if ($edit_mode && $field['type'] == 'image') {
            if (!in_array($field['name'], $arr_images)) {
                $arr_images[] = $field['name'];
            }
        }
        // field wrapper
        $wrapper_ph = sprintf('[user_field_wrapper_%s]', $field['name']);
        // field label
        $label_ph = sprintf('[user_field_label_%s]', $field['name']);
        // field/html element
        $element_ph = sprintf('[user_field_element_%s]', $field['name']);
        // edit mode
        if ($edit_mode) {
            // for username
            if ($field['name'] == 'username') {
                //localazing the label  issue# 617
                $label_lcz = mgm_stripslashes_deep($field['label']);
                $label_lcz = __($label_lcz, 'mgm');
                $field['label'] = sprintf('%s (<em>%s</em>)', $label_lcz, __('Username not changeable', 'mgm'));
            } elseif ($field['name'] == 'password') {
                //localazing the label  issue# 617
                $label_lcz = mgm_stripslashes_deep($field['label']);
                $label_lcz = __($label_lcz, 'mgm');
                $field['label'] = sprintf('%s (<em>%s</em>)', $label_lcz, __('Leave blank if don\'t wish to update', 'mgm'));
            }
        } else {
            // for display_name
            if ($field['name'] == 'display_name') {
                $field['label'] = __('Display Name', 'mgm');
            }
        }
        // replace wrapper
        $form_html = str_replace($wrapper_ph, $field['name'] . '_box', $form_html);
        //localazing the label  issue# 617
        $label_lcz = mgm_stripslashes_deep($field['label']);
        $label_lcz = __($label_lcz, 'mgm');
        // replace label(hidden) - issue #1050
        $form_html = str_replace($label_ph, $field['attributes']['hide_label'] ? '' : mgm_stripslashes_deep($field['label']), $form_html);
        // replace label
        $form_html = str_replace($label_ph, $label_lcz, $form_html);
        // selected value
        if (isset($profile_fields[$field['name']]) && isset($user->{$profile_fields}[$field['name']]['name'])) {
            // wp alias'
            // value
            $value = $user->{$profile_fields}[$field['name']]['name'];
            // birthdate
            if ($field['name'] == 'birthdate') {
                // convert saved date to input field format
                $value = mgm_get_datepicker_format('date', $value);
            } elseif ($field['type'] == 'checkbox') {
                //$options = preg_split('/[;,]/', $field['options']);
                //$value  = preg_split('/[;,\s]/', $value);
                //issue #1070
                $value = @unserialize($value);
                // pass " " as value to prevent the default value getting selected, if no option is selected
                $value = empty($value) ? " " : $value;
            }
        } else {
            if (isset($member->custom_fields->{$field}['name'])) {
                // custom field
                // value
                $value = $member->custom_fields->{$field}['name'];
                // birthdate
                if ($field['name'] == 'birthdate') {
                    // convert saved date to input field format
                    $value = mgm_get_datepicker_format('date', $value);
                } elseif ($field['type'] == 'checkbox') {
                    //$options = preg_split('/[;,]/', $field['options']);
                    //$value  = preg_split('/[;,\s]/', $value);
                    //issue #1070
                    $value = @unserialize($value);
                    // pass " " as value to prevent the default value getting selected, if no option is selected
                    $value = empty($value) ? " " : $value;
                }
                //issue #1484
                if ($field['name'] == 'show_public_profile' && $field['type'] == 'checkbox') {
                    $value = $member->custom_fields->{$field}['name'];
                }
            } else {
                if (isset($user->{$field}['name'])) {
                    // object var
                    // value
                    $value = $user->{$field}['name'];
                } else {
                    // none
                    // default
                    $value = '';
                }
            }
        }
        // dont set value for password
        if (in_array($field['name'], array('password', 'password_conf'))) {
            $value = '';
        }
        // disable username
        if ($field['name'] == 'username') {
            $field['attributes']['readonly'] = true;
        }
        // nickname
        if ($field['name'] == 'nickname') {
            $field['attributes']['required'] = true;
        }
        // edit mode
        if ($edit_mode) {
            if ($field['name'] == 'show_public_profile') {
                //echo "xxx".$form_fields->get_field_element($field,'mgm_profile_field',$value);
            }
            // replace element
            $form_html = str_replace($element_ph, $form_fields->get_field_element($field, 'mgm_profile_field', $value), $form_html);
        } else {
            // view
            // country
            if ($field['name'] == 'country') {
                $value = mgm_country_from_code($value);
            } elseif ($field['name'] == 'photo' && !empty($value)) {
                $value = sprintf('<img src="%s" alt="%s" >', $value, basename($value));
            }
            // replace element
            $form_html = str_replace($element_ph, $value, $form_html);
        }
    }
    // loop default fields to replace form elements
    foreach ($profile_fields as $field_key => $field) {
        // skip password in non edit mode
        //if(!$edit_mode && $field['name'] == 'user_password') continue;
        if (!$edit_mode && in_array($field['name'], array('user_password', 'user_password_conf'))) {
            continue;
        }
        $continue = false;
        foreach ($cf_noton_profile as $cffield) {
            if ($cffield['name'] == $field['name']) {
                $continue = true;
                break;
            }
        }
        if ($continue) {
            continue;
        }
        // field wrapper
        $wrapper_ph = sprintf('[user_field_wrapper_%s]', $field['name']);
        // field label
        $label_ph = sprintf('[user_field_label_%s]', $field['name']);
        // field/html element
        $element_ph = sprintf('[user_field_element_%s]', $field['name']);
        // edit mode
        if ($edit_mode) {
            // for username
            if ($field['name'] == 'user_login') {
                //localazing the label  issue# 617
                $label_lcz = mgm_stripslashes_deep($field['label']);
                $label_lcz = __($label_lcz, 'mgm');
                $field['label'] = sprintf('%s (<em>%s</em>)', $label_lcz, __('Username not changeable', 'mgm'));
            } elseif ($field['name'] == 'user_password') {
                //localazing the label  issue# 617
                $label_lcz = mgm_stripslashes_deep($field['label']);
                $label_lcz = __($label_lcz, 'mgm');
                $field['label'] = sprintf('%s (<em>%s</em>)', $label_lcz, __('Leave blank if don\'t wish to update', 'mgm'));
            }
        } else {
            // for display_name
            if ($field['name'] == 'display_name') {
                $field['label'] = __('Display Name', 'mgm');
            }
        }
        // replace wrapper
        $form_html = str_replace($wrapper_ph, $field['name'] . '_box', $form_html);
        //localazing the label  issue# 617
        $label_lcz = mgm_stripslashes_deep($field['label']);
        $label_lcz = __($label_lcz, 'mgm');
        // replace label
        $form_html = str_replace($label_ph, $label_lcz, $form_html);
        // selected value
        if (isset($user->{$field}['name'])) {
            // wp alias
            $value = $user->{$field}['name'];
        } else {
            if (isset($member->custom_fields->{$field_key})) {
                // custom field
                $value = $member->custom_fields->{$field_key};
            } else {
                // none
                $value = '';
            }
        }
        // dont set value for password
        //if($field['name'] == 'user_password') $value = '';
        if (in_array($field['name'], array('user_password', 'user_password_conf'))) {
            $value = '';
        }
        // edit mode
        if ($edit_mode) {
            // replace element
            $form_html = str_replace($element_ph, $form_fields->get_field_element($field, 'mgm_profile_field', $value), $form_html);
        } else {
            // country
            if ($field_key == 'country') {
                $value = mgm_country_from_code($value);
            }
            // set
            $form_html = str_replace($element_ph, $value, $form_html);
        }
    }
    // attach scripts
    $form_html .= mgm_attach_scripts(true, array());
    // range
    $yearRange = mgm_get_calendar_year_range();
    // append script
    $form_html .= '<script language="javascript">jQuery(document).ready(function(){try{mgm_date_picker(".mgm_date",false,{yearRange:"' . $yearRange . '", dateFormat: "' . mgm_get_datepicker_format() . '"});}catch(x){}});</script>';
    //include scripts for image upload:
    if (!empty($arr_images)) {
        $form_html .= mgm_upload_script_js('profileform', $arr_images);
    }
    // buttun
    $button_html = '';
    // button on edit
    if ($edit_mode && !$temp_edit) {
        // default
        $button_html = '<div><input class="button mgm-profile-button" type="submit" name="wp-submit" id="wp-submit" value="' . __('Update', 'mgm') . '" /></div>';
        // apply button filter
        $button_html = apply_filters('mgm_profile_form_button', $button_html);
    }
    //profile by membership - issue #1573
    if (isset($args['membership']) && !empty($args['membership'])) {
        // hidden
        $button_html .= sprintf('<input type="hidden" name="membership" value="%s">', $args['membership']);
    }
    // hidden
    $button_html .= '<input type="hidden" name="method" value="update_user">';
    // nonce
    $button_html .= wp_nonce_field('user_profile', '_mgmnonce_user_profile', true, false);
    // temp
    if (!$temp_edit) {
        // open
        $form_open = sprintf('<form class="mgm_form" name="profileform" id="profileform" action="%s" method="post">', $form_action);
        $form_close = '</form>';
    } else {
        $form_open = $form_close = '';
    }
    // output form
    $html = sprintf('<div class="mgm_prifile_form">%s %s %s %s %s</div>', $error_html, $form_open, $form_html, $button_html, $form_close);
    //issue #1113
    $html = mgm_stripslashes_deep($html);
    // filter
    $html = apply_filters('mgm_user_profile_form_html', $html, $current_user);
    //issue #1635
    $user_profile_html = '<div class="mgm_user_profile_container">' . $html . '</div>';
    // return
    return $user_profile_html;
}
 function post_purchase_export()
 {
     global $wpdb;
     // data
     $data = array();
     // filter
     $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
     $search_field_name = mgm_post_var('search_field_name');
     // check
     if (!empty($search_field_name)) {
         // post
         $search_field_value = mgm_post_var('search_field_value');
         $search_field_value_two = mgm_post_var('search_field_value_two');
         // view data
         $data['search_field_name'] = $search_field_name;
         // for display
         //issue #1281
         $data['search_field_value'] = htmlentities($search_field_value, ENT_QUOTES, "UTF-8");
         // for display
         $data['search_field_value_two'] = htmlentities($search_field_value_two, ENT_QUOTES, "UTF-8");
         // for display
         //searc value
         $search_field_value = esc_sql($search_field_value);
         // for sql
         // end date value
         $search_field_value_two = esc_sql($search_field_value_two);
         // for sql
         //current date
         $curr_date = mgm_get_current_datetime();
         $current_date = $curr_date['timestamp'];
         // by field
         switch ($search_field_name) {
             case 'user_login':
                 $sql_filter = " AND (`user_login` LIKE '%{$search_field_value}%' OR `guest_token` LIKE '%{$search_field_value}%')";
                 break;
             case 'post_title':
                 $sql_filter = " AND (`post_title` LIKE '%{$search_field_value}%')";
                 break;
             case 'is_gift':
                 $sql_filter = " AND (`is_gift` = '{$search_field_value}')";
                 break;
             case 'purchase_dt':
                 // date start
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date end
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                 $search_field_value_two = mgm_format_inputdate_to_mysql($search_field_value_two);
                 // set
                 $sql_filter = " AND (DATE_FORMAT(`pp`.`purchase_dt`,'%Y-%m-%d') BETWEEN '{$search_field_value}' AND '{$search_field_value_two}')";
                 break;
         }
     }
     // order
     $sql_order = " ORDER BY u.user_login, p.post_title";
     // sql
     $sql = "SELECT SQL_CALC_FOUND_ROWS p.ID AS post_id, p.post_title, pp.purchase_dt, \r\r\n\t\t        IF(user_id IS NULL, CONCAT('guest-', guest_token), u.user_login) AS user_login, pp.id,\r\r\n\t\t        pp.is_gift,pp.is_expire FROM `" . TBL_MGM_POST_PURCHASES . "` pp \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->posts . " p ON (p.id = pp.post_id) \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->users . " u ON (u.ID = pp.user_id) WHERE 1 \r\r\n\t\t\t\t{$sql_filter} {$sql_order} ";
     // log
     // mgm_log($sql);
     // store
     $data['post_purchases'] = $wpdb->get_results($sql);
     // date format
     $date_format = mgm_get_date_format('date_format');
     // init
     $purchases = array();
     // check
     if (count($data['post_purchases']) > 0) {
         //purchases
         foreach ($data['post_purchases'] as $purchase) {
             // int
             $row = new stdClass();
             // type
             $type = $purchase->is_gift == 'Y' ? __('Gift', 'mgm') : __('Purchase', 'mgm');
             // check is_expiry
             if ($purchase->is_expire == 'N') {
                 $expiry = __('Indefinite', 'mgm');
             } else {
                 $expiry = mgm_get_post($purchase->post_id)->get_access_duration();
                 $expiry = !$expiry ? __('Indefinite', 'mgm') : date($date_format, 86400 * $expiry + strtotime($purchase->purchase_dt)) . " (" . $expiry . __(' D', 'mgm') . ")";
             }
             // member name
             if (preg_match('/^guest-/', $purchase->user_login)) {
                 // guest token
                 $guest_token = str_replace('guest-', '', $purchase->user_login);
                 // username
                 $username = __('Guest', 'mgm') . sprintf(' (%s)', $guest_token);
             } else {
                 // username
                 $username = $purchase->user_login;
             }
             //export fields
             $row->username = $username;
             $row->post = $purchase->post_title;
             $row->type = $type;
             $row->expire_date = $expiry;
             $row->purchase_or_gift_date = date($date_format, strtotime($purchase->purchase_dt));
             // cache
             $purchases[] = $row;
             // unset
             unset($row);
         }
     }
     // default response
     $response = array('status' => 'error', 'message' => __('Error while exporting post (purchase/gift)s.', 'mgm'));
     // check
     if (count($purchases) > 0) {
         // success
         $success = count($purchases);
         // create
         if (mgm_post_var('export_format') == 'csv') {
             $filename = mgm_create_csv_file($purchases, 'post_purchases');
         } else {
             $filename = mgm_create_xls_file($purchases, 'post_purchases');
         }
         // src
         $file_src = MGM_FILES_EXPORT_URL . $filename;
         // message
         $message = sprintf(__('Successfully exported %d post %s.', 'mgm'), $success, $success > 1 ? 'purchases' : 'purchase');
         // init
         $response = array('status' => 'success', 'message' => $message, 'src' => $file_src);
     }
     // return response
     echo json_encode($response);
     exit;
 }