/** * Check pages for the presence of Membership special pages. * * Related Action Hooks: * - template_redirect * * @since 1.0.0 */ public function check_for_membership_pages() { global $post, $wp_query; // For invoice page purchase process $fields = array('gateway', 'ms_relationship_id', 'step'); if (!empty($post) && isset($post->post_type) && $post->post_type == MS_Model_Invoice::get_post_type() && self::validate_required($fields) && self::STEP_PROCESS_PURCHASE == $_POST['step']) { do_action('ms_controller_frontend_signup_process_purchase', $this); } $the_page = MS_Model_Pages::current_page(); if ($the_page) { // Fix the main query flags for best theme support: // Our Membership-Pages are always single pages... $wp_query->is_single = false; $wp_query->is_page = true; $wp_query->is_singular = true; $wp_query->is_home = false; $wp_query->is_frontpage = false; $wp_query->tax_query = null; $the_type = MS_Model_Pages::get_page_type($the_page); switch ($the_type) { case MS_Model_Pages::MS_PAGE_MEMBERSHIPS: if (!MS_Model_Member::is_logged_in()) { wp_safe_redirect(MS_Model_Pages::get_page_url(MS_Model_Pages::MS_PAGE_REGISTER)); exit; } if (MS_Helper_Membership::MEMBERSHIP_ACTION_CANCEL == $this->get_action()) { $this->membership_cancel(); } else { $this->signup_process(); } break; case MS_Model_Pages::MS_PAGE_REGISTER: if (MS_Model_Member::is_logged_in()) { wp_safe_redirect(MS_Model_Pages::get_page_url(MS_Model_Pages::MS_PAGE_MEMBERSHIPS)); exit; } if (MS_Helper_Membership::MEMBERSHIP_ACTION_CANCEL == $this->get_action()) { $this->membership_cancel(); } else { $this->signup_process(); } break; case MS_Model_Pages::MS_PAGE_ACCOUNT: $this->user_account_manager(); break; case MS_Model_Pages::MS_PAGE_PROTECTED_CONTENT: // Set up the protection shortcode. $scode = MS_Plugin::instance()->controller->controllers['membership_shortcode']; $scode->page_is_protected(); break; case MS_Model_Pages::MS_PAGE_REG_COMPLETE: // Do nothing... break; default: // Do nothing... break; } } }
/** * Register plugin custom post types. * * @since 1.0.0 */ public function register_custom_post_types() { do_action('ms_plugin_register_custom_post_types_before', $this); $cpts = apply_filters('ms_plugin_register_custom_post_types', array(MS_Model_Membership::get_post_type() => MS_Model_Membership::get_register_post_type_args(), MS_Model_Relationship::get_post_type() => MS_Model_Relationship::get_register_post_type_args(), MS_Model_Invoice::get_post_type() => MS_Model_Invoice::get_register_post_type_args(), MS_Model_Communication::get_post_type() => MS_Model_Communication::get_register_post_type_args(), MS_Model_Event::get_post_type() => MS_Model_Event::get_register_post_type_args())); foreach ($cpts as $cpt => $args) { MS_Helper_Utility::register_post_type($cpt, $args); } }
/** * Get post types that are part of this plugin. * * @since 1.0.0 * * @return array The plugin core post types. */ public static function get_ms_post_types() { $cpts = array(MS_Model_Membership::get_post_type(), MS_Model_Invoice::get_post_type(), MS_Model_Communication::get_post_type(), MS_Model_Relationship::get_post_type(), MS_Model_Event::get_post_type()); return apply_filters('ms_rule_cptgroup_model_get_ms_post_types', $cpts); }
/** * Use a special template for our custom post types. * * Invoices: * Replaces the themes "Single" template with our invoice template when an * invoice is displayed. The theme can override this by defining its own * m2-invoice.php / single-ms_invoice.php template. * * You can even specifiy a membership ID in the page template to create * a custom invoice form based on the membership that is billed. * Example: * m2-invoice-100.php (Invoice form for membership 100) * * @since 1.0.0 * @see filter single_template * * @param string $template The template path to filter. * @return string The template path. */ public function custom_single_template($default_template) { global $post; $template = ''; // Checks for invoice single template. if ($post->post_type == MS_Model_Invoice::get_post_type()) { $invoice = MS_Factory::load('MS_Model_Invoice', $post->ID); // First look for themes 'm2-invoice-100.php' template (membership ID). $template = get_query_template('m2', 'm2-invoice-' . $invoice->membership_id . '.php'); // Fallback to themes 'm2-invoice.php' template. if (!$template) { $template = get_query_template('m2', 'm2-invoice.php'); } // Second look for themes 'single-ms_invoice.php' template. if (!$template && strpos($default_template, '/single-ms_invoice.php')) { $template = $default_template; } // Last: Use the default M2 invoice template. if (!$template) { $invoice_template = apply_filters('ms_controller_plugin_invoice_template', MS_Plugin::instance()->dir . 'app/template/single-ms_invoice.php'); if (file_exists($invoice_template)) { $template = $invoice_template; } } } if (!$template) { $template = $default_template; } return $template; }
/** * Completely whipe all Membership data from Database. * * Note: This function is not used currently... * * @since 1.0.0 */ private static function cleanup_db() { global $wpdb; $sql = array(); $trash_ids = array(); // Delete membership meta-data from users. $users = MS_Model_Member::get_members(); foreach ($users as $user) { $user->delete_all_membership_usermeta(); $user->save(); } // Determine IDs of Membership Pages. $page_types = MS_Model_Pages::get_page_types(); foreach ($page_types as $type => $name) { $page_id = MS_Model_Pages::get_setting($type); $trash_ids[] = $page_id; } /** * Delete all plugin settings. * Settings are saved by classes that extend MS_Model_option */ foreach (MS_Model_Gateway::get_gateways() as $option) { $option->delete(); } MS_Factory::load('MS_Model_Addon')->delete(); MS_Factory::load('MS_Model_Pages')->delete(); MS_Factory::load('MS_Model_Settings')->delete(); /** * Delete transient data * Transient data is saved by classed that extend MS_Model_Transient */ MS_Factory::load('MS_Model_Simulate')->delete(); /** * Delete all plugin content. * Content is saved by classes that extend MS_Model_CustomPostType */ $ms_posttypes = array(MS_Model_Communication::get_post_type(), MS_Model_Event::get_post_type(), MS_Model_Invoice::get_post_type(), MS_Model_Transactionlog::get_post_type(), MS_Model_Membership::get_post_type(), MS_Model_Relationship::get_post_type(), MS_Addon_Coupon_Model::get_post_type(), MS_Addon_Invitation_Model::get_post_type()); foreach ($ms_posttypes as $type) { $sql[] = $wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s;", $type); } // Remove orphaned post-metadata. $sql[] = "\n\t\tDELETE FROM {$wpdb->postmeta}\n\t\tWHERE NOT EXISTS (\n\t\t\tSELECT 1 FROM {$wpdb->posts} tmp WHERE tmp.ID = post_id\n\t\t);\n\t\t"; // Clear all WP transient cache. $sql[] = "\n\t\tDELETE FROM {$wpdb->options}\n\t\tWHERE option_name LIKE '_transient_%';\n\t\t"; foreach ($sql as $s) { $wpdb->query($s); } // Move Membership pages to trash. foreach ($trash_ids as $id) { wp_delete_post($id, true); } // Clear all data from WP Object cache. wp_cache_flush(); // Redirect to the main page. wp_safe_redirect(MS_Controller_Plugin::get_admin_url()); exit; }