Files
2026-04-28 15:13:50 +02:00

119 lines
3.1 KiB
PHP

<?php
namespace AIOSEO\Plugin\Pro\Traits;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Contains common update methods.
*
* @since 4.4.7
*/
trait Updates {
/**
* Source of notifications content.
*
* @since 4.0.0
* @version 4.4.7 Moved to trait.
*
* @var string
*/
public $baseUrl = 'https://licensing.aioseo.com/v1/';
/**
* Validates the download URL before WP downloads the package.
*
* @since 4.4.7
*
* @param array $options The options.
* @return void
*/
public function validateDownloadUrl( $options ) {
// Check for the slug inside the temp_backup data.
// If no temp_backup data is present, bail because then we're installing a new plugin instead of doing an update.
$slug = $options['hook_extra']['temp_backup']['slug'] ?? '';
if ( ! $slug ) {
return $options;
}
// First, check if we're dealing with one of our plugins.
$slug = strtolower( $slug );
if ( ! preg_match( '/^aioseo|^all-in-one-seo-pack-pro/', (string) $slug ) ) {
return $options;
}
// Now, send a HEAD request to see if the download URL hasn't expired.
$response = wp_remote_head( $options['package'] );
if ( is_wp_error( $response ) ) {
// If a WP error occurred, we'll just bail out.
return $options;
}
if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
return $options;
}
// Check if a refresh has been attempted in the last hour to prevent overloading the remote server.
$cacheKey = 'refresh_download_url_' . $slug;
$downloadUrl = aioseo()->core->cache->get( $cacheKey );
if ( $downloadUrl ) {
$options['package'] = $downloadUrl;
return $options;
}
// If the response code isn't 200, we'll refresh the download URL.
switch ( $slug ) {
case 'all-in-one-seo-pack-pro':
$args = [
'license' => aioseo()->license->getLicenseKey(),
'domain' => aioseo()->helpers->getSiteDomain( true ),
'sku' => $slug,
'version' => aioseo()->version,
'php_version' => PHP_VERSION,
'wp_version' => get_bloginfo( 'version' )
];
$response = aioseo()->helpers->wpRemotePost( $this->getUrl() . 'update/', [
'timeout' => 30,
'body' => wp_json_encode( $args )
] );
$updateInfo = json_decode( wp_remote_retrieve_body( $response ) );
$downloadUrl = $options['package'];
if ( is_object( $updateInfo ) && ! empty( $updateInfo->package ) ) {
$downloadUrl = $updateInfo->package;
}
break;
default:
// If we don't find a specific slug, we'll assume it's an addon plugin.
$downloadUrl = aioseo()->addons->getDownloadUrl( $slug );
$downloadUrl = $downloadUrl ? $downloadUrl : $options['package'];
}
aioseo()->core->cache->update( $cacheKey, $downloadUrl, 45 * MINUTE_IN_SECONDS );
$options['package'] = $downloadUrl;
return $options;
}
/**
* Get the URL to check licenses.
*
* @since 4.0.0
* @version 4.4.7 Moved to trait.
*
* @return string The URL.
*/
public function getUrl() {
if ( defined( 'AIOSEO_LICENSING_URL' ) ) {
return AIOSEO_LICENSING_URL;
}
return $this->baseUrl;
}
}