Passed
Push — tmp ( c9ee16...31f648 )
by Greg
06:32
created

ModuleLanguageTrait::equivalentLetters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2022 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Module;
21
22
use Fisharebest\ExtCalendar\CalendarInterface;
23
use Fisharebest\ExtCalendar\GregorianCalendar;
24
use Fisharebest\Localization\Locale\LocaleEnUs;
25
use Fisharebest\Localization\Locale\LocaleInterface;
26
use Fisharebest\Webtrees\I18N;
27
use Fisharebest\Webtrees\Relationship;
28
use Illuminate\Database\Query\Builder;
29
30
use function mb_substr;
31
32
use Illuminate\Database\Query\Builder;
0 ignored issues
show
Bug introduced by
A parse error occurred: Cannot use Illuminate\Database\Query\Builder as Builder because the name is already in use
Loading history...
33
34
use function mb_substr;
35
36
/**
37
 * Trait ModuleLanguageEventsTrait - default implementation of ModuleLanguageInterface.
38
 */
39
trait ModuleLanguageTrait
40
{
41
    /**
42
     * Phone-book ordering of letters.
43
     *
44
     * @return array<int,string>
45
     */
46
    public function alphabet(): array
47
    {
48
        return ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
49
    }
50
51
    /**
52
     * Default calendar used by this language.
53
     *
54
     * @return CalendarInterface
55
     */
56
    public function calendar(): CalendarInterface
57
    {
58
        return new GregorianCalendar();
59
    }
60
61
    /**
62
     * One of: 'DMY', 'MDY', 'YMD'.
63
     *
64
     * @return string
65
     */
66
    public function dateOrder(): string
67
    {
68
        return 'DMY';
69
    }
70
71
    /**
72
     * Some languages treat certain letter-combinations as equivalent.
73
     *
74
     * @return array<string,string>
75
     */
76
    public function equivalentLetters(): array
77
    {
78
        return [];
79
    }
80
81
    /**
82
     * Some languages use digraphs and trigraphs.
83
     *
84
     * @param string $string
85
     *
86
     * @return string
87
     */
88
    public function initialLetter(string $string): string
89
    {
90
        return mb_substr($string, 0, 1);
91
    }
92
93
    /**
94
     * @param string  $column
95
     * @param string  $letter
96
     * @param Builder $query
97
     *
98
     * @return void
99
     */
100
    public function initialLetterSQL(string $column, string $letter, Builder $query): void
101
    {
102
        $query->where($column, 'LIKE', '\\' . $letter . '%');
103
    }
104
105
    /**
106
     * How should this module be identified in the control panel, etc.?
107
     *
108
     * @return string
109
     */
110
    public function title(): string
111
    {
112
        return  $this->locale()->endonym();
113
    }
114
115
    /**
116
     * A sentence describing what this module does.
117
     *
118
     * @return string
119
     */
120
    public function description(): string
121
    {
122
        return I18N::translate('Language') . ' — ' . $this->title() . ' — ' . $this->locale()->languageTag();
123
    }
124
125
    /**
126
     * @return LocaleInterface
127
     */
128
    public function locale(): LocaleInterface
129
    {
130
        return new LocaleEnUs();
131
    }
132
133
    /**
134
     * @return array<Relationship>
135
     */
136
    public function relationships(): array
137
    {
138
        return [];
139
    }
140
}
141