: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
* @author OnTheGo Systems
class WPML_Requirements {
private $active_plugins = array();
private $disabled_plugins = array();
private $missing_requirements = array();
private $plugins = array(
'wpml-media-translation' => array(
'name' => 'WPML Media Translation',
'wpml-string-translation' => array(
'name' => 'WPML String Translation',
'wpml-translation-management' => array(
'name' => 'WPML Translation Management',
'woocommerce-multilingual' => array(
'name' => 'WooCommerce Multilingual',
'url' => 'https://wpml.org/download/woocommerce-multilingual/',
'gravityforms-multilingual' => array(
'name' => 'GravityForms Multilingual',
'url' => 'https://wpml.org/download/gravityforms-multilingual/',
'buddypress-multilingual' => array(
'name' => 'BuddyPress Multilingual',
'url' => 'https://wpml.org/download/buddypress-multilingual/',
'wp-seo-multilingual' => array(
'name' => 'Yoast SEO Multilingual',
'url' => 'https://wpml.org/download/yoast-seo-multilingual/',
private $modules = array(
WPML_Integrations::SCOPE_WP_CORE => array(
'url' => 'https://wpml.org/?page_id=2909360&utm_source=wpmlplugin&utm_campaign=gutenberg&utm_medium=translation-editor&utm_term=translating-content-created-using-gutenberg-editor',
'requirements_class' => 'WPML_Integration_Requirements_Block_Editor',
'page-builders' => array(
'url' => 'https://wpml.org/?page_id=1129854',
'wpml-string-translation',
'wpml-translation-management',
'woocommerce-multilingual',
'wpml-translation-management',
'wpml-string-translation',
'gravityforms-multilingual',
'wpml-string-translation',
'wpml-translation-management',
'buddypress-multilingual',
'wpml-string-translation',
'elementor-plugin' => array(
'wpml-string-translation',
'wordpress-seo' => array(
* WPML_Requirements constructor.
public function __construct() {
if ( function_exists( 'get_plugins' ) ) {
$installed_plugins = get_plugins();
foreach ( $installed_plugins as $plugin_file => $plugin_data ) {
$plugin_slug = $this->get_plugin_slug( $plugin_data );
if ( is_plugin_active( $plugin_file ) ) {
$this->active_plugins[ $plugin_slug ] = $plugin_data;
$this->disabled_plugins[ $plugin_slug ] = $plugin_file;
public function is_plugin_active( $plugin_slug ) {
return array_key_exists( $plugin_slug, $this->active_plugins );
* @param array $plugin_data
public function get_plugin_slug( array $plugin_data ) {
if ( array_key_exists( 'Plugin Slug', $plugin_data ) && $plugin_data['Plugin Slug'] ) {
$plugin_slug = $plugin_data['Plugin Slug'];
} elseif ( array_key_exists( 'TextDomain', $plugin_data ) && $plugin_data['TextDomain'] ) {
$plugin_slug = $plugin_data['TextDomain'];
} elseif ( array_key_exists( 'Name', $plugin_data ) && $plugin_data['Name'] ) {
$plugin_slug = $plugin_data['Name'];
public function get_missing_requirements() {
return $this->missing_requirements;
public function get_requirements( $type, $slug ) {
$missing_plugins = $this->get_missing_plugins_for_type( $type, $slug );
if ( $missing_plugins ) {
foreach ( $this->get_components_requirements_by_type( $type, $slug ) as $plugin_slug ) {
$requirement = $this->get_plugin_data( $plugin_slug );
$requirement['missing'] = false;
if ( in_array( $plugin_slug, $missing_plugins, true ) ) {
$requirement['missing'] = true;
if ( array_key_exists( $plugin_slug, $this->disabled_plugins ) ) {
$requirement['disabled'] = true;
$requirement['plugin_file'] = $this->disabled_plugins[ $plugin_slug ];
$requirement['activation_nonce'] = wp_create_nonce( 'activate_' . $this->disabled_plugins[ $plugin_slug ] );
$this->missing_requirements[] = $requirement;
$requirements[] = $requirement;
function get_plugin_data( $slug ) {
if ( array_key_exists( $slug, $this->plugins ) ) {
return $this->plugins[ $slug ];
private function get_missing_plugins_for_type( $type, $slug ) {
$requirements_keys = $this->get_components_requirements_by_type( $type, $slug );
$active_plugins_keys = array_keys( $this->active_plugins );
return array_diff( $requirements_keys, $active_plugins_keys );
private function get_components() {
return apply_filters( 'wpml_requirements_components', $this->modules );
private function get_components_by_type( $type, $slug ) {
$components = $this->get_components();
if ( array_key_exists( $type, $components ) ) {
return $components[ $type ];
if ( array_key_exists( $slug, $components ) ) {
return $components[ $slug ];
private function get_components_requirements_by_type( $type, $slug ) {
$components_requirements = $this->get_components_by_type( $type, $slug );
if ( array_key_exists( 'requirements', $components_requirements ) ) {
$requirements = $components_requirements['requirements'];
} elseif ( array_key_exists( 'requirements_class', $components_requirements ) ) {
$class = $components_requirements['requirements_class'];
/** @var IWPML_Integration_Requirements_Module $requirement_module */
$requirement_module = new $class( $this );
$requirements = $requirement_module->get_requirements();
} catch ( Exception $e ) {}