Merge branch 'feature/report' of ssh://184.154.0.242:25565/min/mineplex into feature/report
This commit is contained in:
commit
958399be59
@ -1,193 +1,61 @@
|
||||
<?php
|
||||
|
||||
require_once('snapshot.php');
|
||||
require_once('message.php');
|
||||
require_once('player.php');
|
||||
|
||||
$dataDir = 'data/';
|
||||
|
||||
// In Java this is "DateTimeFormatter.ISO_LOCAL_DATE_TIME"
|
||||
$jsonDateTimeFormat = 'Y-m-d\TH:i:s';
|
||||
|
||||
// ID corresponds to the Report ID
|
||||
if (!isset($_GET['identifier']) || empty($_GET['identifier']))
|
||||
<?php class Report
|
||||
{
|
||||
exit('No identifier supplied.');
|
||||
}
|
||||
/** @var Int */
|
||||
private $id;
|
||||
|
||||
$identifier = removeBadCharacters($_GET['identifier']); // prevents escaping
|
||||
$reportNumber = explode("-", $identifier)[0];
|
||||
$filePath = $dataDir . $identifier . '.json';
|
||||
/** @var String */
|
||||
private $serverName;
|
||||
|
||||
if (!file_exists($filePath))
|
||||
{
|
||||
exit('Invalid identifier.');
|
||||
}
|
||||
/** @var String */
|
||||
private $suspect;
|
||||
|
||||
$snapshot = toSnapshot($identifier, toDataArray($filePath));
|
||||
/** @var SplObjectStorage */
|
||||
private $reporters;
|
||||
|
||||
/**
|
||||
* @param String $filename
|
||||
* @return array JSON data array.
|
||||
*/
|
||||
function toDataArray($filename)
|
||||
{
|
||||
return json_decode(file_get_contents($filename), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Snapshot $snapshot
|
||||
*/
|
||||
function displayMessages($snapshot)
|
||||
{
|
||||
echo '<p>';
|
||||
|
||||
foreach ($snapshot->getMessages() as $message) {
|
||||
echo getMessageHTML($message) . "<br />\n";
|
||||
}
|
||||
|
||||
echo '</p>';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Message $message
|
||||
* @return string
|
||||
*/
|
||||
function getMessageHTML($message)
|
||||
{
|
||||
$sender = $message->getSender();
|
||||
return '[' . $message->getType() . '] <span data-player-uuid="' . $sender->getUUID() . '">' . $sender->getUsername() . '</span> - ' . $message->getMessage();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $identifier
|
||||
* @param array $snapshotData Snapshot data array.
|
||||
* @return Snapshot
|
||||
*/
|
||||
function toSnapshot($identifier, $snapshotData)
|
||||
{
|
||||
$timezone = new DateTimeZone($snapshotData["timezone"]);
|
||||
$players = toPlayers($snapshotData['usernames']);
|
||||
$messages = toMessages($players, $snapshotData['snapshots'], $timezone);
|
||||
$generated = parseDateTime($snapshotData["generated"], $timezone);
|
||||
return new Snapshot($identifier, $messages, $players, $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param array $messagesData Messages data array.
|
||||
* @param DateTimeZone $timezone
|
||||
* @return Message[]
|
||||
*/
|
||||
function toMessages($players, $messagesData, $timezone)
|
||||
{
|
||||
$messages = array();
|
||||
|
||||
for ($i = 0; $i < count($messagesData); $i++)
|
||||
/**
|
||||
* Report constructor.
|
||||
* @param Int $id
|
||||
* @param String $serverName
|
||||
* @param String $suspect
|
||||
* @param SplObjectStorage $reporters
|
||||
*/
|
||||
function Report($id, $serverName, $suspect, $reporters)
|
||||
{
|
||||
$messages[$i] = getMessage($players, $messagesData[$i], $timezone);
|
||||
$this->id = $id;
|
||||
$this->serverName = $serverName;
|
||||
$this->suspect = $suspect;
|
||||
$this->reporters = $reporters;
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param array $messageData Message data array.
|
||||
* @param DateTimeZone $timezone
|
||||
* @return Message
|
||||
*/
|
||||
function getMessage($players, $messageData, $timezone)
|
||||
{
|
||||
$sender = getPlayer($players, $messageData['sender']);
|
||||
$recipients = getPlayersFromUUIDs($players, $messageData['recipients']);
|
||||
$dateTime = parseDateTime($messageData['time'], $timezone);
|
||||
$type = $messageData['type'];
|
||||
$message = $messageData['message'];
|
||||
|
||||
return new Message($sender, $recipients, $dateTime, $type, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param String[] $uuidArray the UUIDs of the players to fetch
|
||||
* @return Player[]
|
||||
*/
|
||||
function getPlayersFromUUIDs($players, $uuidArray)
|
||||
{
|
||||
$matchedPlayers = array();
|
||||
|
||||
for ($i = 0; $i < count($uuidArray); $i++)
|
||||
/**
|
||||
* @return Int
|
||||
*/
|
||||
public function getId()
|
||||
{
|
||||
$matchedPlayers[$i] = getPlayer($players, $uuidArray[$i]);
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
return $matchedPlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $playersArray
|
||||
* @return Player[]
|
||||
*/
|
||||
function toPlayers($playersArray) // String UUID as Key
|
||||
{
|
||||
$players = array();
|
||||
|
||||
foreach ($playersArray as $uuid => $username)
|
||||
/**
|
||||
* @return String
|
||||
*/
|
||||
public function getServerName()
|
||||
{
|
||||
$players[$uuid] = new Player($uuid, $username);
|
||||
return $this->serverName;
|
||||
}
|
||||
|
||||
return $players;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param String $uuid
|
||||
* @return Player
|
||||
*/
|
||||
function getPlayer($players, $uuid)
|
||||
{
|
||||
$player = $players[$uuid];
|
||||
|
||||
if ($player != null)
|
||||
/**
|
||||
* @return String
|
||||
*/
|
||||
public function getSuspect()
|
||||
{
|
||||
return $player;
|
||||
return $this->suspect;
|
||||
}
|
||||
else
|
||||
|
||||
/**
|
||||
* @return SplObjectStorage
|
||||
*/
|
||||
public function getReporters()
|
||||
{
|
||||
throw new RuntimeException('Player for UUID not found.');
|
||||
return $this->reporters;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $dateTime
|
||||
* @param DateTimeZone $timezone
|
||||
* @return DateTime
|
||||
*/
|
||||
function parseDateTime($dateTime, $timezone)
|
||||
{
|
||||
global $jsonDateTimeFormat;
|
||||
return DateTime::createFromFormat($jsonDateTimeFormat, $dateTime, $timezone);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $input
|
||||
* @return String
|
||||
*/
|
||||
function removeBadCharacters($input)
|
||||
{
|
||||
return preg_replace('/[^A-Za-z0-9_\-]/', '_', $input);
|
||||
}
|
||||
?>
|
||||
<html>
|
||||
<head>
|
||||
<title>Snapshot for Report #<?php echo $reportNumber ?></title>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
displayMessages($snapshot);
|
||||
?>
|
||||
<script type="text/javascript" src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
}
|
226
Plugins/Mineplex.ChatSnapManager/web/view.php
Normal file
226
Plugins/Mineplex.ChatSnapManager/web/view.php
Normal file
@ -0,0 +1,226 @@
|
||||
<?php
|
||||
|
||||
require_once('snapshot.php');
|
||||
require_once('report.php');
|
||||
require_once('message.php');
|
||||
require_once('player.php');
|
||||
|
||||
$dataDir = 'data/';
|
||||
|
||||
// In Java this is "DateTimeFormatter.ISO_LOCAL_DATE_TIME"
|
||||
$jsonDateTimeFormat = 'Y-m-d\TH:i:s';
|
||||
|
||||
// ID corresponds to the Report ID
|
||||
if (!isset($_GET['identifier']) || empty($_GET['identifier']))
|
||||
{
|
||||
exit('No identifier supplied.');
|
||||
}
|
||||
|
||||
$identifier = removeBadCharacters($_GET['identifier']); // prevents escaping
|
||||
$filePath = $dataDir . $identifier . '.json';
|
||||
|
||||
if (!file_exists($filePath))
|
||||
{
|
||||
exit('Invalid identifier.');
|
||||
}
|
||||
|
||||
$dataArray = toDataArray($filePath);
|
||||
$snapshot = toSnapshot($identifier, $dataArray);
|
||||
$report = toReport($dataArray['report'], $snapshot->getPlayers());
|
||||
|
||||
/**
|
||||
* @param String $filename
|
||||
* @return array JSON data array.
|
||||
*/
|
||||
function toDataArray($filename)
|
||||
{
|
||||
return json_decode(file_get_contents($filename), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Snapshot $snapshot
|
||||
*/
|
||||
function displayMessages($snapshot)
|
||||
{
|
||||
echo '<p>';
|
||||
|
||||
foreach ($snapshot->getMessages() as $message) {
|
||||
echo getMessageHTML($message) . "<br />\n";
|
||||
}
|
||||
|
||||
echo '</p>';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Message $message
|
||||
* @return string
|
||||
*/
|
||||
function getMessageHTML($message)
|
||||
{
|
||||
$sender = $message->getSender();
|
||||
return '[' . $message->getType() . '] <span data-player-uuid="' . $sender->getUUID() . '">' . $sender->getUsername() . '</span> - ' . $message->getMessage();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $identifier
|
||||
* @param array $snapshotData Snapshot data array.
|
||||
* @return Snapshot
|
||||
*/
|
||||
function toSnapshot($identifier, $snapshotData)
|
||||
{
|
||||
$timezone = new DateTimeZone($snapshotData["timezone"]);
|
||||
$players = toPlayers($snapshotData['usernames']);
|
||||
$messages = toMessages($players, $snapshotData['snapshots'], $timezone);
|
||||
$generated = parseDateTime($snapshotData["generated"], $timezone);
|
||||
return new Snapshot($identifier, $messages, $players, $generated);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $reportData
|
||||
* @param Player[] $players
|
||||
* @return Report
|
||||
*/
|
||||
function toReport($reportData, $players)
|
||||
{
|
||||
$id = $reportData["id"];
|
||||
$serverName = $reportData["serverName"];
|
||||
$suspect = getPlayer($players, $reportData["suspect"]);
|
||||
$reporters = toReporters($players, $reportData["reporters"]);
|
||||
return new Report($id, $serverName, $suspect, $reporters);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param array $messagesData Messages data array.
|
||||
* @param DateTimeZone $timezone
|
||||
* @return Message[]
|
||||
*/
|
||||
function toMessages($players, $messagesData, $timezone)
|
||||
{
|
||||
$messages = array();
|
||||
|
||||
for ($i = 0; $i < count($messagesData); $i++)
|
||||
{
|
||||
$messages[$i] = getMessage($players, $messagesData[$i], $timezone);
|
||||
}
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param array $messageData Message data array.
|
||||
* @param DateTimeZone $timezone
|
||||
* @return Message
|
||||
*/
|
||||
function getMessage($players, $messageData, $timezone)
|
||||
{
|
||||
$sender = getPlayer($players, $messageData['sender']);
|
||||
$recipients = getPlayersFromUUIDs($players, $messageData['recipients']);
|
||||
$dateTime = parseDateTime($messageData['time'], $timezone);
|
||||
$type = $messageData['type'];
|
||||
$message = $messageData['message'];
|
||||
|
||||
return new Message($sender, $recipients, $dateTime, $type, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param String[] $uuidArray the UUIDs of the players to fetch
|
||||
* @return Player[]
|
||||
*/
|
||||
function getPlayersFromUUIDs($players, $uuidArray)
|
||||
{
|
||||
$matchedPlayers = array();
|
||||
|
||||
for ($i = 0; $i < count($uuidArray); $i++)
|
||||
{
|
||||
$matchedPlayers[$i] = getPlayer($players, $uuidArray[$i]);
|
||||
}
|
||||
|
||||
return $matchedPlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $playersArray
|
||||
* @return Player[]
|
||||
*/
|
||||
function toPlayers($playersArray) // String UUID as Key
|
||||
{
|
||||
$players = array();
|
||||
|
||||
foreach ($playersArray as $uuid => $username)
|
||||
{
|
||||
$players[$uuid] = new Player($uuid, $username);
|
||||
}
|
||||
|
||||
return $players;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $playersArray
|
||||
* @param $reportersArray
|
||||
* @return SplObjectStorage
|
||||
*/
|
||||
function toReporters($playersArray, $reportersArray)
|
||||
{
|
||||
$reporters = new SplObjectStorage();
|
||||
|
||||
foreach ($reportersArray as $reporterUUID => $reason)
|
||||
{
|
||||
$reporters[getPlayer($playersArray, $reporterUUID)] = $reason;
|
||||
}
|
||||
|
||||
return $reporters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Player[] $players
|
||||
* @param String $uuid
|
||||
* @return Player
|
||||
*/
|
||||
function getPlayer($players, $uuid)
|
||||
{
|
||||
$player = $players[$uuid];
|
||||
|
||||
if ($player != null)
|
||||
{
|
||||
return $player;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RuntimeException('Player for UUID not found.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $dateTime
|
||||
* @param DateTimeZone $timezone
|
||||
* @return DateTime
|
||||
*/
|
||||
function parseDateTime($dateTime, $timezone)
|
||||
{
|
||||
global $jsonDateTimeFormat;
|
||||
return DateTime::createFromFormat($jsonDateTimeFormat, $dateTime, $timezone);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param String $input
|
||||
* @return String
|
||||
*/
|
||||
function removeBadCharacters($input)
|
||||
{
|
||||
return preg_replace('/[^A-Za-z0-9_\-]/', '_', $input);
|
||||
}
|
||||
?>
|
||||
<html>
|
||||
<head>
|
||||
<title>Snapshot for Report #<?php echo $report->getId() ?></title>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
displayMessages($snapshot);
|
||||
?>
|
||||
<script type="text/javascript" src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user