Passed
Branch feature/2.1-geodispersion-dev (1d61a8)
by Jonathan
61:21
created

CertificatesModule::listMenuClass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
/**
4
 * webtrees-lib: MyArtJaub library for webtrees
5
 *
6
 * @package MyArtJaub\Webtrees
7
 * @subpackage Certificates
8
 * @author Jonathan Jaubart <[email protected]>
9
 * @copyright Copyright (c) 2009-2021, Jonathan Jaubart
10
 * @license https://www.gnu.org/licenses/gpl.html GNU General Public License, version 3
11
 */
12
13
declare(strict_types=1);
14
15
namespace MyArtJaub\Webtrees\Module\Certificates;
16
17
use Aura\Router\Map;
18
use Fisharebest\Webtrees\Auth;
19
use Fisharebest\Webtrees\I18N;
20
use Fisharebest\Webtrees\Registry;
21
use Fisharebest\Webtrees\Tree;
22
use Fisharebest\Webtrees\Http\Middleware\AuthAdministrator;
23
use Fisharebest\Webtrees\Http\Middleware\AuthManager;
24
use Fisharebest\Webtrees\Module\AbstractModule;
25
use Fisharebest\Webtrees\Module\ModuleConfigInterface;
26
use Fisharebest\Webtrees\Module\ModuleConfigTrait;
27
use Fisharebest\Webtrees\Module\ModuleGlobalInterface;
28
use Fisharebest\Webtrees\Module\ModuleGlobalTrait;
29
use Fisharebest\Webtrees\Module\ModuleListInterface;
30
use Fisharebest\Webtrees\Module\ModuleListTrait;
31
use MyArtJaub\Webtrees\Http\Middleware\AuthTreePreference;
32
use MyArtJaub\Webtrees\Module\ModuleMyArtJaubInterface;
33
use MyArtJaub\Webtrees\Module\ModuleMyArtJaubTrait;
34
use MyArtJaub\Webtrees\Module\Certificates\Elements\SourceCertificate;
35
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\AdminConfigAction;
36
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\AdminConfigPage;
37
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\AdminTreesPage;
38
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\CertificateImage;
39
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\CertificatePage;
40
use MyArtJaub\Webtrees\Module\Certificates\Http\RequestHandlers\CertificatesList;
41
42
/**
43
 * Certificates Module.
44
 */
45
class CertificatesModule extends AbstractModule implements
46
    ModuleMyArtJaubInterface,
47
    ModuleConfigInterface,
48
    ModuleGlobalInterface,
49
    ModuleListInterface
