xref: /webtrees/app/Module/CalendarMenuModule.php (revision f567c3d8c682bc271cb765480294cb4273f7632a)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2019 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 <http://www.gnu.org/licenses/>.
16 */
17declare(strict_types=1);
18
19namespace Fisharebest\Webtrees\Module;
20
21use Fisharebest\Webtrees\I18N;
22use Fisharebest\Webtrees\Menu;
23use Fisharebest\Webtrees\Tree;
24
25/**
26 * Class CalendarMenuModule - provide a menu option for the calendar
27 */
28class CalendarMenuModule extends AbstractModule implements ModuleMenuInterface
29{
30    use ModuleMenuTrait;
31
32    /**
33     * How should this module be identified in the control panel, etc.?
34     *
35     * @return string
36     */
37    public function title(): string
38    {
39        /* I18N: Name of a module */
40        return I18N::translate('Calendar');
41    }
42
43    /**
44     * A sentence describing what this module does.
45     *
46     * @return string
47     */
48    public function description(): string
49    {
50        /* I18N: Description of the “Reports” module */
51        return I18N::translate('The calendar menu.');
52    }
53
54    /**
55     * The default position for this menu.  It can be changed in the control panel.
56     *
57     * @return int
58     */
59    public function defaultMenuOrder(): int
60    {
61        return 4;
62    }
63
64    /**
65     * A menu, to be added to the main application menu.
66     *
67     * @param Tree $tree
68     *
69     * @return Menu|null
70     */
71    public function getMenu(Tree $tree): ?Menu
72    {
73        $submenu = [
74            $this->calendarDayMenu($tree),
75            $this->calendarMonthMenu($tree),
76            $this->calendarYearMenu($tree),
77        ];
78
79        return new Menu(I18N::translate('Calendar'), '#', 'menu-calendar', ['rel' => 'nofollow'], $submenu);
80    }
81
82    /**
83     * @param Tree $tree
84     *
85     * @return Menu
86     */
87    protected function calendarDayMenu(Tree $tree): Menu
88    {
89        return new Menu(I18N::translate('Day'), route('calendar', [
90            'view' => 'day',
91            'tree' => $tree->name(),
92        ]), 'menu-calendar-day', ['rel' => 'nofollow']);
93    }
94
95    /**
96     * @param Tree $tree
97     *
98     * @return Menu
99     */
100    protected function calendarMonthMenu(Tree $tree): Menu
101    {
102        return new Menu(I18N::translate('Month'), route('calendar', [
103            'view' => 'month',
104            'tree' => $tree->name(),
105        ]), 'menu-calendar-month', ['rel' => 'nofollow']);
106    }
107
108    /**
109     * @param Tree $tree
110     *
111     * @return Menu
112     */
113    protected function calendarYearMenu(Tree $tree): Menu
114    {
115        return new Menu(I18N::translate('Year'), route('calendar', [
116            'view' => 'year',
117            'tree' => $tree->name(),
118        ]), 'menu-calendar-year', ['rel' => 'nofollow']);
119    }
120}
121