plugin_meta = $plugin_meta; $this->dismiss_key = sprintf( '_%s-upgrade-notice-dismiss', $this->plugin_meta->get_short_slug() ); $this->dismiss_nonce_action = 'avf-upgrade-notice'; } public static function has_route_hooks( Route_Detector $route_detector ): bool { return $route_detector->is_admin_route(); } public function set_route_hooks( Route_Detector $route_detector ): void { $upgrade_notice = $this->get_upgrade_notice(); if ( strlen( $upgrade_notice ) > 0 ) { self::add_action( 'admin_notices', function (): void { if ( ! $this->hide_notice() ) { $this->print_notice(); } } ); } } /** * @param Version_Migration[] $version_migrations */ public function setup_upgrade_notice( array $version_migrations ): void { Plugin::on_translations_ready( function () use ( $version_migrations ): void { $upgrade_notices = array(); foreach ( $version_migrations as $version_migration ) { $version_upgrade_notice = $version_migration->get_upgrade_notice_text(); if ( is_string( $version_upgrade_notice ) ) { $upgrade_notices[] = sprintf( '%s (v. %s)', $version_upgrade_notice, $version_migration->introduced_version() ); } } if ( count( $upgrade_notices ) > 0 ) { $upgrade_notice = implode( "\n", $upgrade_notices ); Options_Storage::set_transient( Options_Storage::TRANSIENT_UPGRADE_NOTICE, $upgrade_notice, WEEK_IN_SECONDS ); } } ); } public function print_notice(): void { $upgrade_notice = $this->get_upgrade_notice(); echo '
'; echo '

'; echo esc_html__( 'Advanced Views plugin has been successfully upgraded!', 'acf-views' ); echo '
'; // @phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo str_replace( "\n", '
', esc_html( $upgrade_notice ) ); if ( Avf_User::can_manage() ) { $dismiss_url = add_query_arg( array( $this->dismiss_key => 1, '_wpnonce' => wp_create_nonce( $this->dismiss_nonce_action ), ), Plugin::get_current_admin_url() ); printf( '%s', esc_url( $dismiss_url ), esc_html( __( 'Thanks, hide', 'acf-views' ) ) ); } echo '

'; echo '
'; } protected function hide_notice(): bool { $dismiss_value = Query_Arguments::get_string_for_admin_action( $this->dismiss_key, $this->dismiss_nonce_action ); if ( strlen( $dismiss_value ) > 0 && Avf_User::can_manage() ) { Options_Storage::delete_transient( Options_Storage::TRANSIENT_UPGRADE_NOTICE ); return true; } return false; } protected function get_upgrade_notice(): string { $upgrade_transient = Options_Storage::get_transient( Options_Storage::TRANSIENT_UPGRADE_NOTICE ); return string( $upgrade_transient ); } }