* @link http://domain.tld * @license GPL 2.0+ * @copyright 2022 WebAppick */ namespace Disco\Backend; use Disco\Engine\Base; /** * Activate and deactivate method of the plugin and relates. */ class ActDeact extends Base { /** * Initialize the class. * * @return void|bool */ public function initialize() { if ( ! parent::initialize() ) { return; } // Activate plugin when new blog is added \add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) ); \add_action( 'admin_init', array( $this, 'upgrade_procedure' ) ); } /** * Fired when a new site is activated with a WPMU environment. * * @param int $blog_id ID of the new blog. * @return void * @since 1.0.0 */ public function activate_new_site( int $blog_id ) { if ( 1 !== \did_action( 'wpmu_new_blog' ) ) { return; } \switch_to_blog( $blog_id ); self::single_activate(); \restore_current_blog(); } /** * Fired when the plugin is activated. * * @param bool|null $network_wide True if active in a multiset, false if classic site. * @return void * @since 1.0.0 */ public static function activate( $network_wide ) { if ( \function_exists( 'is_multisite' ) && \is_multisite() ) { if ( $network_wide ) { // Get all blog ids /** @var array<\WP_Site> $blogs */ $blogs = \get_sites(); foreach ( $blogs as $blog ) { \switch_to_blog( (int) $blog->blog_id ); self::single_activate(); \restore_current_blog(); } return; } } self::single_activate(); } /** * Fired when the plugin is deactivated. * * @param bool $network_wide True if WPMU super admin uses * "Network Deactivate" action, false if * WPMU is disabled or plugin is * deactivated on an individual blog. * @return void * @since 1.0.0 */ public static function deactivate( bool $network_wide ) { if ( \function_exists( 'is_multisite' ) && \is_multisite() ) { if ( $network_wide ) { // Get all blog ids /** @var array<\WP_Site> $blogs */ $blogs = \get_sites(); foreach ( $blogs as $blog ) { \switch_to_blog( (int) $blog->blog_id ); self::single_deactivate(); \restore_current_blog(); } return; } } self::single_deactivate(); } /** * Add admin capabilities * * @return void */ public static function add_capabilities() { // Add the capabilities to all the roles $caps = array( 'create_plugins', 'read_demo', 'read_private_demoes', 'edit_demo', 'edit_demoes', 'edit_private_demoes', 'edit_published_demoes', 'edit_others_demoes', 'publish_demoes', 'delete_demo', 'delete_demoes', 'delete_private_demoes', 'delete_published_demoes', 'delete_others_demoes', 'manage_demoes', ); $roles = array( \get_role( 'administrator' ), \get_role( 'editor' ), \get_role( 'author' ), \get_role( 'contributor' ), \get_role( 'subscriber' ), ); foreach ( $roles as $role ) { foreach ( $caps as $cap ) { if ( \is_null( $role ) ) { continue; } $role->add_cap( $cap ); } } } /** * Remove capabilities to specific roles * * @return void */ public static function remove_capabilities() { // Remove capabilities to specific roles $bad_caps = array( 'create_demoes', 'read_private_demoes', 'edit_demo', 'edit_demoes', 'edit_private_demoes', 'edit_published_demoes', 'edit_others_demoes', 'publish_demoes', 'delete_demo', 'delete_demoes', 'delete_private_demoes', 'delete_published_demoes', 'delete_others_demoes', 'manage_demoes', ); $roles = array( \get_role( 'author' ), \get_role( 'contributor' ), \get_role( 'subscriber' ), ); foreach ( $roles as $role ) { foreach ( $bad_caps as $cap ) { if ( \is_null( $role ) ) { continue; } $role->remove_cap( $cap ); } } } /** * Upgrade procedure * * @return void */ public static function upgrade_procedure() { if ( ! \is_admin() ) { return; } $version = \strval( \get_option( 'disco-version' ) ); if ( ! \version_compare( DISCO_VERSION, $version, '>' ) ) { return; } \update_option( 'disco-version', DISCO_VERSION ); \delete_option( DISCO_TEXTDOMAIN . '_fake-meta' ); } /** * Create Plugin Table * @return void */ public static function create_plugin_table() { global $wpdb; $table_name = $wpdb->prefix . 'disco_campaigns'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE $table_name ( id int(11) NOT NULL AUTO_INCREMENT, intent varchar(20) NOT NULL default '', status varchar(20) NOT NULL default '', priority int(5) NOT NULL default '0', data longtext NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta( $sql ); add_option( 'DISCO_DB_VERSION', DISCO_DB_VERSION ); } /** * Fired for each blog when the plugin is activated. * * @return void * @since 1.0.0 */ private static function single_activate() { // Install DB self::create_plugin_table(); if ( ! \get_option( 'disco_install_time' ) ) { \update_option( 'disco_install_time', time() ); } // Add a custom roles add_role( 'advanced', __( 'Advanced' ) ); self::add_capabilities(); self::upgrade_procedure(); // Clear the permalinks \flush_rewrite_rules(); } /** * Fired for each blog when the plugin is deactivated. * * @return void * @since 1.0.0 */ private static function single_deactivate() { self::remove_capabilities(); // Clear the permalinks \flush_rewrite_rules(); } }