/** * Check if current frontend user owns subscription and return it * * @access public * @param int $subscription_id * @return object|bool */ public static function get_subscription($subscription_id) { $user_id = get_current_user_id(); $subscription = Subscriptio_Subscription::get_by_id($subscription_id); if (!$user_id || !$subscription || $subscription->user_id != $user_id) { echo '<div class="woocommerce-error">' . __('Invalid subscription.', 'subscriptio') . ' <a href="' . get_permalink(wc_get_page_id('myaccount')).'" class="wc-forward">'. __('My Account', 'subscriptio') .'</a>' . '</div>'; return false; } return $subscription; }
/** * Save membership IDs * * @access public * @param array $ids * @return void */ public function save_membership_ids($order_item_id, $ids) { // Load subscription by Order Item ID $query = new WP_Query(array( 'post_type' => 'subscription', 'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash'), 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array( array( 'key' => 'order_item_id', 'value' => $order_item_id, 'compare' => '=', ), ), )); // Iterate over found subscriptions foreach ($query->posts as $subscription_id) { $subscription = Subscriptio_Subscription::get_by_id($subscription_id); // Subscription looks ok? if (is_object($subscription) && isset($subscription->status) && empty($subscription->membership_ids)) { if (is_array($ids) && !empty($ids)) { foreach ($ids as $id) { $subscription->update_subscription_details(array('membership_ids' => $id)); } } } } }
/** * Get related Subscriptions from Order ID * * @access public * @param int $order_id * @return array */ public static function get_subscriptions_from_order_id($order_id) { $subscriptions = array(); // Search for related subscription post ids $subscription_post_ids = get_posts(array( 'posts_per_page' => -1, 'post_type' => 'subscription', 'meta_query' => array( array( 'key' => 'all_order_ids', 'value' => $order_id, 'compare' => '=', ), ), 'fields' => 'ids', )); // Iterate over ids and create objects foreach ($subscription_post_ids as $id) { if ($subscription = Subscriptio_Subscription::get_by_id($id)) { $subscriptions[$id] = $subscription; } } return $subscriptions; }
/** * Maybe change WooCommerce My Orders query * * @access public * @param array $params * @return array */ public function woocommerce_my_orders_query($params) { if (defined('SUBSCRIPTIO_PRINTING_RELATED_ORDERS')) { $subscription = Subscriptio_Subscription::get_by_id(SUBSCRIPTIO_PRINTING_RELATED_ORDERS); if ($subscription) { $params['post__in'] = $subscription->all_order_ids; } } return $params; }