sprintf( __( '%1$s Automatic Updates', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ), 'test' => [ $this, 'testCheckAutoUpdates' ], ]; $tests['direct']['aioseo_license'] = [ 'label' => __( 'AIOSEO License', 'aioseo-pro' ), 'test' => [ $this, 'testCheckLicense' ], ]; $tests['async']['aioseo_connection'] = [ 'label' => __( 'AIOSEO Connection', 'aioseo-pro' ), 'test' => 'aioseo_test_connection', ]; return $tests; } /** * Tests that run to check if autoupdates are enabled. * * @since 4.0.12 * * @return array A results array for the test. */ public function testCheckAutoUpdates() { $label = __( 'Your website is receiving automatic updates', 'aioseo-pro' ); $status = 'good'; $actions = ''; $description = sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( '%1$s automatic updates are enabled and you are getting the latest features, bugfixes, and security updates as they are released.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $updatesOption = aioseo()->options->advanced->autoUpdates; if ( 'minor' === $updatesOption ) { $label = __( 'Your website is receiving minor updates', 'aioseo-pro' ); $description = sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( '%1$s minor updates are enabled and you are getting the latest bugfixes and security updates, but not major features.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); } if ( 'none' === $updatesOption ) { $status = 'recommended'; $label = __( 'Automatic updates are disabled', 'aioseo-pro' ); $description = sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( '%1$s automatic updates are disabled. We recommend enabling automatic updates so you can get access to the latest features, bugfixes, and security updates as they are released.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $actions = $this->actionLink( add_query_arg( 'page', 'aioseo-settings#/advanced', admin_url( 'admin.php' ) ), __( 'Update Settings', 'aioseo-pro' ) ); } return $this->result( 'aioseo_automatic_updates', $status, $label, $description, $actions ); } /** * Check if the license is properly set up. * * @since 4.0.0 * * @return array A results array for the test. */ public function testCheckLicense() { $actions = ''; $status = 'good'; $label = sprintf( // Translators: 1 - The plugin name ("All in One SEO"). __( 'Your %1$s license key is valid.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $description = sprintf( // Translators: 1 - The license type. __( 'Your license key type for this site is %1$s.', 'aioseo-pro' ), '' . ucfirst( aioseo()->license->getLicenseLevel() ?? __( 'invalid', 'aioseo-pro' ) ) . '' ); if ( ! aioseo()->license->isActive() ) { // Translators: 1 - The plugin name ("All in One SEO"). $label = sprintf( __( '%1$s is not licensed', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $status = 'critical'; // Translators: 1 - The plugin name ("All in One SEO"). $description = sprintf( __( '%1$s is not licensed which means you can\'t access automatic updates, and other advanced features', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $actions = sprintf( '
', add_query_arg( 'page', 'aioseo-settings', admin_url( 'admin.php' ) ), __( 'Add License now', 'aioseo-pro' ) ); } return $this->result( 'aioseo_license', $status, $label, $description, $actions ); } /** * Checks if there are errors communicating with aioseo.com. * * @since 4.0.0 * * @return array A results array for the test. */ public function testCheckConnection() { $label = __( 'Can connect to aioseo.com correctly', 'aioseo-pro' ); $status = 'good'; // Translators: 1 - The plugin name ("All in One SEO"). $description = sprintf( __( 'The %1$s API is reachable and no connection issues have been detected.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $url = aioseo()->license->getUrl() . 'ping/'; $response = wp_remote_get( $url, [ 'timeout' => 10, 'headers' => aioseo()->helpers->getApiHeaders(), 'user-agent' => aioseo()->helpers->getApiUserAgent(), 'body' => '' ] ); if ( is_wp_error( $response ) || $response['response']['code'] < 200 || $response['response']['code'] > 300 ) { $status = 'critical'; // Translators: 1 - The plugin name ("All in One SEO"). $label = sprintf( __( 'The %1$s server is not reachable.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ); $description = __( 'Your server is blocking external requests to aioseo.com, please check your firewall settings or contact your host for more details.', 'aioseo-pro' ); if ( is_wp_error( $response ) ) { // Translators: 1 - The description of the error. $description .= ' ' . sprintf( __( 'Error message: %1$s', 'aioseo-pro' ), $response->get_error_message() ); } } wp_send_json_success( [ 'label' => $label, 'status' => $status, 'badge' => [ 'label' => AIOSEO_PLUGIN_SHORT_NAME, 'color' => 'good' === $status ? 'blue' : 'red', ], 'description' => $description, 'test' => 'aioseo_connection' ] ); } /** * Checks if the plugin should be updated. * * @since 4.7.2 * * @return bool Whether the plugin should be updated. */ public function shouldUpdate() { $updates = new Updates( [ 'pluginSlug' => 'all-in-one-seo-pack-pro', 'pluginPath' => plugin_basename( AIOSEO_FILE ), 'version' => AIOSEO_VERSION, 'key' => aioseo()->sensitiveOptions->get( 'licenseKey' ) ] ); $update = $updates->checkForUpdates(); return is_object( $update ) && isset( $update->new_version ) && version_compare( AIOSEO_VERSION, $update->new_version, '<' ); } /** * Checks whether the required settings for our schema markup are set. * * @since 4.0.0 * * @return array The test result. */ public function testCheckPluginUpdate() { if ( $this->shouldUpdate() ) { return $this->result( 'aioseo_plugin_update', 'critical', sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( '%1$s needs to be updated', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ), sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( 'An update is available for %1$s. Upgrade to the latest version to receive all the latest features, bug fixes and security improvements.', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ), $this->actionLink( admin_url( 'plugins.php' ), __( 'Go to Plugins', 'aioseo-pro' ) ) ); } return $this->result( 'aioseo_plugin_update', 'good', sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( '%1$s is updated to the latest version', 'aioseo-pro' ), AIOSEO_PLUGIN_SHORT_NAME ), __( 'Fantastic! By updating to the latest version, you have access to all the latest features, bug fixes and security improvements.', 'aioseo-pro' ) ); } /** * Returns a list of nofollowed content. * * @since 4.0.0 * * @return array $nofollowed A list of nofollowed content. */ protected function nofollowed() { $nofollowed = parent::nofollowed(); foreach ( aioseo()->helpers->getPublicPostTypes( false, true ) as $postType ) { if ( aioseo()->dynamicOptions->searchAppearance->archives->has( $postType['name'] ) && ! aioseo()->dynamicOptions->searchAppearance->archives->{ $postType['name'] }->advanced->robotsMeta->default && aioseo()->dynamicOptions->searchAppearance->archives->{ $postType['name'] }->advanced->robotsMeta->nofollow ) { $nofollowed[] = $postType['label'] . ' ' . __( 'Archives', 'aioseo-pro' ) . ' (' . $postType['name'] . ')'; } } return $nofollowed; } /** * Returns a list of noindexed content. * * @since 4.0.0 * * @return array $noindexed A list of noindexed content. */ protected function noindexed() { $noindexed = parent::noindexed(); foreach ( aioseo()->helpers->getPublicPostTypes( false, true ) as $postType ) { if ( aioseo()->dynamicOptions->searchAppearance->archives->has( $postType['name'] ) && ! aioseo()->dynamicOptions->searchAppearance->archives->{ $postType['name'] }->advanced->robotsMeta->default && aioseo()->dynamicOptions->searchAppearance->archives->{ $postType['name'] }->advanced->robotsMeta->noindex ) { $noindexed[] = $postType['label'] . ' ' . __( 'Archives', 'aioseo-pro' ) . ' (' . $postType['name'] . ')'; } } return $noindexed; } }