Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 112
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CreateReservedLexemes
0.00% covered (danger)
0.00%
0 / 112
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 execute
0.00% covered (danger)
0.00%
0 / 109
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Wikibase;
4
5use MediaWiki\Maintenance\Maintenance;
6use MediaWiki\User\User;
7use Wikibase\DataModel\Entity\ItemId;
8use Wikibase\DataModel\Term\Term;
9use Wikibase\DataModel\Term\TermList;
10use Wikibase\Lexeme\Domain\Model\Lexeme;
11use Wikibase\Lexeme\Domain\Model\LexemeId;
12use Wikibase\Lib\WikibaseSettings;
13use Wikibase\Repo\WikibaseRepo;
14
15// @codeCoverageIgnoreStart
16$basePath = getenv( 'MW_INSTALL_PATH' ) !== false
17    ? getenv( 'MW_INSTALL_PATH' )
18    : __DIR__ . '/../../../..';
19
20require_once $basePath . '/maintenance/Maintenance.php';
21// @codeCoverageIgnoreEnd
22
23/**
24 * Maintenance script for creating reserved Lexeme entities.
25 *
26 * @license GPL-2.0-or-later
27 * @author Addshore
28 */
29class CreateReservedLexemes extends Maintenance {
30
31    private const LEMMA = 'lemma';
32    private const LANGUAGE = 'lang';
33    private const CATEGORY = 'cat';
34
35    public function __construct() {
36        parent::__construct();
37
38        $this->addDescription( 'Created reserved lexemes' );
39
40        $this->requireExtension( 'WikibaseLexeme' );
41    }
42
43    public function execute() {
44        $user = User::newSystemUser( 'Maintenance script', [ 'steal' => true ] );
45        $store = WikibaseRepo::getEntityStore();
46
47        if ( !WikibaseSettings::isRepoEnabled() ) {
48            $this->fatalError(
49                "You need to have Wikibase enabled in order to use this maintenance script!\n\n"
50            );
51        }
52
53        $entities = [
54            'L1' => [
55                self::LEMMA => new Term( 'mis-x-Q36790', 'ama' ),
56                self::CATEGORY => new ItemId( 'Q1084' ),
57                self::LANGUAGE => new ItemId( 'Q36790' ),
58            ],
59
60            'L42' => [
61                self::LEMMA => new Term( 'en', 'answer' ),
62                self::CATEGORY => new ItemId( 'Q1084' ),
63                self::LANGUAGE => new ItemId( 'Q1860' ),
64            ],
65
66            'L99' => [
67                self::LEMMA => new Term( 'de', 'Luftballon' ),
68                self::CATEGORY => new ItemId( 'Q1084' ),
69                self::LANGUAGE => new ItemId( 'Q188' ),
70            ],
71
72            'L777' => [
73                self::LEMMA => new Term( 'pt', 'ganhar' ),
74                self::CATEGORY => new ItemId( 'Q24905' ),
75                self::LANGUAGE => new ItemId( 'Q5146' ),
76            ],
77
78            'L666' => [
79                self::LEMMA => new Term( 'ru', 'зверь' ),
80                self::CATEGORY => new ItemId( 'Q1084' ),
81                self::LANGUAGE => new ItemId( 'Q7737' ),
82            ],
83
84            'L8' => [
85                self::LEMMA => new Term( 'en', 'late' ),
86                self::CATEGORY => new ItemId( 'Q34698' ),
87                self::LANGUAGE => new ItemId( 'Q1860' ),
88            ],
89
90            'L55' => [
91                self::LEMMA => new Term( 'ja', 'こども' ),
92                self::CATEGORY => new ItemId( 'Q1084' ),
93                self::LANGUAGE => new ItemId( 'Q5287' ),
94            ],
95
96            'L221' => [
97                self::LEMMA => new Term( 'en', 'elementary' ),
98                self::CATEGORY => new ItemId( 'Q34698' ),
99                self::LANGUAGE => new ItemId( 'Q1860' ),
100            ],
101
102            'L314' => [
103                self::LEMMA => new Term( 'ca', 'pi' ),
104                self::CATEGORY => new ItemId( 'Q1084' ),
105                self::LANGUAGE => new ItemId( 'Q7026' ),
106            ],
107
108            'L1887' => [
109                self::LEMMA => new Term( 'eo', 'unua' ),
110                self::CATEGORY => new ItemId( 'Q34698' ),
111                self::LANGUAGE => new ItemId( 'Q143' ),
112            ],
113
114            'L117' => [
115                self::LEMMA => new Term( 'da', 'gentagelse' ),
116                self::CATEGORY => new ItemId( 'Q1084' ),
117                self::LANGUAGE => new ItemId( 'Q9035' ),
118            ],
119
120            'L12345' => [
121                self::LEMMA => new Term( 'ar', 'صِفْر' ),
122                self::CATEGORY => new ItemId( 'Q34698' ),
123                self::LANGUAGE => new ItemId( 'Q13955' ),
124            ],
125
126            'L5' => [
127                self::LEMMA => new Term( 'es', 'pino' ),
128                self::CATEGORY => new ItemId( 'Q1084' ),
129                self::LANGUAGE => new ItemId( 'Q1321' ),
130            ],
131
132            'L24601' => [
133                self::LEMMA => new Term( 'fr', 'condamné' ),
134                self::CATEGORY => new ItemId( 'Q1084' ),
135                self::LANGUAGE => new ItemId( 'Q150' ),
136            ],
137
138            'L18' => [
139                self::LEMMA => new Term( 'he', 'חי' ),
140                self::CATEGORY => new ItemId( 'Q34698' ),
141                self::LANGUAGE => new ItemId( 'Q9288' ),
142            ],
143
144            'L123' => [
145                self::LEMMA => new Term( 'mis-x-Q4115189', 'sandbox lexeme' ),
146                self::CATEGORY => new ItemId( 'Q4115189' ),
147                self::LANGUAGE => new ItemId( 'Q13406268' ),
148            ],
149
150            'L171081' => [
151                self::LEMMA => new Term( 'eu', 'izioki' ),
152                self::CATEGORY => new ItemId( 'Q24905' ),
153                self::LANGUAGE => new ItemId( 'Q8752' ),
154            ],
155
156        ];
157
158        $this->output( "Starting import...\n\n" );
159
160        foreach ( $entities as $idString => $dataMap ) {
161            /** @var Term $lemmaTerm */
162            $lemmaTerm = $dataMap[self::LEMMA];
163            /** @var ItemId $languageId */
164            $languageId = $dataMap[self::LANGUAGE];
165            /** @var ItemId $categoryId */
166            $categoryId = $dataMap[self::CATEGORY];
167
168            $this->output(
169                "Importing Lexeme with lemma " . $lemmaTerm->getText() . " as lexeme $idString... \n"
170            );
171
172            $entity = new Lexeme(
173                new LexemeId( $idString ),
174                new TermList( [ $lemmaTerm ] ),
175                $categoryId,
176                $languageId
177            );
178
179            $store->saveEntity( $entity, 'Import reserved Lexeme', $user, EDIT_NEW );
180        }
181
182        $this->output( 'Import completed.' );
183    }
184
185}
186
187// @codeCoverageIgnoreStart
188$maintClass = CreateReservedLexemes::class;
189require_once RUN_MAINTENANCE_IF_MAIN;
190// @codeCoverageIgnoreEnd