2026-03-27 11:54:51 +00:00

298 lines
12 KiB
PHP

<?php
class ASP_SWPM_Integrations {
public function __construct() {
add_action('plugins_loaded', array($this, 'handle_plugins_loaded'));
add_action('init', array($this, 'handle_init'));
}
public function handle_plugins_loaded() {
if (defined('SIMPLE_WP_MEMBERSHIP_VER')) {
add_action('asp_stripe_payment_completed', array($this, 'handle_swpm_signup'), 10, 2);
add_action('asp_stripe_payment_completed', array($this, 'handle_swpm_account_connection'), 10, 2);
}
}
public function handle_init() {
add_shortcode('asp_swpm_purchase_history', array($this, 'show_asp_swpm_purchase_history'));
}
public function handle_swpm_signup($data, $charge) {
if (empty($data['product_id'])) {
return;
}
//let's check if Membership Level is set for this product
$level_id = get_post_meta($data['product_id'], 'asp_product_swpm_level', true);
if (empty($level_id)) {
return;
}
//let's form data required for eMember_handle_subsc_signup_stand_alone function and call it
$first_name = '';
$last_name = '';
if (! empty($data['customer_name'])) {
// let's try to create first name and last name from full name
$parts = explode(' ', $data['customer_name']);
$last_name = array_pop($parts);
$first_name = implode(' ', $parts);
}
$addr_street = isset($_POST['stripeBillingAddressLine1']) ? sanitize_text_field($_POST['stripeBillingAddressLine1']) : '';
$addr_zip = isset($_POST['stripeBillingAddressZip']) ? sanitize_text_field($_POST['stripeBillingAddressZip']) : '';
$addr_city = isset($_POST['stripeBillingAddressCity']) ? sanitize_text_field($_POST['stripeBillingAddressCity']) : '';
$addr_state = isset($_POST['stripeBillingAddressState']) ? sanitize_text_field($_POST['stripeBillingAddressState']) : '';
$addr_country = isset($_POST['stripeBillingAddressCountry']) ? sanitize_text_field($_POST['stripeBillingAddressCountry']) : '';
if (empty($addr_street) && ! empty($charge->source->address_line1)) {
$addr_street = $charge->source->address_line1;
}
if (empty($addr_zip) && ! empty($charge->source->address_zip)) {
$addr_zip = $charge->source->address_zip;
}
if (empty($addr_city) && ! empty($charge->source->address_city)) {
$addr_city = $charge->source->address_city;
}
if (empty($addr_state) && ! empty($charge->source->address_state)) {
$addr_state = $charge->source->address_state;
}
if (empty($addr_country) && ! empty($charge->source->address_country)) {
$addr_country = $charge->source->address_country;
}
//get address from new API payment data
$ipn = ASP_Process_IPN_NG::get_instance();
if (isset($ipn->p_data)) {
$addr = $ipn->p_data->get_billing_details();
if ($addr) {
if (empty($addr_street) && ! empty($addr->line1)) {
$addr_street = $addr->line1;
}
if (empty($addr_zip) && ! empty($addr->postal_code)) {
$addr_zip = $addr->postal_code;
}
if (empty($addr_city) && ! empty($addr->city)) {
$addr_city = $addr->city;
}
if (empty($addr_state) && ! empty($addr->state)) {
$addr_state = $addr->state;
}
if (empty($addr_country) && ! empty($addr->country)) {
$addr_country = $addr->country;
}
}
}
if (! empty($addr_country)) {
//convert country code to country name
$countries = ASP_Utils::get_countries_untranslated();
if (isset($countries[$addr_country])) {
$addr_country = $countries[$addr_country];
}
}
$ipn_data = array(
'payer_email' => $data['stripeEmail'],
'first_name' => $first_name,
'last_name' => $last_name,
'txn_id' => $data['txn_id'],
'address_street' => $addr_street,
'address_city' => $addr_city,
'address_state' => $addr_state,
'address_zip' => $addr_zip,
'address_country' => $addr_country,
);
ASP_Debug_Logger::log('Calling swpm_handle_subsc_signup_stand_alone');
$swpm_id = '';
if (SwpmMemberUtils::is_member_logged_in()) {
$swpm_id = SwpmMemberUtils::get_logged_in_members_id();
}
if (defined('SIMPLE_WP_MEMBERSHIP_PATH')) {
if (!function_exists('swpm_handle_subsc_signup_stand_alone')) {
require_once(SIMPLE_WP_MEMBERSHIP_PATH . 'ipn/swpm_handle_subsc_ipn.php');
}
swpm_handle_subsc_signup_stand_alone($ipn_data, $level_id, $data['txn_id'], $swpm_id);
}
}
public function handle_swpm_account_connection($data, $charge) {
if (empty($data['product_id'])) {
return;
}
$order_post_id = $data['order_post_id'];
// Check if user is logged in
if (!SwpmMemberUtils::is_member_logged_in()) {
return;
}
$member_id = SwpmMemberUtils::get_logged_in_members_id();
if (!is_numeric($member_id)) {
return;
}
// Valid swpm member ID found, let's save it to order meta;
update_post_meta($order_post_id, 'asp_product_swpm_member_id', $member_id);
ASP_Debug_Logger::log('Connected SWPM member ID ' . $member_id . ' to order ID ' . $order_post_id);
}
public function show_asp_swpm_purchase_history($atts) {
$is_logged_in = SwpmMemberUtils::is_member_logged_in();
$member_id = SwpmMemberUtils::get_logged_in_members_id();
if (empty($is_logged_in) || !is_numeric($member_id)) {
return '<p class="asp-swpm-purchase-history-not-logged-in">' . esc_html__('You need to be logged in to view your purchase history.', 'stripe-payments') . '</p>';
}
$atts = shortcode_atts(array(
'show_downloads' => 0,
), $atts);
$show_downloads = boolval($atts['show_downloads']);
// Get all order cpt (stripe_order) for this SWPM member by member ID by the 'asp_product_swpm_member_id' post meta.
$orders = get_posts(array(
'post_type' => 'stripe_order',
'posts_per_page' => -1,
'field' => 'ids',
'meta_query' => array(
array(
'key' => 'asp_product_swpm_member_id',
'value' => $member_id,
),
),
));
if (empty($orders)) {
return '<p class="asp-swpm-purchase-history-not-found">' . esc_html__('No purchase history found.', 'stripe-payments') . '</p>';
}
$transactions_data = array();
foreach ($orders as $order) {
$product_id = get_post_meta($order->ID, 'asp_product_id', true);
if (empty($product_id)) {
continue;
}
// $product_name = get_the_title($product_id);
$order_data = get_post_meta($order->ID, 'order_data', true);
// Format the date using the saved wp date format string;
// $date_format = get_option('date_format') . ' ' . get_option('time_format');
$date_format = get_option('date_format');
$formatted_date = date($date_format, strtotime($order->post_date));
$product_name = isset($order_data['item_name']) ? sanitize_text_field($order_data['item_name']) : '-';
$txn_id = isset($order_data['txn_id']) ? sanitize_text_field($order_data['txn_id']) : '-';
$item_url = isset($order_data['item_url']) ? sanitize_url($order_data['item_url']) : '';
$quantity = isset($order_data['item_quantity']) ? intval($order_data['item_quantity']) : 0;
$paid_amount = isset($order_data['paid_amount']) ? $order_data['paid_amount'] : 0;
$currency_code = isset($order_data['currency_code']) ? strtoupper($order_data['currency_code']) : 'USD';
// Get the formatted amount with currency symbol
$paid_amount = ASP_Utils::formatted_price($paid_amount, $currency_code);
$transactions_data[] = array(
'product_name' => $product_name,
'quantity' => $quantity,
'txn_id' => $txn_id,
'item_url' => $item_url,
'purchase_date' => $formatted_date,
'paid_amount' => $paid_amount,
);
}
$output = '';
ob_start();
?>
<style>
.asp-swpm-purchase-history-wrapper {
overflow-x: auto;
}
.asp-swpm-purchase-history-table {
width: 100%;
}
.asp-swpm-purchase-history-table th,
.asp-swpm-purchase-history-table td {
text-align: left;
vertical-align: top;
padding: 6px 4px;
}
/* .asp-swpm-purchase-history-table tr :first-child{
padding-left: 0;
} */
/* .asp-swpm-purchase-history-table tr :last-child{
padding-right: 0;
} */
.asp-swpm-purchase-history-table td:first-child{
min-width: 200px;
}
</style>
<div class="asp-swpm-purchase-history-wrapper">
<table class="widefat asp-swpm-purchase-history-table">
<thead>
<tr>
<th><?php echo esc_html__('Product', 'stripe-payments'); ?></th>
<th><?php echo esc_html__('Amount', 'stripe-payments'); ?></th>
<th><?php echo esc_html__('Date', 'stripe-payments'); ?></th>
<?php if ($show_downloads) : ?>
<th><?php echo esc_html__('Downloads', 'stripe-payments'); ?></th>
<?php endif; ?>
</tr>
</thead>
<tbody>
<?php
foreach ($transactions_data as $txn) {
?>
<tr>
<td>
<?php
echo esc_html($txn['product_name']);
if (!empty($txn['quantity']) && $txn['quantity'] > 1) {
echo ' x' . esc_html($txn['quantity']);
}
?>
</td>
<td>
<?php echo esc_html($txn['paid_amount']) ?>
</td>
<td>
<?php echo esc_html($txn['purchase_date']) ?>
</td>
<?php if ($show_downloads) { ?>
<td>
<?php if (!empty($txn['item_url'])) { ?>
<a href="<?php echo esc_url($txn['item_url']) ?>"><?php esc_html_e('Download', 'stripe-payments') ?></a>
<?php } else { ?>
<?php esc_html_e('-', 'stripe-payments') ?>
<?php } ?>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php
$output .= ob_get_clean();
return $output;
}
}
new ASP_SWPM_Integrations();