/
despam.php
executable file
·197 lines (176 loc) · 8.05 KB
/
despam.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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<?php
use YesWiki\Security\Controller\SecurityController;
// Charles Nepote 2005-2006
// Didier Loiseau 2005
// License GPL.
// Version 0.7.3 du 10/04/2006 a 23:37.
// TODO
// -- case pour selectionner tout
// -- attention au cas ou la version mais aussi la page est effacee
// (cf. handler deletepage) (et les commentaires)
// -- ne rien loguer si rien n'a ete efface
// -- idealement la derniere page affiche les resultats mais ne renettoie
// pas les pages si elle est rechargee
// -- test pour savoir si quelque chose a bien ete efface
if (!defined("WIKINI_VERSION")) {
die("accès direct interdit");
}
$despam_url = $this->href('', $this->GetPageTag());
// -- (1) Formulaire d'accueil de l'action -------------------------------
//
// Le formulaire est affiche si aucun spammer n'a encore été précisé ou
// si le champ a été laisse vide et validé
// Action réservée aux admins
if ($this->UserIsAdmin()) {
if (empty($_POST['spammer']) && empty($_POST['from']) && !isset($_POST['clean'])) {
echo "<div class=\"action_erasespam\">\n" .
"<form method=\"post\" action=\"". $despam_url . "\" name=\"selection\">\n".
"<fieldset>\n".
"<legend>Sélection des pages</legend>\n";
echo "<p>\n".
"Toutes les modifications depuis ".
"<select name=\"from\">\n".
"<option selected=\"selected\" value=\"1\">depuis 1 heure</option>\n".
"<option value=\"3\">depuis 3 heures</option>\n".
"<option value=\"6\">depuis 6 heures</option>\n".
"<option value=\"12\">depuis 12 heures</option>\n".
"<option value=\"24\">depuis 24 heures</option>\n".
"<option value=\"48\">depuis 48 heures</option>\n".
"<option value=\"168\">depuis 1 semaine</option>\n".
"<option value=\"336\">depuis 2 semaines</option>\n".
"<option value=\"744\">depuis 1 mois</option>\n".
"</select>\n".
"<button name=\"2\" value=\"Valider\">Valider</button>\n".
"</p>\n";
echo "</fieldset>\n".
"</form>\n".
"</div>\n\n";
} elseif (!isset($_POST['clean'])) {
// -- (2) Page de resultats et form. de selection des pages a effacer ----
//
if (isset($_POST['from']) && isset($_POST['2'])) {
$requete =
"select *
from ".$this->config["table_prefix"]."pages
where
time > date_sub(now(), interval " . $this->services->get(\YesWiki\Core\Service\DbService::class)->escape($_POST['from']) . " hour)
and latest = 'Y'
order by `time` desc";
$title =
"<h2>Nettoyage des pages vandalisées depuis " .
$_POST['from'] . " heure(s)</h2>\n";
}
//echo $requete;
$pagesFromSpammer = $this->LoadAll($requete);
// Affichage des pages pour validation
echo "<div class=\"action_erasespam\">\n";
echo $title;
echo "<form method=\"post\" action=\"". $despam_url . "\">\n";
echo "<table>\n";
foreach ($pagesFromSpammer as $i => $page) {
$req = "select * from ".$this->config["table_prefix"]."pages where tag = '"
.mysqli_real_escape_string($this->dblink, $page["tag"])
."' order by time desc";
$revisions = $this->LoadAll($req);
echo "<tr>\n".
"<td>".
$page["tag"]. " ".
"(". $page["time"]. ") ".
" par ". $page['user'] . " ".
"</td>\n";
echo "<td>".
"<input name=\"suppr[]\" value=\"" . $page["tag"] . "\" type=\"checkbox\" /> [Suppr.!]".
"</td>\n";
echo "<td>\n";
echo "<p>";
echo "_____________________________________________________________________________________________________";
echo "<p>";
foreach ($revisions as $revision) {
// Si c'est la derniere version on saute cette iteration
// ce n'est pas elle qu'on va vouloir restaurer...
if (!isset($revision1)) {
$revision1 = "";
continue;
}
echo "<input name= \"rev[]\" value=\"" . $revision["id"] . "\" type=\"checkbox\" /> ";
echo "Restaurer depuis la version du ".
" ".$revision["time"]." ".
" par ". $revision['user'] . " ".
"<br />\n";
}
unset($revision1);
echo //" . . . . ",$this->Format($page["user"]),"</p>\n",
"</td>\n",
"</tr>\n",
"";
}
echo "</table>\n";
echo "<p>Commentaire : <input class=\"form-control\" name=\"comment\" style=\"width: 80%;\" /></p>\n";
echo "<p>\n".
"<input type=\"hidden\" name=\"spammer\" value=\"" . (isset($_POST['spammer']) ? $_POST['spammer'] : '') . "\" />\n".
"<input type=\"hidden\" name=\"clean\" value=\"yes\" />\n".
"<button class=\"btn btn-danger\" value=\"Valider\">Nettoyer >></button>\n".
"</p>\n";
echo "</form>\n";
echo "</div>\n\n";
} elseif (isset($_POST['clean'])) {
if ($this->services->get(SecurityController::class)->isWikiHibernated()) {
throw new \Exception(_t('WIKI_IN_HIBERNATION'));
}
// -- (3) Nettoyage des pages et affichage de la page de resultats -------
//
$deletedPages = "";
$restoredPages = "";
// -- 3.1 Effacement ---
// On efface chaque element du tableau suppr[]
// Pour chaque page selectionnee
if (!empty($_POST['suppr'])) {
foreach ($_POST['suppr'] as $page) {
// Effacement de la page en utilisant la méthode adéquate
// (si DeleteOrphanedPage ne convient pas, soit on créé
// une autre, soit on la modifie
$this->DeleteOrphanedPage($page);
$deletedPages .= $page . ", ";
}
$deletedPages = trim($deletedPages, ", ");
}
// -- 3.2 Restauration des pages sélectionnées ---
if (!empty($_POST['rev'])) {
//print_r($_POST["rev"]);
foreach ($_POST["rev"] as $rev_id) {
echo $rev_id."<br>";
// Selectionne la revision
$revision = $this->LoadSingle("select * from ".$this->config["table_prefix"]."pages where id = '"
.mysqli_real_escape_string($this->dblink, $rev_id)."' limit 1");
// Fait de la derniere version de cette revision
// une version archivee
$requeteUpdate =
"update " . $this->config["table_prefix"] . "pages " .
"set latest = 'N' ".
"where latest = 'Y' " .
"and tag = '" . $revision["tag"] . "' " .
"limit 1";
$this->Query($requeteUpdate);
$restoredPages .= $revision["tag"] . ", ";
// add new revision
$this->Query("insert into ".$this->config["table_prefix"]."pages set ".
"tag = '".mysqli_real_escape_string($this->dblink, $revision['tag'])."', ".
"time = now(), ".
"owner = '".mysqli_real_escape_string($this->dblink, $revision['owner'])."', ".
"user = '".mysqli_real_escape_string($this->dblink, "despam")."', ".
"latest = 'Y', ".
"body = '".mysqli_real_escape_string($this->dblink, chop($revision['body']))."'");
}
}
$restoredPages = trim($restoredPages, ", ");
echo "<li>Pages restaurées : " .
$restoredPages . ".</li>\n";
echo "<li>Pages supprimées : " .
$deletedPages . ".</li>\n" ;
echo "</ul>\n";
echo "<p><a href=\"". $despam_url. "\">Retour au formulaire de départ >></a></p>\n";
echo "</div>\n\n";
}
} else {
echo '<div class="alert alert-danger">Action {{despam}} réservée aux administrateurs.</div>';
}