/** * 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); }