50
{
51
    use ModuleMyArtJaubTrait {
52
        boot as traitBoot;
53
    }
54
    use ModuleConfigTrait;
55
    use ModuleGlobalTrait;
56
    use ModuleListTrait;
57
58
    /**
59
     * {@inheritDoc}
60
     * @see \Fisharebest\Webtrees\Module\AbstractModule::title()
61
     */
62
    public function title(): string
63
    {
64
        return /* I18N: Name of the “Certificates” module */ I18N::translate('Certificates');
65
    }
66
67
    /**
68
     * {@inheritDoc}
69
     * @see \Fisharebest\Webtrees\Module\AbstractModule::description()
70
     */
71
    public function description(): string
72
    {
73
        //phpcs:ignore Generic.Files.LineLength.TooLong
74
        return /* I18N: Description of the “Certificates” module */ I18N::translate('Display and edition of certificates linked to sources.');
75
    }
76
77
    /**
78
     * {@inheritDoc}
79
     * @see \Fisharebest\Webtrees\Module\AbstractModule::boot()
80
     */
81
    public function boot(): void
82
    {
83
        $this->traitBoot();
84
        Registry::elementFactory()->register([
85
            'FAM:SOUR:_ACT'     =>  new SourceCertificate(I18N::translate('Certificate')),
86
            'FAM:*:SOUR:_ACT'   =>  new SourceCertificate(I18N::translate('Certificate')),
87
            'INDI:SOUR:_ACT'    =>  new SourceCertificate(I18N::translate('Certificate')),
88
            'INDI:*:SOUR:_ACT'  =>  new SourceCertificate(I18N::translate('Certificate')),
89
            'OBJE:SOUR:_ACT'    =>  new SourceCertificate(I18N::translate('Certificate')),
90
            'OBJE:*:SOUR:_ACT'  =>  new SourceCertificate(I18N::translate('Certificate')),
91
            'NOTE:SOUR:_ACT'    =>  new SourceCertificate(I18N::translate('Certificate')),
92
            'NOTE:*:SOUR:_ACT'  =>  new SourceCertificate(I18N::translate('Certificate'))
93
        ]);
94
    }
95
96
    /**
97
     * {@inheritDoc}
98
     * @see \MyArtJaub\Webtrees\Module\ModuleMyArtJaubInterface::loadRoutes()
99
     */
100
    public function loadRoutes($router): void
101
    {
102
        $router->attach('', '', static function (Map $router): void {
103
104
            $router->attach('', '/module-maj/certificates', static function (Map $router): void {
105
106
                $router->attach('', '/admin', static function (Map $router): void {
107
108
                    $router->get(AdminTreesPage::class, '/trees', AdminTreesPage::class)
109
                        ->extras(['middleware' => [ AuthAdministrator::class ]]);
110
111
                    $router->attach('', '/config/{tree}', static function (Map $router): void {
112
113
                        $router->extras([
114
                            'middleware' => [
115
                                AuthManager::class,
116
                            ],
117
                        ]);
118
                        $router->get(AdminConfigPage::class, '', AdminConfigPage::class);
119
                        $router->post(AdminConfigAction::class, '', AdminConfigAction::class);
120
                    });
121
                });
122
123
                $router->get(CertificatesList::class, '/list/{tree}{/cityobf}', CertificatesList::class)
124
                    ->extras([
125
                        'middleware'            =>  [AuthTreePreference::class],
126
                        'permission_preference' =>  'MAJ_CERTIF_SHOW_CERT'
127
                    ]);
128
129
                $router->attach('', '/certificate/{tree}/{cid}', static function (Map $router): void {
130
131
                    $router->extras([
132
                        'middleware'            =>  [AuthTreePreference::class],
133
                        'permission_preference' =>  'MAJ_CERTIF_SHOW_CERT'
134
                    ]);
135
136
                    $router->get(CertificatePage::class, '', CertificatePage::class);
137
                    $router->get(CertificateImage::class, '/image', CertificateImage::class);
138
                });
139
            });
140
        });
141
    }
142
143
    /**
144
     * {@inheritDoc}
145
     * @see \Fisharebest\Webtrees\Module\ModuleCustomInterface::customModuleVersion()
146
     */
147
    public function customModuleVersion(): string
148
    {
149
        return '2.1.0-v.1';
150
    }
151
152
    /**
153
     * {@inheritDoc}
154
     * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
155
     */
156
    public function getConfigLink(): string
157
    {
158
        return route(AdminTreesPage::class);
159
    }
160
161
    /**
162
     * {@inheritDoc}
163
     * @see \Fisharebest\Webtrees\Module\ModuleGlobalInterface::headContent()
164
     */
165
    public function headContent(): string
166
    {
167
        return '<link rel="stylesheet" href="' . e($this->moduleCssUrl()) . '">';
168
    }
169
170
    /**
171
     * {@inheritDoc}
172
     * @see \Fisharebest\Webtrees\Module\ModuleListInterface::listUrl()
173
     */
174
    public function listUrl(Tree $tree, array $parameters = []): string
175
    {
176
        return route(CertificatesList::class, ['tree' => $tree->name() ] + $parameters);
177
    }
178
179
    /**
180
     * {@inheritDoc}
181
     * @see \Fisharebest\Webtrees\Module\ModuleListInterface::listMenuClass()
182
     */
183
    public function listMenuClass(): string
184
    {
185
        return 'menu-maj-certificates';
186
    }
187
188
    /**
189
     * {@inheritDoc}
190
     * @see \Fisharebest\Webtrees\Module\ModuleListInterface::listIsEmpty()
191
     */
192
    public function listIsEmpty(Tree $tree): bool
193
    {
194
        return Auth::accessLevel($tree) > (int) $tree->getPreference('MAJ_CERTIF_SHOW_CERT', (string) Auth::PRIV_HIDE);
195
    }
196
}
197