| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435 |
- <?php
- /**
- * ReduxFrameworkPlugin main class
- *
- * @package ReduxFramework\ReduxFrameworkPlugin
- * @since 3.0.0
- */
- // Exit if accessed directly
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- if ( ! class_exists( 'ReduxFrameworkPlugin' ) ) {
- /**
- * Main ReduxFrameworkPlugin class
- *
- * @since 3.0.0
- */
- class ReduxFrameworkPlugin {
- /**
- * @const string VERSION The plugin version, used for cache-busting and script file references
- * @since 3.0.0
- */
- const VERSION = '3.6.16';
- /**
- * @access protected
- * @var array $options Array of config options, used to check for demo mode
- * @since 3.0.0
- */
- protected $options = array();
- /**
- * Use this value as the text domain when translating strings from this plugin. It should match
- * the Text Domain field set in the plugin header, as well as the directory name of the plugin.
- * Additionally, text domains should only contain letters, number and hypens, not underscores
- * or spaces.
- *
- * @access protected
- * @var string $plugin_slug The unique ID (slug) of this plugin
- * @since 3.0.0
- */
- protected $plugin_slug = 'redux-framework';
- /**
- * @access protected
- * @var string $plugin_screen_hook_suffix The slug of the plugin screen
- * @since 3.0.0
- */
- protected $plugin_screen_hook_suffix = null;
- /**
- * @access protected
- * @var string $plugin_network_activated Check for plugin network activation
- * @since 3.0.0
- */
- protected $plugin_network_activated = null;
- /**
- * @access private
- * @var \ReduxFrameworkPlugin $instance The one true ReduxFrameworkPlugin
- * @since 3.0.0
- */
- private static $instance;
- /**
- * Get active instance
- *
- * @access public
- * @since 3.1.3
- * @return self::$instance The one true ReduxFrameworkPlugin
- */
- public static function instance() {
- if ( ! self::$instance ) {
- self::$instance = new self;
- self::$instance->get_redux_options();
- self::$instance->includes();
- self::$instance->hooks();
- }
- return self::$instance;
- }
- // Shim since we changed the function name. Deprecated.
- public static function get_instance() {
- if ( ! self::$instance ) {
- self::$instance = new self;
- self::$instance->get_redux_options();
- self::$instance->includes();
- self::$instance->hooks();
- }
- return self::$instance;
- }
- /**
- * Get Redux options
- *
- * @access public
- * @since 3.1.3
- * @return void
- */
- public function get_redux_options() {
- // Setup defaults
- $defaults = array(
- 'demo' => false,
- );
- // If multisite is enabled
- if ( is_multisite() ) {
- // Get network activated plugins
- $plugins = get_site_option( 'active_sitewide_plugins' );
- foreach ( $plugins as $file => $plugin ) {
- if ( strpos( $file, 'redux-framework.php' ) !== false ) {
- $this->plugin_network_activated = true;
- $this->options = get_site_option( 'ReduxFrameworkPlugin', $defaults );
- }
- }
- }
- // If options aren't set, grab them now!
- if ( empty( $this->options ) ) {
- $this->options = get_option( 'ReduxFrameworkPlugin', $defaults );
- }
- }
- /**
- * Include necessary files
- *
- * @access public
- * @since 3.1.3
- * @return void
- */
- public function includes() {
- // Include ReduxCore
- if ( file_exists( dirname( __FILE__ ) . '/ReduxCore/framework.php' ) ) {
- require_once dirname( __FILE__ ) . '/ReduxCore/framework.php';
- }
- if ( isset( ReduxFramework::$_as_plugin ) ) {
- ReduxFramework::$_as_plugin = true;
- }
- if ( file_exists( dirname( __FILE__ ) . '/ReduxCore/redux-extensions/config.php' ) ) {
- require_once dirname( __FILE__ ) . '/ReduxCore/redux-extensions/config.php';
- }
- // Include demo config, if demo mode is active
- if ( $this->options['demo'] && file_exists( dirname( __FILE__ ) . '/sample/sample-config.php' ) ) {
- require_once dirname( __FILE__ ) . '/sample/sample-config.php';
- }
- }
- /**
- * Run action and filter hooks
- *
- * @access private
- * @since 3.1.3
- * @return void
- */
- private function hooks() {
- add_action( 'wp_loaded', array( $this, 'options_toggle_check' ) );
- // Activate plugin when new blog is added
- add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
- // Display admin notices
- add_action( 'admin_notices', array( $this, 'admin_notices' ) );
- // Edit plugin metalinks
- add_filter( 'plugin_row_meta', array( $this, 'plugin_metalinks' ), null, 2 );
- add_action( 'activated_plugin', array( $this, 'load_first' ) );
- do_action( 'redux/plugin/hooks', $this );
- }
- public function load_first() {
- $plugin_dir = Redux_Helpers::cleanFilePath( WP_PLUGIN_DIR ) . '/';
- $self_file = Redux_Helpers::cleanFilePath( __FILE__ );
- $path = str_replace( $plugin_dir, '', $self_file );
- $path = str_replace( 'class.redux-plugin.php', 'redux-framework.php', $path );
- if ( $plugins = get_option( 'active_plugins' ) ) {
- if ( $key = array_search( $path, $plugins ) ) {
- array_splice( $plugins, $key, 1 );
- array_unshift( $plugins, $path );
- update_option( 'active_plugins', $plugins );
- }
- }
- }
- /**
- * Fired on plugin activation
- *
- * @access public
- * @since 3.0.0
- *
- * @param boolean $network_wide True if plugin is network activated, false otherwise
- *
- * @return void
- */
- public static function activate( $network_wide ) {
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
- if ( $network_wide ) {
- // Get all blog IDs
- $blog_ids = self::get_blog_ids();
- foreach ( $blog_ids as $blog_id ) {
- switch_to_blog( $blog_id );
- self::single_activate();
- }
- restore_current_blog();
- } else {
- self::single_activate();
- }
- } else {
- self::single_activate();
- }
- delete_site_transient( 'update_plugins' );
- }
- /**
- * Fired when plugin is deactivated
- *
- * @access public
- * @since 3.0.0
- *
- * @param boolean $network_wide True if plugin is network activated, false otherwise
- *
- * @return void
- */
- public static function deactivate( $network_wide ) {
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
- if ( $network_wide ) {
- // Get all blog IDs
- $blog_ids = self::get_blog_ids();
- foreach ( $blog_ids as $blog_id ) {
- switch_to_blog( $blog_id );
- self::single_deactivate();
- }
- restore_current_blog();
- } else {
- self::single_deactivate();
- }
- } else {
- self::single_deactivate();
- }
- delete_option( 'ReduxFrameworkPlugin' );
- }
- /**
- * Fired when a new WPMU site is activated
- *
- * @access public
- * @since 3.0.0
- *
- * @param int $blog_id The ID of the new blog
- *
- * @return void
- */
- public function activate_new_site( $blog_id ) {
- if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
- return;
- }
- switch_to_blog( $blog_id );
- self::single_activate();
- restore_current_blog();
- }
- /**
- * Get all IDs of blogs that are not activated, not spam, and not deleted
- *
- * @access private
- * @since 3.0.0
- * @global object $wpdb
- * @return array|false Array of IDs or false if none are found
- */
- private static function get_blog_ids() {
- global $wpdb;
- // Get an array of IDs
- $sql = "SELECT blog_id FROM $wpdb->blogs
- WHERE archived = '0' AND spam = '0'
- AND deleted = '0'";
- return $wpdb->get_col( $sql );
- }
- /**
- * Fired for each WPMS blog on plugin activation
- *
- * @access private
- * @since 3.0.0
- * @return void
- */
- private static function single_activate() {
- $notices = array();
-
- $notices = get_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES', array() );
- $notices[] = __( 'Redux Framework has an embedded demo.', 'redux-framework' ) . ' <a href="./plugins.php?ReduxFrameworkPlugin=demo">' . __( 'Click here to activate the sample config file.', 'redux-framework' ) . '</a>';
- update_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES', $notices );
- }
- /**
- * Display admin notices
- *
- * @access public
- * @since 3.0.0
- * @return void
- */
- public function admin_notices() {
- do_action( 'ReduxFrameworkPlugin_admin_notice' );
- $notices = get_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES', '' );
- if ( !empty( $notices ) ) {
- foreach ( $notices as $notice ) {
- echo '<div class="updated notice is-dismissible"><p>' . $notice . '</p></div>';
- }
- delete_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES' );
- }
- }
- /**
- * Fired for each blog when the plugin is deactivated
- *
- * @access private
- * @since 3.0.0
- * @return void
- */
- private static function single_deactivate() {
- delete_option( 'ReduxFrameworkPlugin_ACTIVATED_NOTICES' );
- }
- /**
- * Turn on or off
- *
- * @access public
- * @since 3.0.0
- * @global string $pagenow The current page being displayed
- * @return void
- */
- public function options_toggle_check() {
- global $pagenow;
- if ( $pagenow == 'plugins.php' && is_admin() && ! empty( $_GET['ReduxFrameworkPlugin'] ) ) {
- $url = './plugins.php';
- if ( $_GET['ReduxFrameworkPlugin'] == 'demo' ) {
- if ( $this->options['demo'] == false ) {
- $this->options['demo'] = true;
- } else {
- $this->options['demo'] = false;
- }
- }
- if ( is_multisite() && is_network_admin() && $this->plugin_network_activated ) {
- update_site_option( 'ReduxFrameworkPlugin', $this->options );
- } else {
- update_option( 'ReduxFrameworkPlugin', $this->options );
- }
- wp_redirect( $url );
- }
- }
- /**
- * Add settings action link to plugins page
- *
- * @access public
- * @since 3.0.0
- * @return void
- */
- public function add_action_links( $links ) {
- // In case we ever want to do this...
- return $links;
- /**
- * return array_merge(
- * array( 'redux_plugin_settings' => '<a href="' . admin_url( 'plugins.php?page=' . 'redux_plugin_settings' ) . '">' . __( 'Settings', 'redux-framework' ) . '</a>' ),
- * $links
- * );
- */
- }
- /**
- * Edit plugin metalinks
- *
- * @access public
- * @since 3.0.0
- *
- * @param array $links The current array of links
- * @param string $file A specific plugin row
- *
- * @return array The modified array of links
- */
- public function plugin_metalinks( $links, $file ) {
- if ( strpos( $file, 'redux-framework.php' ) !== false && is_plugin_active( $file ) ) {
- $new_links = array(
- '<a href="' . 'http://' . 'docs.reduxframework.com/" target="_blank">' . __( 'Docs', 'redux-framework' ) . '</a>',
- '<a href="' . 'https://' . 'github.com/ReduxFramework/redux-framework" target="_blank">' . __( 'Repo', 'redux-framework' ) . '</a>',
- '<a href="' . 'http://' . 'build.reduxframework.com/" target="_blank">' . __( 'Builder', 'redux-framework' ) . '</a>',
- '<a href="' . admin_url( 'tools.php?page=redux-support' ) . '">' . __( 'Get Support', 'redux-framework' ) . '</a>',
- );
- if ( ( is_multisite() && $this->plugin_network_activated ) || ! is_network_admin() || ! is_multisite() ) {
- if ( $this->options['demo'] ) {
- $new_links[3] .= '<br /><span style="display: block; padding-top: 6px;"><a href="./plugins.php?ReduxFrameworkPlugin=demo" style="color: #bc0b0b;">' . __( 'Deactivate Demo Mode', 'redux-framework' ) . '</a></span>';
- } else {
- $new_links[3] .= '<br /><span style="display: block; padding-top: 6px;"><a href="./plugins.php?ReduxFrameworkPlugin=demo" style="color: #bc0b0b;">' . __( 'Activate Demo Mode', 'redux-framework' ) . '</a></span>';
- }
- }
- $links = array_merge( $links, $new_links );
- }
- return $links;
- }
- }
- }
|