Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
LabelLookup
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getLabelForSchemaData
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare( strict_types = 1 );
4
5namespace EntitySchema\DataAccess;
6
7use EntitySchema\Services\Converter\FullViewEntitySchemaData;
8use Wikibase\DataModel\Term\TermFallback;
9use Wikibase\Lib\LanguageFallbackChainFactory;
10
11/**
12 * Lookup for EntitySchema labels, with language fallbacks applied.
13 *
14 * @license GPL-2.0-or-later
15 */
16class LabelLookup {
17
18    private LanguageFallbackChainFactory $languageFallbackChainFactory;
19
20    public function __construct(
21        LanguageFallbackChainFactory $languageFallbackChainFactory
22    ) {
23        $this->languageFallbackChainFactory = $languageFallbackChainFactory;
24    }
25
26    /**
27     * Look up the label of the EntitySchema with the supplied schema data, if any.
28     * Language fallbacks are applied based on the given language code.
29     *
30     * @param FullViewEntitySchemaData $schemaData
31     * @param string $langCode
32     * @return TermFallback|null The label, or null if no label or EntitySchema was found.
33     */
34    public function getLabelForSchemaData(
35        FullViewEntitySchemaData $schemaData,
36        string $langCode
37    ): ?TermFallback {
38        $chain = $this->languageFallbackChainFactory->newFromLanguageCode( $langCode );
39        $preferredLabel = $chain->extractPreferredValue( array_map(
40            static fn ( $nameBadge ) => $nameBadge->label,
41            $schemaData->nameBadges
42        ) );
43        if ( $preferredLabel !== null ) {
44            return new TermFallback(
45                $langCode,
46                $preferredLabel['value'],
47                $preferredLabel['language'],
48                $preferredLabel['source']
49            );
50        } else {
51            return null;
52        }
53    }
54}