Files
wordpress/wp-admin/press-this.php
Weston Ruter bd3f20e8c7 Build/Test Tools: Integrate PHPStan into the core development workflow.
This change introduces PHPStan static analysis configured at [https://phpstan.org/user-guide/rule-levels rule level 0], which includes: "basic checks, unknown classes, unknown functions, unknown methods called on `$this`, wrong number of arguments passed to those methods and functions, always undefined variables". Contributors may elect for a higher PHPStan rule level by creating a `phpstan.neon` which overrides `phpstan.neon.dist`.

* Fix various PHPStan level 0 errors by adding `@phpstan-ignore` comments, updating PHPDoc types, and adding missing return values.
* Remove existing `@phpstan-ignore` comments that are now obsolete or inapplicable for level 0.
* Add a new GitHub Actions workflow for PHPStan Static Analysis. Reports are currently provided as warnings with inline annotations in pull requests and do not fail the build.
* Add a `phpstan` Grunt task and include it in the `precommit:php` task to run before `phpunit`.
* Introduce a `typecheck:php` npm script and a `composer phpstan` script to run analysis in local development environments.
* Add documentation for PHPStan usage in `tests/phpstan/README.md`.

Developed in https://github.com/WordPress/wordpress-develop/pull/10419

Props justlevine, westonruter, johnbillion, desrosj, SirLouen, dmsnell, oglekler, joehoyle, jorbin.
See #64238, #63268, #52217, #51423.
Fixes #61175.

Built from https://develop.svn.wordpress.org/trunk@61699


git-svn-id: http://core.svn.wordpress.org/trunk@61007 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2026-02-20 02:25:46 +00:00

88 lines
2.4 KiB
PHP

<?php
/**
* Press This Display and Handler.
*
* @package WordPress
* @subpackage Press_This
*/
define( 'IFRAME_REQUEST', true );
/** WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';
function wp_load_press_this() {
$plugin_slug = 'press-this';
$plugin_file = 'press-this/press-this-plugin.php';
if ( ! current_user_can( 'edit_posts' ) || ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
wp_die(
__( 'Sorry, you are not allowed to create posts as this user.' ),
__( 'You need a higher level of permission.' ),
403
);
} elseif ( is_plugin_active( $plugin_file ) ) {
include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; // @phpstan-ignore include.fileNotFound
$wp_press_this = new WP_Press_This_Plugin(); // @phpstan-ignore class.notFound
$wp_press_this->html();
} elseif ( current_user_can( 'activate_plugins' ) ) {
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) ) {
$url = wp_nonce_url(
add_query_arg(
array(
'action' => 'activate',
'plugin' => $plugin_file,
'from' => 'press-this',
),
admin_url( 'plugins.php' )
),
'activate-plugin_' . $plugin_file
);
$action = sprintf(
'<a href="%1$s" aria-label="%2$s">%2$s</a>',
esc_url( $url ),
__( 'Activate Press This' )
);
} else {
if ( is_main_site() ) {
$url = wp_nonce_url(
add_query_arg(
array(
'action' => 'install-plugin',
'plugin' => $plugin_slug,
'from' => 'press-this',
),
self_admin_url( 'update.php' )
),
'install-plugin_' . $plugin_slug
);
$action = sprintf(
'<a href="%1$s" class="install-now" data-slug="%2$s" data-name="%2$s" aria-label="%3$s">%3$s</a>',
esc_url( $url ),
esc_attr( $plugin_slug ),
_x( 'Install Now', 'plugin' )
);
} else {
$action = sprintf(
/* translators: %s: URL to Press This bookmarklet on the main site. */
__( 'Press This is not installed. Please install Press This from <a href="%s">the main site</a>.' ),
get_admin_url( get_current_network_id(), 'press-this.php' )
);
}
}
wp_die(
__( 'The Press This plugin is required.' ) . '<br />' . $action,
__( 'Installation Required' ),
200
);
} else {
wp_die(
__( 'Press This is not available. Please contact your site administrator.' ),
__( 'Installation Required' ),
200
);
}
}
wp_load_press_this();