Browse Source

add ago time format

main
ghost 5 months ago
parent
commit
6714546199
  1. 6
      config/services.yaml
  2. 115
      src/Twig/AppExtension.php
  3. 12
      templates/default/main/index.html.twig
  4. 18
      templates/default/server/index.html.twig

6
config/services.yaml

@ -30,3 +30,9 @@ services: @@ -30,3 +30,9 @@ services:
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App\Twig\AppExtension:
arguments:
- '@service_container'
tags:
- { name: twig.extension}

115
src/Twig/AppExtension.php

@ -0,0 +1,115 @@ @@ -0,0 +1,115 @@
<?php
namespace App\Twig;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends AbstractExtension
{
protected ContainerInterface $container;
protected TranslatorInterface $translator;
public function __construct(
ContainerInterface $container,
TranslatorInterface $translator
)
{
$this->container = $container;
$this->translator = $translator;
}
public function getFilters()
{
return
[
new TwigFilter(
'format_ago',
[
$this,
'formatAgo'
]
)
];
}
public function formatAgo(
int $time,
): string
{
$diff = time() - $time;
if ($diff < 1)
{
return $this->translator->trans('now');
}
$values =
[
365 * 24 * 60 * 60 =>
[
$this->translator->trans('year ago'),
$this->translator->trans('years ago'),
$this->translator->trans(' years ago')
],
30 * 24 * 60 * 60 =>
[
$this->translator->trans('month ago'),
$this->translator->trans('months ago'),
$this->translator->trans(' months ago')
],
24 * 60 * 60 =>
[
$this->translator->trans('day ago'),
$this->translator->trans('days ago'),
$this->translator->trans(' days ago')
],
60 * 60 =>
[
$this->translator->trans('hour ago'),
$this->translator->trans('hours ago'),
$this->translator->trans(' hours ago')
],
60 =>
[
$this->translator->trans('minute ago'),
$this->translator->trans('minutes ago'),
$this->translator->trans(' minutes ago')
],
1 =>
[
$this->translator->trans('second ago'),
$this->translator->trans('seconds ago'),
$this->translator->trans(' seconds ago')
]
];
foreach ($values as $key => $value)
{
$result = $diff / $key;
if ($result >= 1)
{
$round = round($result);
return sprintf(
'%s %s',
$round,
$this->plural(
$round,
$value
)
);
}
}
}
private function plural(int $number, array $texts)
{
$cases = [2, 0, 1, 1, 1, 2];
return $texts[(($number % 100) > 4 && ($number % 100) < 20) ? 2 : $cases[min($number % 10, 5)]];
}
}

12
templates/default/main/index.html.twig

@ -41,8 +41,16 @@ @@ -41,8 +41,16 @@
{% endif %}
</td>
<td class="text-align-left">{{ server.info.Map }}</td>
<td class="text-align-left">{{ server.added | format_date }}</td>
<td class="text-align-left">{{ server.online | format_date }}</td>
<td class="text-align-left">
<span title="{{ server.added | date('r') }}">
{{ server.added | format_ago }}
</span>
</td>
<td class="text-align-left">
<span title="{{ server.online | date('r') }}">
{{ server.online | format_ago }}
</span>
</td>
<td class="text-align-center">{{ server.connections }}{#{{ server.info.Players }}#}</td>
<td class="text-align-center">{{ server.info.MaxPlayers }}</td>
<td class="text-align-center">{{ server.info.Bots }}</td>

18
templates/default/server/index.html.twig

@ -135,7 +135,11 @@ @@ -135,7 +135,11 @@
</tr>
{% for online in server.online %}
<tr>
<td class="text-align-left">{{ online.time | date('r') }}</td>
<td class="text-align-left">
<span title="{{ online.time | date('r') }}">
{{ online.time | format_ago }}
</span>
</td>
<td class="text-align-center">{{ online.players }}</td>
<td class="text-align-center">{{ online.bots }}</td>
<td class="text-align-center">{{ online.total }}</td>
@ -170,8 +174,16 @@ @@ -170,8 +174,16 @@
<tr>
<td class="text-align-center">{{ player.frags }}</td>
<td class="text-align-left">{{ player.name }}</td>
<td class="text-align-left">{{ player.joined | format_date }}</td>
<td class="text-align-left">{{ player.online | format_date }}</td>
<td class="text-align-left">
<span title="{{ player.joined | date('r') }}">
{{ player.joined | format_ago }}
</span>
</td>
<td class="text-align-left">
<span title="{{ player.online | date('r') }}">
{{ player.online | format_ago }}
</span>
</td>
</tr>
{% endfor %}
</table>

Loading…
Cancel
Save