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

Reply via email to