variable-subscription.php 17.5 KB
<?php
/**
 * Variable subscription product add to cart
 *
 * @author  WooThemes
 * @package WooCommerce-Subscriptions/Templates
 * @version 2.0.9
 */
if (!defined('ABSPATH')) {
    exit;
}
global $post;
global $product;

$attribute_keys = array_keys($attributes);
$user_id = get_current_user_id();
$_request_uri = $_SERVER["REQUEST_URI"];


do_action('woocommerce_before_add_to_cart_form');
?>

<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo absint($product->id); ?>" data-product_variations="<?php echo esc_attr(json_encode($available_variations)) ?>">
    <?php do_action('woocommerce_before_variations_form'); ?>
    <?php
    $subscription_result = FGC_ActiveCampaign::get_info_of_active_or_onhold_subscription($user_id);
    $variation_id = $subscription_result['variation_id'];
//
//    $subscriptions = WC_Subscriptions_Manager::get_users_subscriptions($user_id);
//    foreach ($subscriptions as $subscription) {
//        if ($subscription['status'] == 'active' || $subscription['status'] == 'on-hold') {
//            $variation_id = $subscription['variation_id'];
//            break;
//        }
//    }
    $current_price = 0;
    if (strpos($_request_uri, '/upgrade/') !== false || strpos($_request_uri, '/downgrade/') !== false) {
        if ($variation_id != 0) {
            foreach ($available_variations as $available_variation) {
                if ($available_variation['variation_id'] == $variation_id) {
                    $current_price = $available_variation['display_price'];
                    $current_drink = $available_variation['attributes']['attribute_drinks'];
                    break;
                }
            }
            if ($current_price != 0) {
                ?>
                <script>
                    jQuery(document).ready(function ($) {
                        $('.current-plan').html('<b>YOUR CURRENT PLAN:</b> <?php echo $current_drink; ?> DRINKS PER MONTH ');
                    });
                </script>
                <?php
            }
        } else {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=' . get_site_url() . '/get-started' . '">';
        }
    }
    $need_move = 0;
    if (isset($_REQUEST['higher_subscription'])) {
        $higher_subscription = $_REQUEST['higher_subscription'];
    } else {
        $higher_subscription = 12;
    }
    if (isset($_REQUEST['protip_subscription'])) {
        $protip_subscription = $_REQUEST['protip_subscription'];
    }
    if (strpos($_request_uri, '/get-started/') !== false) {
        $users = get_users_of_blog();
        $total_member_paid = 0;
        foreach ($users as $user) {
            $user_id = $user->ID;
            if ((float) wc_get_customer_total_spent($user_id) > 0) {
                $total_member_paid++;
            }
        }
        ?>
        <script>
            jQuery(document).ready(function ($) {
                $('.shop-step-1 p b').html('JOIN <?php echo number_format(10430 + $total_member_paid); ?> HAPPY CUSTOMERS');
            });
        </script>
        <?php
    }

    if (isset($higher_subscription)) {
        foreach ($available_variations as $available_variation) {
            if ($available_variation['attributes']['attribute_drinks'] == $higher_subscription) {
                $higher_price = $available_variation['display_price'];
                break;
            }
        }
    }
    if ($variation_id != 0) {
//                if (isset($variation_id)) {
        if ($subscription_result['status'] == 'active') {
            $status_check = 'wc-active';
        } else {
            $status_check = 'wc-on-hold';
        }

        $subscriptions = wcs_get_users_subscriptions($user_id);
        foreach ($subscriptions as $key => $value) {
            if ($value->post->post_status == $status_check) {
                $subscription_current = wcs_get_subscription($key);
                if (sizeof($subscription_current->get_items()) > 0) {
                    foreach ($subscription_current->get_items() as $item_id => $item) {
                        break;
                    }
                }
                break;
            }
        }
        $switch_url = WC_Subscriptions_Switcher::get_switch_url($item_id, $item, $subscription_current);
        ?>
        <input type="hidden" name="switch-subscription" value="<?php echo $key ?>"/>
        <input type="hidden" name="item" value="<?php echo $item_id ?>"/>
        <input type="hidden" name="_wcsnonce" value="<?php echo substr($switch_url, strrpos($switch_url, '_wcsnonce') + 10) ?>"/>
        <?php
    }
    ?>
    <?php

    function sort_subscription_mobile($a, $b) {
        return $b["display_price"] - $a["display_price"];
    }

    function sort_subscription_desktop($a, $b) {
        return $a["display_price"] - $b["display_price"];
    }

    $protip_next_subscription = array();
    if (isset($protip_subscription)) {
        switch ($protip_subscription) {
            case '12':
                $protip_next_subscription[] = '30';
                break;
            case '60':
                $protip_next_subscription[] = '90';
                $protip_next_subscription[] = '120';
                break;
            case '90':
                $protip_next_subscription[] = '120';
                break;
            case '180':
                $protip_next_subscription[] = '210';
                $protip_next_subscription[] = '240';
                break;
            case '210':
                $protip_next_subscription[] = '240';
                break;
            default:
                $protip_next_subscription = array();
        }
    }
    ?>
    <div class="fgc_slider_products mobile">

        <?php
        $need_move = 0;
        usort($available_variations, "sort_subscription_mobile");

        foreach ($available_variations as $available_variation) {
            if ($available_variation['sku'] == '12-drinks-tracked') {
                continue;
            }
            if (count($protip_next_subscription) > 0) {
                if (!in_array($available_variation['attributes']['attribute_drinks'], $protip_next_subscription)) {
                    continue;
                }
            } else {
                if ($current_price != 0) {
                    if (strpos($_request_uri, '/upgrade/') !== false) {
                        if ($current_price >= $available_variation['display_price']) {
                            continue;
                        }
                    }

                    if (strpos($_request_uri, '/downgrade/') !== false) {
                        if ($current_price <= $available_variation['display_price']) {
                            continue;
                        }
                    }
                    if (isset($higher_subscription)) {
                        if ((float) $higher_price > (float) $available_variation['display_price']) {
                            $need_move++;
                        }
                    }
                } else {
                    if (isset($higher_subscription)) {
                        if ((float) $higher_price > (float) $available_variation['display_price']) {
                            $need_move++;
                        }
                    }
                }
            }
            if ($available_variation['sku'] == '12-drinks-tracked') {
                continue;
            }
            $upgradeParameters = ($variation_id != 0) ? '&switch-subscription=' . $key . '&item=' . $item_id . '&_wcsnonce=' . substr($switch_url, strrpos($switch_url, '_wcsnonce') + 10) : '';
            ?>
            <div class="variable-subscription slide-frame" id="variable_<?php echo $available_variation['variation_id']; ?>">

                <a href="<?php echo the_permalink() . '?add-to-cart=' . $post->ID . '&variation_id=' . $available_variation['variation_id'] . '&attribute_drinks=' . $available_variation['attributes']['attribute_drinks'] . $upgradeParameters; ?>" class="ajax_add_to_cart_variation <?php echo ($available_variation['sku'] == 'popular') ? 'popular' : '' ?>">
                    <h3><?php echo $available_variation['attributes']['attribute_drinks'] . ' Drinks'; ?></h3>
                    <span class="delivered">Delivered Monthly</span>
                    <span class="price">$<?php
                        $display_price = $available_variation['display_price'];
                        echo ((int) $display_price == $display_price) ? $display_price : (int) $display_price . '.<small>99</small>';
//                        echo ((int) $display_price == $display_price) ? $display_price : (int) $display_price . '.<small>' . substr((string) ($display_price - (int) $display_price), 2, 2) . '</small>';
                        if (strpos($available_variation['price_html'], ' / day')) {
                            echo '/day';
                        }
                        if (strpos($available_variation['price_html'], ' / week')) {
                            echo '/week';
                        }
                        if (strpos($available_variation['price_html'], ' / month')) {
                            echo '/month';
                        }
                        if (strpos($available_variation['price_html'], ' / year')) {
                            echo '/year';
                        }
                        ?></span>
                    <span class="short-description"><?php echo $available_variation['variation_description'] ?></span>
                </a>
            </div>
        <?php } ?>
    </div>
    <div class="fgc_slider_products desktop">

        <?php
        $need_move = 0;

        usort($available_variations, "sort_subscription_desktop");
        foreach ($available_variations as $available_variation) {
            if ($available_variation['sku'] == '12-drinks-tracked') {
                continue;
            }
            if (count($protip_next_subscription) > 0) {
                if (!in_array($available_variation['attributes']['attribute_drinks'], $protip_next_subscription)) {
                    continue;
                }
            } else {

                if ($current_price != 0) {
                    if (strpos($_request_uri, '/upgrade/') !== false) {
                        if ($current_price >= $available_variation['display_price']) {
                            continue;
                        }
                    }

                    if (strpos($_request_uri, '/downgrade/') !== false) {
                        if ($current_price <= $available_variation['display_price']) {
                            continue;
                        }
                    }
                    if (isset($higher_subscription)) {
                        if ((float) $higher_price > (float) $available_variation['display_price']) {
                            $need_move++;
                        }
                    }
                } else {
                    if (isset($higher_subscription)) {
                        if ((float) $higher_price > (float) $available_variation['display_price']) {
                            $need_move++;
                        }
                    }
                }
            }

            $upgradeParameters = ($variation_id != 0) ? '&switch-subscription=' . $key . '&item=' . $item_id . '&_wcsnonce=' . substr($switch_url, strrpos($switch_url, '_wcsnonce') + 10) : '';
            ?>
            <div class="variable-subscription slide-frame" id="variable_<?php echo $available_variation['variation_id']; ?>">

                <a href="<?php echo the_permalink() . '?add-to-cart=' . $post->ID . '&variation_id=' . $available_variation['variation_id'] . '&attribute_drinks=' . $available_variation['attributes']['attribute_drinks'] . $upgradeParameters; ?>" class="ajax_add_to_cart_variation <?php echo ($available_variation['sku'] == 'popular') ? 'popular' : '' ?>">
                    <h3><?php echo $available_variation['attributes']['attribute_drinks'] . ' Drinks'; ?></h3>
                    <span class="delivered">Delivered Monthly</span>
                    <span class="price">$<?php
                        $display_price = $available_variation['display_price'];
                        echo ((int) $display_price == $display_price) ? $display_price : (int) $display_price . '.<small>99</small>';
//                        echo ((int) $display_price == $display_price) ? $display_price : (int) $display_price . '.<small>' . substr((string) ($display_price - (int) $display_price), 2, 2) . '</small>';
                        if (strpos($available_variation['price_html'], ' / day')) {
                            echo '/day';
                        }
                        if (strpos($available_variation['price_html'], ' / week')) {
                            echo '/week';
                        }
                        if (strpos($available_variation['price_html'], ' / month')) {
                            echo '/month';
                        }
                        if (strpos($available_variation['price_html'], ' / year')) {
                            echo '/year';
                        }
                        ?></span>
                    <span class="short-description"><?php echo $available_variation['variation_description'] ?></span>
                </a>
            </div>
        <?php } ?>
    </div>
    <?php
