示例#1
0
    /**
     * Post deleted
     * 
     * @access public
     * @param int $post_id
     * @return void
     */
    public function post_deleted($post_id)
    {
        global $post_type;

        if ($post_type != 'subscription') {
            return;
        }

        // Unschedule all events
        Subscriptio_Scheduler::unschedule_all($post_id);

        // Write to transaction log
        $transaction = new Subscriptio_Transaction(null, 'subscription_deleted', $post_id);
        $transaction->update_result('success');
        $transaction->update_note(__('Subscription manually deleted by administrator.', 'subscriptio'));
    }
    /**
     * Cancel pending subscriptions when orders are cancelled
     * 
     * @access public
     * @param int $order_id
     * @return void
     */
    public function order_cancelled($order_id)
    {
        // Iterate over subscriptions and cancel if they are still pending
        foreach (self::get_subscriptions_from_order_id($order_id) as $subscription) {
            if ($subscription->status == 'pending') {

                // Write transaction
                $transaction = new Subscriptio_Transaction(null, 'order_cancellation');
                $transaction->add_subscription_id($subscription->id);
                $transaction->add_order_id($order_id);
                $transaction->add_product_id($subscription->product_id);
                $transaction->add_variation_id($subscription->variation_id);

                try {
                    // Cancel subscription
                    $subscription->cancel();

                    // Update transaction
                    $transaction->update_result('success');
                    $transaction->update_note(__('Pending subscription cancelled due to cancelled order.', 'subscriptio'), true);
                }
                catch (Exception $e) {
                    $transaction->update_result('error');
                    $transaction->update_note($e->getMessage());
                }
            }
        }
    }
    /**
     * Update shipping address
     * 
     * @access public
     * @param array $address
     * @param bool $is_frontend
     * @param bool $is_customer
     * @return bool
     */
    public function update_shipping_address($address, $is_frontend = false, $is_customer = false)
    {
        $fields = array(
            'shipping_first_name',
            'shipping_last_name',
            'shipping_company',
            'shipping_address_1',
            'shipping_address_2',
            'shipping_city',
            'shipping_state',
            'shipping_postcode',
            'shipping_country',
        );

        $shipping_address = array();

        foreach ($fields as $field) {
            if ($is_frontend) {
                $shipping_address['_' . $field] = isset($address[$field]) ? $address[$field] : '';
            }
            else {
                $shipping_address['_' . $field] = isset($address['_' . $field]) ? $address['_' . $field] : '';
            }
        }

        // Check if address has changed
        if (array_diff($this->shipping_address, $shipping_address) || array_diff($shipping_address, $this->shipping_address)) {

            // Write transaction
            $transaction = new Subscriptio_Transaction(null, 'address_changed');
            $transaction->add_subscription_id($this->id);
            $transaction->add_product_id($this->product_id);
            $transaction->add_variation_id($this->variation_id);

            try {

                // Save fields
                $this->update_subscription_details(array('shipping_address' => $shipping_address));

                // Update transaction
                $transaction->update_result('success');

                if ($is_customer) {
                    $transaction->update_note(__('Shipping address changed by customer.', 'subscriptio'), true);
                }
                else {
                    $transaction->update_note(__('Shipping address changed by administrator.', 'subscriptio'), true);
                }

                return true;
            } catch (Exception $e) {
                $transaction->update_result('error');
                $transaction->update_note($e->getMessage());
                return false;
            }
        }

        return true;
    }