From: Jeroen De Dauw Date: Sun, 15 Aug 2010 09:40:16 +0000 (+0000) Subject: Moved in repository interaction classes from Deployment so it's possible to use them... X-Git-Tag: 1.31.0-rc.0~35482 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/operations/recherche.php?a=commitdiff_plain;h=b6cef6601daa23816170c135c005d2289dd8c42c;p=lhc%2Fweb%2Fwiklou.git Moved in repository interaction classes from Deployment so it's possible to use them in the new installer for update detection --- diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index a42398a325..6d70863ecf 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -55,6 +55,7 @@ $wgAutoloadLocalClasses = array( 'DBABagOStuff' => 'includes/BagOStuff.php', 'DependencyWrapper' => 'includes/CacheDependency.php', 'DiffHistoryBlob' => 'includes/HistoryBlob.php', + 'DistributionRepository' => 'includes/DistributionRepository.php', 'DjVuImage' => 'includes/DjVuImage.php', 'DoubleReplacer' => 'includes/StringUtils.php', 'DublinCoreRdf' => 'includes/Metadata.php', @@ -168,6 +169,7 @@ $wgAutoloadLocalClasses = array( 'MWNamespace' => 'includes/Namespace.php', 'OldChangesList' => 'includes/ChangesList.php', 'OutputPage' => 'includes/OutputPage.php', + 'PackageRepository' => 'includes/PackageRepository.php', 'PageQueryPage' => 'includes/PageQueryPage.php', 'PageHistory' => 'includes/HistoryPage.php', 'PageHistoryPager' => 'includes/HistoryPage.php', diff --git a/includes/DistributionRepository.php b/includes/DistributionRepository.php new file mode 100644 index 0000000000..197e64030b --- /dev/null +++ b/includes/DistributionRepository.php @@ -0,0 +1,186 @@ +location?format=json&action=query&list=extensions&dstfilter=$filterType&dstvalue=$filterValue&dststate=$states", + 'default', + array( 'sslVerifyHost' => true, 'sslVerifyCert' => true ) + ); + + $extensions = array(); + + if ( $response !== false ) { + $response = FormatJson::decode( $response ); + + if ( property_exists( $response, 'query' ) && property_exists( $response->query, 'extensions' ) ) { + $extensions = $response->query->extensions; + } + } + + return $extensions; + } + + /** + * @see PackageRepository::extensionHasUpdate + * + * @since 0.1 + */ + public function extensionHasUpdate( $extensionName, $currentVersion ) { + global $wgRepositoryPackageStates; + + $extensionName = urlencode( $extensionName ); + $currentVersion = urlencode( $currentVersion ); + $states = urlencode( implode( '|', $wgRepositoryPackageStates ) ); + + $response = Http::get( + "$this->location?format=json&action=updates&extensions=$extensionName;$currentVersion&state=$states", + 'default', + array( 'sslVerifyHost' => true, 'sslVerifyCert' => true ) + ); + + if ( $response === false ) { + return false; + } + + $response = FormatJson::decode( $response ); + + if ( property_exists( $response, 'extensions' ) && property_exists( $response->extensions, $extensionName ) ) { + return $response->extensions->$extensionName; + } + + return false; + } + + /** + * @see PackageRepository::coreHasUpdate + * + * @since 0.1 + */ + public function coreHasUpdate( $currentVersion ) { + global $wgRepositoryPackageStates; + + $currentVersion = urlencode( $currentVersion ); + $states = urlencode( implode( '|', $wgRepositoryPackageStates ) ); + + $response = Http::get( + "$this->location?format=json&action=updates&mediawiki=$currentVersion&state=$states", + 'default', + array( 'sslVerifyHost' => true, 'sslVerifyCert' => true ) + ); + + if ( $response === false ) { + return false; + } + + $response = FormatJson::decode( $response ); + + if ( property_exists( $response, 'mediawiki' ) ) { + return $response->mediawiki; + } + + return false; + } + + /** + * @see PackageRepository::installationHasUpdates + * + * @since 0.1 + */ + public function installationHasUpdates( $coreVersion, array $extensions ) { + global $wgRepositoryPackageStates; + + $coreVersion = urlencode( $coreVersion ); + $states = urlencode( implode( '|', $wgRepositoryPackageStates ) ); + + $extensionParams = array(); + + if ( count( $extensions ) > 0 ) { + foreach ( $extensions as $extensionName => $extensionVersion ) { + $extensionParams[] = urlencode( $extensionName ) . ';' . urlencode( $extensionVersion ); + } + + $extensionParams = '&extensions=' . urlencode( implode( '|', $extensionParams ) ); + } + + $response = Http::get( + "$this->location?format=json&action=updates&mediawiki=$coreVersion{$extensionParams}&state=$states", + 'default', + array( 'sslVerifyHost' => true, 'sslVerifyCert' => true ) + ); + + if ( $response === false ) { + return false; + } + + $response = FormatJson::decode( $response ); + + $updates = array(); + + if ( property_exists( $response, 'mediawiki' ) ) { + $updates['MediaWiki'] = $response->mediawiki; + } + + if ( property_exists( $response, 'extensions' ) ) { + foreach ( $extensions as $extensionName => $extensionVersion ) { + if ( property_exists( $response->extensions, $extensionName ) ) { + $updates[$extensionName] = $response->extensions->$extensionName; + } + } + } + + return count( $updates ) > 0 ? $updates : false; + } + +} \ No newline at end of file diff --git a/includes/PackageRepository.php b/includes/PackageRepository.php new file mode 100644 index 0000000000..da110ae634 --- /dev/null +++ b/includes/PackageRepository.php @@ -0,0 +1,95 @@ +location = $location; + } + +} \ No newline at end of file