/**
     * 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;
    }
Exemple #4
0
    /**
     * 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;
    }