Builder
3 years ago
MyAccount
3 years ago
EditProfileTag.php
4 years ago
FormProcessor.php
3 years ago
FrontendProfileTag.php
3 years ago
Init.php
3 years ago
LoginFormTag.php
4 years ago
MelangeTag.php
4 years ago
MemberDirectoryTag.php
4 years ago
MembershipShortcodes.php
3 years ago
PasswordResetTag.php
4 years ago
RegistrationFormTag.php
4 years ago
index.php
5 years ago
MembershipShortcodes.php
179 lines
| 1 | <?php |
| 2 | |
| 3 | namespace ProfilePress\Core\ShortcodeParser; |
| 4 | |
| 5 | use ProfilePress\Core\Membership\Controllers\CheckoutSessionData; |
| 6 | use ProfilePress\Core\Membership\Models\Coupon\CouponFactory; |
| 7 | use ProfilePress\Core\Membership\Models\Customer\CustomerFactory; |
| 8 | use ProfilePress\Core\Membership\Models\Group\GroupFactory; |
| 9 | use ProfilePress\Core\Membership\Models\Order\OrderFactory; |
| 10 | use ProfilePress\Core\Membership\Models\Subscription\SubscriptionFactory; |
| 11 | |
| 12 | class MembershipShortcodes |
| 13 | { |
| 14 | public function __construct() |
| 15 | { |
| 16 | add_shortcode('profilepress-checkout', [$this, 'checkout_page_wrapper']); |
| 17 | add_shortcode('profilepress-receipt', [$this, 'success_page']); |
| 18 | |
| 19 | add_filter('the_content', [$this, 'filter_success_page_content'], 99999); |
| 20 | } |
| 21 | |
| 22 | function filter_success_page_content($content) |
| 23 | { |
| 24 | if (isset($_GET['order_key'], $_GET['payment_method']) && ppress_is_success_page()) { |
| 25 | $order = OrderFactory::fromOrderKey(sanitize_key($_GET['order_key'])); |
| 26 | if ($order->exists() && $order->is_pending()) { |
| 27 | ob_start(); |
| 28 | ppress_render_view('order-processing', [ |
| 29 | 'order_success_page' => ppress_get_success_url($order->order_key) |
| 30 | ]); |
| 31 | |
| 32 | $content = ob_get_clean(); |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | return $content; |
| 37 | } |
| 38 | |
| 39 | public function checkout_page_wrapper() |
| 40 | { |
| 41 | ob_start(); |
| 42 | |
| 43 | echo '<div class="ppress-checkout__form">'; |
| 44 | $this->checkout_page(); |
| 45 | echo '</div>'; |
| 46 | |
| 47 | return ob_get_clean(); |
| 48 | } |
| 49 | |
| 50 | public function checkout_page() |
| 51 | { |
| 52 | if ( |
| 53 | ( ! isset($_GET['plan']) || ! is_numeric($_GET['plan'])) && |
| 54 | ( ! isset($_GET['group']) || ! is_numeric($_GET['group'])) |
| 55 | ) { |
| 56 | |
| 57 | do_action('ppress_membership_checkout_empty_cart'); |
| 58 | |
| 59 | echo '<p>'; |
| 60 | printf( |
| 61 | __('Your cart is currently empty. Click <a href="%s">here</a> to get started.', 'wp-user-avatar'), |
| 62 | /** @todo add setting to set url to redirect to when cart is empty */ |
| 63 | apply_filters('ppress_membership_checkout_empty_cart_url', home_url()) |
| 64 | ); |
| 65 | echo '</p>'; |
| 66 | |
| 67 | return; |
| 68 | } |
| 69 | |
| 70 | $isGroupCheckout = ! empty($_GET['group']); |
| 71 | |
| 72 | $isChangePlanCheckout = ! empty($_GET['change_plan']); |
| 73 | |
| 74 | if ($isChangePlanCheckout) { |
| 75 | |
| 76 | if ( ! is_user_logged_in()) { |
| 77 | echo '<p>'; |
| 78 | esc_html_e('You must be logged in to switch to another plan.', 'wp-user-avatar'); |
| 79 | echo '</p>'; |
| 80 | |
| 81 | return; |
| 82 | } |
| 83 | |
| 84 | $sub = SubscriptionFactory::fromId(absint($_GET['change_plan'])); |
| 85 | |
| 86 | if ( ! $sub->exists() || ! ppress_get_plan($sub->plan_id)->get_group_id()) { |
| 87 | |
| 88 | echo '<p>'; |
| 89 | esc_html_e('You can not switch to another plan because this plan does not belong to any group.', 'wp-user-avatar'); |
| 90 | echo '</p>'; |
| 91 | |
| 92 | return; |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | if ($isGroupCheckout) { |
| 97 | |
| 98 | $group = GroupFactory::fromId(absint($_GET['group'])); |
| 99 | |
| 100 | if ( ! $group->exists()) { |
| 101 | esc_html_e('Invalid plan group.', 'wp-user-avatar'); |
| 102 | |
| 103 | return; |
| 104 | } |
| 105 | |
| 106 | if (empty($group->get_plan_ids())) { |
| 107 | esc_html_e('Error: group has no membership plans.', 'wp-user-avatar'); |
| 108 | |
| 109 | return; |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | $planObj = ppress_get_plan(absint(ppressGET_var('plan', 0))); |
| 114 | $groupObj = GroupFactory::fromId(absint(ppressGET_var('group', 0))); |
| 115 | |
| 116 | if ( |
| 117 | is_user_logged_in() && |
| 118 | ! $isGroupCheckout && |
| 119 | ! $isChangePlanCheckout && |
| 120 | CustomerFactory::fromUserId(get_current_user_id())->has_active_subscription($planObj->id)) { |
| 121 | echo '<p>'; |
| 122 | printf( |
| 123 | esc_html__('You have an active subscription to this plan. Please go to %syour account%s to manage your subscription.', 'wp-user-avatar'), |
| 124 | '<a href="' . ppress_my_account_url() . '">', '</a>' |
| 125 | ); |
| 126 | echo '</p>'; |
| 127 | |
| 128 | return; |
| 129 | } |
| 130 | |
| 131 | if ( ! $planObj->is_active()) { |
| 132 | do_action('ppress_membership_checkout_invalid_plan'); |
| 133 | echo '<p>' . esc_html__('Invalid subscription plan.', 'wp-user-avatar') . '</p>'; |
| 134 | |
| 135 | return; |
| 136 | } |
| 137 | |
| 138 | add_filter('ppress_logout_url_enable_redirect_get_query', '__return_true'); |
| 139 | |
| 140 | if ( ! empty($_GET['coupon'])) { |
| 141 | |
| 142 | $coupon = CouponFactory::fromCode(sanitize_text_field($_GET['coupon'])); |
| 143 | |
| 144 | if ($coupon->exists()) { |
| 145 | |
| 146 | ppress_session()->set(CheckoutSessionData::COUPON_CODE, [ |
| 147 | 'plan_id' => $planObj->id, |
| 148 | 'coupon_code' => $coupon->code, |
| 149 | ]); |
| 150 | } |
| 151 | } |
| 152 | |
| 153 | ppress_render_view('checkout/form-checkout', [ |
| 154 | 'planObj' => $planObj, |
| 155 | 'groupObj' => $groupObj, |
| 156 | 'changePlanSubId' => absint(ppressGET_var('change_plan', 0)), |
| 157 | ]); |
| 158 | } |
| 159 | |
| 160 | public function success_page() |
| 161 | { |
| 162 | ob_start(); |
| 163 | require apply_filters('ppress_order_receipt_template', dirname(__FILE__) . '/MyAccount/view-order.tmpl.php'); |
| 164 | |
| 165 | return ob_get_clean(); |
| 166 | } |
| 167 | |
| 168 | public static function get_instance() |
| 169 | { |
| 170 | static $instance = null; |
| 171 | |
| 172 | if (is_null($instance)) { |
| 173 | $instance = new self(); |
| 174 | } |
| 175 | |
| 176 | return $instance; |
| 177 | } |
| 178 | } |
| 179 |