Kann man das zumindest in TS3 PHP Framework ändern irgendwie? Das ich zwar im TS die 3 Bans habe, aber im Interface nur 1 Ban?
//edit und das ich diesen dann auch über das Interface entbannen kann.
Wie Bluscream bereits geschrieben hat: TeamSpeak erstellt pro Ban mehrere Regeln, weil die Bedingungen (also Name, IP Adresse, ...) mittels UND verknüpft werden.
Wie du damit in deiner eigen entwickelten Software umgehst, ist dir überlassen. Hier kannst du natürlich alle 3 Regeln als eine Regel anzeigen / zusammenfassen.
Aus meiner Sicht macht das jedoch keinen Sinn, denn in der Regel löscht man ab und zu nur ein paar dieser Regeln (z.B. wo die IP Adresse gesetzt ist), da die meisten Benutzer eine dynamische - eine regelmäßig wechselnde - IP Adresse besitzen und dadurch kann es mal passieren, dass die IP 1.2.3.4 mal dem User gehörte, der nicht mehr drauf soll bzw. darf und später aber z.B. dir selbst oder einem deiner Kumpels gehört.
Um sie in deiner eigenen Software zusammen gefasst darzustellen, würde ich wie folgt vorgehen:
- Liste aller Bans abfragen
- Jeden Ban mit dem anderen vergleichen (Bangrund + Uhrzeit)
- Wenn der Bangrund und die Uhrzeit (+/- 1-5 Sekunden) identisch sind, ist es vermutlich der selbe Ban -> gleicher Bann
- Ansonsten einen neuen Ban anzeigen, da alle Bans in der Regel in der aufeinanderfolgenden Reihenfolge zurück gegeben werden sollten (Stichwort "Incremental Key" in der Datenbank)
Nachfolgend ein Beispiel für die mögliche Logik, wie man das machen könnte:
Achtung: Der Code ist nicht getestet und soll nur als Pseudo-Code dienen!
<?php
// Liste aller Bans vom TS3 Server selbst
$banlist = $ts3->getBanList();
// Liste der zusammen gefassten Bans
$bans = array();
// Bans zusammenfassen
$ban_row = 1;
foreach($banlist as $ban_rule) {
if(!isset($last_ban_rule)) {
$bans[$ban_row][] = $ban_rule;
} else {
$ban_time_difference = $last_ban_rule->created_at - $ban_rule->created_at;
// Hier ggfs. den preg_match() Teil entfernen; Bin mir gerade nicht sicher, ob in jeder Ban Regel die Begründung drin steht. Glaube aber schon.
if(($ban_time_difference <= 5) AND (preg_match("/".$ban_rule->ban_reason."/", $last_ban_rule->ban_reason))) {
$bans[$ban_row][] = $ban_rule;
} else {
$ban_row++;
$bans[$ban_row][] = $ban_rule;
}
}
$last_ban_rule = $ban_rule;
}
Alles anzeigen
Danach solltest du ein Multidimensionales Array $bans haben, wobei das erste Array jeweils in Sub-Arrays alle zusammengehörigen Banregeln haben sollte:
<DOCTYPE html>
<html>
<table>
<thead>
<tr>
<th>#</th>
<th>Ban Regeln</th>
</tr>
</thead>
<tbody>
@foreach($bans as $ban_rule_set)
<tr>
<td>{{ key($ban_rule_set) }}</td>
<td>
@foreach($ban_rule_set as $ban_rule)
<p>{{ $ban_rule->created_at }} durch {{ $ban_rule->created_by }} mit der Begründung {{ $ban_rule->ban_reason }}</p>
@endforeach
</td>
</tr>
@endforeach
</tbody>
</table>
</html>
Alles anzeigen
Die genauen Felder des Arrays musst du auslesen - die habe ich mir gerade nur für das Beispiel ausgedacht.