versionParser = new VersionParser(); } /** * Set MediaWiki core version. * * @param string $coreVersion Current version of core * @return VersionChecker $this */ public function setCoreVersion( $coreVersion ) { try { $this->coreVersion = new Constraint( '==', $this->versionParser->normalize( $coreVersion ) ); $this->coreVersion->setPrettyString( $coreVersion ); } catch ( UnexpectedValueException $e ) { // Non-parsable version, don't fatal. } return $this; } /** * Check all given dependencies if they are compatible with the named * installed extensions in the $credits array. * * Example $extDependencies: * { * 'GoogleAPIClient' => { * 'MediaWiki' => '>= 1.25.0' * } * } * * @param array $extDependencies All extensions that depend on other ones * @return array */ public function checkArray( array $extDependencies ) { $errors = []; foreach ( $extDependencies as $extension => $dependencies ) { foreach ( $dependencies as $dependencyType => $values ) { switch ( $dependencyType ) { case ExtensionRegistry::MEDIAWIKI_CORE: $errors = array_merge( $errors, $this->handleMediaWikiDependency( $values, $extension ) ); break; default: throw new UnexpectedValueException( 'Dependency type ' . $dependencyType . ' unknown in ' . $extension ); } } } return $errors; } /** * Handle a dependency to MediaWiki core. It will check, if a MediaWiki version constraint was * set with self::setCoreVersion before this call (if not, it will return an empty array) and * checks the version constraint given against it. * * @param string $constraint The required version constraint for this dependency * @param string $checkedExt The Extension, which depends on this dependency * @return array An empty array, if MediaWiki version is compatible with $constraint, an array * with an error message, otherwise. */ private function handleMediaWikiDependency( $constraint, $checkedExt ) { if ( $this->coreVersion === false ) { // Couldn't parse the core version, so we can't check anything return []; } // if the installed and required version are compatible, return an empty array if ( $this->versionParser->parseConstraints( $constraint ) ->matches( $this->coreVersion ) ) { return []; } // otherwise mark this as incompatible. return [ "{$checkedExt} is not compatible with the current " . "MediaWiki core (version {$this->coreVersion->getPrettyString()}), it requires: " . $constraint . '.' ]; } }