xref: /webtrees/app/Services/HousekeepingService.php (revision 362b84648b116e80ad8951484a8cb04147899fad)
1a3dc3edaSGreg Roach<?php
2a3dc3edaSGreg Roach/**
3a3dc3edaSGreg Roach * webtrees: online genealogy
48fcd0d32SGreg Roach * Copyright (C) 2019 webtrees development team
5a3dc3edaSGreg Roach * This program is free software: you can redistribute it and/or modify
6a3dc3edaSGreg Roach * it under the terms of the GNU General Public License as published by
7a3dc3edaSGreg Roach * the Free Software Foundation, either version 3 of the License, or
8a3dc3edaSGreg Roach * (at your option) any later version.
9a3dc3edaSGreg Roach * This program is distributed in the hope that it will be useful,
10a3dc3edaSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
11a3dc3edaSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12a3dc3edaSGreg Roach * GNU General Public License for more details.
13a3dc3edaSGreg Roach * You should have received a copy of the GNU General Public License
14a3dc3edaSGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
15a3dc3edaSGreg Roach */
16e7f56f2aSGreg Roachdeclare(strict_types=1);
17e7f56f2aSGreg Roach
18a3dc3edaSGreg Roachnamespace Fisharebest\Webtrees\Services;
19a3dc3edaSGreg Roach
20a3dc3edaSGreg Roachuse Exception;
214459dc9aSGreg Roachuse Fisharebest\Webtrees\Carbon;
22e5c19fcdSGreg Roachuse Illuminate\Database\Capsule\Manager as DB;
23a3dc3edaSGreg Roachuse League\Flysystem\Filesystem;
24a3dc3edaSGreg Roach
25a3dc3edaSGreg Roach/**
26a3dc3edaSGreg Roach * Clean up old data, files and folders.
27a3dc3edaSGreg Roach */
28a3dc3edaSGreg Roachclass HousekeepingService
29a3dc3edaSGreg Roach{
30a3dc3edaSGreg Roach    // This is a list of old files and directories, from earlier versions of webtrees.
31a3dc3edaSGreg Roach    // git diff 1.7.9..master --name-status | grep ^D
3216d6367aSGreg Roach    private const OLD_PATHS = [
33a3dc3edaSGreg Roach        // Removed in 1.0.3
34a3dc3edaSGreg Roach        'themechange.php',
35a3dc3edaSGreg Roach        // Removed in 1.1.0
36a3dc3edaSGreg Roach        'addremotelink.php',
37a3dc3edaSGreg Roach        'addsearchlink.php',
38a3dc3edaSGreg Roach        'client.php',
39a3dc3edaSGreg Roach        'dir_editor.php',
40a3dc3edaSGreg Roach        'editconfig_gedcom.php',
41a3dc3edaSGreg Roach        'editgedcoms.php',
42a3dc3edaSGreg Roach        'edit_merge.php',
43a3dc3edaSGreg Roach        'edit_news.php',
44a3dc3edaSGreg Roach        'genservice.php',
45a3dc3edaSGreg Roach        'logs.php',
46a3dc3edaSGreg Roach        'manageservers.php',
47a3dc3edaSGreg Roach        'media.php',
48a3dc3edaSGreg Roach        'module_admin.php',
49a3dc3edaSGreg Roach        //WT_ROOT.'modules', // Do not delete - users may have stored custom modules/data here
50a3dc3edaSGreg Roach        'opensearch.php',
51a3dc3edaSGreg Roach        'PEAR.php',
52a3dc3edaSGreg Roach        'pgv_to_wt.php',
53a3dc3edaSGreg Roach        'places',
54a3dc3edaSGreg Roach        //WT_ROOT.'robots.txt', // Do not delete this - it may contain user data
55a3dc3edaSGreg Roach        'serviceClientTest.php',
56a3dc3edaSGreg Roach        'siteconfig.php',
57a3dc3edaSGreg Roach        'SOAP',
58a3dc3edaSGreg Roach        'themes/clouds/mozilla.css',
59a3dc3edaSGreg Roach        'themes/clouds/netscape.css',
60a3dc3edaSGreg Roach        'themes/colors/mozilla.css',
61a3dc3edaSGreg Roach        'themes/colors/netscape.css',
62a3dc3edaSGreg Roach        'themes/fab/mozilla.css',
63a3dc3edaSGreg Roach        'themes/fab/netscape.css',
64a3dc3edaSGreg Roach        'themes/minimal/mozilla.css',
65a3dc3edaSGreg Roach        'themes/minimal/netscape.css',
66a3dc3edaSGreg Roach        'themes/webtrees/mozilla.css',
67a3dc3edaSGreg Roach        'themes/webtrees/netscape.css',
68a3dc3edaSGreg Roach        'themes/webtrees/style_rtl.css',
69a3dc3edaSGreg Roach        'themes/xenea/mozilla.css',
70a3dc3edaSGreg Roach        'themes/xenea/netscape.css',
71a3dc3edaSGreg Roach        'uploadmedia.php',
72a3dc3edaSGreg Roach        'useradmin.php',
73a3dc3edaSGreg Roach        'webservice',
74a3dc3edaSGreg Roach        'wtinfo.php',
75a3dc3edaSGreg Roach        // Removed in 1.1.2
76a3dc3edaSGreg Roach        'treenav.php',
77a3dc3edaSGreg Roach        // Removed in 1.2.0
78a3dc3edaSGreg Roach        'themes/clouds/jquery',
79a3dc3edaSGreg Roach        'themes/colors/jquery',
80a3dc3edaSGreg Roach        'themes/fab/jquery',
81a3dc3edaSGreg Roach        'themes/minimal/jquery',
82a3dc3edaSGreg Roach        'themes/webtrees/jquery',
83a3dc3edaSGreg Roach        'themes/xenea/jquery',
84a3dc3edaSGreg Roach        // Removed in 1.2.2
85a3dc3edaSGreg Roach        'themes/clouds/chrome.css',
86a3dc3edaSGreg Roach        'themes/clouds/opera.css',
87a3dc3edaSGreg Roach        'themes/clouds/print.css',
88a3dc3edaSGreg Roach        'themes/clouds/style_rtl.css',
89a3dc3edaSGreg Roach        'themes/colors/chrome.css',
90a3dc3edaSGreg Roach        'themes/colors/opera.css',
91a3dc3edaSGreg Roach        'themes/colors/print.css',
92a3dc3edaSGreg Roach        'themes/colors/style_rtl.css',
93a3dc3edaSGreg Roach        'themes/fab/chrome.css',
94a3dc3edaSGreg Roach        'themes/fab/opera.css',
95a3dc3edaSGreg Roach        'themes/minimal/chrome.css',
96a3dc3edaSGreg Roach        'themes/minimal/opera.css',
97a3dc3edaSGreg Roach        'themes/minimal/print.css',
98a3dc3edaSGreg Roach        'themes/minimal/style_rtl.css',
99a3dc3edaSGreg Roach        'themes/xenea/chrome.css',
100a3dc3edaSGreg Roach        'themes/xenea/opera.css',
101a3dc3edaSGreg Roach        'themes/xenea/print.css',
102a3dc3edaSGreg Roach        'themes/xenea/style_rtl.css',
103a3dc3edaSGreg Roach        // Removed in 1.2.3
10449a243cbSGreg Roach        'modules_v2',
105a3dc3edaSGreg Roach        // Removed in 1.2.4
106a3dc3edaSGreg Roach        'search_engine.php',
107a3dc3edaSGreg Roach        'themes/clouds/modules.css',
108a3dc3edaSGreg Roach        'themes/colors/modules.css',
109a3dc3edaSGreg Roach        'themes/fab/modules.css',
110a3dc3edaSGreg Roach        'themes/minimal/modules.css',
111a3dc3edaSGreg Roach        'themes/webtrees/modules.css',
112a3dc3edaSGreg Roach        'themes/xenea/modules.css',
113a3dc3edaSGreg Roach        // Removed in 1.2.5
114a3dc3edaSGreg Roach        'sidebar.php',
115a3dc3edaSGreg Roach        // Removed in 1.2.6
116a3dc3edaSGreg Roach        // Removed in 1.2.7
117a3dc3edaSGreg Roach        'login_register.php',
118a3dc3edaSGreg Roach        // Removed in 1.3.0
119a3dc3edaSGreg Roach        'admin_site_ipaddress.php',
120a3dc3edaSGreg Roach        'downloadgedcom.php',
121a3dc3edaSGreg Roach        'export_gedcom.php',
122a3dc3edaSGreg Roach        'gedcheck.php',
123a3dc3edaSGreg Roach        'images',
124a3dc3edaSGreg Roach        // Removed in 1.3.1
125a3dc3edaSGreg Roach        'imageflush.php',
12649a243cbSGreg Roach        '/lightbox/js/tip_balloon_RTL.js',
127a3dc3edaSGreg Roach        // Removed in 1.4.0
128a3dc3edaSGreg Roach        'imageview.php',
129a3dc3edaSGreg Roach        'media/MediaInfo.txt',
130a3dc3edaSGreg Roach        'media/thumbs/ThumbsInfo.txt',
131a3dc3edaSGreg Roach        'themes/webtrees/chrome.css',
132a3dc3edaSGreg Roach        // Removed in 1.4.2
133a3dc3edaSGreg Roach        'themes/clouds/jquery-ui-1.10.0',
134a3dc3edaSGreg Roach        'themes/colors/jquery-ui-1.10.0',
135a3dc3edaSGreg Roach        'themes/fab/jquery-ui-1.10.0',
136a3dc3edaSGreg Roach        'themes/minimal/jquery-ui-1.10.0',
137a3dc3edaSGreg Roach        'themes/webtrees/jquery-ui-1.10.0',
138a3dc3edaSGreg Roach        'themes/xenea/jquery-ui-1.10.0',
139a3dc3edaSGreg Roach        // Removed in 1.5.0
140a3dc3edaSGreg Roach        'themes/clouds/favicon.png',
141a3dc3edaSGreg Roach        'themes/clouds/images',
142a3dc3edaSGreg Roach        'themes/clouds/msie.css',
143a3dc3edaSGreg Roach        'themes/clouds/style.css',
144a3dc3edaSGreg Roach        'themes/colors/css',
145a3dc3edaSGreg Roach        'themes/colors/favicon.png',
146a3dc3edaSGreg Roach        'themes/colors/images',
147a3dc3edaSGreg Roach        'themes/colors/ipad.css',
148a3dc3edaSGreg Roach        'themes/colors/msie.css',
149a3dc3edaSGreg Roach        'themes/fab/favicon.png',
150a3dc3edaSGreg Roach        'themes/fab/images',
151a3dc3edaSGreg Roach        'themes/fab/msie.css',
152a3dc3edaSGreg Roach        'themes/fab/style.css',
153a3dc3edaSGreg Roach        'themes/minimal/favicon.png',
154a3dc3edaSGreg Roach        'themes/minimal/images',
155a3dc3edaSGreg Roach        'themes/minimal/msie.css',
156a3dc3edaSGreg Roach        'themes/minimal/style.css',
157a3dc3edaSGreg Roach        'themes/webtrees/favicon.png',
158a3dc3edaSGreg Roach        'themes/webtrees/images',
159a3dc3edaSGreg Roach        'themes/webtrees/msie.css',
160a3dc3edaSGreg Roach        'themes/webtrees/style.css',
161a3dc3edaSGreg Roach        'themes/xenea/favicon.png',
162a3dc3edaSGreg Roach        'themes/xenea/images',
163a3dc3edaSGreg Roach        'themes/xenea/msie.css',
164a3dc3edaSGreg Roach        'themes/xenea/style.css',
165a3dc3edaSGreg Roach        // Removed in 1.5.1
166a3dc3edaSGreg Roach        'themes/clouds/css-1.5.0',
167a3dc3edaSGreg Roach        'themes/colors/css-1.5.0',
168a3dc3edaSGreg Roach        'themes/fab/css-1.5.0',
169a3dc3edaSGreg Roach        'themes/minimal/css-1.5.0',
170a3dc3edaSGreg Roach        'themes/webtrees/css-1.5.0',
171a3dc3edaSGreg Roach        'themes/xenea/css-1.5.0',
172a3dc3edaSGreg Roach        // Removed in 1.5.2
173a3dc3edaSGreg Roach        'themes/clouds/css-1.5.1',
174a3dc3edaSGreg Roach        'themes/colors/css-1.5.1',
175a3dc3edaSGreg Roach        'themes/fab/css-1.5.1',
176a3dc3edaSGreg Roach        'themes/minimal/css-1.5.1',
177a3dc3edaSGreg Roach        'themes/webtrees/css-1.5.1',
178a3dc3edaSGreg Roach        'themes/xenea/css-1.5.1',
179a3dc3edaSGreg Roach        // Removed in 1.5.3
180a3dc3edaSGreg Roach        'readme.html',
181a3dc3edaSGreg Roach        'themes/clouds/css-1.5.2',
182a3dc3edaSGreg Roach        'themes/colors/css-1.5.2',
183a3dc3edaSGreg Roach        'themes/fab/css-1.5.2',
184a3dc3edaSGreg Roach        'themes/minimal/css-1.5.2',
185a3dc3edaSGreg Roach        'themes/webtrees/css-1.5.2',
186a3dc3edaSGreg Roach        'themes/xenea/css-1.5.2',
187a3dc3edaSGreg Roach        // Removed in 1.6.0
188a3dc3edaSGreg Roach        'downloadbackup.php',
189a3dc3edaSGreg Roach        'site-php-version.php',
190a3dc3edaSGreg Roach        'themes/clouds/css-1.5.3',
191a3dc3edaSGreg Roach        'themes/colors/css-1.5.3',
192a3dc3edaSGreg Roach        'themes/fab/css-1.5.3',
193a3dc3edaSGreg Roach        'themes/minimal/css-1.5.3',
194a3dc3edaSGreg Roach        'themes/webtrees/css-1.5.3',
195a3dc3edaSGreg Roach        'themes/xenea/css-1.5.3',
196a3dc3edaSGreg Roach        // Removed in 1.6.2
197a3dc3edaSGreg Roach        'themes/clouds/jquery-ui-1.10.3',
198a3dc3edaSGreg Roach        'themes/colors/css-1.6.0',
199a3dc3edaSGreg Roach        'themes/colors/jquery-ui-1.10.3',
200a3dc3edaSGreg Roach        'themes/fab/css-1.6.0',
201a3dc3edaSGreg Roach        'themes/fab/jquery-ui-1.10.3',
202a3dc3edaSGreg Roach        'themes/minimal/css-1.6.0',
203a3dc3edaSGreg Roach        'themes/minimal/jquery-ui-1.10.3',
204a3dc3edaSGreg Roach        'themes/webtrees/css-1.6.0',
205a3dc3edaSGreg Roach        'themes/webtrees/jquery-ui-1.10.3',
206a3dc3edaSGreg Roach        'themes/xenea/css-1.6.0',
207a3dc3edaSGreg Roach        'themes/xenea/jquery-ui-1.10.3',
208a3dc3edaSGreg Roach        // Removed in 1.7.0
209a3dc3edaSGreg Roach        'admin_site_other.php',
210a3dc3edaSGreg Roach        'js',
211a3dc3edaSGreg Roach        'library',
212a3dc3edaSGreg Roach        'save.php',
213a3dc3edaSGreg Roach        'themes/clouds/css-1.6.2',
214a3dc3edaSGreg Roach        'themes/clouds/templates',
215a3dc3edaSGreg Roach        'themes/clouds/header.php',
216a3dc3edaSGreg Roach        'themes/clouds/footer.php',
217a3dc3edaSGreg Roach        'themes/colors/css-1.6.2',
218a3dc3edaSGreg Roach        'themes/colors/templates',
219a3dc3edaSGreg Roach        'themes/colors/header.php',
220a3dc3edaSGreg Roach        'themes/colors/footer.php',
221a3dc3edaSGreg Roach        'themes/fab/css-1.6.2',
222a3dc3edaSGreg Roach        'themes/fab/templates',
223a3dc3edaSGreg Roach        'themes/fab/header.php',
224a3dc3edaSGreg Roach        'themes/fab/footer.php',
225a3dc3edaSGreg Roach        'themes/minimal/css-1.6.2',
226a3dc3edaSGreg Roach        'themes/minimal/templates',
227a3dc3edaSGreg Roach        'themes/minimal/header.php',
228a3dc3edaSGreg Roach        'themes/minimal/footer.php',
229a3dc3edaSGreg Roach        'themes/webtrees/css-1.6.2',
230a3dc3edaSGreg Roach        'themes/webtrees/templates',
231a3dc3edaSGreg Roach        'themes/webtrees/header.php',
232a3dc3edaSGreg Roach        'themes/webtrees/footer.php',
233a3dc3edaSGreg Roach        'themes/xenea/css-1.6.2',
234a3dc3edaSGreg Roach        'themes/xenea/templates',
235a3dc3edaSGreg Roach        'themes/xenea/header.php',
236a3dc3edaSGreg Roach        'themes/xenea/footer.php',
237a3dc3edaSGreg Roach        // Removed in 1.7.2
238a3dc3edaSGreg Roach        'assets/js-1.7.0',
239a3dc3edaSGreg Roach        // Removed in 1.7.4
240a3dc3edaSGreg Roach        'assets/js-1.7.2',
241a3dc3edaSGreg Roach        'themes/clouds/css-1.7.0',
242a3dc3edaSGreg Roach        'themes/colors/css-1.7.0',
243a3dc3edaSGreg Roach        'themes/fab/css-1.7.0',
244a3dc3edaSGreg Roach        'themes/minimal/css-1.7.0',
245a3dc3edaSGreg Roach        'themes/webtrees/css-1.7.0',
246a3dc3edaSGreg Roach        'themes/xenea/css-1.7.0',
247a3dc3edaSGreg Roach        // Removed in 1.7.5
248a3dc3edaSGreg Roach        'themes/clouds/css-1.7.4',
249a3dc3edaSGreg Roach        'themes/colors/css-1.7.4',
250a3dc3edaSGreg Roach        'themes/fab/css-1.7.4',
251a3dc3edaSGreg Roach        'themes/minimal/css-1.7.4',
252a3dc3edaSGreg Roach        'themes/webtrees/css-1.7.4',
253a3dc3edaSGreg Roach        'themes/xenea/css-1.7.4',
254a3dc3edaSGreg Roach        // Removed in 1.7.7
255a3dc3edaSGreg Roach        'assets/js-1.7.4',
256a3dc3edaSGreg Roach        // Removed in 1.7.8
257a3dc3edaSGreg Roach        'themes/clouds/css-1.7.5',
258a3dc3edaSGreg Roach        'themes/colors/css-1.7.5',
259a3dc3edaSGreg Roach        'themes/fab/css-1.7.5',
260a3dc3edaSGreg Roach        'themes/minimal/css-1.7.5',
261a3dc3edaSGreg Roach        'themes/webtrees/css-1.7.5',
262a3dc3edaSGreg Roach        'themes/xenea/css-1.7.5',
263a3dc3edaSGreg Roach        // Removed in 2.0.0
264a3dc3edaSGreg Roach        'action.php',
265a3dc3edaSGreg Roach        'addmedia.php',
266a3dc3edaSGreg Roach        'addmin.php',
267a3dc3edaSGreg Roach        'admin_media.php',
268a3dc3edaSGreg Roach        'admin_media_upload.php',
269a3dc3edaSGreg Roach        'admin_module_blocks.php',
270a3dc3edaSGreg Roach        'admin_module_charts.php',
271a3dc3edaSGreg Roach        'admin_module_menus.php',
272a3dc3edaSGreg Roach        'admin_module_reports.php',
273a3dc3edaSGreg Roach        'admin_module_sidebar.php',
274a3dc3edaSGreg Roach        'admin_module_tabs.php',
275a3dc3edaSGreg Roach        'admin_modules.php',
276a3dc3edaSGreg Roach        'admin_pgv_to_wt.php',
277a3dc3edaSGreg Roach        'admin_site_access.php',
278a3dc3edaSGreg Roach        'admin_site_change.php',
279a3dc3edaSGreg Roach        'admin_site_clean.php',
280a3dc3edaSGreg Roach        'admin_site_config.php',
281a3dc3edaSGreg Roach        'admin_site_info.php',
282a3dc3edaSGreg Roach        'admin_site_logs.php',
283a3dc3edaSGreg Roach        'admin_site_merge.php',
284a3dc3edaSGreg Roach        'admin_site_readme.php',
285a3dc3edaSGreg Roach        'admin_site_upgrade.php',
286a3dc3edaSGreg Roach        'admin_trees_check.php',
287a3dc3edaSGreg Roach        'admin_trees_config.php',
288a3dc3edaSGreg Roach        'admin_trees_download.php',
289a3dc3edaSGreg Roach        'admin_trees_duplicates.php',
290a3dc3edaSGreg Roach        'admin_trees_export.php',
291a3dc3edaSGreg Roach        'admin_trees_manage.php',
292a3dc3edaSGreg Roach        'admin_trees_merge.php',
293a3dc3edaSGreg Roach        'admin_trees_places.php',
294a3dc3edaSGreg Roach        'admin_trees_renumber.php',
295a3dc3edaSGreg Roach        'admin_trees_unconnected.php',
296a3dc3edaSGreg Roach        'admin_users.php',
297a3dc3edaSGreg Roach        'admin_users_bulk.php',
298a3dc3edaSGreg Roach        'ancestry.php',
299a3dc3edaSGreg Roach        'app/Controller',
300a3dc3edaSGreg Roach        'app/HitCounter.php',
301a3dc3edaSGreg Roach        'app/Module/ClippingsCart/ClippingsCartController.php',
302a3dc3edaSGreg Roach        'app/Module/FamiliesSidebarModule.php',
303a3dc3edaSGreg Roach        'app/Module/FamilyTreeFavorites',
304a3dc3edaSGreg Roach        'app/Module/GoogleMaps',
305a3dc3edaSGreg Roach        'app/Module/IndividualSidebarModule.php',
306a3dc3edaSGreg Roach        'app/Module/PageMenuModule.php',
30780536c2dSGreg Roach        'app/Query',
308a3dc3edaSGreg Roach        'app/SpecialChars',
309a3dc3edaSGreg Roach        'assets/js-1.7.7',
310a3dc3edaSGreg Roach        'assets/js-1.7.9',
311a3dc3edaSGreg Roach        'autocomplete.php',
312a3dc3edaSGreg Roach        'block_edit.php',
313a3dc3edaSGreg Roach        'branches.php',
314a3dc3edaSGreg Roach        'calendar.php',
315a3dc3edaSGreg Roach        'compact.php',
316a3dc3edaSGreg Roach        'data/html_purifier_cache',
317a3dc3edaSGreg Roach        'descendancy.php',
318a3dc3edaSGreg Roach        'editnews.php',
319a3dc3edaSGreg Roach        'edituser.php',
320a3dc3edaSGreg Roach        'edit_changes.php',
321a3dc3edaSGreg Roach        'edit_interface.php',
322a3dc3edaSGreg Roach        'expand_view.php',
323a3dc3edaSGreg Roach        'familybook.php',
324a3dc3edaSGreg Roach        'famlist.php',
325a3dc3edaSGreg Roach        'fanchart.php',
326a3dc3edaSGreg Roach        'find.php',
327a3dc3edaSGreg Roach        'help_text.php',
328a3dc3edaSGreg Roach        'hourglass.php',
329a3dc3edaSGreg Roach        'hourglass_ajax.php',
330a3dc3edaSGreg Roach        'import.php',
331a3dc3edaSGreg Roach        'includes',
332a3dc3edaSGreg Roach        'index_edit.php',
333a3dc3edaSGreg Roach        'indilist.php',
334a3dc3edaSGreg Roach        'inverselink.php',
335*362b8464SGreg Roach        'language',
336a3dc3edaSGreg Roach        'lifespan.php',
337a3dc3edaSGreg Roach        'login.php',
338a3dc3edaSGreg Roach        'logout.php',
339a3dc3edaSGreg Roach        'mediafirewall.php',
340a3dc3edaSGreg Roach        'medialist.php',
341a3dc3edaSGreg Roach        'message.php',
342a3dc3edaSGreg Roach        'module.php',
34349a243cbSGreg Roach        'modules_v3',
344a3dc3edaSGreg Roach        'notelist.php',
345a3dc3edaSGreg Roach        'packages',
346a3dc3edaSGreg Roach        'pedigree.php',
347a3dc3edaSGreg Roach        'relationship.php',
348a3dc3edaSGreg Roach        'repolist.php',
349a3dc3edaSGreg Roach        'reportengine.php',
350a3dc3edaSGreg Roach        'search.php',
351a3dc3edaSGreg Roach        'search_advanced.php',
352a3dc3edaSGreg Roach        'site-offline.php',
353a3dc3edaSGreg Roach        'site-unavailable.php',
354a3dc3edaSGreg Roach        'sourcelist.php',
355a3dc3edaSGreg Roach        'statistics.php',
356a3dc3edaSGreg Roach        'statisticsplot.php',
357a3dc3edaSGreg Roach        'themes/_administration',
358a3dc3edaSGreg Roach        'themes/_custom',
359a3dc3edaSGreg Roach        'themes/clouds/css-1.7.8',
360a3dc3edaSGreg Roach        'themes/clouds/jquery-ui-1.11.2',
361a3dc3edaSGreg Roach        'themes/colors/css-1.7.8',
362a3dc3edaSGreg Roach        'themes/colors/jquery-ui-1.11.2',
363a3dc3edaSGreg Roach        'themes/fab/css-1.7.8',
364a3dc3edaSGreg Roach        'themes/fab/jquery-ui-1.11.2',
365a3dc3edaSGreg Roach        'themes/minimal/css-1.7.8',
366a3dc3edaSGreg Roach        'themes/minimal/jquery-ui-1.11.2',
367a3dc3edaSGreg Roach        'themes/webtrees/css-1.7.8',
368a3dc3edaSGreg Roach        'themes/webtrees/jquery-ui-1.11.2',
369a3dc3edaSGreg Roach        'themes/xenea/css-1.7.8',
370a3dc3edaSGreg Roach        'themes/xenea/jquery-ui-1.11.2',
371a3dc3edaSGreg Roach        'timeline.php',
372a3dc3edaSGreg Roach    ];
373a3dc3edaSGreg Roach
374a3dc3edaSGreg Roach    /**
375a3dc3edaSGreg Roach     * Delete files and folders that belonged to an earlier version of webtrees.
376a3dc3edaSGreg Roach     * Return a list of those that we could not delete.
377a3dc3edaSGreg Roach     *
378a3dc3edaSGreg Roach     * @param Filesystem $filesystem
379a3dc3edaSGreg Roach     *
380a3dc3edaSGreg Roach     * @return array
381a3dc3edaSGreg Roach     */
382a3dc3edaSGreg Roach    public function deleteOldWebtreesFiles(Filesystem $filesystem): array
383a3dc3edaSGreg Roach    {
384a3dc3edaSGreg Roach        $paths_to_delete = [];
385a3dc3edaSGreg Roach
386a3dc3edaSGreg Roach        foreach (self::OLD_PATHS as $path) {
387a3dc3edaSGreg Roach            if (!$this->deleteFileOrFolder($filesystem, $path)) {
388a3dc3edaSGreg Roach                $paths_to_delete[] = $path;
389a3dc3edaSGreg Roach            }
390a3dc3edaSGreg Roach        }
391a3dc3edaSGreg Roach
392a3dc3edaSGreg Roach        return $paths_to_delete;
393a3dc3edaSGreg Roach    }
394a3dc3edaSGreg Roach
395a3dc3edaSGreg Roach    /**
396a3dc3edaSGreg Roach     * Delete old cache files.
397a3dc3edaSGreg Roach     *
398a3dc3edaSGreg Roach     * @param Filesystem $filesystem
399c61566f9SGreg Roach     * @param string     $path
400c61566f9SGreg Roach     * @param int        $max_age    Seconds
401c7ff4153SGreg Roach     *
402c7ff4153SGreg Roach     * @return void
403a3dc3edaSGreg Roach     */
404c61566f9SGreg Roach    public function deleteOldFiles(Filesystem $filesystem, string $path, int $max_age)
405a3dc3edaSGreg Roach    {
406c61566f9SGreg Roach        $list = $filesystem->listContents($path, true);
407a3dc3edaSGreg Roach
4084459dc9aSGreg Roach        $timestamp = Carbon::now()->unix();
409ad98d39dSGreg Roach
410a3dc3edaSGreg Roach        foreach ($list as $metadata) {
411ad98d39dSGreg Roach            if ($metadata['timestamp'] ?? $timestamp < $timestamp - $max_age) {
412a3dc3edaSGreg Roach                $this->deleteFileOrFolder($filesystem, $metadata['path']);
413a3dc3edaSGreg Roach            }
414a3dc3edaSGreg Roach        }
415a3dc3edaSGreg Roach    }
416a3dc3edaSGreg Roach
417a3dc3edaSGreg Roach    /**
418a3dc3edaSGreg Roach     * @param int $max_age_in_seconds
419c7ff4153SGreg Roach     *
420c7ff4153SGreg Roach     * @return void
421a3dc3edaSGreg Roach     */
422a3dc3edaSGreg Roach    public function deleteOldLogs(int $max_age_in_seconds)
423a3dc3edaSGreg Roach    {
424ca52a408SGreg Roach        $timestamp = Carbon::now()->subSeconds($max_age_in_seconds);
425ca52a408SGreg Roach
426e5c19fcdSGreg Roach        DB::table('log')
427e5c19fcdSGreg Roach            ->whereIn('log_type', ['error', 'media'])
428ca52a408SGreg Roach            ->where('log_time', '<', $timestamp)
429e5c19fcdSGreg Roach            ->delete();
430a3dc3edaSGreg Roach    }
431a3dc3edaSGreg Roach
432a3dc3edaSGreg Roach    /**
433a3dc3edaSGreg Roach     * @param int $max_age_in_seconds
434c7ff4153SGreg Roach     *
435c7ff4153SGreg Roach     * @return void
436a3dc3edaSGreg Roach     */
437a3dc3edaSGreg Roach    public function deleteOldSessions(int $max_age_in_seconds)
438a3dc3edaSGreg Roach    {
439ca52a408SGreg Roach        $timestamp = Carbon::now()->subSeconds($max_age_in_seconds);
440ca52a408SGreg Roach
441e5c19fcdSGreg Roach        DB::table('session')
442ca52a408SGreg Roach            ->where('session_time', '<', $timestamp)
443e5c19fcdSGreg Roach            ->delete();
444a3dc3edaSGreg Roach    }
445a3dc3edaSGreg Roach
446a3dc3edaSGreg Roach    /**
447a3dc3edaSGreg Roach     * Delete a file or folder, if we can.
448a3dc3edaSGreg Roach     *
449a3dc3edaSGreg Roach     * @param Filesystem $filesystem
450a3dc3edaSGreg Roach     * @param string     $path
451a3dc3edaSGreg Roach     *
452a3dc3edaSGreg Roach     * @return bool
453a3dc3edaSGreg Roach     */
454a3dc3edaSGreg Roach    private function deleteFileOrFolder(Filesystem $filesystem, string $path): bool
455a3dc3edaSGreg Roach    {
456a3dc3edaSGreg Roach        if ($filesystem->has($path)) {
457a3dc3edaSGreg Roach            try {
458a3dc3edaSGreg Roach                $metadata = $filesystem->getMetadata($path);
459a3dc3edaSGreg Roach
460a3dc3edaSGreg Roach                if ($metadata['type'] === 'dir') {
461a3dc3edaSGreg Roach                    $filesystem->deleteDir($path);
462a3dc3edaSGreg Roach                }
463a3dc3edaSGreg Roach
464a3dc3edaSGreg Roach                if ($metadata['type'] === 'file') {
465a3dc3edaSGreg Roach                    $filesystem->delete($path);
466a3dc3edaSGreg Roach                }
467a3dc3edaSGreg Roach            } catch (Exception $ex) {
468a3dc3edaSGreg Roach                return false;
469a3dc3edaSGreg Roach            }
470a3dc3edaSGreg Roach        }
471a3dc3edaSGreg Roach
472a3dc3edaSGreg Roach        return true;
473a3dc3edaSGreg Roach    }
474a3dc3edaSGreg Roach}
475