jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/381419 )
Change subject: Stop using using EntitySavingHelper in AddForm API module ...................................................................... Stop using using EntitySavingHelper in AddForm API module Change-Id: Idfc3318293ba99cd2c78a0500f7e32648761f3c7 --- M src/Api/AddForm.php M src/Api/AddFormRequestParserResult.php M src/DataModel/Services/Diff/LexemeDiff.php M tests/phpunit/mediawiki/Api/AddFormTest.php 4 files changed, 115 insertions(+), 16 deletions(-) Approvals: WMDE-leszek: Looks good to me, approved jenkins-bot: Verified diff --git a/src/Api/AddForm.php b/src/Api/AddForm.php index 7697455..2378733 100644 --- a/src/Api/AddForm.php +++ b/src/Api/AddForm.php @@ -4,16 +4,18 @@ use ApiBase; use ApiMain; +use Status; +use Wikibase\EditEntity; +use Wikibase\EditEntityFactory; +use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\DataModel\Serialization\FormSerializer; -use Wikibase\Repo\Api\EntitySavingHelper; -use Wikibase\Summary; +use Wikibase\Lib\Store\EntityRevisionLookup; +use Wikibase\Lib\Store\StorageException; +use Wikibase\Repo\Api\ApiErrorReporter; +use Wikibase\SummaryFormatter; class AddForm extends ApiBase { - - /** - * @var EntitySavingHelper - */ - private $entitySavingHelper; + const LATEST_REVISION = 0; /** * @var AddFormRequestParser @@ -21,9 +23,28 @@ private $requestParser; /** + * @var ApiErrorReporter + */ + private $errorReporter; + + /** * @var FormSerializer */ private $formSerializer; + /** + * @var EditEntityFactory + */ + private $editEntityFactory; + + /** + * @var SummaryFormatter + */ + private $summaryFormatter; + + /** + * @var EntityRevisionLookup + */ + private $entityRevisionLookup; /** * @return AddForm @@ -44,8 +65,11 @@ $moduleName, new AddFormRequestParser( $wikibaseRepo->getEntityIdParser() ), $formSerializer, + $wikibaseRepo->getEntityRevisionLookup( 'uncached' ), + $wikibaseRepo->newEditEntityFactory( $mainModule->getContext() ), + $wikibaseRepo->getSummaryFormatter(), function ( $module ) use ( $apiHelperFactory ) { - return $apiHelperFactory->getEntitySavingHelper( $module ); + return $apiHelperFactory->getErrorReporter( $module ); } ); } @@ -55,13 +79,19 @@ $moduleName, AddFormRequestParser $requestParser, FormSerializer $formSerializer, - callable $entitySavingHelperInstantiator + EntityRevisionLookup $entityRevisionLookup, + EditEntityFactory $editEntityFactory, + SummaryFormatter $summaryFormatter, + callable $errorReporterInstantiator ) { parent::__construct( $mainModule, $moduleName ); - $this->entitySavingHelper = $entitySavingHelperInstantiator( $this ); + $this->errorReporter = $errorReporterInstantiator( $this ); $this->requestParser = $requestParser; $this->formSerializer = $formSerializer; + $this->editEntityFactory = $editEntityFactory; + $this->entityRevisionLookup = $entityRevisionLookup; + $this->summaryFormatter = $summaryFormatter; } /** @@ -96,7 +126,8 @@ //TODO: Corresponding HTTP codes on failure (e.g. 400, 404, 422) (?) //TODO: Documenting response structure. Is it possible? - $parserResult = $this->requestParser->parse( $this->extractRequestParams() ); + $params = $this->extractRequestParams(); + $parserResult = $this->requestParser->parse( $params ); if ( $parserResult->hasErrors() ) { //TODO: Increase stats counter on failure @@ -105,12 +136,50 @@ $request = $parserResult->getRequest(); - $lexeme = $this->entitySavingHelper->loadEntity( $request->getLexemeId() ); + //FIXME Check if found + try { + $lexemeRevision = $this->entityRevisionLookup->getEntityRevision( + $request->getLexemeId(), + self::LATEST_REVISION, + EntityRevisionLookup::LATEST_FROM_MASTER + ); + } catch ( StorageException $e ) { + //TODO Test it + if ( $e->getStatus() ) { + $this->dieStatus( $e->getStatus() ); + } else { + //FIXME Do what??? + } + } + /** @var Lexeme $lexeme */ + $lexeme = $lexemeRevision->getEntity(); $newForm = $request->addFormTo( $lexeme ); - $summary = new AddFormSummary( $lexeme->getId(), $newForm ); + + $editEntity = $this->editEntityFactory->newEditEntity( + $this->getUser(), + $request->getLexemeId(), + $lexemeRevision->getRevisionId() + ); + $summaryString = $this->summaryFormatter->formatSummary( + new AddFormSummary( $lexeme->getId(), $newForm ) + ); + $flags = EDIT_UPDATE; + if ( isset( $params['bot'] ) && $params['bot'] && $this->getUser()->isAllowed( 'bot' ) ) { + $flags |= EDIT_FORCE_BOT; + } + + $tokenThatDoesNotNeedChecking = false; //FIXME: Handle failure - //FIXME: ACHTUNG! attemptSaveEntity() uses 'baserevid' internally which should not be used! - $status = $this->entitySavingHelper->attemptSaveEntity( $lexeme, $summary ); + $status = $editEntity->attemptSave( + $lexeme, + $summaryString, + $flags, + $tokenThatDoesNotNeedChecking + ); + + if ( !$status->isGood() ) { + $this->dieStatus( $status ); //Seems like it is good enough + } $apiResult = $this->getResult(); @@ -134,7 +203,6 @@ self::PARAM_TYPE => 'text', self::PARAM_REQUIRED => true, ], - 'token' => null, 'bot' => [ self::PARAM_TYPE => 'boolean', self::PARAM_DFLT => false, diff --git a/src/Api/AddFormRequestParserResult.php b/src/Api/AddFormRequestParserResult.php index 2ca276d..69d5936 100644 --- a/src/Api/AddFormRequestParserResult.php +++ b/src/Api/AddFormRequestParserResult.php @@ -42,6 +42,9 @@ $this->errors = $errors; } + /** + * @return AddFormRequest + */ public function getRequest() { if ( $this->errors ) { throw new \LogicException( diff --git a/src/DataModel/Services/Diff/LexemeDiff.php b/src/DataModel/Services/Diff/LexemeDiff.php index 50135c4..2fd1df8 100644 --- a/src/DataModel/Services/Diff/LexemeDiff.php +++ b/src/DataModel/Services/Diff/LexemeDiff.php @@ -69,6 +69,7 @@ * @return bool */ public function isEmpty() { + //FIXME: Needs to be fixed, otherwise conflict resolution may lead to unexpected results return $this->getLemmasDiff()->isEmpty() && $this->getClaimsDiff()->isEmpty(); } diff --git a/tests/phpunit/mediawiki/Api/AddFormTest.php b/tests/phpunit/mediawiki/Api/AddFormTest.php index b1c8f4d..65f2d89 100644 --- a/tests/phpunit/mediawiki/Api/AddFormTest.php +++ b/tests/phpunit/mediawiki/Api/AddFormTest.php @@ -3,6 +3,7 @@ namespace Wikibase\Lexeme\Tests\MediaWiki\Api; use ApiErrorFormatter; +use Revision; use Wikibase\DataModel\Entity\ItemId; use Wikibase\Lexeme\DataModel\Lexeme; use Wikibase\Lexeme\DataModel\LexemeId; @@ -155,6 +156,26 @@ $this->assertSame( 1, $result['success'] ); } + public function testSetsTheSummaryOfRevision() { + $lexeme = NewLexeme::havingId( 'L1' )->build(); + + $this->saveLexeme( $lexeme ); + + $params = [ + 'action' => 'wblexemeaddform', + 'lexemeId' => 'L1', + 'data' => $this->getDataParam() + ]; + + $this->doApiRequestWithToken( $params ); + + $lexemeRevision = $this->getCurrentRevisionForLexeme( 'L1' ); + + $revision = Revision::loadFromId( wfGetDB( DB_MASTER ), $lexemeRevision->getRevisionId() ); + + $this->assertEquals( '/* add-form:1||F1 */ goat', $revision->getComment() ); + } + private function saveLexeme( Lexeme $lexeme ) { $store = WikibaseRepo::getDefaultInstance()->getEntityStore(); @@ -170,4 +191,10 @@ return $lookup->getEntity( new LexemeId( $id ) ); } + private function getCurrentRevisionForLexeme( $id ) { + $lookup = WikibaseRepo::getDefaultInstance()->getEntityRevisionLookup(); + + return $lookup->getEntityRevision( new LexemeId( $id ) ); + } + } -- To view, visit https://gerrit.wikimedia.org/r/381419 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Idfc3318293ba99cd2c78a0500f7e32648761f3c7 Gerrit-PatchSet: 10 Gerrit-Project: mediawiki/extensions/WikibaseLexeme Gerrit-Branch: master Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de> Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de> Gerrit-Reviewer: WMDE-leszek <leszek.mani...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits