From 10008cebe689f15d338b9bb6fd9c056a3e22179e Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Thu, 14 Dec 2023 17:52:38 -0800 Subject: [PATCH] v0.5.4 (#77) --- .distignore | 5 +- .github/workflows/integrate.yaml | 7 +- .wp-env.json | 10 + CHANGELOG.md | 62 +- README.md | 41 +- assets/css/disable-blog-admin.css | 7 +- contributing.md | 23 +- disable-blog.php | 6 +- includes/class-disable-blog-activator.php | 7 +- includes/class-disable-blog-admin.php | 75 +- includes/class-disable-blog-deactivator.php | 7 +- includes/class-disable-blog-functions.php | 10 +- includes/class-disable-blog-i18n.php | 4 +- includes/class-disable-blog-integrations.php | 66 +- includes/class-disable-blog-loader.php | 19 +- includes/class-disable-blog-public.php | 25 +- includes/class-disable-blog.php | 13 +- includes/functions.php | 9 +- index.php | 1 - package-lock.json | 1411 ++++++++++++++++++ package.json | 21 + phpstan.neon.dist | 2 - readme.txt | 32 +- tests/bootstrap.php | 2 +- 24 files changed, 1637 insertions(+), 228 deletions(-) create mode 100644 .wp-env.json create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.distignore b/.distignore index d528c91..51b8cbf 100644 --- a/.distignore +++ b/.distignore @@ -10,4 +10,7 @@ composer.json composer.lock code-of-conduct.md contributing.md -phpstan.neon.dist \ No newline at end of file +phpstan.neon.dist +package.json +package-lock.json +.wp-env.json diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 77b4680..8e97bf4 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -12,7 +12,7 @@ jobs: runs-on: "ubuntu-latest" strategy: matrix: - php-versions: ['7.4', '8.0', '8.1'] + php-versions: ['7.4', '8.0', '8.1', '8.2.'] steps: - name: "Checkout" uses: "actions/checkout@v3" @@ -34,7 +34,10 @@ jobs: with: php-version: "8.1" - name: "Install PHPCS" - run: "composer require --dev wp-coding-standards/wpcs && composer config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true && composer require --dev dealerdirect/phpcodesniffer-composer-installer" + run: | + composer require --no-plugins --dev wp-coding-standards/wpcs + composer config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true + composer run post-install-cmd - name: "Run PHPCS" run: "vendor/bin/phpcs --standard=WordPress-Core *.php includes/" diff --git a/.wp-env.json b/.wp-env.json new file mode 100644 index 0000000..c5ef1a6 --- /dev/null +++ b/.wp-env.json @@ -0,0 +1,10 @@ +{ + "config": { + "WP_DEBUG": true, + "WP_DEBUG_LOG": true + }, + "phpVersion": "8.2", + "plugins": [ + "." + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index b6fc3d6..ba8f297 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ -### Changelog - -#### 0.5.3 +# Changelog + +## 0.5.4 +- Tested up to WordPress 6.4.2. +- Bump minimum WordPress version to 5.3, aligning with minimum PHP support. +- Test to PHP 8.2. +- Update Github actions. +- Add Code Standard fixer Github Action, h/t @szepeviktor +- Fix coding standards and a bunch of typos, h/t @szepeviktor +- Increase accuracy of CSS selector used to hide blog related items in Settings > Reading, closes [#69](https://github.com/joshuadavidnelson/disable-blog/issues/69) +- Add `.wp-env.json` for local development. + +## 0.5.3 - Fix `typeof` typo in `disable-blog-customizer.js` from 0.5.2 updates for #59. - Fix uninstall error to allow for the plugin to be deleted correctly. - Only fire comment related admin functions if comments are supported. @@ -9,7 +19,7 @@ - Create a plugin integration framework - simple class with "plugin active" checks and related integration functions, including the preexisting WooCommerce (version <= 2.6.2) comment count integration. - Add a Disable Comments integration, utilizing the `dwpb_post_types_supporting_comments` to turn off all Disable Blog comment-related functions if Disable Comments is active. -#### 0.5.2 +## 0.5.2 - Test up to WP 6.1.1 - Increase minimum PHP to v7.4 - Test to PHP 8.1 @@ -18,7 +28,7 @@ - Adds a check to the customizer script to avoid a TypeError. Closes #59 - Increase specificity in permalinks page to correctly target and remove "optional" section when category and post tags are not supported by any post type (default condition). Closes #62 -#### 0.5.1 +## 0.5.1 - Update to documentation, readmes, and doc blocks. - Fix `.distignore` to remove itself and .gitignore from WP-dot-org repo. - Add WP repo assets and deployment action. @@ -32,7 +42,7 @@ - Alter permalink settings based on if categories and author archives are supported. - Move `dwpb_disable_feed` filter into a function in the `Disable_Blog_Functions` class. -#### 0.5.0 +## 0.5.0 **New** - New disable author archive functionality via new `dwpb_disable_author_archives` filter. Pass `true` to disable author archives entirely. Default does not disable author archives because numerous other plugins use author archives for other purposes. (A future settings page will provide more flexibility here). @@ -60,7 +70,7 @@ - In order to account for multiple subpages of a common parent page being removed the `dwpb_menu_subpages_to_remove` param has been updated to support an array of subpages in the format of `$remove_subpages['parent-page-slug.php'] = array( 'subpage-1.php', 'subpage-2.php' );`, though it still supports subpages as strings for backwards compatibility. Fixes bugs were `options-writing.php` and `options-discussion.php` were conflicting. **Improvements/Updates** -- Update admin filters to a common format and removing redundent filters. Filter changes include: +- Update admin filters to a common format and removing redundant filters. Filter changes include: - New filter: `dwpb_redirect_admin_url` filters the final url used in admin redirects. - `dwpb_redirect_admin` only accepts 1 parameter, the previous version accepted 3 (dropping `$redirect_url` & `$current_url`). - `dwpb_redirect_admin_edit_post` is now `dwpb_redirect_admin_edit`. @@ -69,7 +79,7 @@ - `dwpb_redirect_edit_tax` has been removed. Use `dwpb_redirect_admin_edit_tags` or `dwpb_redirect_admin_term` instead, depending on the context. - `dwpb_redirect_edit_comments` has been removed. use `dwpb_redirect_admin_edit_comments` instead. - `dwpb_redirect_options_discussion` has been removed. Use `dwpb_redirect_admin_options_discussion` instead. - - The filter `dwpb_redirect_admin_options_writing` that would pass a boolean to toggle off the options writing page has been remaned `dwpb_remove_options_writing` and must be passed with `true` in order to have the page redirect _and_ the admin menu item removed. By default the value filtered is false and the options Writing page does not go away, as numerous other plugins use this page for non-blog related settings. Now `dwpb_redirect_admin_options_writing` is used to filter the redirect url itself, replacing the previously named `dwpb_redirect_options_writing` filter. + - The filter `dwpb_redirect_admin_options_writing` that would pass a boolean to toggle off the options writing page has been remained `dwpb_remove_options_writing` and must be passed with `true` in order to have the page redirect _and_ the admin menu item removed. By default the value filtered is false and the options Writing page does not go away, as numerous other plugins use this page for non-blog related settings. Now `dwpb_redirect_admin_options_writing` is used to filter the redirect url itself, replacing the previously named `dwpb_redirect_options_writing` filter. - `dwpb_redirect_options_tools` has been removed. Use `dwpb_redirect_admin_options_tools` instead. - New filter: `dwpb_disabled_xmlpc_methods` (see above). - New filter: `dwpb_author_archive_post_types` (see above). @@ -86,10 +96,10 @@ - Updated minimum WP Core version to 4.0. - Updated translation file for all current plugin strings. -#### 0.4.10 +## 0.4.10 - Fix a bug from v0.4.9 that caused redirects on custom post type archives, correcting the `modify_query` function to only remove posts from built-in taxonomy archives, as that was the original intent. -#### 0.4.9 +## 0.4.9 - **Notice:** We've added the minimum PHP version requirement of 5.3, which was not explicitly set before now. - **Big change:** the plugin now changes the `post_type` arguments for posts so they are no longer public and removes all post_type support parameters. This disables the post-related admin redirects, as WordPress will now show users an error page stating "Sorry, you are not allowed to edit posts in this post type." It also pulls posts out of a lot of other locations (menus, etc) and is a much more efficient method of "disabling" the post type. This method is also used on built-in taxonomies, unless another post type supports them. **This change may impact other plugins or themes, be sure to back up your site and, if you can, test these changes prior to updating the plugin on a production site.** - Disable pingbacks entirely. @@ -111,45 +121,45 @@ - The `dwpb_author_post_types` filter is now `dwpb_archive_post_types`, as the query modification now includes all pages passing `is_archive`. - Removed filters: `dwpb_disable_rest_api`, `dwpb_remove_post_comment_support`, `dwpb_remove_post_trackback_support`, `dwpb_redirect_admin_edit_single_post`, `dwpb_redirect_single_post_edit`, `dwpb_redirect_admin_edit_post`, `dwpb_redirect_edit`, `dwpb_redirect_admin_post_new`, `dwpb_redirect_post_new` as these are rendered obsolete by above changes. -#### 0.4.8.1 +## 0.4.8.1 - Do'h! Forgot to update the version number in the main plugin file. Bump. -#### 0.4.8 +## 0.4.8 - Fixed typo in variable name for current vs redirect url check. (h/t @chesio, PR #30) - Update function names from template to `disable_blog`. (h/t @szepeviktor, PR #31) - Add WP.org Badge to readme.md. (h/t @szepeviktor, PR #32) - Change the name of the CI workflow to be specific to deployment. (h/t @szepeviktor, PR #33) - Some code tidying and inline documentation. -#### 0.4.7 +## 0.4.7 - Using GitHub actions publish on WP.org from github releases. - Cleaned up the Reading settings, adding admin notices if front page is not set. - Add check for Multisite to avoid network page redirects. Closes #17, props to @Mactory. - Added Contributing and Code of Conduct documentation. - Check that `is_singular` works prior to running redirects to avoid non-object errors in feeds. -#### 0.4.6 +## 0.4.6 - Added check on disable feed functionality to confirm post type prior to disabling feed. -#### 0.4.5 +## 0.4.5 - Remove the functionality hiding the Settings > Writing admin page, allow this option to be re-enabled via the older filter. This page used to be entirely related to posts, but is also used to select the editor type (Gutenberg vs Classic). - Correct misspelled dwpb_redirect_options_tools filter. -#### 0.4.4 +## 0.4.4 - Hide the Settings > Writing menu item, which shows up with Disable Comments enabled everywhere. Thanks to @dater for identifying. -#### 0.4.3 +## 0.4.3 - Fix fatal error conflict with WooCommerce versions older than 2.6.3 (props to @Mahjouba91 for the heads up), no returns an array of comments in the filter for those older WooCommerce versions. - Add de/activation hooks to clear comment caches - Cleanup comment count functions. -#### 0.4.2 +## 0.4.2 - Disable the REST API for 'post' post type. Props to @shawnhooper. -#### 0.4.1 +## 0.4.1 - Fix unintended redirect for custom admin pages under tools.php. Props to @greatislander for the catch. -#### 0.4.0 +## 0.4.0 - Refactor code to match WP Plugin Boilerplate structure, including: - Move hooks and filters into loader class. - Separate Admin and Public hooks. @@ -165,22 +175,22 @@ - Fix show_on_front pages - now, if it's set to 'posts' it will set the blog page to value 0 (not a valid option) and set the front page to value 1. - Add uninstall.php to remove plugin version saved in options table on uninstall. -#### 0.3.3 +## 0.3.3 - Weird issue with svn, same as version 0.3.2. -#### 0.3.2 +## 0.3.2 - Fix potential loop issue with `home_url` in redirection function. - Fix custom taxonomy save redirect (used to redirect to dashboard, now it saves correctly). -#### 0.3.1 +## 0.3.1 - Add/update readme.txt. -#### 0.3.0 +## 0.3.0 - Singleton Class. - Clean up documentation. - Add filters. -#### 0.2.0 +## 0.2.0 More improvements: - Remove 'post' post type from most queries. @@ -199,5 +209,5 @@ More improvements: - Force Reading Settings: show_on_front, pages_for_posts, and posts_on_front, if they are not already set. - Hide other post-related reading options, except Search Engine Visibility. -#### 0.1.0 +## 0.1.0 Initial beta release. diff --git a/README.md b/README.md index 0185650..ff3b5e3 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,12 @@ Disable Blog [![WordPress Plugin Version](https://img.shields.io/wordpress/plugin/v/disable-blog)](https://wordpress.org/plugins/disable-blog/) ![Downloads](https://img.shields.io/wordpress/plugin/dt/disable-blog.svg) ![Rating](https://img.shields.io/wordpress/plugin/r/disable-blog.svg) -**Requires at least WordPress:** 4.0 -**Tested up to WordPress:** 6.2 -**Stable version:** 0.5.3 +**Requires at least WordPress:** 5.3 +**Tested up to WordPress:** 6.4.2 +**Stable version:** 0.5.4 **License:** GPLv2 or later **Requires PHP:** 7.4 -**Tested up to PHP:** 8.1 +**Tested up to PHP:** 8.2 All the power of WordPress, without a blog. @@ -39,7 +39,7 @@ Activating Disable Blog does the following: - Turns the `post` type into a non-public content type, with support for zero post type features. Any attempts to edit or view posts within the admin screen will be met with a WordPress error page or be redirect to the homepage. - Front-end: - - Disables the post feed and remoives the feed links from the header (for WP >= 4.4.0) and disables the comment feed/removes comment feed link if 'post' is the only post type supporting comments (note that the default condition pages and attachments support comments). + - Disables the post feed and removes the feed links from the header (for WP >= 4.4.0) and disables the comment feed/removes comment feed link if 'post' is the only post type supporting comments (note that the default condition pages and attachments support comments). - Removes posts from all archive pages. - Remove 'post' post type from XML sitemaps and categories/tags from XML sitemaps, if not being used by a custom post type (WP Version 5.5). - Disables the REST API for 'post' post type, as well as tags & categories (if not used by another custom post type). @@ -59,7 +59,7 @@ Activating Disable Blog does the following: - If comments are not supported by other post types (by default comments are supported by pages and attachments), it will hide the menu links for and redirect discussion options page and 'Comments' admin page to the dashboard. - Filters out the 'post' post type from 'Comments' admin page. - Alters the comment count to remove any comments associated with 'post' post type. - - Optionally remove/redirect the Settings > Writting page via `dwpb_remove_options_writing` filter (default is false). + - Optionally remove/redirect the Settings > Writing page via `dwpb_remove_options_writing` filter (default is false). - Removes Available Tools from admin menu and redirects page to the dashboard (this admin page contains Press This and Category/Tag converter, both are no longer neededd without a blog). - Removes Post from '+New' admin bar menu. - Removes 'Posts' Admin Menu. @@ -83,7 +83,7 @@ Activating Disable Blog does the following: If Settings > Reading > Front Page Displays is not set to show on a page, then some aspects of the plugin won't work, be sure to set your front page to a static page. -#### FAQ +## FAQ 1. Can I Disable Comments? - Other post types (like Pages) may have comment support and other great plugins exist that can disable comments, so this feature was not part of the initial development of this plugin. A future release will include options to disable comments, but until then if you would like to disable comments, try the [Disable Comments](https://wordpress.org/plugins/disable-comments/) plugin. @@ -92,10 +92,33 @@ If Settings > Reading > Front Page Displays is not set to show on a page, then s 3. How can I disable author archives? - If you're not using the built-in WP author archives for other purposes (example url: `example.com/author/author-name`) and would like to disable them entirely, add the following to your theme functions.php file or a custom plugin file: `add_filter( 'dwpb_disable_author_archives', '__return_true' );`. If author archives are not disabled, the plugin adds functionality to support custom post types on author archives by passing an array of post type slugs to `dwpb_author_archive_post_types` filter - however, theme support is usually needed to disable custom content types correctly. -#### Support +## Support This plugin is maintained for free but **please reach out** and I will assist you as soon as possible. You can visit the [WordPress.org support forums](https://wordpress.org/support/plugin/disable-blog/) or create an [issue](https://github.com/joshuadavidnelson/disable-blog/issues/) on the [GitHub repository](https://github.com/joshuadavidnelson/disable-blog/). -#### Contributing +## Contributing All contributions are welcomed and considered, please refer to [contributing.md](contributing.md). + +### Pull requests +All pull requests should be directed at the `develop` branch, and will be reviewed prior to merging. No pull requests will be merged with failing tests, but it's okay if you don't initially pass tests. Please create a draft pull request for proof of concept code or changes you'd like to have input on prior to review. + +Please make on a branch specific to a single issue or feature. For instance, if you are suggest a solution to an issue, please create fork with a branch like `issue-894`. Or if you are proposing a new feature, create a fork with the branch name indicating the feature like `feature-example-bananas` + +All improvements are merged into `develop` and then queued up for release before being merged into `stable`. Releases are deployed via github actions to wordpress.org on tagging a new release. + +### Main Branches + +The `stable` branch is reserved for releases and intended to be a mirror of the official current release, or `trunk` on wordpress.org. + +The `develop` branch is the most current working branch. _Please direct all pull requests to the `develop` branch_ + +### Developing Disable Blog Locally + +**Requirements:** +- Docker +- Node Package Manager (npm) + +This repo contains the files needed to boot up a local development environment using [wp-env](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-env/). + +Run `npm install` and the `npm run env:start` to boot up a local environment. diff --git a/assets/css/disable-blog-admin.css b/assets/css/disable-blog-admin.css index d2dc181..b2483dc 100644 --- a/assets/css/disable-blog-admin.css +++ b/assets/css/disable-blog-admin.css @@ -10,13 +10,12 @@ .welcome-icon.welcome-write-blog, .users-php .column-posts, .disabled-blog.options-reading-php #front-static-pages legend + p, -.disabled-blog.options-reading-php .form-table tr:nth-child(2), -.disabled-blog.options-reading-php .form-table tr:nth-child(3), -.disabled-blog.options-reading-php .form-table tr:nth-child(4), +.disabled-blog.options-reading-php .form-table:first-of-type tr:nth-child(2), +.disabled-blog.options-reading-php .form-table:first-of-type tr:nth-child(3), +.disabled-blog.options-reading-php .form-table:first-of-type tr:nth-child(4), .disabled-blog.options-discussion-php label[for="default_pingback_flag"], .disabled-blog.options-discussion-php label[for="default_pingback_flag"] + br, .disabled-blog.options-discussion-php label[for="default_ping_status"], .disabled-blog.options-discussion-php label[for="default_ping_status"] + br { display: none; } - diff --git a/contributing.md b/contributing.md index 7ec065f..7f13e7f 100644 --- a/contributing.md +++ b/contributing.md @@ -1,8 +1,21 @@ -##### Main Branches +# Contributing to Disable Blog -The `stable` branch is reserved for releases and intended to be a mirror of the official current release, or `trunk` on wp.org. +Thank you for considering contributing to the on-going development of this plugin! All contributions are welcomed and support can come in many forms: -The `develop` branch is the most current working branch. _Please direct all pull requests to `develop`_ +- **Sponsoring** - [Donate](https://joshuadnelson.com/donate/) to help support plugin development hours. -##### Pull requests -All pull requests should be made on a branch specific to a single issue or feature, directed to the `develop` branch. All improvements are merged into `develop` and then queued up for release before being merged into `stable`. Releases are deployed via github actions to wp.org on tagging a new release. +- **Bug reporting** - [Submit an issue](https://github.com/joshuadavidnelson/disable-blog/issues/) on the Github repo or [WordPress.org Support forum](https://wordpress.org/support/plugin/disable-blog/), _knowing_ about an issue is the first step to fixing it! Bug reports are a vital way to help make the plugin better for you and for others. **If you have found a security vulnerability, please [contact the developer directly](mailto:josh@joshuadnelson.com).** + +- **Translations** - The effort to localize strings on the plugin is entirely a volunteer effort, and these contributions have a huge impact on the plugin's accessibility. Thank you to our translators! Learn more about how you can contribute [here](https://make.wordpress.org/polyglots/teams/). + +- **Documentation** - Suggest edits to our documentation, post a walkthrough on how to use or extend the plugin, or provide help to other users on the [support forums](https://wordpress.org/support/plugin/disable-blog/). + +- **Pull Requests** - Suggest changes to the code to enhance the plugin, see the [Pull Requests](README.md#pull-requests) section in the main readme doc. _Please direct all Pull Requests to the `develop` branch_ + +- **Positive Reviews** - [Adding a positive review](https://wordpress.org/support/plugin/disable-blog/reviews/#new-post) to the WordPress page helps spread the word and encourage otherts to trust our efforts. + +- **Testing** - Taking the time to test the plugin and report back any findings is a great help! Feel free to test [current pull requests](https://github.com/joshuadavidnelson/disable-blog/pulls/) and leave comments, or test the current version locally with the newest version of WordPress or your own plugin. We are strongly in favor of Cross Plugin Integration - being compatible with as many other plugins as possible! + +- **Support** - We welcome solutions and constructive responses to [support forum](https://wordpress.org/support/plugin/disable-blog/) posts. + +However you choose to contribute, we ask that you follow the [Code of Conduct](code-of-conduct.md) and conduct yourself in a compassionate, professional manner. Thank you again for your contributions! diff --git a/disable-blog.php b/disable-blog.php index 911f227..f0cd54b 100644 --- a/disable-blog.php +++ b/disable-blog.php @@ -15,7 +15,7 @@ * Plugin Name: Disable Blog * Plugin URI: https://wordpress.org/plugins/disable-blog/ * Description: Go blog-less with WordPress. This plugin disables all blog-related functionality (by hiding, removing, and redirecting). - * Version: 0.5.3 + * Version: 0.5.4 * Author: Joshua David Nelson * Author URI: http://joshuadnelson.com * License: GPL-2.0+ @@ -56,10 +56,10 @@ function deactivate_disable_blog() { register_deactivation_hook( __FILE__, 'deactivate_disable_blog' ); // Constants. -define( 'DWPB_DIR', dirname( __FILE__ ) ); +define( 'DWPB_DIR', __DIR__ ); define( 'DWPB_URL', plugins_url( '/', __FILE__ ) ); define( 'DWPB_PLUGIN_NAME', 'disable-blog' ); -define( 'DWPB_VERSION', '0.5.3' ); +define( 'DWPB_VERSION', '0.5.4' ); /** * The core plugin class that is used to define everything. diff --git a/includes/class-disable-blog-activator.php b/includes/class-disable-blog-activator.php index 33b17e4..d00d56a 100644 --- a/includes/class-disable-blog-activator.php +++ b/includes/class-disable-blog-activator.php @@ -70,7 +70,6 @@ public static function activate() { wp_cache_delete( 'comments-0', 'counts' ); delete_transient( 'wc_count_comments' ); flush_rewrite_rules(); - } /** @@ -110,13 +109,12 @@ private static function get_request() { } return false; - } /** * Validate the Request data. * - * Validates the $_REQUESTed data is matching this plugin and action. + * Validates the data in $_REQUEST is matching this plugin and action. * * @since 0.5.1 * @param string $plugin The Plugin folder/name.php. @@ -139,7 +137,6 @@ private static function validate_request( $plugin ) { } return false; - } /** @@ -157,7 +154,5 @@ private static function check_caps() { } return false; - } - } diff --git a/includes/class-disable-blog-admin.php b/includes/class-disable-blog-admin.php index 5d02f2b..52f449e 100644 --- a/includes/class-disable-blog-admin.php +++ b/includes/class-disable-blog-admin.php @@ -57,7 +57,6 @@ public function __construct( $plugin_name, $version ) { $this->plugin_name = $plugin_name; $this->version = $version; $this->functions = new Disable_Blog_Functions(); - } /** @@ -86,7 +85,6 @@ public function plugin_links( $links, $file ) { } return $links; - } /** @@ -104,7 +102,7 @@ public function modify_post_type_arguments() { $arguments_to_remove = array( 'has_archive', 'public', - 'publicaly_queryable', + 'publicly_queryable', 'rewrite', 'query_var', 'show_ui', @@ -129,7 +127,6 @@ public function modify_post_type_arguments() { $wp_post_types['post']->supports = array(); } - } /** @@ -167,7 +164,7 @@ public function modify_taxonomies_arguments() { $arguments_to_remove = array( 'has_archive', 'public', - 'publicaly_queryable', + 'publicly_queryable', 'query_var', 'show_ui', 'show_tagcloud', @@ -189,7 +186,6 @@ public function modify_taxonomies_arguments() { } } } - } /** @@ -231,7 +227,7 @@ public function redirect_admin_pages() { 'edit-comments', 'options-discussion', 'options-writing', - 'options-tools', + 'tools', ); // cycle through each admin page, checking if we need to redirect. @@ -307,7 +303,6 @@ public function redirect_admin_pages() { if ( $redirect_url && apply_filters( 'dwpb_redirect_admin', true, $redirect_url ) ) { $this->functions->redirect( $redirect_url ); } - } /** @@ -321,7 +316,6 @@ public function redirect_admin_post() { // @codingStandardsIgnoreStart - phpcs wants to sanitize this, but it's not necessary. return ( isset( $_GET['post'] ) && 'post' == get_post_type( $_GET['post'] ) ); // @codingStandardsIgnoreEnd - } /** @@ -341,7 +335,6 @@ public function redirect_admin_edit() { } return false; - } /** @@ -361,7 +354,6 @@ public function redirect_admin_post_new() { } return false; - } /** @@ -375,7 +367,6 @@ public function reidrect_admin_term() { // @codingStandardsIgnoreStart - phpcs wants to sanitize this, but it's not necessary. return ( isset( $_GET['taxonomy'] ) && ! dwpb_post_types_with_tax( $_GET['taxonomy'] ) ); // @codingStandardsIgnoreEnd - } /** @@ -389,7 +380,6 @@ public function redirect_admin_edit_tags() { // @codingStandardsIgnoreStart - phpcs wants to sanitize this, but it's not necessary. return ( isset( $_GET['taxonomy'] ) && ! dwpb_post_types_with_tax( $_GET['taxonomy'] ) ); // @codingStandardsIgnoreEnd - } /** @@ -406,7 +396,6 @@ public function redirect_admin_edit_comments() { * note that pages and attachments support comments by default. */ return ! dwpb_post_types_with_feature( 'comments' ); - } /** @@ -420,7 +409,6 @@ public function redirect_admin_edit_comments() { public function redirect_admin_options_discussion() { return $this->redirect_admin_edit_comments(); - } /** @@ -439,7 +427,6 @@ public function redirect_admin_options_writing() { } return false; - } /** @@ -457,7 +444,6 @@ public function redirect_admin_options_tools() { // @codingStandardsIgnoreStart - phpcs wants to nounce this, but that's not needed. return ! isset( $_GET['page'] ); // @codingStandardsIgnoreEnd - } /** @@ -511,7 +497,7 @@ public function remove_menu_pages() { * Admin subpages to be removed. * * @since 0.4.0 - * @since 0.5.0 in order to account for mulitple subpages with a common parent + * @since 0.5.0 in order to account for multiple subpages with a common parent * the `subpages` are now in arrays * @param array $remove_subpages Array of page => subpages where subpages is an array of strings. */ @@ -525,7 +511,6 @@ public function remove_menu_pages() { remove_submenu_page( $page, $subpages ); } } - } /** @@ -542,7 +527,6 @@ public function admin_body_class( $classes ) { } return $classes; - } /** @@ -570,7 +554,6 @@ public function remove_writing_options() { * @param bool $bool Defaults to false, keeping the writing page visible. */ return apply_filters( 'dwpb_remove_options_writing', false ); - } /** @@ -592,7 +575,6 @@ public function remove_admin_bar_links() { // Remove New Post from Content. $wp_admin_bar->remove_node( 'new-post' ); - } /** @@ -618,7 +600,6 @@ public function comment_filter( $comments ) { } return $comments; - } /** @@ -644,7 +625,7 @@ public function remove_dashboard_widgets() { /** * Filter to change the dashboard widgets beinre removed. * - * Filter name baed on the name of the widget above, + * Filter name based on the name of the widget above, * For instance: `dwpb_disable_dashboard_quick_press` for the Quick Press widget. * * @since 0.4.1 @@ -654,7 +635,6 @@ public function remove_dashboard_widgets() { remove_meta_box( $metabox_id, 'dashboard', $context ); } } - } /** @@ -714,7 +694,6 @@ public function admin_notices() { printf( '

%s

', 'notice notice-error', esc_attr( $message ) ); } - } /** @@ -726,7 +705,6 @@ public function admin_notices() { public function has_front_page() { return 'page' === get_option( 'show_on_front' ) && absint( get_option( 'page_on_front' ) ); - } /** @@ -738,7 +716,6 @@ public function has_front_page() { public function disable_press_this() { wp_die( '"Press This" functionality has been disabled.' ); - } /** @@ -765,7 +742,7 @@ public function remove_widgets() { foreach ( $widgets as $widget ) { /** - * The ability to stop the widget unregsiter. + * The ability to stop the widget unregister. * * @since 0.4.0 * @@ -776,7 +753,6 @@ public function remove_widgets() { unregister_widget( $widget ); } } - } /** @@ -787,29 +763,28 @@ public function remove_widgets() { * * @uses dwpb_post_types_with_feature() * @since 0.4.0 - * @param bool $bool true to show. + * @param bool $show true to show. * @param string $widget the widget name. * @return bool */ - public function filter_widget_removal( $bool, $widget ) { + public function filter_widget_removal( $show, $widget ) { // Remove Categories Widget. if ( 'WP_Widget_Categories' === $widget && dwpb_post_types_with_tax( 'category' ) ) { - $bool = false; + $show = false; } // Remove Recent Comments Widget if posts are the only type with comments. if ( 'WP_Widget_Recent_Comments' === $widget && dwpb_post_types_with_feature( 'comments' ) ) { - $bool = false; + $show = false; } // Remove Tag Cloud. if ( 'WP_Widget_Tag_Cloud' === $widget && dwpb_post_types_with_tax( 'post_tag' ) ) { - $bool = false; + $show = false; } - return $bool; - + return $show; } /** @@ -821,7 +796,6 @@ public function filter_widget_removal( $bool, $widget ) { public function enqueue_styles() { wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . '../assets/css/disable-blog-admin.css', array(), $this->version, 'all' ); - } /** @@ -844,7 +818,6 @@ public function enqueue_scripts() { ); wp_localize_script( $this->plugin_name, 'dwpb', $js_vars ); - } /** @@ -859,7 +832,6 @@ public function is_admin_page( $page ) { global $pagenow; return is_admin() && isset( $pagenow ) && is_string( $pagenow ) && $page . '.php' === $pagenow; - } /** @@ -896,7 +868,6 @@ public function filter_wp_count_comments( $comments, $post_id ) { } return $comments; - } /** @@ -921,11 +892,10 @@ public function filter_admin_table_comment_count( $views ) { } return $views; - } /** - * Retreive the comment counts without the 'post' comments. + * Retrieve the comment counts without the 'post' comments. * * @since 0.4.0 * @since 0.4.3 Removed Unused "count" function. @@ -1007,7 +977,6 @@ public function get_comment_counts() { } return array_map( 'intval', $comment_count ); - } /** @@ -1021,7 +990,6 @@ public function get_comment_counts() { public function filter_comment_status( $open, $post_id ) { return ( 'post' === get_post_type( $post_id ) ) ? false : $open; - } /** @@ -1035,7 +1003,6 @@ public function filter_comment_status( $open, $post_id ) { public function filter_existing_comments( $comments, $post_id ) { return ( 'post' === get_post_type( $post_id ) ) ? array() : $comments; - } /** @@ -1071,7 +1038,6 @@ public function site_status_tests( $tests ) { } return $tests; - } /** @@ -1184,7 +1150,6 @@ public function get_test_rest_availability() { } return $result; - } /** @@ -1207,7 +1172,6 @@ public function filter_taxonomy_count( $actions, $tag ) { } return $actions; - } /** @@ -1273,7 +1237,7 @@ public function manage_users_columns( $columns ) { $post_types = $this->user_column_post_types(); foreach ( $post_types as $post_type ) { /** - * Create a new column for 'pages' similar to the orginal 'post' column. + * Create a new column for 'pages' similar to the original 'post' column. * * @since 0.5.0 * @param bool $bool True to remove the column, defaults to true. @@ -1292,7 +1256,6 @@ public function manage_users_columns( $columns ) { } return $columns; - } /** @@ -1342,7 +1305,6 @@ public function manage_users_custom_column( $output, $column_name, $user_id ) { } return $output; - } /** @@ -1356,7 +1318,7 @@ private function user_column_post_types() { // Include any post types using author archives. $post_types = $this->functions->author_archive_post_types(); - // The author_archive_post_type function returns false if empy, but we need an array. + // The author_archive_post_type function returns false if empty, but we need an array. $post_types = empty( $post_types ) ? array() : $post_types; // Also include pages, which is not in the author archive by default, @@ -1372,7 +1334,6 @@ private function user_column_post_types() { * @return array */ return apply_filters( 'dwpb_admin_user_post_types', $post_types ); - } /** @@ -1391,7 +1352,6 @@ public function user_row_actions( $actions, $user_object ) { } return $actions; - } /** @@ -1415,7 +1375,6 @@ public function customizer_styles() { __( 'You can choose what\'s displayed on the homepage of your site. To set a static homepage, create or select the page below.', 'disable-blog' ), ); wp_localize_script( $this->plugin_name . '-customizer-scripts', 'dwpbCustomizer', $js_vars ); - } /** @@ -1449,7 +1407,6 @@ public function update_posts_page_notice() { remove_action( 'edit_form_after_title', '_wp_posts_page_notice' ); add_action( 'edit_form_after_title', array( $this, 'posts_page_notice' ) ); } - } /** @@ -1462,7 +1419,6 @@ public function posts_page_notice() { // translators: this notice informs the user why the blog page editor is disabled and that it is redirected to the homepage. echo '

' . __( 'You are currently editing the page that shows your latest posts, which is redirected to the homepage because the blog is disabled.', 'disable-blog' ) . '

'; // phpcs:ignore - } /** @@ -1485,6 +1441,5 @@ public function available_permalink_structure_tags( $available_tags ) { } return $available_tags; - } } diff --git a/includes/class-disable-blog-deactivator.php b/includes/class-disable-blog-deactivator.php index 92f0e38..666442a 100644 --- a/includes/class-disable-blog-deactivator.php +++ b/includes/class-disable-blog-deactivator.php @@ -70,7 +70,6 @@ public static function deactivate() { wp_cache_delete( 'comments-0', 'counts' ); delete_transient( 'wc_count_comments' ); flush_rewrite_rules(); - } /** @@ -110,13 +109,12 @@ private static function get_request() { } return false; - } /** * Validate the Request data. * - * Validates the $_REQUESTed data is matching this plugin and action. + * Validates the data in $_REQUEST is matching this plugin and action. * * @since 0.5.1 * @param string $plugin The Plugin folder/name.php. @@ -139,7 +137,6 @@ private static function validate_request( $plugin ) { } return false; - } /** @@ -157,7 +154,5 @@ private static function check_caps() { } return false; - } - } diff --git a/includes/class-disable-blog-functions.php b/includes/class-disable-blog-functions.php index 16bee17..4e6eb79 100644 --- a/includes/class-disable-blog-functions.php +++ b/includes/class-disable-blog-functions.php @@ -45,7 +45,7 @@ public function redirect( $redirect_url ) { /** * Should we pass url query string in the redirect? * - * Deault is false. + * Default is false. * * @since 0.5.0 * @param bool $bool true to allow query strings on redirect. @@ -57,7 +57,6 @@ public function redirect( $redirect_url ) { wp_safe_redirect( esc_url_raw( $redirect_url ), $this->get_redirect_status_code( $current_url, $redirect_url ) ); exit; - } /** @@ -100,7 +99,6 @@ private function parse_query_string( $url ) { } return $url; - } /** @@ -131,7 +129,6 @@ private function get_redirect_status_code( $current_url, $redirect_url ) { } return absint( $status_code ); - } /** @@ -150,7 +147,6 @@ public function wp_safe_redirect_fallback( $url ) { } return $url; - } /** @@ -178,7 +174,6 @@ public function author_archive_post_types() { // Return false if there are no supported post types. return false; - } /** @@ -203,7 +198,6 @@ public function disable_author_archives() { * @return bool */ return (bool) apply_filters( 'dwpb_disable_author_archives', false ); - } /** @@ -224,7 +218,5 @@ public function disable_feeds( $post, $is_comment_feed = false ) { * @param bool $is_comment_feed True if the feed is a comment feed. */ return (bool) apply_filters( 'dwpb_disable_feed', true, $post, $is_comment_feed ); - } - } diff --git a/includes/class-disable-blog-i18n.php b/includes/class-disable-blog-i18n.php index 02d8717..01cc9a3 100644 --- a/includes/class-disable-blog-i18n.php +++ b/includes/class-disable-blog-i18n.php @@ -32,9 +32,7 @@ public function load_plugin_textdomain() { load_plugin_textdomain( 'disable-blog', false, - dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' + dirname( plugin_basename( __FILE__ ), 2 ) . '/languages/' ); - } - } diff --git a/includes/class-disable-blog-integrations.php b/includes/class-disable-blog-integrations.php index 3b8c657..a17c19a 100644 --- a/includes/class-disable-blog-integrations.php +++ b/includes/class-disable-blog-integrations.php @@ -15,38 +15,6 @@ */ class Disable_Blog_Integrations { - /** - * The ID of this plugin. - * - * @since 0.5.3 - * @access private - * @var string $plugin_name The ID of this plugin. - */ - private $plugin_name; - - /** - * The version of this plugin. - * - * @since 0.5.3 - * @access private - * @var string $version The current version of this plugin. - */ - private $version; - - /** - * Initialize the class and set its properties. - * - * @since 0.5.3 - * @param string $plugin_name The name of the plugin. - * @param string $version The version of this plugin. - */ - public function __construct( $plugin_name, $version ) { - - $this->plugin_name = $plugin_name; - $this->version = $version; - - } - /** * Check if the plugin is active. * @@ -70,7 +38,6 @@ public function is_plugin_active( $plugin ) { } return false; - } /** @@ -87,7 +54,6 @@ public function is_disable_comments_active() { } return false; - } /** @@ -104,7 +70,6 @@ public function is_woocommerce_active() { } return false; - } /** @@ -121,12 +86,39 @@ public function is_woocommerce_active() { */ public function filter_woocommerce_comment_count( $comments, $post_id ) { - if ( 0 === $post_id && function_exists( 'WC' ) && version_compare( WC()->version, '2.6.2', '<=' ) ) { + if ( 0 === $post_id && $this->woocommerce_version_check( '2.6.2' ) ) { $comments = (array) $comments; } return $comments; - } + /** + * Check if the WooCommerce version is less than the checked version. + * + * @since 0.5.4 + * @param string $checked_version The version to check against. + * @param string $check The comparison operator. + * @return bool + */ + private function woocommerce_version_check( $checked_version, $check = '<=' ) { + + // Check if WooCommerce is active. + if ( $this->is_woocommerce_active() ) { + + // Figure out the version of WooCommerce. + if ( defined( 'WC_VERSION' ) ) { + $woo_version = WC_VERSION; + } elseif ( defined( 'WOOCOMMERCE_VERSION' ) ) { + $woo_version = WOOCOMMERCE_VERSION; + } else { + return false; + } + + // Check if the WooCommerce version is less than the checked version. + return version_compare( $woo_version, $checked_version, $check ); + } + + return false; + } } diff --git a/includes/class-disable-blog-loader.php b/includes/class-disable-blog-loader.php index aad3e0a..087aff2 100644 --- a/includes/class-disable-blog-loader.php +++ b/includes/class-disable-blog-loader.php @@ -47,24 +47,23 @@ public function __construct() { $this->actions = array(); $this->filters = array(); - } /** * Simple Autoloader. * * @since 0.5.1 - * @param string $class The Class to autoload. + * @param string $requested_class The Class to autoload. */ - public function autoloader( $class ) { + public function autoloader( $requested_class ) { - $class = 'class-' . str_replace( '_', '-', strtolower( $class ) ) . '.php'; - $path = plugin_dir_path( dirname( __FILE__ ) ); - $sources = array( 'includes' ); + $requested_class = 'class-' . str_replace( '_', '-', strtolower( $requested_class ) ) . '.php'; + $path = plugin_dir_path( __DIR__ ); + $sources = array( 'includes' ); foreach ( $sources as $source ) { - if ( file_exists( $path . $source . '/' . $class ) ) { - include $path . $source . '/' . $class; + if ( file_exists( $path . $source . '/' . $requested_class ) ) { + include $path . $source . '/' . $requested_class; } } } @@ -122,7 +121,6 @@ private function add( $hooks, $hook, $component, $callback, $priority, $accepted ); return $hooks; - } /** @@ -155,7 +153,6 @@ public function remove_filter( $tag, $class_name = '', $method_to_remove = '', $ } return $removed; - } /** @@ -187,7 +184,5 @@ public function run() { foreach ( $this->actions as $hook ) { add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); } - } - } diff --git a/includes/class-disable-blog-public.php b/includes/class-disable-blog-public.php index 6d7a28c..e2dd994 100644 --- a/includes/class-disable-blog-public.php +++ b/includes/class-disable-blog-public.php @@ -56,7 +56,6 @@ public function __construct( $plugin_name, $version ) { $this->plugin_name = $plugin_name; $this->version = $version; $this->functions = new Disable_Blog_Functions(); - } /** @@ -148,7 +147,6 @@ public function redirect_public_pages() { $this->functions->redirect( $redirect_url ); } - } /** @@ -237,7 +235,6 @@ public function set_post_types_in_query( $query, $post_types = array(), $filter } return false; - } /** @@ -323,13 +320,12 @@ public function disable_feed( $is_comment_feed ) { * Only works for WordPress >= 4.4.0. * * @since 0.4.0 - * @param bool $bool true to show the posts feed link. + * @param bool $show true to show the posts feed link. * @return bool */ - public function feed_links_show_posts_feed( $bool ) { + public function feed_links_show_posts_feed( $show ) { return false; - } /** @@ -338,18 +334,17 @@ public function feed_links_show_posts_feed( $bool ) { * Only works for WordPress >= 4.4.0. * * @since 0.4.0 - * @param bool $bool true to show the comments feed link. + * @param bool $show true to show the comments feed link. * @return bool */ - public function feed_links_show_comments_feed( $bool ) { + public function feed_links_show_comments_feed( $show ) { // If 'post' type is the only type supporting comments, then disable the comment feed link. if ( ! dwpb_post_types_with_feature( 'comments' ) ) { - $bool = false; + $show = false; } - return $bool; - + return $show; } /** @@ -372,7 +367,6 @@ public function header_feeds() { foreach ( $feed as $function => $priority ) { remove_action( 'wp_head', $function, $priority ); } - } /** @@ -396,7 +390,6 @@ public function xmlrpc_methods( $methods ) { } return $methods; - } /** @@ -469,7 +462,6 @@ private function get_disabled_xmlrpc_methods() { // filter any invalid entries out before returning the array. return is_array( $methods_to_remove ) ? array_filter( $methods_to_remove, 'is_string' ) : false; // phpcs:ignore - } /** @@ -493,7 +485,6 @@ public function filter_wp_headers( $headers ) { } return $headers; - } /** @@ -510,7 +501,6 @@ public function wp_sitemaps_post_types( $post_types ) { } return $post_types; - } /** @@ -534,7 +524,6 @@ public function wp_sitemaps_taxonomies( $taxonomies ) { } return $taxonomies; - } /** @@ -576,7 +565,5 @@ public function wp_author_sitemaps( $provider, $name ) { } return $provider; - } - } diff --git a/includes/class-disable-blog.php b/includes/class-disable-blog.php index aeba5bc..31e7f35 100644 --- a/includes/class-disable-blog.php +++ b/includes/class-disable-blog.php @@ -78,7 +78,6 @@ public function __construct( $plugin_name, $version ) { $this->plugin_integrations(); $this->define_admin_hooks(); $this->define_public_hooks(); - } /** @@ -109,7 +108,6 @@ private static function upgrade_check() { // Save current version. update_option( 'dwpb_version', DWPB_VERSION, false ); } - } /** @@ -132,7 +130,7 @@ private static function upgrade_check() { private function load_dependencies() { // Includes directory. - $includes_dir = plugin_dir_path( dirname( __FILE__ ) ) . 'includes'; + $includes_dir = plugin_dir_path( __DIR__ ) . 'includes'; /** * The class responsible for orchestrating the actions and filters of the @@ -160,7 +158,6 @@ private function load_dependencies() { foreach ( $classes as $class ) { $this->loader->autoLoader( $class ); } - } /** @@ -177,7 +174,6 @@ private function set_locale() { $plugin_i18n = new Disable_Blog_I18n(); $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); - } /** @@ -219,7 +215,7 @@ private function define_admin_hooks() { // Remove Admin Bar Links. $this->loader->add_action( 'wp_before_admin_bar_render', $plugin_admin, 'remove_admin_bar_links' ); - // Disable Update Services configruation, no pingbacks. + // Disable Update Services configuration, no pingbacks. add_filter( 'enable_update_services_configuration', '__return_false' ); // Remove Dashboard Widgets. @@ -289,7 +285,6 @@ private function define_admin_hooks() { $this->loader->add_filter( 'comments_array', $plugin_admin, 'filter_existing_comments', 20, 2 ); } - } /** @@ -337,7 +332,6 @@ private function define_public_hooks() { // Conditionally remove author sitemaps, if author archives are not being supported. $this->loader->add_filter( 'wp_sitemaps_add_provider', $plugin_public, 'wp_author_sitemaps', 100, 2 ); - } /** @@ -348,7 +342,7 @@ private function define_public_hooks() { */ public function plugin_integrations() { - $plugin_integrations = new Disable_Blog_Integrations( $this->get_plugin_name(), $this->get_version() ); + $plugin_integrations = new Disable_Blog_Integrations(); // Disable Comments. if ( $plugin_integrations->is_disable_comments_active() ) { @@ -365,7 +359,6 @@ public function plugin_integrations() { // Convert the $comments object back into an array if older version of WooCommerce is active. $this->loader->add_filter( 'wp_count_comments', $plugin_integrations, 'filter_woocommerce_comment_count', 15, 2 ); } - } /** diff --git a/includes/functions.php b/includes/functions.php index 3ce61c5..bf11399 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -7,8 +7,7 @@ * * @link https://github.com/joshuadavidnelson/disable-blog * @since 0.4.0 - * @package Disable_Blog - * @subpackage Disable_Blog\Includes + * @package DisableBlog * @author Joshua Nelson */ @@ -65,13 +64,12 @@ function dwpb_post_types_with_feature( $feature, $args = array() ) { * be disabled and the options-discussion.php admin page redirected. * * @since 0.4.0 - * @since 0.5.0 Added the $args paramenter. + * @since 0.5.0 Added the $args parameter. * @param array|bool $post_types_with_feature an array of post types support this feature or false if none. * @param array $args the arguments passed to get_post_types. * @return array|bool A list of post type names that support the featured or false if nothing found. */ return apply_filters( "dwpb_post_types_supporting_{$feature}", $post_types_with_feature, $args ); - } /** @@ -136,7 +134,7 @@ function dwpb_post_types_with_tax( $taxonomy, $args = array(), $output = 'names' * * @since 0.4.0 * @param mixed $null Null for no override, otherwise pass an array of post type slugs. - * @param string|object $taxonomy The curent taxonomy slug. + * @param string|object $taxonomy The current taxonomy slug. * @param array|bool $post_types_with_tax An array of post types use this taxonomy or false if none. * @param array $args An array of key => value arguments to match against the post type objects. Default empty array. * @param string $output The type of output to return, either 'names' or 'objects'. @@ -153,5 +151,4 @@ function dwpb_post_types_with_tax( $taxonomy, $args = array(), $output = 'names' } else { return $post_types_with_tax; } - } diff --git a/index.php b/index.php index 6bf756f..3c379e1 100644 --- a/index.php +++ b/index.php @@ -2,4 +2,3 @@ /** * Silence is golden. */ - diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1c4c88d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1411 @@ +{ + "name": "disable-blog", + "version": "0.5.4", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "disable-blog", + "version": "0.5.4", + "license": "GPL-2.0-or-later", + "devDependencies": { + "@types/node": "^18.0.0", + "@wordpress/env": "^5.0.0" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/file-exists/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@kwsites/file-exists/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "18.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", + "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wordpress/env": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-5.16.0.tgz", + "integrity": "sha512-zx6UO8PuJBrQ34cfeedK1HlGHLFaj7oWzTo9tTt+noB79Ttqc4+a0lYwDqBLLJhlHU+cWgcyOP2lB6TboXH0xA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.22.2", + "extract-zip": "^1.6.7", + "got": "^11.8.5", + "inquirer": "^7.1.0", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^3.0.2", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "bin": { + "wp-env": "bin/wp-env" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/docker-compose": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", + "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-git": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.21.0.tgz", + "integrity": "sha512-oTzw9248AF5bDTMk9MrxsRzEzivMlY+DWH0yWS4VYpMhNLhDWnN06pCtaUyPnqv/FpsdeNmRqmZugMABHRPdDA==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..723ed3d --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "disable-blog", + "version": "0.5.4", + "description": "A comprehensive WordPress plugin to disable the blog-related functionality.", + "author": "Joshua David Nelson", + "license": "GPL-2.0-or-later", + "homepage": "https://disable.blog/", + "repository": { + "type": "git", + "url": "git@github.com:joshuadavidnelson/disable-blog.git" + }, + "scripts": { + "env": "wp-env", + "env:start": "wp-env start", + "env:stop": "wp-env stop" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "@wordpress/env": "^5.0.0" + } +} diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 9d14e43..d089034 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -18,8 +18,6 @@ parameters: # errors we don't care about. - '#^Property Disable_Blog_Public::\$plugin_name is never read, only written\.#' - '#^Property Disable_Blog_Public::\$version is never read, only written\.#' - - '#^Property Disable_Blog_Integrations::\$plugin_name is never read, only written\.#' - - '#^Property Disable_Blog_Integrations::\$version is never read, only written\.#' # Implode is correctly used in get_comments_count for supported PHP versions of this plugin. - '#^Parameter \#2 \$array of function implode expects array\, array\ given\.#' - '#^Constant DWPB_URL not found\.#' diff --git a/readme.txt b/readme.txt index 6718da1..7ccb5a2 100644 --- a/readme.txt +++ b/readme.txt @@ -2,10 +2,10 @@ Contributors: joshuadnelson Donate link: https://joshuadnelson.com/donate/ Tags: remove blog, disable blog, disable settings, disable blogging, disable feeds, posts, feeds, disable rest api, disable xml-rpc, disable author archives -Requires at least: 4.0 +Requires at least: 5.3 Requires PHP: 7.4 -Tested up to: 6.2 -Stable tag: 0.5.3 +Tested up to: 6.4.2 +Stable tag: 0.5.4 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -15,7 +15,7 @@ All the power of WordPress, without a blog. Build a blog-less WordPress site. -Disable Blog is a comprehensive plugin to disable the built-in blogging functionality on your site. You'll be free to use pages and custom post types without the burden of a blog. +Disable Blog is a comprehensive plugin to disable the built-in blogging functionality on your site. You'll be free to use pages and custom post types without a blog. The blog is "disabled" when the plugin is activated, which removes support for the core 'post' type, hides blog-related admin pages/settings, and redirects urls on both the public and admin portions of the site. Refer to the [GitHub readme file](https://github.com/joshuadavidnelson/disable-blog/#how-does-this-plugin-work) for a detailed functionality list. @@ -87,6 +87,16 @@ There are numerous filters available to change the way this plugin works. Refer == Changelog == += 0.5.4 = +- Tested up to WordPress 6.4.2. +- Bump minimum WordPress version to 5.3, aligning with minimum PHP support. +- Test to PHP 8.2. +- Update Github actions. +- Add Code Standard fixer Github Action, h/t @szepeviktor +- Fix coding standards and a bunch of typos, h/t @szepeviktor +- Increase accuracy of CSS selector used to hide blog related items in Settings > Reading, closes [#69](https://github.com/joshuadavidnelson/disable-blog/issues/69) +- Add `.wp-env.json` for local development. + = 0.5.3 = - Fix `typeof` typo in `disable-blog-customizer.js` from 0.5.2 updates. - Fix uninstall error to allow for the plugin to be deleted correctly. @@ -147,7 +157,7 @@ There are numerous filters available to change the way this plugin works. Refer **Improvements/Updates** -- Update admin filters to a common format and removing redundent filters. Filter changes include: +- Update admin filters to a common format and removing redundant filters. Filter changes include: - New filter: `dwpb_redirect_admin_url` filters the final url used in admin redirects. - `dwpb_redirect_admin` only accepts 1 parameter, the previous version accepted 3 (dropping `$redirect_url` & `$current_url`). - `dwpb_redirect_admin_edit_post` is now `dwpb_redirect_admin_edit`. @@ -156,7 +166,7 @@ There are numerous filters available to change the way this plugin works. Refer - `dwpb_redirect_edit_tax` has been removed. Use `dwpb_redirect_admin_edit_tags` or `dwpb_redirect_admin_term` instead, depending on the context. - `dwpb_redirect_edit_comments` has been removed. use `dwpb_redirect_admin_edit_comments` instead. - `dwpb_redirect_options_discussion` has been removed. Use `dwpb_redirect_admin_options_discussion` instead. - - The filter `dwpb_redirect_admin_options_writing` that would pass a boolean to toggle off the options writing page has been remaned `dwpb_remove_options_writing` and must be passed with `true` in order to have the page redirect _and_ the admin menu item removed. By default the value filtered is false and the options Writing page does not go away, as numerous other plugins use this page for non-blog related settings. Now `dwpb_redirect_admin_options_writing` is used to filter the redirect url itself, replacing the previously named `dwpb_redirect_options_writing` filter. + - The filter `dwpb_redirect_admin_options_writing` that would pass a boolean to toggle off the options writing page has been remained `dwpb_remove_options_writing` and must be passed with `true` in order to have the page redirect _and_ the admin menu item removed. By default the value filtered is false and the options Writing page does not go away, as numerous other plugins use this page for non-blog related settings. Now `dwpb_redirect_admin_options_writing` is used to filter the redirect url itself, replacing the previously named `dwpb_redirect_options_writing` filter. - `dwpb_redirect_options_tools` has been removed. Use `dwpb_redirect_admin_options_tools` instead. - New filter: `dwpb_disabled_xmlpc_methods` (see above). - New filter: `dwpb_author_archive_post_types` (see above). @@ -288,6 +298,16 @@ A bunch of stuff: == Upgrade Notice == += 0.5.4 = +- Tested up to WordPress 6.4.2. +- Bump minimum WordPress version to 5.3, aligning with minimum PHP support. +- Test to PHP 8.2. +- Update Github actions. +- Add Code Standard fixer Github Action, h/t @szepeviktor +- Fix coding standards and a bunch of typos, h/t @szepeviktor +- Increase accuracy of CSS selector used to hide blog related items in Settings > Reading, closes [#69](https://github.com/joshuadavidnelson/disable-blog/issues/69) +- Add `.wp-env.json` for local development. + = 0.5.3 = - Fix `typeof` typo in `disable-blog-customizer.js` from 0.5.2 updates. - Fix uninstall error to allow for the plugin to be deleted correctly. diff --git a/tests/bootstrap.php b/tests/bootstrap.php index d7bc182..edd3428 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,6 +1,6 @@