remove_existing_notice(); } /** * Remove existing compatibility notice. */ protected function remove_existing_notice() { $notice_id = 'as3cf-compat-addons'; if ( $this->as3cf->notices->find_notice_by_id( $notice_id ) ) { $this->as3cf->notices->undismiss_notice_for_all( $notice_id ); $this->as3cf->notices->remove_notice_by_id( $notice_id ); } delete_site_option( 'as3cf_compat_addons_to_install' ); } /** * Show deactivation notice. */ protected function show_deactivation_notice() { $active_plugins = $this->get_active_plugins(); if ( empty( $active_plugins ) ) { return; } $id = 'disable-compat-plugins'; $plugins = $this->render_plugins( $active_plugins ); $args = array( 'type' => 'notice-info', 'custom_id' => $id, 'only_show_to_user' => false, 'flash' => false, ); if ( $this->as3cf->notices->find_notice_by_id( $id ) ) { $this->as3cf->notices->undismiss_notice_for_all( $id ); $this->as3cf->notices->remove_notice_by_id( $id ); } $this->as3cf->notices->add_notice( $this->render_deactivation_notice( $plugins ), $args ); } /** * Render deactivation notice. * * @param string $plugins * * @return string */ protected function render_deactivation_notice( string $plugins ): string { $message = __( "We've deactivated the following WP Offload Media addons:", 'amazon-s3-and-cloudfront' ); $more_info = __( 'Integrations are now included in the core WP Offload Media plugin. The addon plugins listed above can safely be removed.', 'amazon-s3-and-cloudfront' ); return $message . $plugins . $more_info; } /** * Render plugins list. * * @param array $plugins * @param bool $uninstall * * @return string */ protected function render_plugins( array $plugins, bool $uninstall = false ): string { $html = ''; return $html; } /** * Get compatibility plugins. * * @return array */ protected function get_plugins(): array { return array( 'amazon-s3-and-cloudfront-acf-image-crop/amazon-s3-and-cloudfront-acf-image-crop.php' => array( 'name' => __( 'ACF Image Crop', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_acf_image_crop_init', ), 'amazon-s3-and-cloudfront-edd/amazon-s3-and-cloudfront-edd.php' => array( 'name' => __( 'Easy Digital Downloads', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_edd_init', ), 'amazon-s3-and-cloudfront-enable-media-replace/amazon-s3-and-cloudfront-enable-media-replace.php' => array( 'name' => __( 'Enable Media Replace', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_enable_media_replace_init', ), 'amazon-s3-and-cloudfront-meta-slider/amazon-s3-and-cloudfront-meta-slider.php' => array( 'name' => __( 'Meta Slider', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_meta_slider_init', ), 'amazon-s3-and-cloudfront-woocommerce/amazon-s3-and-cloudfront-woocommerce.php' => array( 'name' => __( 'WooCommerce', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_woocommerce_init', ), 'amazon-s3-and-cloudfront-wpml/amazon-s3-and-cloudfront-wpml.php' => array( 'name' => __( 'WPML', 'amazon-s3-and-cloudfront' ), 'init_action' => 'aws_init', 'init_func' => 'as3cf_wpml_init', ), 'amazon-s3-and-cloudfront-assets/amazon-s3-and-cloudfront-assets.php' => array( 'name' => __( 'Assets', 'amazon-s3-and-cloudfront' ), 'init_action' => 'as3cf_pro_init', 'init_func' => 'as3cf_assets_init', ), 'amazon-s3-and-cloudfront-assets-pull/amazon-s3-and-cloudfront-assets-pull.php' => array( 'name' => __( 'Assets Pull', 'amazon-s3-and-cloudfront' ), 'init_action' => 'as3cf_pro_init', 'init_func' => 'as3cf_assets_pull_init', ), ); } /** * Get active plugins. * * @return array */ protected function get_active_plugins(): array { static $active_plugins; if ( is_null( $active_plugins ) ) { $active_plugins = array(); foreach ( $this->get_plugins() as $plugin => $details ) { if ( is_plugin_active( $plugin ) ) { $active_plugins[ $plugin ] = $details; } } } return $active_plugins; } /** * Get installed plugins. * * @return array */ protected function get_installed_plugins(): array { $plugins = get_plugins(); $installed_plugins = array(); foreach ( $this->get_plugins() as $plugin => $details ) { if ( array_key_exists( $plugin, $plugins ) ) { $installed_plugins[ $plugin ] = $details; } } return $installed_plugins; } /** * Show obsolete notice. */ public function show_obsolete_notice() { $id = 'remove-compat-plugins'; $installed_plugins = $this->get_installed_plugins(); if ( empty( $installed_plugins ) ) { if ( $this->as3cf->notices->find_notice_by_id( $id ) ) { $this->as3cf->notices->remove_notice_by_id( $id ); } return; } $plugins = $this->render_plugins( $installed_plugins, true ); $args = array( 'type' => 'notice-info', 'dismissible' => false, 'flash' => false, 'only_show_to_user' => false, 'only_show_in_settings' => true, 'custom_id' => $id, ); $this->as3cf->notices->add_notice( $this->render_obsolete_notice( $plugins ), $args ); } /** * Render obsolete notice. * * @param string $plugins * * @return string */ protected function render_obsolete_notice( string $plugins ): string { $message = __( 'Please remove the following obsolete addons:', 'amazon-s3-and-cloudfront' ); $more_info = __( 'Integrations are now included in the core WP Offload Media plugin. Once these addons are removed this message will go away.', 'amazon-s3-and-cloudfront' ); return $message . $plugins . $more_info; } /** * Disable obsolete plugins. */ public function disable_obsolete_plugins() { $this->show_deactivation_notice(); $plugins = $this->get_active_plugins(); if ( ! empty( $plugins ) ) { foreach ( $plugins as $details ) { $priority = has_action( $details['init_action'], $details['init_func'] ); if ( $priority ) { remove_action( $details['init_action'], $details['init_func'], $priority ); } } deactivate_plugins( array_keys( $plugins ), true ); } } }