Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.00% covered (warning)
80.00%
8 / 10
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
MediaInfoWikibaseHooks
80.00% covered (warning)
80.00%
8 / 10
83.33% covered (warning)
83.33%
5 / 6
8.51
0.00% covered (danger)
0.00%
0 / 1
 onWikibaseRepoEntityNamespaces
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onWikibaseEntityTypes
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 onGetEntityByLinkedTitleLookup
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onGetEntityContentModelForTitle
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
12
 onWikibaseRepoEntityTypes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onWikibaseClientEntityTypes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare( strict_types = 1 );
4
5namespace Wikibase\MediaInfo;
6
7use MediaWiki\Title\Title;
8use Wikibase\Client\Hooks\WikibaseClientEntityTypesHook;
9use Wikibase\DataAccess\Hooks\GetEntityContentModelForTitleHook;
10use Wikibase\Lib\Store\EntityByLinkedTitleLookup;
11use Wikibase\MediaInfo\Content\MediaInfoContent;
12use Wikibase\MediaInfo\DataModel\MediaInfo;
13use Wikibase\MediaInfo\Services\MediaInfoByLinkedTitleLookup;
14use Wikibase\Repo\Hooks\GetEntityByLinkedTitleLookupHook;
15use Wikibase\Repo\Hooks\WikibaseRepoEntityNamespacesHook;
16use Wikibase\Repo\Hooks\WikibaseRepoEntityTypesHook;
17
18/**
19 * Wikibase hook handlers for the Wikibase MediaInfo extension.
20 *
21 * @license GPL-2.0-or-later
22 */
23class MediaInfoWikibaseHooks implements
24    GetEntityContentModelForTitleHook,
25    GetEntityByLinkedTitleLookupHook,
26    WikibaseClientEntityTypesHook,
27    WikibaseRepoEntityTypesHook,
28    WikibaseRepoEntityNamespacesHook
29{
30
31    /** @inheritDoc */
32    public function onWikibaseRepoEntityNamespaces( &$entityNamespaces ): void {
33        // Tell Wikibase where to put our entity content.
34        $entityNamespaces[ MediaInfo::ENTITY_TYPE ] = NS_FILE . '/' . MediaInfo::ENTITY_TYPE;
35    }
36
37    private function onWikibaseEntityTypes( array &$entityTypeDefinitions ) {
38        $entityTypeDefinitions = array_merge(
39            $entityTypeDefinitions,
40            require __DIR__ . '/../WikibaseMediaInfo.entitytypes.php'
41        );
42    }
43
44    /** @inheritDoc */
45    public function onGetEntityByLinkedTitleLookup( EntityByLinkedTitleLookup &$lookup ): void {
46        $lookup = new MediaInfoByLinkedTitleLookup( $lookup );
47    }
48
49    /** @inheritDoc */
50    public function onGetEntityContentModelForTitle( Title $title, string &$contentModel ): void {
51        if ( $title->inNamespace( NS_FILE ) && $title->getArticleID() ) {
52            $contentModel = MediaInfoContent::CONTENT_MODEL_ID;
53        }
54    }
55
56    /** @inheritDoc */
57    public function onWikibaseRepoEntityTypes( array &$entityTypeDefinitions ): void {
58        $this->onWikibaseEntityTypes( $entityTypeDefinitions );
59    }
60
61    /** @inheritDoc */
62    public function onWikibaseClientEntityTypes( array &$entityTypeDefinitions ): void {
63        $this->onWikibaseEntityTypes( $entityTypeDefinitions );
64    }
65}