Skip to content

Commit

Permalink
Refactor Logger array flattening
Browse files Browse the repository at this point in the history
  • Loading branch information
carlbennett committed Jul 18, 2021
1 parent ef3bf7d commit 28f7f26
Showing 1 changed file with 65 additions and 45 deletions.
110 changes: 65 additions & 45 deletions src/libraries/Logger.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ public static function logEvent(

$successful = false;

try {

try
{
$stmt = Common::$database->prepare('
INSERT INTO `event_log` (
`event_type_id`, `event_datetime`, `user_id`, `ip_address`,
Expand All @@ -57,19 +57,23 @@ public static function logEvent(
$successful = $stmt->execute();
$stmt->closeCursor();

if ($successful) {
if ($successful)
{
self::dispatchDiscordWebhook((int) Common::$database->lastInsertId());
}

} catch (PDOException $e) {
}
catch (PDOException $e)
{
throw new QueryException('Cannot log event', $e);

} finally {
}
finally
{
return $successful;
}
}

protected static function dispatchDiscordWebhook($event_id) {
protected static function dispatchDiscordWebhook($event_id)
{
$c = Common::$config->discord->forward_event_log;
if (!$c->enabled) return;

Expand All @@ -87,63 +91,79 @@ protected static function dispatchDiscordWebhook($event_id) {
$embed->setTimestamp($event->getEventDateTime());

$user = $event->getUser();
if (!is_null($user)) {
if (!is_null($user))
{
$author = new DiscordEmbedAuthor(
$user->getName(), $user->getURI(), $user->getAvatarURI(null)
);
$embed->setAuthor($author);
}

if (!$c->exclude_meta_data) {
if (!$c->exclude_meta_data)
{
$data = json_decode($event->getMetadata(), true);
if (is_scalar($data)) {

if (is_string($data)) {
$f_value = substr($data, 0, DiscordEmbedField::MAX_VALUE - 3);
if (strlen($data) > DiscordEmbedField::MAX_VALUE - 3)
$f_value .= '...';
} else {
$f_value = $data;
}

$field = new DiscordEmbedField('Meta Data', $f_value, true);
$embed->addField($field);

} else {

foreach ($data as $key => $value) {
$parse_fx = function($value, $key, $embed)
{
$field = null;

$f_key = substr($key, 0, DiscordEmbedField::MAX_NAME - 3);
if (strlen($key) > DiscordEmbedField::MAX_NAME - 3)
$f_key .= '...';

if (is_scalar($value)) {
if (!$field && is_string($value))
{
$v = substr($value, 0, DiscordEmbedField::MAX_VALUE - 3);
if (strlen($value) > DiscordEmbedField::MAX_VALUE - 3)
{
$v .= '...';
}
$field = new DiscordEmbedField(
$key, $v, (strlen($v) < DiscordEmbedField::MAX_VALUE / 4)
);
}

if (is_string($value)) {
$f_value = substr($value, 0, DiscordEmbedField::MAX_VALUE - 3);
if (strlen($value) > DiscordEmbedField::MAX_VALUE - 3)
$f_value .= '...';
} else {
$f_value = $value;
}
if (!$field && is_numeric($value))
{
$field = new DiscordEmbedField($key, $value, true);
}

$field = new DiscordEmbedField($f_key, $f_value, true);
if (!$field && is_bool($value))
{
$field = new DiscordEmbedField(
$key, ($value ? 'true' : 'false'), true
);
}

} else {
if (!$field)
{
$field = new DiscordEmbedField($key, gettype($value), true);
}

$field = new DiscordEmbedField($f_key, gettype($value), true);
$embed->addField($field);
};

$flatten_fx = function(&$tree, &$flatten_fx, &$parse_fx, &$depth, &$embed)
{
if (!is_array($tree))
{
$parse_fx($tree, implode('_', $depth), $embed);
return;
}

}
$embed->addField($field);
array_push($depth, '');
if (count($depth) > 2) return;

if ($embed->fieldCount() >= DiscordEmbed::MAX_FIELDS) break;
foreach ($tree as $key => $value)
{
$depth[count($depth)-1] = $key;
$flatten_fx($value, $flatten_fx, $parse_fx, $depth, $embed);
}

}
array_pop($depth);
};

$depth = [];
$flatten_fx($data, $flatten_fx, $parse_fx, $depth, $embed);
}

$webhook->addEmbed($embed);
$webhook->send();
}

}

0 comments on commit 28f7f26

Please sign in to comment.