are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $auto_updated_plugins ) ) {
return \sprintf(
'%s',
\sprintf(
/* Translators: %1$s resolves to Yoast SEO. */
\esc_html__( 'Auto-updates are enabled based on this setting for %1$s.', 'wordpress-seo' ),
'Yoast SEO'
)
);
}
return \sprintf(
'%s',
\sprintf(
/* Translators: %1$s resolves to Yoast SEO. */
\esc_html__( 'Auto-updates are disabled based on this setting for %1$s.', 'wordpress-seo' ),
'Yoast SEO'
)
);
}
/**
* Handles the situation where the auto_update_plugins option did not previously exist.
*
* @param string $option The name of the option that is being created.
* @param array|mixed $value The new (and first) value of the option that is being created.
*
* @return void
*/
public function call_toggle_auto_updates_with_empty_array( $option, $value ) {
if ( $option !== 'auto_update_plugins' ) {
return;
}
$this->toggle_auto_updates_for_add_ons( $option, $value, [] );
}
/**
* Enables premium auto updates when free are enabled and the other way around.
*
* @param string $option The name of the option that has been updated.
* @param array $new_value The new value of the `auto_update_plugins` option.
* @param array $old_value The old value of the `auto_update_plugins` option.
*
* @return void
*/
public function toggle_auto_updates_for_add_ons( $option, $new_value, $old_value ) {
if ( $option !== 'auto_update_plugins' ) {
// If future versions of WordPress change this filter's behavior, our behavior should stay consistent.
return;
}
if ( ! \is_array( $old_value ) || ! \is_array( $new_value ) ) {
return;
}
$auto_updates_are_enabled = $this->are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $new_value );
$auto_updates_were_enabled = $this->are_auto_updates_enabled( self::WPSEO_FREE_PLUGIN_ID, $old_value );
if ( $auto_updates_are_enabled === $auto_updates_were_enabled ) {
// Auto-updates for Yoast SEO have stayed the same, so have neither been enabled or disabled.
return;
}
$auto_updates_have_been_enabled = $auto_updates_are_enabled && ! $auto_updates_were_enabled;
if ( $auto_updates_have_been_enabled ) {
$this->enable_auto_updates_for_addons( $new_value );
return;
}
else {
$this->disable_auto_updates_for_addons( $new_value );
return;
}
if ( ! $auto_updates_are_enabled ) {
return;
}
$auto_updates_have_been_removed = false;
foreach ( self::ADD_ON_PLUGIN_FILES as $addon ) {
if ( ! $this->are_auto_updates_enabled( $addon, $new_value ) ) {
$auto_updates_have_been_removed = true;
break;
}
}
if ( $auto_updates_have_been_removed ) {
$this->enable_auto_updates_for_addons( $new_value );
}
}
/**
* Trigger a change in the auto update detection whenever a new Yoast addon is activated.
*
* @param string $plugin The plugin that is activated.
*
* @return void
*/
public function maybe_toggle_auto_updates_for_new_install( $plugin ) {
$not_a_yoast_addon = ! \in_array( $plugin, self::ADD_ON_PLUGIN_FILES, true );
if ( $not_a_yoast_addon ) {
return;
}
$enabled_auto_updates = \get_site_option( 'auto_update_plugins' );
$this->toggle_auto_updates_for_add_ons( 'auto_update_plugins', $enabled_auto_updates, [] );
}
/**
* Enables auto-updates for all addons.
*
* @param string[] $auto_updated_plugins The current list of auto-updated plugins.
*
* @return void
*/
protected function enable_auto_updates_for_addons( $auto_updated_plugins ) {
$plugins = \array_unique( \array_merge( $auto_updated_plugins, self::ADD_ON_PLUGIN_FILES ) );
\update_site_option( 'auto_update_plugins', $plugins );
}
/**
* Disables auto-updates for all addons.
*
* @param string[] $auto_updated_plugins The current list of auto-updated plugins.
*
* @return void
*/
protected function disable_auto_updates_for_addons( $auto_updated_plugins ) {
$plugins = \array_values( \array_diff( $auto_updated_plugins, self::ADD_ON_PLUGIN_FILES ) );
\update_site_option( 'auto_update_plugins', $plugins );
}
/**
* Checks whether auto updates for a plugin are enabled.
*
* @param string $plugin_id The plugin ID.
* @param array $auto_updated_plugins The array of auto updated plugins.
*
* @return bool Whether auto updates for a plugin are enabled.
*/
protected function are_auto_updates_enabled( $plugin_id, $auto_updated_plugins ) {
if ( $auto_updated_plugins === false || ! \is_array( $auto_updated_plugins ) ) {
return false;
}
return \in_array( $plugin_id, $auto_updated_plugins, true );
}
}