check_for_legacy_data(); add_action( 'admin_enqueue_scripts', array( $this, 'admin_pointer' ), 999 ); // with version 3 we'll be giving at least one admin notice add_action( 'admin_notices', array( $this, 'admin_notice' ) ); } /** * Stores whether or not this environment has active legacy Attachments/Pro data * * @since 3.1.3 */ function check_for_legacy_data() { // we'll get a warning issued if fired when Network Activated // since it's supremely unlikely we'd have legacy data at this point, we're going to short circuit if( is_multisite() ) { $plugins = get_site_option( 'active_sitewide_plugins' ); if( isset( $plugins['attachments/index.php'] ) ) return; } // deal with our legacy issues if the user hasn't dismissed or migrated already if( false == get_option( 'attachments_migrated' ) && false == get_option( 'attachments_ignore_migration' ) ) { $legacy_attachments_settings = get_option( 'attachments_settings' ); if( $legacy_attachments_settings && is_array( $legacy_attachments_settings['post_types'] ) && count( $legacy_attachments_settings['post_types'] ) ) { // we have legacy settings, so we're going to use the post types that Attachments is currently utilizing // the keys are the actual CPT names, so we need those foreach( $legacy_attachments_settings['post_types'] as $post_type => $value ) if( $value ) $post_types[] = $post_type; // set up our WP_Query args to grab anything with legacy data $args = array( 'post_type' => isset( $post_types ) ? $post_types : array( 'post', 'page' ), 'post_status' => 'any', 'posts_per_page' => 1, 'meta_key' => '_attachments', 'suppress_filters' => true, ); $legacy = new WP_Query( $args ); $this->legacy = empty( $legacy->found_posts ) ? false : true; } } // deal with our legacy Pro issues if the user hasn't dismissed or migrated already if( false == get_option( 'attachments_pro_migrated' ) && false == get_option( 'attachments_pro_ignore_migration' ) ) { $post_types = get_post_types(); // set up our WP_Query args to grab anything (really anything) with legacy data $args = array( 'post_type' => !empty( $post_types ) ? $post_types : array( 'post', 'page' ), 'post_status' => 'any', 'posts_per_page' => 1, 'meta_key' => '_attachments_pro', 'suppress_filters' => true, ); $legacy_pro = new WP_Query( $args ); $this->legacy_pro = empty( $legacy_pro->found_posts ) ? false : true; } } /** * Outputs a WordPress message to notify user of legacy data * * @since 3.0 */ function admin_notice() { if( $this->has_outstanding_legacy_data() && ( isset( $_GET['page'] ) && $_GET['page'] !== 'attachments' || !isset( $_GET['page'] ) ) ) : ?>
legacy ) ) && // we're not intentionally ignoring the message ( false == get_option( 'attachments_ignore_migration' ) ) ) { return true; } else { return false; } } /** * Implements our WordPress pointer if necessary * * @since 3.0 */ function admin_pointer( $hook_suffix ) { // Assume pointer shouldn't be shown $enqueue_pointer_script_style = false; // Get array list of dismissed pointers for current user and convert it to array $dismissed_pointers = explode( ',', get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); // Check if our pointer is not among dismissed ones if( $this->legacy && !in_array( 'attachments_legacy', $dismissed_pointers ) ) { $enqueue_pointer_script_style = true; // Add footer scripts using callback function add_action( 'admin_print_footer_scripts', array( $this, 'pointer_legacy' ) ); } // Enqueue pointer CSS and JS files, if needed if( $enqueue_pointer_script_style ) { wp_enqueue_style( 'wp-pointer' ); wp_enqueue_script( 'wp-pointer' ); } } /** * Pointer that calls attention to legacy data * * @since 3.0 */ function pointer_legacy() { $pointer_content = "". __( esc_html( 'It is very important that you take a few minutes to see what has been updated. The changes will affect your themes/plugins.' ), 'attachments' ) ."
"; ?>