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