header = $header; } /** * Return if plugins is compatible or not. * * @param Version $version * @param array $plugins_names * * @return array * @throws \Exception */ public function check( Version $version, array $plugins_names ) { return ( new Collection( $plugins_names ) ) ->map_with_keys( function ( $plugin_name ) use ( $version ) { return [ $plugin_name => $this->is_compatible( $version, $plugin_name ) ]; } ) ->all(); } /** * Check single plugin if is compatible or not. * * @param Version $version * @param $plugin_name * * @return string * @throws \Exception */ private function is_compatible( Version $version, $plugin_name ) { $plugins = Plugin::$instance->wp->get_plugins(); if ( ! isset( $plugins[ $plugin_name ] ) ) { return self::PLUGIN_NOT_EXISTS; } $requested_plugin = $plugins[ $plugin_name ]; if ( empty( $requested_plugin[ $this->header ] ) ) { return self::HEADER_NOT_EXISTS; } if ( ! Version::is_valid_version( $requested_plugin[ $this->header ] ) ) { return self::INVALID_VERSION; } if ( $version->compare( '>', $requested_plugin[ $this->header ], Version::PART_MAJOR_2 ) ) { return self::INCOMPATIBLE; } return self::COMPATIBLE; } }