setup_constants(); self::$instance->setup_files(); self::$instance->setup_globals(); self::$instance->setup_application(); // Backwards compat globals self::$instance->backcompat_globals(); // Return the instance return self::$instance; } /** * Throw error on object clone. * * The whole idea of the singleton design pattern is that there is a single * object therefore, we don't want the object to be cloned. * * @since 3.0 * @return void */ public function __clone() { // Cloning instances of the class is forbidden. _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'rcp' ), '3.0' ); } /** * Disable un-serializing of the class. * * @since 3.0 * @return void */ public function __wakeup() { // Unserializing instances of the class is forbidden. _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'rcp' ), '3.0' ); } /** * Return whether the main loading class has been instantiated or not. * * @access private * @since 3.0 * @return boolean True if instantiated. False if not. */ private static function is_instantiated() { // Return true if instance is correct class if ( ! empty( self::$instance ) && ( self::$instance instanceof Restrict_Content_Pro ) ) { return true; } // Return false if not instantiated correctly return false; } /** * Setup the singleton instance * * @param string $file Path to main plugin file. * * @access private * @since 3.0 */ private static function setup_instance( $file = '' ) { self::$instance = new Restrict_Content_Pro(); self::$instance->file = $file; } /** * Setup plugin constants. * * @access private * @since 3.0 * @return void */ private function setup_constants() { if ( ! defined( 'RCP_PLUGIN_VERSION' ) ) { define( 'RCP_PLUGIN_VERSION', self::VERSION ); } if ( ! defined( 'RCP_PLUGIN_FILE' ) ) { define( 'RCP_PLUGIN_FILE', $this->file ); } if ( ! defined( 'RCP_PLUGIN_DIR' ) ) { define( 'RCP_PLUGIN_DIR', plugin_dir_path( RCP_PLUGIN_FILE ) ); } if ( ! defined( 'RCP_PLUGIN_URL' ) ) { define( 'RCP_PLUGIN_URL', plugin_dir_url( RCP_PLUGIN_FILE ) ); } if ( ! defined( 'CAL_GREGORIAN' ) ) { define( 'CAL_GREGORIAN', 1 ); } } /** * Setup globals * * @access private * @since 3.0.1 * @return void */ private function setup_globals() { $GLOBALS['rcp_options'] = get_option( 'rcp_settings', array() ); } /** * Include required files. * * @access private * @since 3.0 * @return void */ private function setup_files() { $this->include_files(); // Admin if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) { $this->include_admin(); } else { $this->include_frontend(); } } /** * Setup the rest of the application * * @since 3.0 */ private function setup_application() { rcp_setup_components(); self::$instance->customers_table = $this->components['customers']->get_interface( 'table' ); self::$instance->discounts_table = $this->components['discounts']->get_interface( 'table' ); self::$instance->memberships_table = $this->components['memberships']->get_interface( 'table' ); self::$instance->membership_meta_table = $this->components['memberships']->get_interface( 'meta' ); self::$instance->queue_table = $this->components['queue']->get_interface( 'table' ); self::$instance->membership_counts_table = $this->components['membership_counts']->get_interface( 'table' ); } /** Includes **************************************************************/ /** * Include global files * * @access public * @since 3.0 */ private function include_files() { // Components require_once RCP_PLUGIN_DIR . 'core/includes/class-rcp-base-object.php'; require_once RCP_PLUGIN_DIR . 'core/includes/component-functions.php'; require_once RCP_PLUGIN_DIR . 'core/includes/class-rcp-component.php'; // Database require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-base.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-compare.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-date.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-column.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-row.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/engine/class-schema.php'; // Tables require_once RCP_PLUGIN_DIR . 'core/includes/database/customers/class-customers-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/discounts/class-discounts-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/logs/class-logs-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-counts/class-membership-counts-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-levels/class-membership-levels-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/memberships/class-memberships-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/memberships/class-membership-meta-table.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/queue/class-queue-table.php'; // Queries require_once RCP_PLUGIN_DIR . 'core/includes/database/customers/class-customer-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/discounts/class-discount-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/logs/class-log-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-counts/class-membership-count-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-levels/class-membership-level-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/memberships/class-membership-query.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/queue/class-queue-query.php'; // Schemas require_once RCP_PLUGIN_DIR . 'core/includes/database/customers/class-customers-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/discounts/class-discounts-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/logs/class-logs-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-counts/class-membership-counts-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/membership-levels/class-membership-levels-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/memberships/class-memberships-schema.php'; require_once RCP_PLUGIN_DIR . 'core/includes/database/queue/class-queue-schema.php'; // Payment Gateway require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/class-rcp-payment-gateway.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/class-rcp-payment-gateway-manual.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/class-rcp-payment-gateways.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/gateway-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/gateway-functions.php' ); rcp_load_gateway_files(); // Membership Levels require_once( RCP_PLUGIN_DIR . 'core/includes/membership-levels/class-rcp-membership-level.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/membership-levels/membership-level-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/levels/level-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/levels/meta.php' ); // Memberships require_once( RCP_PLUGIN_DIR . 'core/includes/memberships/class-rcp-membership.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/memberships/membership-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/memberships/membership-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/memberships/meta.php' ); // Membership Counts require_once( RCP_PLUGIN_DIR . 'core/includes/membership-counts/class-rcp-membership-count.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/membership-counts/membership-count-functions.php' ); // Member require_once( RCP_PLUGIN_DIR . 'core/includes/member-forms.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/member-functions.php' ); // Discounts require_once( RCP_PLUGIN_DIR . 'core/includes/discounts/class-rcp-discount.php'); require_once( RCP_PLUGIN_DIR . 'core/includes/discounts/discount-functions.php'); // @todo can this be improved? require( RCP_PLUGIN_DIR . 'core/includes/install.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-capabilities.php' ); if ( defined( 'WP_CLI' ) && WP_CLI ) { require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-cli.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/membership-levels/membership-level-commands.php' ); } require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-emails.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-integrations.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-levels.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-logging.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-member.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-payments.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-registration.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/class-rcp-reminders.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/scripts.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/ajax-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/captcha-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/cron-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/compat/class-base.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/compat/class-member.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/customers/class-rcp-customer.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/customers/customer-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/customers/customer-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/email-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/invoice-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/login-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/logs/class-log.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/logs/log-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/payments/meta.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/misc-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/payments/payment-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/payments/payment-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/registration-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/error-tracking.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/shortcodes.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/template-functions.php' ); // Batch require_once RCP_PLUGIN_DIR . 'core/includes/batch/interface-job-callback.php'; require_once RCP_PLUGIN_DIR . 'core/includes/batch/abstract-job-callback.php'; require_once RCP_PLUGIN_DIR . 'core/includes/batch/batch-functions.php'; require_once RCP_PLUGIN_DIR . 'core/includes/batch/class-job.php'; // Deprecated require_once( RCP_PLUGIN_DIR . 'core/includes/deprecated/class-rcp-discounts.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/deprecated/subscription-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/deprecated/functions.php' ); // @todo remove if ( ! class_exists( 'WP_Logging' ) ) { require_once( RCP_PLUGIN_DIR . 'core/includes/deprecated/class-wp-logging.php' ); } // Stripe require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/class-rcp-payment-gateway-stripe.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/gateways/stripe/functions.php' ); // @todo load this only when needed require_once RCP_PLUGIN_DIR . 'core/includes/batch/v3/class-migrate-memberships.php'; // block functions require_once RCP_PLUGIN_DIR . 'core/includes/block-functions.php'; // Integrations. require_once RCP_PLUGIN_DIR . 'core/includes/integrations/class-rcp-telemetry.php'; require_once RCP_PLUGIN_DIR . 'core/includes/class-rcp-telemetry-info.php'; if ( file_exists( RCP_PLUGIN_DIR . 'pro/class-restrict-content-pro.php') ) { require_once( RCP_PLUGIN_DIR . 'pro/class-restrict-content-pro.php' ); include_pro_files(); } } /** * Setup administration * * @since 3.0 */ private function include_admin() { global $rcp_options; require_once( RCP_PLUGIN_DIR . 'core/includes/admin/upgrades.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/class-list-table.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/class-rcp-upgrades.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/admin-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/admin-pages.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/admin-notices.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/admin-ajax-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/class-rcp-add-on-updater.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/customers/customer-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/customers/customers-page.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/screen-options.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/members/member-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/members/members-page.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/memberships/membership-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/reminders/subscription-reminders.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/settings/settings.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/subscriptions/subscription-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/subscriptions/subscription-levels.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/payments/payment-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/payments/payments-page.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/export.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/export/export-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/tools/tools-page.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/import/import-actions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/import/import-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/help/help-menus.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/metabox.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/add-ons.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/terms.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/post-types/restrict-post-type.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/user-page-columns.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/export-functions.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/deactivation.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/admin/deprecated-admin-functions.php' ); // batch processing require_once RCP_PLUGIN_DIR . 'core/includes/admin/batch/ajax-actions.php'; if ( file_exists( RCP_PLUGIN_DIR . 'pro/class-restrict-content-pro.php') ) { require_once( RCP_PLUGIN_DIR . 'pro/class-restrict-content-pro.php' ); include_pro_admin_files(); } } /** * Setup front-end specific code * * @since 3.0 */ private function include_frontend() { require_once( RCP_PLUGIN_DIR . 'core/includes/content-filters.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/query-filters.php' ); require_once( RCP_PLUGIN_DIR . 'core/includes/redirects.php' ); } /** * Backwards compatibility for old global values * * @since 3.0 */ private function backcompat_globals() { global $wpdb, $rcp_payments_db, $rcp_levels_db, $rcp_discounts_db; // the plugin base directory global $rcp_base_dir; // not used any more, but just in case someone else is $rcp_base_dir = dirname( __FILE__ ); global $rcp_db_name; $rcp_db_name = rcp_get_levels_db_name(); global $rcp_db_version; $rcp_db_version = '1.6'; global $rcp_discounts_db_name; $rcp_discounts_db_name = rcp_get_discounts_db_name(); global $rcp_discounts_db_version; $rcp_discounts_db_version = '1.2'; global $rcp_payments_db_name; $rcp_payments_db_name = rcp_get_payments_db_name(); global $rcp_payments_db_version; $rcp_payments_db_version = '1.5'; /* database table query globals */ $rcp_payments_db = new RCP_Payments; $rcp_levels_db = new RCP_Levels; $rcp_discounts_db = new RCP_Discounts; $wpdb->levelmeta = $rcp_levels_db->meta_db_name; $wpdb->rcp_paymentmeta = $rcp_payments_db->meta_db_name; /* settings page globals */ global $rcp_members_page; global $rcp_subscriptions_page; global $rcp_discounts_page; global $rcp_payments_page; global $rcp_settings_page; global $rcp_reports_page; global $rcp_export_page; global $rcp_help_page; } /** * Check if the current instance is PRO. This does not fully determine if the actual code is PRO. * The main purpose of this function is for labels. * * @since 3.5.28 * @return bool */ public function is_pro() { if( false === has_action('admin_menu','include_pro_pages') ) { return false; } return true; } } endif; // End if class_exists check. /** * Returns the instance of Restrict_Content_Pro. * * The main function responsible for returning the one true Restrict_Content_Pro * instance to functions everywhere. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 3.0 * @return Restrict_Content_Pro The one true Restrict_Content_Pro instance. */ function restrict_content_pro() { return Restrict_Content_Pro::instance(); }