forked from fisharebest/webtrees
-
Notifications
You must be signed in to change notification settings - Fork 0
/
admin_site_clean.php
126 lines (113 loc) · 3.56 KB
/
admin_site_clean.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
// webtrees: Web based Family History software
// Copyright (C) 2013 webtrees development team.
//
// Derived from PhpGedView
// Copyright (C) 2002 to 2010 PGV Development Team. All rights reserved.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
define('WT_SCRIPT_NAME', 'admin_site_clean.php');
require './includes/session.php';
$controller=new WT_Controller_Page();
$controller
->requireAdminLogin()
->setPageTitle(/* I18N: The “Data folder” is a configuration setting */ WT_I18N::translate('Clean up data folder'))
->pageHeader();
require WT_ROOT.'includes/functions/functions_edit.php';
function full_rmdir($dir) {
if (!is_writable($dir)) {
if (!@chmod($dir, WT_PERM_EXE)) {
return false;
}
}
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if ($entry == '.' || $entry == '..') {
continue;
}
$entry = $dir . '/' . $entry;
if (is_dir($entry)) {
if (!full_rmdir($entry)) {
return false;
}
continue;
}
if (!@unlink($entry)) {
$d->close();
return false;
}
}
$d->close();
rmdir($dir);
return TRUE;
}
// Vars
$ajaxdeleted = false;
$locked_by_context = array('index.php', 'config.ini.php');
// If we are storing the media in the data folder (this is the
// defaultl), then don’t delete it.
// Need to consider the settings for all gedcoms
foreach (WT_Tree::getAll() as $tree) {
$MEDIA_DIRECTORY=$tree->preference('MEDIA_DIRECTORY');
if (substr($MEDIA_DIRECTORY, 0, 3) !='../') {
// Just need to add the first part of the path
$tmp = explode('/', $MEDIA_DIRECTORY);
$locked_by_context[] = $tmp[0];
}
}
echo
'<h3>', $controller->getPageTitle(), '</h3>',
'<p>',
WT_I18N::translate('Files marked with %s are required for proper operation and cannot be removed.', '<i class="icon-resn-confidential"></i>'),
'</p>';
//post back
if (isset($_REQUEST['to_delete'])) {
echo '<div class="error">', WT_I18N::translate('Deleted files:'), '</div>';
foreach ($_REQUEST['to_delete'] as $k=>$v) {
if (is_dir(WT_DATA_DIR.$v)) {
full_rmdir(WT_DATA_DIR.$v);
} elseif (file_exists(WT_DATA_DIR.$v)) {
unlink(WT_DATA_DIR.$v);
}
echo '<div class="error">', $v, '</div>';
}
}
echo '<form name="delete_form" method="post" action="?">';
echo '<div id="cleanup"><ul>';
$dir=dir(WT_DATA_DIR);
$entries=array();
while (false !== ($entry=$dir->read())) {
$entries[]=$entry;
}
sort($entries);
foreach ($entries as $entry) {
if ($entry[0] != '.') {
if (in_array($entry, $locked_by_context)) {
echo "<li class=\"facts_value\" name=\"$entry\" id=\"lock_$entry\" >";
echo '<i class="icon-resn-confidential"></i> <span>', $entry, '</span>';
} else {
echo "<li class=\"facts_value\" name=\"$entry\" id=\"li_$entry\" >";
echo '<input type="checkbox" name="to_delete[]" value="', $entry, '">', $entry;
$element[] = "li_".$entry;
}
echo '</li>';
}
}
$dir->close();
echo
'</ul>',
'<button type="submit">', WT_I18N::translate('Delete'), '</button>',
'</div>',
'</form>';