diff --git a/composer.json b/composer.json index a5c6cea..d7ab9e7 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,9 @@ "sort-packages": true }, "require": { - "addwiki/mediawiki-api": "^2.0", + "addwiki/mediawiki-api-base": "dev-main", + "addwiki/mediawiki-api": "dev-main", + "addwiki/mediawiki-datamodel": "dev-main", "krinkle/intuition": "^2.0", "monolog/monolog": "^2.1", "symfony/console": "^5.0", diff --git a/composer.lock b/composer.lock index 3423be1..0debaf4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,42 +4,43 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5be7fb8e54d468f380d86dcb5257dd37", + "content-hash": "664c50a8dca6edb2e363fe2eaa8737d6", "packages": [ { "name": "addwiki/mediawiki-api", - "version": "2.8.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/addwiki/mediawiki-api.git", - "reference": "eee8f072aba0a2e9886f290a73b8e10eb83e0cfc" + "reference": "3406752464c8953eb73d383a1d497819b6f5a9ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/addwiki/mediawiki-api/zipball/eee8f072aba0a2e9886f290a73b8e10eb83e0cfc", - "reference": "eee8f072aba0a2e9886f290a73b8e10eb83e0cfc", + "url": "https://api.github.com/repos/addwiki/mediawiki-api/zipball/3406752464c8953eb73d383a1d497819b6f5a9ef", + "reference": "3406752464c8953eb73d383a1d497819b6f5a9ef", "shasum": "" }, "require": { - "addwiki/mediawiki-api-base": "^2.8", - "addwiki/mediawiki-datamodel": "^2.8", - "php": ">=7.3" + "addwiki/mediawiki-api-base": "^3.1", + "addwiki/mediawiki-datamodel": "^3.1", + "php": ">=7.4" }, "require-dev": { - "mediawiki/mediawiki-codesniffer": "~35.0", + "mediawiki/mediawiki-codesniffer": "~38.0", "monolog/monolog": "^1.23", "php-parallel-lint/php-parallel-lint": "^1.2", "phpunit/phpunit": "~9" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "3.1-dev" } }, "autoload": { "psr-4": { - "Mediawiki\\Api\\": "src/" + "Addwiki\\Mediawiki\\Api\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -49,6 +50,9 @@ "authors": [ { "name": "Addshore" + }, + { + "name": "Sam Wilson" } ], "description": "A MediaWiki API library", @@ -57,47 +61,50 @@ "mediawiki" ], "support": { - "source": "https://github.com/addwiki/mediawiki-api/tree/2.8.0" + "source": "https://github.com/addwiki/mediawiki-api/tree/main" }, - "time": "2021-02-16T19:46:17+00:00" + "time": "2022-06-03T07:34:35+00:00" }, { "name": "addwiki/mediawiki-api-base", - "version": "2.8.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/addwiki/mediawiki-api-base.git", - "reference": "d8eff31b54fd39d90eb14457e5ce478cfdf08394" + "reference": "0210265192b16927b691a16204ad3c63ccaa61da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/addwiki/mediawiki-api-base/zipball/d8eff31b54fd39d90eb14457e5ce478cfdf08394", - "reference": "d8eff31b54fd39d90eb14457e5ce478cfdf08394", + "url": "https://api.github.com/repos/addwiki/mediawiki-api-base/zipball/0210265192b16927b691a16204ad3c63ccaa61da", + "reference": "0210265192b16927b691a16204ad3c63ccaa61da", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~6.3|~7.0", + "guzzlehttp/guzzle": "~6.3||~7.0", "guzzlehttp/promises": "~1.0", - "php": ">=7.3", + "mediawiki/oauthclient": "^1.1", + "php": ">=7.4", "psr/log": "~1.0" }, "require-dev": { - "mediawiki/mediawiki-codesniffer": "~35.0", + "mediawiki/mediawiki-codesniffer": "~38.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpunit/phpunit": "~9" }, "suggest": { - "etsy/phan": "Allows running static analysis on the package (requires PHP 7+)" + "ext-dom": "Needed if you want to discover APIs using only page URLs", + "ext-simplexml": "Needed if you want to discover APIs using only page URLs" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "3.1-dev" } }, "autoload": { "psr-4": { - "Mediawiki\\Api\\": "src/" + "Addwiki\\Mediawiki\\Api\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -115,41 +122,42 @@ "mediawiki" ], "support": { - "source": "https://github.com/addwiki/mediawiki-api-base/tree/2.8.0" + "source": "https://github.com/addwiki/mediawiki-api-base/tree/main" }, - "time": "2021-02-16T19:46:17+00:00" + "time": "2022-06-03T07:34:30+00:00" }, { "name": "addwiki/mediawiki-datamodel", - "version": "2.8.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/addwiki/mediawiki-datamodel.git", - "reference": "1082c8cd947ca313d4f2b95f9b1dc2b2b492052a" + "reference": "7be2113540d3d629b8464b9e91e4a4789ba1dc35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/addwiki/mediawiki-datamodel/zipball/1082c8cd947ca313d4f2b95f9b1dc2b2b492052a", - "reference": "1082c8cd947ca313d4f2b95f9b1dc2b2b492052a", + "url": "https://api.github.com/repos/addwiki/mediawiki-datamodel/zipball/7be2113540d3d629b8464b9e91e4a4789ba1dc35", + "reference": "7be2113540d3d629b8464b9e91e4a4789ba1dc35", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=7.4" }, "require-dev": { - "mediawiki/mediawiki-codesniffer": "~35.0", + "mediawiki/mediawiki-codesniffer": "~38.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpunit/phpunit": "~9" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "3.1-dev" } }, "autoload": { "psr-4": { - "Mediawiki\\DataModel\\": "src/" + "Addwiki\\Mediawiki\\DataModel\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -166,9 +174,9 @@ "mediawiki" ], "support": { - "source": "https://github.com/addwiki/mediawiki-datamodel/tree/2.8.0" + "source": "https://github.com/addwiki/mediawiki-datamodel/tree/main" }, - "time": "2021-02-16T19:46:19+00:00" + "time": "2022-06-03T07:34:33+00:00" }, { "name": "guzzlehttp/guzzle", @@ -547,6 +555,66 @@ }, "time": "2022-10-08T04:40:34+00:00" }, + { + "name": "mediawiki/oauthclient", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/mediawiki-oauthclient-php.git", + "reference": "ace642e67b8292a5e351c50daca7d3f2b25fa4cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/mediawiki-oauthclient-php/zipball/ace642e67b8292a5e351c50daca7d3f2b25fa4cb", + "reference": "ace642e67b8292a5e351c50daca7d3f2b25fa4cb", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": ">=7.2.9", + "psr/log": "^1.0" + }, + "require-dev": { + "mediawiki/mediawiki-codesniffer": "37.0.0", + "mediawiki/minus-x": "1.1.1", + "php-parallel-lint/php-console-highlighter": "0.5.0", + "php-parallel-lint/php-parallel-lint": "1.3.0", + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "MediaWiki\\OAuthClient\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0-or-later" + ], + "authors": [ + { + "name": "Andy Smith", + "homepage": "http://termie.pbworks.com/w/page/20571888/AndySmith" + }, + { + "name": "Chris Steipp", + "email": "csteipp@wikimedia.org" + }, + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "PHP OAuth client for use with Wikipedia and other MediaWiki-based wikis running the OAuth extension", + "homepage": "https://www.mediawiki.org/wiki/oauthclient-php", + "support": { + "docs": "https://www.mediawiki.org/wiki/oauthclient-php", + "issues": "https://phabricator.wikimedia.org/tag/oauth/", + "source": "https://github.com/wikimedia/oauthclient-php/" + }, + "time": "2021-10-21T13:34:48+00:00" + }, { "name": "monolog/monolog", "version": "2.8.0", @@ -3796,7 +3864,11 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "addwiki/mediawiki-api-base": 20, + "addwiki/mediawiki-api": 20, + "addwiki/mediawiki-datamodel": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": [], diff --git a/src/Command/CommandBase.php b/src/Command/CommandBase.php index 19312c4..3b1b212 100644 --- a/src/Command/CommandBase.php +++ b/src/Command/CommandBase.php @@ -2,10 +2,12 @@ namespace Samwilson\MediaWikiCLI\Command; +use Addwiki\Mediawiki\Api\Client\Action\ActionApi; +use Addwiki\Mediawiki\Api\Client\Auth\AuthMethod; +use Addwiki\Mediawiki\Api\Client\Auth\UserAndPassword; +use Addwiki\Mediawiki\Api\Client\MediaWiki; use Exception; use Krinkle\Intuition\Intuition; -use Mediawiki\Api\ApiUser; -use Mediawiki\Api\MediawikiApi; use Monolog\Handler\StreamHandler; use Monolog\Logger; use Psr\Log\LoggerInterface; @@ -108,20 +110,20 @@ protected function saveConfig( InputInterface $input, array $config ): void { $this->io->success( $this->msg( 'saved-config', [ $configPath ] ) ); } - protected function getApi( array $siteInfo ): MediawikiApi { + protected function getApi( array $siteInfo, ?AuthMethod $authMethod = null ): ActionApi { // API. if ( isset( $siteInfo['api_url'] ) ) { - $api = MediawikiApi::newFromApiEndpoint( $siteInfo['api_url'] ); + $api = MediaWiki::newFromEndpoint( $siteInfo['api_url'], $authMethod ); } elseif ( isset( $siteInfo['main_page_url'] ) ) { - $api = MediawikiApi::newFromPage( $siteInfo['main_page_url'] ); + $api = MediaWiki::newFromPage( $siteInfo['main_page_url'], $authMethod ); } else { throw new Exception( '$siteInfo does not include a URL.' ); } // Logger. - $api->setLogger( $this->logger ); + $api->action()->setLogger( $this->logger ); - return $api; + return $api->action(); } /** @@ -163,9 +165,9 @@ public function setSite( InputInterface $input, string $siteName, array $site ) } /** - * Log the user in to the given site. If the site doesn't have requisite authentication details, ask for them. + * Get an AuthMethod for the current site. If the site doesn't have requisite authentication details, ask for them. */ - public function login( InputInterface $input, MediawikiApi $api ) { + public function getAuthMethod( InputInterface $input ): AuthMethod { $siteName = $input->getOption( 'wiki' ); $site = $this->getSite( $input ); if ( !isset( $site['username'] ) ) { @@ -176,9 +178,7 @@ public function login( InputInterface $input, MediawikiApi $api ) { $site['password'] = $this->io->askHidden( $this->msg( 'ask-login-password' ) ); $this->setSite( $input, $siteName, $site ); } - - // Try to log in. $site = $this->getSite( $input ); - return $api->login( new ApiUser( $site['username'], $site['password'] ) ); + return new UserAndPassword( $site['username'], $site['password'] ); } } diff --git a/src/Command/ExportContribsCommand.php b/src/Command/ExportContribsCommand.php index f227f49..b791d24 100644 --- a/src/Command/ExportContribsCommand.php +++ b/src/Command/ExportContribsCommand.php @@ -2,10 +2,11 @@ namespace Samwilson\MediaWikiCLI\Command; +use Addwiki\Mediawiki\Api\Client\Action\ActionApi; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; +use Addwiki\Mediawiki\Api\Client\MediaWiki; use GuzzleHttp\Client; use GuzzleHttp\Pool; -use Mediawiki\Api\FluentRequest; -use Mediawiki\Api\MediawikiApi; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -39,13 +40,15 @@ public function execute( InputInterface $input, OutputInterface $output ) { return 1; } - $api = MediawikiApi::newFromApiEndpoint( $site['api_url'] ); + $api = MediaWiki::newFromEndpoint( $site['api_url'] )->action(); $continue = true; - $siteinfoReq = FluentRequest::factory()->setAction( 'query' ) + $siteinfoReq = ActionRequest::factory() + ->setMethod( 'GET' ) + ->setAction( 'query' ) ->setParam( 'list', 'usercontribs' ) ->setParam( 'ucuser', $user ); while ( $continue ) { - $contribs = $api->getRequest( $siteinfoReq ); + $contribs = $api->request( $siteinfoReq ); if ( isset( $contribs['continue']['uccontinue'] ) ) { $siteinfoReq->setParam( 'uccontinue', $contribs['continue']['uccontinue'] ); } else { @@ -59,7 +62,7 @@ public function execute( InputInterface $input, OutputInterface $output ) { return 0; } - public function getPageOfContribs( $site, $destDirBase, $contribs, MediawikiApi $api, bool $onlyAuthor ) { + public function getPageOfContribs( $site, $destDirBase, $contribs, ActionApi $api, bool $onlyAuthor ) { $client = new Client(); $requests = []; foreach ( $contribs['query']['usercontribs'] as $contrib ) { @@ -88,11 +91,13 @@ public function getPageOfContribs( $site, $destDirBase, $contribs, MediawikiApi // File export for file pages. if ( $namespace === 'File' ) { - $imageInfoRequest = FluentRequest::factory()->setAction( 'query' ) + $imageInfoRequest = ActionRequest::factory() + ->setMethod( 'GET' ) + ->setAction( 'query' ) ->setParam( 'prop', 'imageinfo' ) ->setParam( 'iiprop', 'url|sha1' ) ->setParam( 'pageids', $contrib['pageid'] ); - $imageInfoResponse = $api->getRequest( $imageInfoRequest ); + $imageInfoResponse = $api->request( $imageInfoRequest ); $imageInfo = $imageInfoResponse['query']['pages'][$contrib['pageid']]; // Not all file pages have images (e.g. redirects). if ( isset( $imageInfo['imageinfo'] ) ) { diff --git a/src/Command/ExtensionInstallCommand.php b/src/Command/ExtensionInstallCommand.php index 58a31ae..299f095 100644 --- a/src/Command/ExtensionInstallCommand.php +++ b/src/Command/ExtensionInstallCommand.php @@ -2,8 +2,8 @@ namespace Samwilson\MediaWikiCLI\Command; -use Mediawiki\Api\FluentRequest; -use Mediawiki\Api\MediawikiApi; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; +use Addwiki\Mediawiki\Api\Client\MediaWiki; use PharData; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -73,12 +73,13 @@ public function execute( InputInterface $input, OutputInterface $output ) { } // Get site info. - $siteApi = MediawikiApi::newFromApiEndpoint( $site['api_url'] ); - $siteinfoReq = FluentRequest::factory()->setAction( 'query' ) - // MediaWiki version. + $siteApi = MediaWiki::newFromEndpoint( $site['api_url'] )->action(); + $siteinfoReq = ActionRequest::factory() + ->setMethod( 'GET' ) + ->setAction( 'query' ) ->setParam( 'meta', 'siteinfo' ) ->setParam( 'siprop', 'general|extensions' ); - $siteInfo = $siteApi->getRequest( $siteinfoReq ); + $siteInfo = $siteApi->request( $siteinfoReq ); if ( !isset( $siteInfo['query']['extensions'] ) ) { $this->io->warning( $this->msg( 'extension-info-fetch-error', [ $extensionName, $siteApi->getApiUrl() ] ) ); return 1; @@ -91,11 +92,13 @@ public function execute( InputInterface $input, OutputInterface $output ) { } // Get list of available extension versions. - $api = MediawikiApi::newFromApiEndpoint( 'https://www.mediawiki.org/w/api.php' ); - $mediawikiOrgInfoReq = FluentRequest::factory()->setAction( 'query' ) + $api = MediaWiki::newFromEndpoint( 'https://www.mediawiki.org/w/api.php' )->action(); + $mediawikiOrgInfoReq = ActionRequest::factory() + ->setMethod( 'GET' ) + ->setAction( 'query' ) ->setParam( 'list', 'extdistbranches' ) ->setParam( 'edbexts', $extensionName ); - $mediawikiOrgInfo = $api->getRequest( $mediawikiOrgInfoReq ); + $mediawikiOrgInfo = $api->request( $mediawikiOrgInfoReq ); if ( !isset( $mediawikiOrgInfo['query']['extdistbranches']['extensions'][ $extensionName ] ) ) { $this->io->warning( $this->msg( 'extension-not-found', [ $extensionName ] ) ); return 1; diff --git a/src/Command/SitesAddCommand.php b/src/Command/SitesAddCommand.php index 9d6abc7..e8f3b2f 100644 --- a/src/Command/SitesAddCommand.php +++ b/src/Command/SitesAddCommand.php @@ -2,8 +2,8 @@ namespace Samwilson\MediaWikiCLI\Command; -use Mediawiki\Api\FluentRequest; -use Mediawiki\Api\MediawikiApi; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; +use Addwiki\Mediawiki\Api\Client\MediaWiki; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -23,14 +23,15 @@ public function execute( InputInterface $input, OutputInterface $output ) { if ( !$url ) { $url = $this->io->ask( $this->msg( 'sites-add-ask-url' ) ); } - $api = MediawikiApi::newFromPage( $url ); - $siteinfoReq = FluentRequest::factory()->setAction( 'query' )->setParam( 'meta', 'siteinfo' ); - $siteInfo = $api->getRequest( $siteinfoReq ); + /** @var Aci */ + $api = MediaWiki::newFromPage( $url ); + $siteinfoReq = ActionRequest::simpleGet( 'query', [ 'meta' => 'siteinfo' ] ); + $siteInfo = $api->action()->request( $siteinfoReq ); $newSite = [ 'name' => $siteInfo['query']['general']['sitename'], 'main_page_url' => $siteInfo['query']['general']['base'], - 'api_url' => $api->getApiUrl(), + 'api_url' => $api->action()->getApiUrl(), ]; $this->setSite( $input, $siteInfo['query']['general']['wikiid'], $newSite ); diff --git a/src/Command/SitesInfoCommand.php b/src/Command/SitesInfoCommand.php index d2213c1..f17bc64 100644 --- a/src/Command/SitesInfoCommand.php +++ b/src/Command/SitesInfoCommand.php @@ -2,7 +2,7 @@ namespace Samwilson\MediaWikiCLI\Command; -use Mediawiki\Api\FluentRequest; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -34,10 +34,12 @@ public function execute( InputInterface $input, OutputInterface $output ) { $api = $this->getApi( $site ); $this->logger->debug( 'Getting siteinfo from ' . $api->getApiUrl() ); - $siteinfoReq = FluentRequest::factory()->setAction( 'query' ) + $siteinfoReq = ActionRequest::factory() + ->setMethod( 'GET' ) + ->setAction( 'query' ) ->setParam( 'meta', 'siteinfo' ) ->setParam( 'siprop', 'general|statistics|extensions' ); - $siteInfo = $api->getRequest( $siteinfoReq ); + $siteInfo = $api->request( $siteinfoReq ); $general = $siteInfo['query']['general']; $this->logger->debug( 'General info', $general ); diff --git a/src/Command/SitesListCommand.php b/src/Command/SitesListCommand.php index 08bbf92..09e3f49 100644 --- a/src/Command/SitesListCommand.php +++ b/src/Command/SitesListCommand.php @@ -2,6 +2,7 @@ namespace Samwilson\MediaWikiCLI\Command; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -18,7 +19,7 @@ public function execute( InputInterface $input, OutputInterface $output ) { $config = $this->getConfig( $input ); if ( !isset( $config['sites'] ) ) { $this->io->block( $this->msg( 'no-sites-found' ) ); - return 0; + return Command::FAILURE; } $headers = [ 'ID', 'Name', 'API', 'Install path' ]; $rows = []; @@ -31,5 +32,6 @@ public function execute( InputInterface $input, OutputInterface $output ) { ]; } $this->io->table( $headers, $rows ); + return Command::SUCCESS; } } diff --git a/src/Command/SitesRemoveCommand.php b/src/Command/SitesRemoveCommand.php index bcc8538..b011ea6 100644 --- a/src/Command/SitesRemoveCommand.php +++ b/src/Command/SitesRemoveCommand.php @@ -2,6 +2,7 @@ namespace Samwilson\MediaWikiCLI\Command; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -21,12 +22,12 @@ public function execute( InputInterface $input, OutputInterface $output ) { $wiki = $input->getOption( 'wiki' ); if ( !$wiki ) { $this->io->warning( $this->msg( 'sites-remove-nowiki' ) ); - return 1; + return Command::FAILURE; } $siteRemoved = false; if ( isset( $config['sites'] ) ) { foreach ( $config['sites'] as $index => $site ) { - if ( $site['id'] === $wiki ) { + if ( $index === $wiki ) { $siteRemoved = true; unset( $config['sites'][$index] ); } @@ -36,5 +37,6 @@ public function execute( InputInterface $input, OutputInterface $output ) { $this->saveConfig( $input, $config ); $this->io->block( $this->msg( 'sites-add-removed' ) ); } + return Command::SUCCESS; } } diff --git a/src/Command/UploadFilesCommand.php b/src/Command/UploadFilesCommand.php index 4aa7294..bc26ccb 100644 --- a/src/Command/UploadFilesCommand.php +++ b/src/Command/UploadFilesCommand.php @@ -2,9 +2,9 @@ namespace Samwilson\MediaWikiCLI\Command; -use Mediawiki\Api\FluentRequest; -use Mediawiki\Api\MediawikiApi; -use Mediawiki\Api\Service\FileUploader; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; +use Addwiki\Mediawiki\Api\Service\FileUploader; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -29,18 +29,16 @@ public function execute( InputInterface $input, OutputInterface $output ) { $files = $input->getArgument( 'files' ); if ( empty( $files ) ) { $this->io->error( $this->msg( 'files-missing' ) ); - return 1; + return Command::FAILURE; } $site = $this->getSite( $input ); if ( !$site ) { - return 1; + return Command::FAILURE; } - $api = MediawikiApi::newFromApiEndpoint( $site['api_url'] ); + $api = $this->getApi( $site, $this->getAuthMethod( $input ) ); $uploader = new FileUploader( $api ); - $this->login( $input, $api ); - foreach ( $files as $file ) { $filePath = realpath( $file ); if ( !is_file( $filePath ) ) { @@ -50,22 +48,24 @@ public function execute( InputInterface $input, OutputInterface $output ) { $fileTitle = basename( $file ); // See if the same file exists. $sha1 = sha1_file( $filePath ); - $fileExistsRequest = FluentRequest::factory() + $fileExistsRequest = ActionRequest::factory() + ->setMethod( 'GET' ) ->setAction( 'query' ) ->setParam( 'list', 'allimages' ) ->setParam( 'aisha1', $sha1 ); - $fileExists = $api->getRequest( $fileExistsRequest ); + $fileExists = $api->request( $fileExistsRequest ); if ( isset( $fileExists['query']['allimages'][0]['descriptionurl'] ) ) { $this->io->warning( $this->msg( 'file-exists', [ $fileExists['query']['allimages'][0]['descriptionurl'] ] ) ); continue; } // See if the desired filename exists. - $filenameExistsRequest = FluentRequest::factory() + $filenameExistsRequest = ActionRequest::factory() + ->setMethod( 'GET' ) ->setAction( 'query' ) ->setParam( 'titles', 'File:' . $fileTitle ) ->setParam( 'prop', 'info' ) ->setParam( 'inprop', 'url' ); - $filenameExists = $api->getRequest( $filenameExistsRequest ); + $filenameExists = $api->request( $filenameExistsRequest ); $filenameExistsInfo = array_shift( $filenameExists['query']['pages'] ); if ( isset( $filenameExistsInfo['pageid'] ) ) { $this->io->warning( $this->msg( 'filename-exists', [ $filenameExistsInfo['canonicalurl'] ] ) ); @@ -79,5 +79,6 @@ public function execute( InputInterface $input, OutputInterface $output ) { $this->io->success( $this->msg( 'file-uploaded-successfully', [ $filenameExistsInfo['canonicalurl'] ] ) ); } } + return Command::SUCCESS; } } diff --git a/src/Command/UploadPagesCommand.php b/src/Command/UploadPagesCommand.php index 51c881b..8d10640 100644 --- a/src/Command/UploadPagesCommand.php +++ b/src/Command/UploadPagesCommand.php @@ -2,11 +2,11 @@ namespace Samwilson\MediaWikiCLI\Command; +use Addwiki\Mediawiki\Api\Client\Action\ActionApi; +use Addwiki\Mediawiki\Api\Client\Action\Request\ActionRequest; +use Addwiki\Mediawiki\Api\Service\NamespaceGetter; use DirectoryIterator; use Exception; -use Mediawiki\Api\MediawikiApi; -use Mediawiki\Api\Service\NamespaceGetter; -use Mediawiki\Api\SimpleRequest; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -20,7 +20,7 @@ class UploadPagesCommand extends CommandBase { /** @var string[] File extensions that will be stripped from uploaded page titles. */ protected $ignoredFileExtensions = [ 'txt', 'wikitext', 'md', 'lua' ]; - /** @var MediawikiApi */ + /** @var ActionApi */ protected $api; /** @var string[][] */ @@ -70,8 +70,7 @@ public function execute( InputInterface $input, OutputInterface $output ) { } // API. $site = $this->getSite( $input ); - $this->api = MediawikiApi::newFromApiEndpoint( $site['api_url'] ); - $this->login( $input, $this->api ); + $this->api = $this->getApi( $site, $this->getAuthMethod( $input ) ); // Namespaces (ignore mainspace). $nsGetter = new NamespaceGetter( $this->api ); @@ -154,7 +153,7 @@ protected function importPage( $filename ) { 'summary' => $this->comment, ]; try { - $result = $this->api->postRequest( new SimpleRequest( 'edit', $editParams ) ); + $result = $this->api->request( ActionRequest::simplePost( 'edit', $editParams ) ); } catch ( Exception $exception ) { // Show the error, but carry on with other pages. $this->io->error( $pageTitle . ' ' . $exception->getMessage() );