Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
95.24% covered (success)
95.24%
20 / 21
80.00% covered (warning)
80.00%
4 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
ChangeOpRemoveSenseGloss
95.24% covered (success)
95.24%
20 / 21
80.00% covered (warning)
80.00%
4 / 5
7
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 validate
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 apply
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
2
 updateSummary
90.00% covered (success)
90.00%
9 / 10
0.00% covered (danger)
0.00%
0 / 1
2.00
 getActions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Wikibase\Lexeme\DataAccess\ChangeOp;
4
5use ValueValidators\Result;
6use Wikibase\DataModel\Entity\EntityDocument;
7use Wikibase\Lexeme\Domain\Model\Sense;
8use Wikibase\Lib\Summary;
9use Wikibase\Repo\ChangeOp\ChangeOp;
10use Wikibase\Repo\ChangeOp\DummyChangeOpResult;
11use Wikibase\Repo\Store\EntityPermissionChecker;
12use Wikimedia\Assert\Assert;
13
14/**
15 * @license GPL-2.0-or-later
16 */
17class ChangeOpRemoveSenseGloss implements ChangeOp {
18
19    private const SUMMARY_ACTION_REMOVE = 'remove-sense-glosses';
20
21    /**
22     * TODO LanguageCode model?
23     *
24     * @var string
25     */
26    private $language;
27
28    /**
29     * @param string $language The language to remove
30     */
31    public function __construct( $language ) {
32        $this->language = $language;
33    }
34
35    public function validate( EntityDocument $entity ) {
36        Assert::parameterType( Sense::class, $entity, '$entity' );
37
38        return Result::newSuccess();
39    }
40
41    public function apply( EntityDocument $entity, Summary $summary = null ) {
42        Assert::parameterType( Sense::class, $entity, '$entity' );
43        '@phan-var Sense $entity';
44
45        /** @var Sense $entity */
46
47        $glosses = $entity->getGlosses();
48
49        if ( !$glosses->hasTermForLanguage( $this->language ) ) {
50            return new DummyChangeOpResult();
51        }
52
53        $this->updateSummary( $entity, $summary );
54
55        $glosses->removeByLanguage( $this->language );
56
57        return new DummyChangeOpResult();
58    }
59
60    private function updateSummary( Sense $sense, Summary $summary = null ) {
61        if ( $summary === null ) {
62            return;
63        }
64
65        $summary->setAction( self::SUMMARY_ACTION_REMOVE );
66
67        $summary->setLanguage( $this->language );
68        $summary->addAutoCommentArgs( [
69            $sense->getId()->getSerialization(), // TODO: use SenseId not string?
70        ] );
71        $summary->addAutoSummaryArgs( [
72            $this->language => $sense->getGlosses()->getByLanguage( $this->language )->getText(),
73        ] );
74    }
75
76    public function getActions() {
77        return [ EntityPermissionChecker::ACTION_EDIT ];
78    }
79
80}