コード例 #1
0
    /**
     * Resume paused subscription
     * 
     * @access public
     * @return void
     */
    public function resume()
    {
        // Check if subscription is really paused
        if ($this->status != 'paused') {
            return;
        }

        $old_status = $this->status;

        // Revert status
        $properties_to_update = array(
            'status' => $this->pre_paused_status,
        );

        // Offset all scheduled events by the amount of time this subscription was paused
        $time_offset = max(array(0, (time() - $this->paused_since)));

        // Offset payment due date
        if (!empty($this->payment_due)) {
            $properties_to_update['payment_due'] = $this->payment_due + $time_offset;
            $properties_to_update['payment_due_readable'] = Subscriptio::get_datetime($properties_to_update['payment_due']);
        }

        // Offset expiration date
        if (!empty($this->expires)) {
            $properties_to_update['expires'] = $this->expires + $time_offset;
            $properties_to_update['expires_readable'] = Subscriptio::get_datetime($properties_to_update['expires']);
        }

        // Offset overdue since date
        if (!empty($this->overdue_since)) {
            $properties_to_update['overdue_since'] = $this->overdue_since + $time_offset;
        }

        // Offset suspended since date
        if (!empty($this->suspended_since)) {
            $properties_to_update['suspended_since'] = $this->suspended_since + $time_offset;
        }

        // Save subscription properties
        $this->update_subscription_details($properties_to_update);

        // Schedule saved events
        foreach ($this->pre_paused_events as $event) {
            $new_event_time = $event['timestamp'] + $time_offset;
            Subscriptio_Scheduler::schedule($new_event_time, $event['hook'], $this->id);
        }

        // Fire actions hooks
        if ($old_status != $this->pre_paused_status) {
            $this->on_status_change($old_status, $this->pre_paused_status);
        }

        // Clear properties related to paused subscriptions
        $this->clear_subscription_details(array(
            'pre_paused_status',
            'paused_since',
        ));

        // Send notifications
        Subscriptio_Mailer::send('resumed', $this);
    }