//    }
    ?>

    <?php if (empty($available_variations) && false !== $available_variations) : ?>
        <p class="stock out-of-stock"><?php esc_html_e('This product is currently out of stock and unavailable.', 'woocommerce-subscriptions'); ?></p>
    <?php else : ?>
        <?php if (!$product->is_purchasable() && 0 != $user_id && 'no' != $product->limit_subscriptions && ( ( 'active' == $product->limit_subscriptions && wcs_user_has_subscription($user_id, $product->id, 'on-hold') ) || $user_has_subscription = wcs_user_has_subscription($user_id, $product->id, $product->limit_subscriptions) )) : ?>
            <?php if ('any' == $product->limit_subscriptions && $user_has_subscription && !wcs_user_has_subscription($user_id, $product->id, 'active') && !wcs_user_has_subscription($user_id, $product->id, 'on-hold')) : // customer has an inactive subscription, maybe offer the renewal button   ?>
                <?php $resubscribe_link = wcs_get_users_resubscribe_link_for_product($product->id); ?>
                <?php if (!empty($resubscribe_link)) : ?>
                    <a href="<?php echo esc_url($resubscribe_link); ?>" class="button product-resubscribe-link"><?php esc_html_e('Resubscribe', 'woocommerce-subscriptions'); ?></a>
                <?php endif; ?>
            <?php else : ?>
                <p class="limited-subscription-notice notice"><?php esc_html_e('You have an active subscription to this product already.', 'woocommerce-subscriptions'); ?></p>
            <?php endif; ?>
        <?php else : ?>
            <table class="variations" cellspacing="0">
                <tbody>
                    <?php foreach ($attributes as $attribute_name => $options) : ?>
                        <tr>
                            <td class="label"><label for="<?php echo esc_attr(sanitize_title($attribute_name)); ?>"><?php echo esc_html(wc_attribute_label($attribute_name)); ?></label></td>
                            <td class="value">
                                <?php
                                $selected = isset($_REQUEST['attribute_' . sanitize_title($attribute_name)]) ? wc_clean($_REQUEST['attribute_' . sanitize_title($attribute_name)]) : $product->get_variation_default_attribute($attribute_name);
                                wc_dropdown_variation_attribute_options(array('options' => $options, 'attribute' => $attribute_name, 'product' => $product, 'selected' => $selected));
                                echo wp_kses(end($attribute_keys) === $attribute_name ? '<a class="reset_variations" href="#">' . __('Clear selection', 'woocommerce-subscriptions') . '</a>' : '', array('a' => array('class' => array(), 'href' => array())));
                                ?>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
            <?php do_action('woocommerce_before_add_to_cart_button'); ?>

            <div class="single_variation_wrap" style="display:none;">
                <?php
                /**
                 * woocommerce_before_single_variation Hook
                 */
                do_action('woocommerce_before_single_variation');

                /**
                 * woocommerce_single_variation hook. Used to output the cart button and placeholder for variation data.
                 * @since 2.4.0
                 * @hooked woocommerce_single_variation - 10 Empty div for variation data.
                 * @hooked woocommerce_single_variation_add_to_cart_button - 20 Qty and cart button.
                 */
                do_action('woocommerce_single_variation');

                /**
                 * woocommerce_after_single_variation Hook
                 */
                do_action('woocommerce_after_single_variation');
                ?>
                <input type="hidden" class="variation_value" value=""/>

            </div>

            <?php do_action('woocommerce_after_add_to_cart_button'); ?>
        <?php endif; ?>
    <?php endif; ?>

    <?php do_action('woocommerce_after_variations_form'); ?>

</form>
<?php
if (isset($higher_subscription)) {
    ?>
    <input type="hidden" id="make_change_subscription" value="<?php echo $higher_subscription; ?>"/>
    <input type="hidden" id="need_move" value="<?php echo $need_move; ?>"/>
    <?php
}
?>
<?php do_action('woocommerce_after_add_to_cart_form'); ?>