xref: /webtrees/app/Http/Routes/WebRoutes.php (revision 2279b4f3a28a92742f414bb98187de1f0c4e6f29)
1*2279b4f3SGreg Roach<?php
2*2279b4f3SGreg Roach
3*2279b4f3SGreg Roach/**
4*2279b4f3SGreg Roach * webtrees: online genealogy
5*2279b4f3SGreg Roach * Copyright (C) 2019 webtrees development team
6*2279b4f3SGreg Roach * This program is free software: you can redistribute it and/or modify
7*2279b4f3SGreg Roach * it under the terms of the GNU General Public License as published by
8*2279b4f3SGreg Roach * the Free Software Foundation, either version 3 of the License, or
9*2279b4f3SGreg Roach * (at your option) any later version.
10*2279b4f3SGreg Roach * This program is distributed in the hope that it will be useful,
11*2279b4f3SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*2279b4f3SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*2279b4f3SGreg Roach * GNU General Public License for more details.
14*2279b4f3SGreg Roach * You should have received a copy of the GNU General Public License
15*2279b4f3SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
16*2279b4f3SGreg Roach */
17*2279b4f3SGreg Roach
18*2279b4f3SGreg Roachdeclare(strict_types=1);
19*2279b4f3SGreg Roach
20*2279b4f3SGreg Roachnamespace Fisharebest\Webtrees\Http\Routes;
21*2279b4f3SGreg Roach
22*2279b4f3SGreg Roachuse Aura\Router\Map;
23*2279b4f3SGreg Roachuse Fig\Http\Message\RequestMethodInterface;
24*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthAdministrator;
25*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthEditor;
26*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthLoggedIn;
27*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthManager;
28*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthMember;
29*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthModerator;
30*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\Middleware\AuthVisitor;
31*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\AccountDelete;
32*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\AccountEdit;
33*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\AccountUpdate;
34*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\AddNewFact;
35*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CleanDataFolder;
36*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
37*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CopyFact;
38*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateMediaObjectAction;
39*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateMediaObjectModal;
40*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateNoteAction;
41*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateNoteModal;
42*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateRepositoryAction;
43*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateRepositoryModal;
44*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateSourceAction;
45*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateSourceModal;
46*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateSubmitterAction;
47*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateSubmitterModal;
48*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateTreeAction;
49*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateTreePage;
50*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\DeleteFact;
51*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\DeletePath;
52*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\DeleteRecord;
53*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\DeleteTreeAction;
54*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\DeleteUser;
55*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EditFact;
56*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EditRawFactAction;
57*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EditRawFactPage;
58*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EditRawRecordAction;
59*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EditRawRecordPage;
60*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\FamilyPage;
61*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\GedcomRecordPage;
62*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\HelpText;
63*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\HomePage;
64*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\IndividualPage;
65*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\LoginAction;
66*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\LoginPage;
67*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Logout;
68*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\MasqueradeAsUser;
69*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\MediaPage;
70*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModuleAction;
71*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\NotePage;
72*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestAction;
73*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestPage;
74*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetAction;
75*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetPage;
76*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PasteFact;
77*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges;
78*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptChange;
79*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord;
80*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptTree;
81*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogAction;
82*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogData;
83*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogDelete;
84*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogDownload;
85*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogPage;
86*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectChange;
87*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord;
88*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectTree;
89*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PhpInformation;
90*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Ping;
91*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PrivacyPolicy;
92*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectFamilyPhp;
93*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectGedRecordPhp;
94*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectIndividualPhp;
95*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectMediaViewerPhp;
96*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectNotePhp;
97*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectRepoPhp;
98*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RedirectSourcePhp;
99*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RegisterAction;
100*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RegisterPage;
101*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderChildrenAction;
102*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderChildrenPage;
103*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderMediaAction;
104*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderMediaPage;
105*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderNamesAction;
106*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderNamesPage;
107*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderSpousesAction;
108*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReorderSpousesPage;
109*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReportGenerate;
110*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReportListAction;
111*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReportListPage;
112*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReportSetupAction;
113*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ReportSetupPage;
114*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RepositoryPage;
115*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\RobotsTxt;
116*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchAdvancedAction;
117*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchAdvancedPage;
118*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchGeneralAction;
119*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchGeneralPage;
120*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchPhoneticAction;
121*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchPhoneticPage;
122*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchQuickAction;
123*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchReplaceAction;
124*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SearchReplacePage;
125*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Family;
126*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Individual;
127*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2MediaObject;
128*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Note;
129*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Repository;
130*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Source;
131*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\Select2Submitter;
132*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SelectDefaultTree;
133*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SelectLanguage;
134*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SelectNewFact;
135*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SelectTheme;
136*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsAction;
137*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsData;
138*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsDelete;
139*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsDownload;
140*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsPage;
141*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SourcePage;
142*2279b4f3SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\VerifyEmail;
143*2279b4f3SGreg Roach
144*2279b4f3SGreg Roach/**
145*2279b4f3SGreg Roach * Routing table for web requests
146*2279b4f3SGreg Roach */
147*2279b4f3SGreg Roachclass WebRoutes
148*2279b4f3SGreg Roach{
149*2279b4f3SGreg Roach    public function load(Map $router): void
150*2279b4f3SGreg Roach    {
151*2279b4f3SGreg Roach        // Admin routes.
152*2279b4f3SGreg Roach        $router->attach('', '/admin', static function (Map $router) {
153*2279b4f3SGreg Roach            $router->extras([
154*2279b4f3SGreg Roach                'middleware' => [AuthAdministrator::class]
155*2279b4f3SGreg Roach            ]);
156*2279b4f3SGreg Roach
157*2279b4f3SGreg Roach            $router->get(ControlPanel::class, '/control-panel', ControlPanel::class);
158*2279b4f3SGreg Roach            $router->get('admin-fix-level-0-media', '/fix-level-0-media', 'Admin\FixLevel0MediaController::fixLevel0Media');
159*2279b4f3SGreg Roach            $router->post('admin-fix-level-0-media-action', '/fix-level-0-media', 'Admin\FixLevel0MediaController::fixLevel0MediaAction');
160*2279b4f3SGreg Roach            $router->get('admin-fix-level-0-media-data', '/fix-level-0-media-data', 'Admin\FixLevel0MediaController::fixLevel0MediaData');
161*2279b4f3SGreg Roach            $router->get('admin-webtrees1-thumbs', '/webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1Thumbnails');
162*2279b4f3SGreg Roach            $router->post('admin-webtrees1-thumbs-action', '/webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsAction');
163*2279b4f3SGreg Roach            $router->get('admin-webtrees1-thumbs-data', '/webtrees1-thumbs-data', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsData');
164*2279b4f3SGreg Roach            $router->get('modules', '/modules', 'Admin\ModuleController::list');
165*2279b4f3SGreg Roach            $router->post('modules-update', '/modules', 'Admin\ModuleController::update');
166*2279b4f3SGreg Roach            $router->get('analytics', '/analytics', 'Admin\ModuleController::listAnalytics');
167*2279b4f3SGreg Roach            $router->post('analytics-update', '/analytics', 'Admin\ModuleController::updateAnalytics');
168*2279b4f3SGreg Roach            $router->get('blocks', '/blocks', 'Admin\ModuleController::listBlocks');
169*2279b4f3SGreg Roach            $router->post('blocks-update', '/blocks', 'Admin\ModuleController::updateBlocks');
170*2279b4f3SGreg Roach            $router->get('charts', '/charts', 'Admin\ModuleController::listCharts');
171*2279b4f3SGreg Roach            $router->post('charts-update', '/charts', 'Admin\ModuleController::updateCharts');
172*2279b4f3SGreg Roach            $router->get('lists', '/lists', 'Admin\ModuleController::listLists');
173*2279b4f3SGreg Roach            $router->post('lists-update', '/lists', 'Admin\ModuleController::updateLists');
174*2279b4f3SGreg Roach            $router->get('footers', '/footers', 'Admin\ModuleController::listFooters');
175*2279b4f3SGreg Roach            $router->post('footers-update', '/footers', 'Admin\ModuleController::updateFooters');
176*2279b4f3SGreg Roach            $router->get('history', '/history', 'Admin\ModuleController::listHistory');
177*2279b4f3SGreg Roach            $router->post('history-update', '/history', 'Admin\ModuleController::updateHistory');
178*2279b4f3SGreg Roach            $router->get('menus', '/menus', 'Admin\ModuleController::listMenus');
179*2279b4f3SGreg Roach            $router->post('menus-update', '/menus', 'Admin\ModuleController::updateMenus');
180*2279b4f3SGreg Roach            $router->get('languages', '/languages', 'Admin\ModuleController::listLanguages');
181*2279b4f3SGreg Roach            $router->post('languages-update', '/languages', 'Admin\ModuleController::updateLanguages');
182*2279b4f3SGreg Roach            $router->get('reports', '/reports', 'Admin\ModuleController::listReports');
183*2279b4f3SGreg Roach            $router->post('reports-update', '/reports', 'Admin\ModuleController::updateReports');
184*2279b4f3SGreg Roach            $router->get('sidebars', '/sidebars', 'Admin\ModuleController::listSidebars');
185*2279b4f3SGreg Roach            $router->post('sidebars-update', '/sidebars', 'Admin\ModuleController::updateSidebars');
186*2279b4f3SGreg Roach            $router->get('themes', '/themes', 'Admin\ModuleController::listThemes');
187*2279b4f3SGreg Roach            $router->post('themes-update', '/themes', 'Admin\ModuleController::updateThemes');
188*2279b4f3SGreg Roach            $router->get('tabs', '/tabs', 'Admin\ModuleController::listTabs');
189*2279b4f3SGreg Roach            $router->post('tabs-update', '/tabs', 'Admin\ModuleController::updateTabs');
190*2279b4f3SGreg Roach            $router->post('delete-module-settings', '/delete-module-settings', 'Admin\ModuleController::deleteModuleSettings');
191*2279b4f3SGreg Roach            $router->get('map-data', '/map-data', 'Admin\LocationController::mapData');
192*2279b4f3SGreg Roach            $router->get('map-data-edit', '/map-data-edit', 'Admin\LocationController::mapDataEdit');
193*2279b4f3SGreg Roach            $router->post('map-data-update', '/map-data-edit', 'Admin\LocationController::mapDataSave');
194*2279b4f3SGreg Roach            $router->post('map-data-delete', '/map-data-delete', 'Admin\LocationController::mapDataDelete');
195*2279b4f3SGreg Roach            $router->get('locations-export', '/locations-export', 'Admin\LocationController::exportLocations');
196*2279b4f3SGreg Roach            $router->get('locations-import', '/locations-import', 'Admin\LocationController::importLocations');
197*2279b4f3SGreg Roach            $router->post('locations-import-action', '/locations-import', 'Admin\LocationController::importLocationsAction');
198*2279b4f3SGreg Roach            $router->post('locations-import-from-tree', '/locations-import-from-tree', 'Admin\LocationController::importLocationsFromTree');
199*2279b4f3SGreg Roach            $router->get('map-provider', '/map-provider', 'Admin\MapProviderController::mapProviderEdit');
200*2279b4f3SGreg Roach            $router->post('map-provider-action', '/map-provider', 'Admin\MapProviderController::mapProviderSave');
201*2279b4f3SGreg Roach            $router->get('admin-media', '/admin-media', 'Admin\MediaController::index');
202*2279b4f3SGreg Roach            $router->get('admin-media-data', '/admin-media-data', 'Admin\MediaController::data');
203*2279b4f3SGreg Roach            $router->post('admin-media-delete', '/admin-media-delete', 'Admin\MediaController::delete');
204*2279b4f3SGreg Roach            $router->get('admin-media-upload', '/admin-media-upload', 'Admin\MediaController::upload');
205*2279b4f3SGreg Roach            $router->post('admin-media-upload-action', '/admin-media-upload', 'Admin\MediaController::uploadAction');
206*2279b4f3SGreg Roach            $router->get('upgrade', '/upgrade', 'Admin\UpgradeController::wizard');
207*2279b4f3SGreg Roach            $router->post('upgrade-action', '/upgrade', 'Admin\UpgradeController::step');
208*2279b4f3SGreg Roach            $router->get('admin-users', '/admin-users', 'Admin\UsersController::index');
209*2279b4f3SGreg Roach            $router->get('admin-users-data', '/admin-users-data', 'Admin\UsersController::data');
210*2279b4f3SGreg Roach            $router->get('admin-users-create', '/admin-users-create', 'Admin\UsersController::create');
211*2279b4f3SGreg Roach            $router->post('admin-users-create-action', '/admin-users-create', 'Admin\UsersController::save');
212*2279b4f3SGreg Roach            $router->get('admin-users-edit', '/admin-users-edit', 'Admin\UsersController::edit');
213*2279b4f3SGreg Roach            $router->post('admin-users-update', '/admin-users-edit', 'Admin\UsersController::update');
214*2279b4f3SGreg Roach            $router->get('admin-users-cleanup', '/admin-users-cleanup', 'Admin\UsersController::cleanup');
215*2279b4f3SGreg Roach            $router->post('admin-users-cleanup-action', '/admin-users-cleanup', 'Admin\UsersController::cleanupAction');
216*2279b4f3SGreg Roach            $router->get(CleanDataFolder::class, '/clean', CleanDataFolder::class);
217*2279b4f3SGreg Roach            $router->post(DeletePath::class, '/delete-path', DeletePath::class);
218*2279b4f3SGreg Roach            $router->get('admin-site-preferences', '/admin-site-preferences', 'AdminSiteController::preferencesForm');
219*2279b4f3SGreg Roach            $router->post('admin-site-preferences-update', '/admin-site-preferences', 'AdminSiteController::preferencesSave');
220*2279b4f3SGreg Roach            $router->get('admin-site-mail', '/admin-site-mail', 'AdminSiteController::mailForm');
221*2279b4f3SGreg Roach            $router->post('admin-site-mail-update', '/admin-site-mail', 'AdminSiteController::mailSave');
222*2279b4f3SGreg Roach            $router->get('admin-site-registration', '/admin-site-registration', 'AdminSiteController::registrationForm');
223*2279b4f3SGreg Roach            $router->post('admin-site-registration-update', '/admin-site-registration', 'AdminSiteController::registrationSave');
224*2279b4f3SGreg Roach            $router->get('broadcast', '/broadcast', 'MessageController::broadcastPage');
225*2279b4f3SGreg Roach            $router->post('broadcast-action', '/broadcast', 'MessageController::broadcastAction');
226*2279b4f3SGreg Roach            $router->get(PhpInformation::class, '/information', PhpInformation::class);
227*2279b4f3SGreg Roach            $router->post('masquerade', '/masquerade/{user_id}', MasqueradeAsUser::class);
228*2279b4f3SGreg Roach            $router->get(SiteLogsPage::class, '/logs', SiteLogsPage::class);
229*2279b4f3SGreg Roach            $router->post(SiteLogsAction::class, '/logs', SiteLogsAction::class);
230*2279b4f3SGreg Roach            $router->get(SiteLogsData::class, '/logs-data', SiteLogsData::class);
231*2279b4f3SGreg Roach            $router->post(SiteLogsDelete::class, '/logs-delete', SiteLogsDelete::class);
232*2279b4f3SGreg Roach            $router->get(SiteLogsDownload::class, '/logs-download', SiteLogsDownload::class);
233*2279b4f3SGreg Roach            $router->get(CreateTreePage::class, '/trees/create', CreateTreePage::class);
234*2279b4f3SGreg Roach            $router->post(CreateTreeAction::class, '/trees/create', CreateTreeAction::class);
235*2279b4f3SGreg Roach            $router->post(SelectDefaultTree::class, '/trees/default/{tree}', SelectDefaultTree::class);
236*2279b4f3SGreg Roach            $router->get('tree-page-default-edit', '/trees/default-blocks', 'HomePageController::treePageDefaultEdit');
237*2279b4f3SGreg Roach            $router->post('tree-page-default-update', '/trees/default-blocks', 'HomePageController::treePageDefaultUpdate');
238*2279b4f3SGreg Roach            $router->post(DeleteTreeAction::class, '/trees/delete/{tree}', DeleteTreeAction::class);
239*2279b4f3SGreg Roach            $router->get('admin-trees-merge', '/trees/merge', 'AdminTreesController::merge');
240*2279b4f3SGreg Roach            $router->post('admin-trees-merge-action', '/trees/merge', 'AdminTreesController::mergeAction');
241*2279b4f3SGreg Roach            $router->post('admin-trees-sync', '/trees/sync', 'AdminTreesController::synchronize');
242*2279b4f3SGreg Roach            $router->get('unused-media-thumbnail', '/unused-media-thumbnail', 'MediaFileController::unusedMediaThumbnail');
243*2279b4f3SGreg Roach            $router->post('delete-user', '/users/delete/{user_id}', DeleteUser::class);
244*2279b4f3SGreg Roach            $router->get('user-page-default-edit', '/user-page-default-edit', 'HomePageController::userPageDefaultEdit');
245*2279b4f3SGreg Roach            $router->post('user-page-default-update', '/user-page-default-update', 'HomePageController::userPageDefaultUpdate');
246*2279b4f3SGreg Roach            $router->get('user-page-user-edit', '/user-page-user-edit', 'HomePageController::userPageUserEdit');
247*2279b4f3SGreg Roach            $router->post('user-page-user-update', '/user-page-user-update', 'HomePageController::userPageUserUpdate');
248*2279b4f3SGreg Roach        });
249*2279b4f3SGreg Roach
250*2279b4f3SGreg Roach        // Manager routes (without a tree).
251*2279b4f3SGreg Roach        $router->attach('', '/admin', static function (Map $router) {
252*2279b4f3SGreg Roach            $router->extras([
253*2279b4f3SGreg Roach                'middleware' => [AuthManager::class]
254*2279b4f3SGreg Roach            ]);
255*2279b4f3SGreg Roach
256*2279b4f3SGreg Roach            $router->get('manage-trees', '/trees/manage{/tree}', 'AdminTreesController::index');
257*2279b4f3SGreg Roach        });
258*2279b4f3SGreg Roach
259*2279b4f3SGreg Roach        // Manager routes.
260*2279b4f3SGreg Roach        $router->attach('', '/tree/{tree}', static function (Map $router) {
261*2279b4f3SGreg Roach            $router->extras([
262*2279b4f3SGreg Roach                'middleware' => [AuthManager::class]
263*2279b4f3SGreg Roach            ]);
264*2279b4f3SGreg Roach
265*2279b4f3SGreg Roach            $router->get(PendingChangesLogPage::class, '/changes-log', PendingChangesLogPage::class);
266*2279b4f3SGreg Roach            $router->post(PendingChangesLogAction::class, '/changes-log', PendingChangesLogAction::class);
267*2279b4f3SGreg Roach            $router->get(PendingChangesLogData::class, '/changes-data', PendingChangesLogData::class);
268*2279b4f3SGreg Roach            $router->post(PendingChangesLogDelete::class, '/changes-delete', PendingChangesLogDelete::class);
269*2279b4f3SGreg Roach            $router->get(PendingChangesLogDownload::class, '/changes-download', PendingChangesLogDownload::class);
270*2279b4f3SGreg Roach            $router->get('admin-trees-check', '/check', 'AdminTreesController::check');
271*2279b4f3SGreg Roach            $router->get('admin-trees-duplicates', '/duplicates', 'AdminTreesController::duplicates');
272*2279b4f3SGreg Roach            $router->get('admin-trees-export', '/export', 'AdminTreesController::export');
273*2279b4f3SGreg Roach            $router->get('admin-trees-download', '/download', 'AdminTreesController::exportClient');
274*2279b4f3SGreg Roach            $router->post('admin-trees-export-action', '/export', 'AdminTreesController::exportServer');
275*2279b4f3SGreg Roach            $router->get('admin-trees-import', '/import', 'AdminTreesController::importForm');
276*2279b4f3SGreg Roach            $router->post('admin-trees-import-action', '/import', 'AdminTreesController::importAction');
277*2279b4f3SGreg Roach            $router->get('admin-trees-places', '/places', 'AdminTreesController::places');
278*2279b4f3SGreg Roach            $router->post('admin-trees-places-action', '/places', 'AdminTreesController::placesAction');
279*2279b4f3SGreg Roach            $router->get('admin-trees-preferences', '/preferences', 'AdminTreesController::preferences');
280*2279b4f3SGreg Roach            $router->post('admin-trees-preferences-update', '/preferences', 'AdminTreesController::preferencesUpdate');
281*2279b4f3SGreg Roach            $router->get('admin-trees-renumber', '/renumber', 'AdminTreesController::renumber');
282*2279b4f3SGreg Roach            $router->post('admin-trees-renumber-action', '/renumber', 'AdminTreesController::renumberAction');
283*2279b4f3SGreg Roach            $router->get('admin-trees-unconnected', '/aunconnected', 'AdminTreesController::unconnected');
284*2279b4f3SGreg Roach            $router->get('tree-page-edit', '/tree-page-edit', 'HomePageController::treePageEdit');
285*2279b4f3SGreg Roach            $router->post('import', '/load', 'GedcomFileController::import');
286*2279b4f3SGreg Roach            $router->post('tree-page-update', '/tree-page-update', 'HomePageController::treePageUpdate');
287*2279b4f3SGreg Roach            $router->get('merge-records', '/merge-records', 'AdminController::mergeRecords');
288*2279b4f3SGreg Roach            $router->post('merge-records-update', '/merge-records', 'AdminController::mergeRecordsAction');
289*2279b4f3SGreg Roach            $router->get('tree-page-block-edit', '/tree-page-block-edit', 'HomePageController::treePageBlockEdit');
290*2279b4f3SGreg Roach            $router->post('tree-page-block-update', '/tree-page-block-edit', 'HomePageController::treePageBlockUpdate');
291*2279b4f3SGreg Roach            $router->get('tree-preferences', '/preferences', 'AdminController::treePreferencesEdit');
292*2279b4f3SGreg Roach            $router->post('tree-preferences-update', '/preferences', 'AdminController::treePreferencesUpdate');
293*2279b4f3SGreg Roach            $router->get('tree-privacy', '/privacy', 'AdminController::treePrivacyEdit');
294*2279b4f3SGreg Roach            $router->post('tree-privacy-update', '/privacy', 'AdminController::treePrivacyUpdate');
295*2279b4f3SGreg Roach        });
296*2279b4f3SGreg Roach
297*2279b4f3SGreg Roach        // Moderator routes.
298*2279b4f3SGreg Roach        $router->attach('', '/tree/{tree}', static function (Map $router) {
299*2279b4f3SGreg Roach            $router->extras([
300*2279b4f3SGreg Roach                'middleware' => [AuthModerator::class]
301*2279b4f3SGreg Roach            ]);
302*2279b4f3SGreg Roach            $router->post(PendingChangesAcceptTree::class, '/accept', PendingChangesAcceptTree::class);
303*2279b4f3SGreg Roach            $router->post(PendingChangesAcceptRecord::class, '/accept/{xref}', PendingChangesAcceptRecord::class);
304*2279b4f3SGreg Roach            $router->post(PendingChangesAcceptChange::class, '/accept/{xref}/{change}', PendingChangesAcceptChange::class);
305*2279b4f3SGreg Roach            $router->get(PendingChanges::class, '/pending', PendingChanges::class);
306*2279b4f3SGreg Roach            $router->post(PendingChangesRejectTree::class, '/reject', PendingChangesRejectTree::class);
307*2279b4f3SGreg Roach            $router->post(PendingChangesRejectRecord::class, '/reject/{xref}', PendingChangesRejectRecord::class);
308*2279b4f3SGreg Roach            $router->post(PendingChangesRejectChange::class, '/reject/{xref}/{change}', PendingChangesRejectChange::class);
309*2279b4f3SGreg Roach        });
310*2279b4f3SGreg Roach
311*2279b4f3SGreg Roach        // Editor routes.
312*2279b4f3SGreg Roach        $router->attach('', '/tree/{tree}', static function (Map $router) {
313*2279b4f3SGreg Roach            $router->extras([
314*2279b4f3SGreg Roach                'middleware' => [AuthEditor::class]
315*2279b4f3SGreg Roach            ]);
316*2279b4f3SGreg Roach
317*2279b4f3SGreg Roach            $router->get('add-child-to-family', '/add-child-to-family', 'EditFamilyController::addChild');
318*2279b4f3SGreg Roach            $router->post('add-child-to-family-action', '/add-child-to-family', 'EditFamilyController::addChildAction');
319*2279b4f3SGreg Roach            $router->get(AddNewFact::class, '/add-fact/{xref}/{fact}', AddNewFact::class);
320*2279b4f3SGreg Roach            $router->post(SelectNewFact::class, '/add-fact/{xref}', SelectNewFact::class);
321*2279b4f3SGreg Roach            $router->get('add-media-file', '/add-media-file', 'EditMediaController::addMediaFile');
322*2279b4f3SGreg Roach            $router->post('add-media-file-update', '/add-media-file', 'EditMediaController::addMediaFileAction');
323*2279b4f3SGreg Roach            $router->get('add-name', '/add-name', 'EditIndividualController::addName');
324*2279b4f3SGreg Roach            $router->post('add-name-action', '/add-name-update/{xref}', 'EditIndividualController::addNameAction');
325*2279b4f3SGreg Roach            $router->get('add-spouse-to-family', '/add-spouse-to-family', 'EditFamilyController::addSpouse');
326*2279b4f3SGreg Roach            $router->post('add-spouse-to-family-action', '/add-spouse-to-family', 'EditFamilyController::addSpouseAction');
327*2279b4f3SGreg Roach            $router->get('change-family-members', '/change-family-members', 'EditFamilyController::changeFamilyMembers');
328*2279b4f3SGreg Roach            $router->post('change-family-members-action', '/change-family-members', 'EditFamilyController::changeFamilyMembersAction');
329*2279b4f3SGreg Roach            $router->get(CreateMediaObjectModal::class, '/create-media-object', CreateMediaObjectModal::class);
330*2279b4f3SGreg Roach            $router->post(CreateMediaObjectAction::class, '/create-media-object', CreateMediaObjectAction::class);
331*2279b4f3SGreg Roach            $router->post('create-media-from-file', '/create-media-from-file', 'EditMediaController::createMediaObjectFromFileAction');
332*2279b4f3SGreg Roach            $router->post(CopyFact::class, '/copy/{xref}/{fact_id}', CopyFact::class);
333*2279b4f3SGreg Roach            $router->get(CreateNoteModal::class, '/create-note-object', CreateNoteModal::class);
334*2279b4f3SGreg Roach            $router->post(CreateNoteAction::class, '/create-note-object', CreateNoteAction::class);
335*2279b4f3SGreg Roach            $router->get(CreateRepositoryModal::class, '/create-repository', CreateRepositoryModal::class);
336*2279b4f3SGreg Roach            $router->post(CreateRepositoryAction::class, '/create-repository', CreateRepositoryAction::class);
337*2279b4f3SGreg Roach            $router->get(CreateSourceModal::class, '/create-source', CreateSourceModal::class);
338*2279b4f3SGreg Roach            $router->post(CreateSourceAction::class, '/create-source', CreateSourceAction::class);
339*2279b4f3SGreg Roach            $router->get(CreateSubmitterModal::class, '/create-submitter', CreateSubmitterModal::class);
340*2279b4f3SGreg Roach            $router->post(CreateSubmitterAction::class, '/create-submitter', CreateSubmitterAction::class);
341*2279b4f3SGreg Roach            $router->post(DeleteRecord::class, '/delete/{xref}', DeleteRecord::class);
342*2279b4f3SGreg Roach            $router->post(DeleteFact::class, '/delete/{xref}/{fact_id}', DeleteFact::class);
343*2279b4f3SGreg Roach            $router->get(EditFact::class, '/edit-fact', EditFact::class);
344*2279b4f3SGreg Roach            $router->get('edit-media-file', '/edit-media-file', 'EditMediaController::editMediaFile');
345*2279b4f3SGreg Roach            $router->post('edit-media-file-update', '/edit-media-file', 'EditMediaController::editMediaFileAction');
346*2279b4f3SGreg Roach            $router->get('edit-note-object', '/edit-note-object', 'EditNoteController::editNoteObject');
347*2279b4f3SGreg Roach            $router->post('edit-note-object-action', '/edit-note-object', 'EditNoteController::updateNoteObject');
348*2279b4f3SGreg Roach            $router->get(EditRawFactPage::class, '/edit-raw/{xref}/{fact_id}', EditRawFactPage::class);
349*2279b4f3SGreg Roach            $router->post(EditRawFactAction::class, '/edit-raw/{xref}/{fact_id}', EditRawFactAction::class);
350*2279b4f3SGreg Roach            $router->get(EditRawRecordPage::class, '/edit-raw/{xref}', EditRawRecordPage::class);
351*2279b4f3SGreg Roach            $router->post(EditRawRecordAction::class, '/edit-raw/{xref}', EditRawRecordAction::class);
352*2279b4f3SGreg Roach            $router->get('link-media-to-individual', '/link-media-to-individual', 'EditMediaController::linkMediaToIndividual');
353*2279b4f3SGreg Roach            $router->get('link-media-to-family', '/link-media-to-family', 'EditMediaController::linkMediaToFamily');
354*2279b4f3SGreg Roach            $router->get('link-media-to-source', '/link-media-to-source', 'EditMediaController::linkMediaToSource');
355*2279b4f3SGreg Roach            $router->post('link-media-to-record', '/link-media-to-record', 'EditMediaController::linkMediaToRecordAction');
356*2279b4f3SGreg Roach            $router->post(PasteFact::class, '/paste-fact/{xref}', PasteFact::class);
357*2279b4f3SGreg Roach            $router->get(ReorderChildrenPage::class, '/reorder-children/{xref}', ReorderChildrenPage::class);
358*2279b4f3SGreg Roach            $router->post(ReorderChildrenAction::class, '/reorder-children/{xref}', ReorderChildrenAction::class);
359*2279b4f3SGreg Roach            $router->get(ReorderMediaPage::class, '/reorder-media/{xref}', ReorderMediaPage::class);
360*2279b4f3SGreg Roach            $router->post(ReorderMediaAction::class, '/reorder-media/{xref}', ReorderMediaAction::class);
361*2279b4f3SGreg Roach            $router->get(ReorderNamesPage::class, '/reorder-names/{xref}', ReorderNamesPage::class);
362*2279b4f3SGreg Roach            $router->post(ReorderNamesAction::class, '/reorder-names/{xref}', ReorderNamesAction::class);
363*2279b4f3SGreg Roach            $router->get(ReorderSpousesPage::class, '/reorder-spouses/{xref}', ReorderSpousesPage::class);
364*2279b4f3SGreg Roach            $router->post(ReorderSpousesAction::class, '/reorder-spouses/{xref}', ReorderSpousesAction::class);
365*2279b4f3SGreg Roach            $router->get(SearchReplacePage::class, '/search-replace', SearchReplacePage::class);
366*2279b4f3SGreg Roach            $router->post(SearchReplaceAction::class, '/search-replace', SearchReplaceAction::class);
367*2279b4f3SGreg Roach            $router->get('add-child-to-individual', '/add-child-to-individual', 'EditIndividualController::addChild');
368*2279b4f3SGreg Roach            $router->post('add-child-to-individual-action', '/add-child-to-individual', 'EditIndividualController::addChildAction');
369*2279b4f3SGreg Roach            $router->get('add-parent-to-individual', '/add-parent-to-individual', 'EditIndividualController::addParent');
370*2279b4f3SGreg Roach            $router->post('add-parent-to-individual-action', '/add-parent-to-individual', 'EditIndividualController::addParentAction');
371*2279b4f3SGreg Roach            $router->get('add-spouse-to-individual', '/add-spouse-to-individual', 'EditIndividualController::addSpouse');
372*2279b4f3SGreg Roach            $router->post('add-spouse-to-individual-action', '/add-spouse-to-individual', 'EditIndividualController::addSpouseAction');
373*2279b4f3SGreg Roach            $router->get('add-unlinked-individual', '/add-unlinked-individual', 'EditIndividualController::addUnlinked');
374*2279b4f3SGreg Roach            $router->post('add-unlinked-individual-action', '/add-unlinked-individual', 'EditIndividualController::addUnlinkedAction');
375*2279b4f3SGreg Roach            $router->get('link-child-to-family', '/link-child-to-family', 'EditIndividualController::linkChildToFamily');
376*2279b4f3SGreg Roach            $router->post('link-child-to-family-action', '/link-child-to-family', 'EditIndividualController::linkChildToFamilyAction');
377*2279b4f3SGreg Roach            $router->get('link-spouse-to-individual', '/link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividual');
378*2279b4f3SGreg Roach            $router->post('link-spouse-to-individual-action', '/link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividualAction');
379*2279b4f3SGreg Roach            $router->get('edit-name', '/edit-name/{xref}/{fact_id}', 'EditIndividualController::editName');
380*2279b4f3SGreg Roach            $router->post('edit-name-action', '/edit-name-update/{xref}/{fact_id}', 'EditIndividualController::editNameAction');
381*2279b4f3SGreg Roach            $router->post('update-fact', '/update-fact/{xref}{/fact_id}', 'EditGedcomRecordController::updateFact');
382*2279b4f3SGreg Roach        });
383*2279b4f3SGreg Roach
384*2279b4f3SGreg Roach        // Member routes.
385*2279b4f3SGreg Roach        $router->attach('', '/tree/{tree}', static function (Map $router) {
386*2279b4f3SGreg Roach            $router->extras([
387*2279b4f3SGreg Roach                'middleware' => [AuthMember::class]
388*2279b4f3SGreg Roach            ]);
389*2279b4f3SGreg Roach
390*2279b4f3SGreg Roach            $router->get('user-page', '/my-page', 'HomePageController::userPage');
391*2279b4f3SGreg Roach            $router->get('user-page-block', '/my-page-block', 'HomePageController::userPageBlock');
392*2279b4f3SGreg Roach            $router->get('user-page-edit', '/my-page-edit', 'HomePageController::userPageEdit');
393*2279b4f3SGreg Roach            $router->post('user-page-update', '/my-page-edit', 'HomePageController::userPageUpdate');
394*2279b4f3SGreg Roach            $router->get('user-page-block-edit', '/my-page-block-edit', 'HomePageController::userPageBlockEdit');
395*2279b4f3SGreg Roach            $router->post('user-page-block-update', '/my-page-block-edit', 'HomePageController::userPageBlockUpdate');
396*2279b4f3SGreg Roach        });
397*2279b4f3SGreg Roach
398*2279b4f3SGreg Roach        // User routes.
399*2279b4f3SGreg Roach        $router->attach('', '', static function (Map $router) {
400*2279b4f3SGreg Roach            $router->extras([
401*2279b4f3SGreg Roach                'middleware' => [AuthLoggedIn::class]
402*2279b4f3SGreg Roach            ]);
403*2279b4f3SGreg Roach
404*2279b4f3SGreg Roach            $router->get(AccountEdit::class, '/my-account{/tree}', AccountEdit::class);
405*2279b4f3SGreg Roach            $router->post(AccountUpdate::class, '/my-account{/tree}', AccountUpdate::class);
406*2279b4f3SGreg Roach            $router->post(AccountDelete::class, '/my-account-delete', AccountDelete::class);
407*2279b4f3SGreg Roach        });
408*2279b4f3SGreg Roach
409*2279b4f3SGreg Roach        // Visitor routes.
410*2279b4f3SGreg Roach        $router->attach('', '', static function (Map $router) {
411*2279b4f3SGreg Roach            $router->extras([
412*2279b4f3SGreg Roach                'middleware' => [AuthVisitor::class]
413*2279b4f3SGreg Roach            ]);
414*2279b4f3SGreg Roach
415*2279b4f3SGreg Roach            $router->get(PasswordRequestPage::class, '/password-request', PasswordRequestPage::class);
416*2279b4f3SGreg Roach            $router->post(PasswordRequestAction::class, '/password-request', PasswordRequestAction::class);
417*2279b4f3SGreg Roach            $router->get(RegisterPage::class, '/register', RegisterPage::class);
418*2279b4f3SGreg Roach            $router->post(RegisterAction::class, '/register', RegisterAction::class);
419*2279b4f3SGreg Roach        });
420*2279b4f3SGreg Roach
421*2279b4f3SGreg Roach        // Public routes.
422*2279b4f3SGreg Roach        $router->attach('', '/tree/{tree}', static function (Map $router) {
423*2279b4f3SGreg Roach            $router->get('tree-page', '/', 'HomePageController::treePage');
424*2279b4f3SGreg Roach            $router->get('autocomplete-folder', '/autocomplete-folder', 'AutocompleteController::folder');
425*2279b4f3SGreg Roach            $router->get('autocomplete-page', '/autocomplete-page', 'AutocompleteController::page');
426*2279b4f3SGreg Roach            $router->get('autocomplete-place', '/autocomplete-place', 'AutocompleteController::place');
427*2279b4f3SGreg Roach            $router->get('calendar', '/calendar/{view}', 'CalendarController::page');
428*2279b4f3SGreg Roach            $router->get('calendar-events', '/calendar-events/{view}', 'CalendarController::calendar');
429*2279b4f3SGreg Roach            $router->get('contact', '/contact', 'MessageController::contactPage');
430*2279b4f3SGreg Roach            $router->post('contact-action', '/contact', 'MessageController::contactAction');
431*2279b4f3SGreg Roach            $router->get(FamilyPage::class, '/family/{xref}{/slug}', FamilyPage::class);
432*2279b4f3SGreg Roach            $router->get(IndividualPage::class, '/individual/{xref}{/slug}', IndividualPage::class);
433*2279b4f3SGreg Roach            $router->get('media-thumbnail', '/media-thumbnail', 'MediaFileController::mediaThumbnail');
434*2279b4f3SGreg Roach            $router->get('media-download', '/media-download', 'MediaFileController::mediaDownload');
435*2279b4f3SGreg Roach            $router->get(MediaPage::class, '/media/{xref}{/slug}', MediaPage::class);
436*2279b4f3SGreg Roach            $router->get('message', '/message', 'MessageController::messagePage');
437*2279b4f3SGreg Roach            $router->post('message-action', '/message', 'MessageController::messageAction');
438*2279b4f3SGreg Roach            $router->get(NotePage::class, '/note/{xref}{/slug}', NotePage::class);
439*2279b4f3SGreg Roach            $router->get(GedcomRecordPage::class, '/record/{xref}{/slug}', GedcomRecordPage::class);
440*2279b4f3SGreg Roach            $router->get(RepositoryPage::class, '/repository/{xref}{/slug}', RepositoryPage::class);
441*2279b4f3SGreg Roach            $router->get(ReportListPage::class, '/report', ReportListPage::class);
442*2279b4f3SGreg Roach            $router->post(ReportListAction::class, '/report', ReportListAction::class);
443*2279b4f3SGreg Roach            $router->get(ReportSetupPage::class, '/report/{report}', ReportSetupPage::class);
444*2279b4f3SGreg Roach            $router->post(ReportSetupAction::class, '/report/{report}', ReportSetupAction::class);
445*2279b4f3SGreg Roach            $router->get(ReportGenerate::class, '/report-run/{report}', ReportGenerate::class);
446*2279b4f3SGreg Roach            $router->get(SearchAdvancedPage::class, '/search-advanced', SearchAdvancedPage::class);
447*2279b4f3SGreg Roach            $router->post(SearchAdvancedAction::class, '/search-advanced', SearchAdvancedAction::class);
448*2279b4f3SGreg Roach            $router->get(SearchGeneralPage::class, '/search-general', SearchGeneralPage::class);
449*2279b4f3SGreg Roach            $router->post(SearchGeneralAction::class, '/search-general', SearchGeneralAction::class);
450*2279b4f3SGreg Roach            $router->get(SearchPhoneticPage::class, '/search-phonetic', SearchPhoneticPage::class);
451*2279b4f3SGreg Roach            $router->post(SearchPhoneticAction::class, '/search-phonetic', SearchPhoneticAction::class);
452*2279b4f3SGreg Roach            $router->post(SearchQuickAction::class, '/search-quick', SearchQuickAction::class);
453*2279b4f3SGreg Roach            $router->post(Select2Family::class, '/select2-family', Select2Family::class);
454*2279b4f3SGreg Roach            $router->post(Select2Individual::class, '/select2-individual', Select2Individual::class);
455*2279b4f3SGreg Roach            $router->post(Select2MediaObject::class, '/select2-media', Select2MediaObject::class);
456*2279b4f3SGreg Roach            $router->post(Select2Note::class, '/select2-note', Select2Note::class);
457*2279b4f3SGreg Roach            $router->post(Select2Source::class, '/select2-source', Select2Source::class);
458*2279b4f3SGreg Roach            $router->post(Select2Submitter::class, '/select2-submitter', Select2Submitter::class);
459*2279b4f3SGreg Roach            $router->post(Select2Repository::class, '/select2-repository', Select2Repository::class);
460*2279b4f3SGreg Roach            $router->get(SourcePage::class, '/source/{xref}{/slug}', SourcePage::class);
461*2279b4f3SGreg Roach            $router->get('tree-page-block', '/tree-page-block', 'HomePageController::treePageBlock');
462*2279b4f3SGreg Roach            $router->get('example', '/…');
463*2279b4f3SGreg Roach        });
464*2279b4f3SGreg Roach
465*2279b4f3SGreg Roach        $router->get('module', '/module/{module}/{action}{/tree}', ModuleAction::class)
466*2279b4f3SGreg Roach            ->allows(RequestMethodInterface::METHOD_POST);
467*2279b4f3SGreg Roach
468*2279b4f3SGreg Roach        $router->get(HelpText::class, '/help/{topic}', HelpText::class);
469*2279b4f3SGreg Roach        $router->post(SelectLanguage::class, '/language/{language}', SelectLanguage::class);
470*2279b4f3SGreg Roach        $router->get(LoginPage::class, '/login{/tree}', LoginPage::class);
471*2279b4f3SGreg Roach        $router->post(LoginAction::class, '/login{/tree}', LoginAction::class);
472*2279b4f3SGreg Roach        $router->post(Logout::class, '/logout', Logout::class);
473*2279b4f3SGreg Roach        $router->get(PasswordResetPage::class, '/password-reset', PasswordResetPage::class);
474*2279b4f3SGreg Roach        $router->post(PasswordResetAction::class, '/password-reset', PasswordResetAction::class);
475*2279b4f3SGreg Roach        $router->get(Ping::class, '/ping', Ping::class);
476*2279b4f3SGreg Roach        $router->get(RobotsTxt::class, '/robots.txt', RobotsTxt::class);
477*2279b4f3SGreg Roach        $router->post(SelectTheme::class, '/theme/{theme}', SelectTheme::class);
478*2279b4f3SGreg Roach        $router->get(VerifyEmail::class, '/verify', VerifyEmail::class);
479*2279b4f3SGreg Roach        $router->get(PrivacyPolicy::class, '/privacy-policy', PrivacyPolicy::class);
480*2279b4f3SGreg Roach        $router->get(HomePage::class, '/', HomePage::class);
481*2279b4f3SGreg Roach
482*2279b4f3SGreg Roach        // Legacy URLs from older software.
483*2279b4f3SGreg Roach        $router->get(RedirectFamilyPhp::class, '/family.php', RedirectFamilyPhp::class);
484*2279b4f3SGreg Roach        $router->get(RedirectGedRecordPhp::class, '/gedrecord.php', RedirectGedRecordPhp::class);
485*2279b4f3SGreg Roach        $router->get(RedirectIndividualPhp::class, '/individual.php', RedirectIndividualPhp::class);
486*2279b4f3SGreg Roach        $router->get(RedirectMediaViewerPhp::class, '/mediaviewer.php', RedirectMediaViewerPhp::class);
487*2279b4f3SGreg Roach        $router->get(RedirectNotePhp::class, '/note.php', RedirectNotePhp::class);
488*2279b4f3SGreg Roach        $router->get(RedirectRepoPhp::class, '/repository.php', RedirectRepoPhp::class);
489*2279b4f3SGreg Roach        $router->get(RedirectSourcePhp::class, '/source.php', RedirectSourcePhp::class);
490*2279b4f3SGreg Roach    }
491*2279b4f3SGreg Roach}
492