/**
  * 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;
         }
     }
 }
예제 #2
0
 /**
  * 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;
 }