mirror of
https://github.com/YGGverse/YGGtracker.git
synced 2025-01-08 22:17:57 +00:00
add torrent approved moderation tools
This commit is contained in:
parent
92c2a56bbf
commit
ed6c4ea415
@ -372,6 +372,60 @@ class ActivityController extends AbstractController
|
||||
|
||||
break;
|
||||
|
||||
case $activity::EVENT_TORRENT_APPROVE_ADD:
|
||||
|
||||
return $this->render(
|
||||
'default/activity/event/torrent/approve/add.html.twig',
|
||||
[
|
||||
'added' => $activity->getAdded(),
|
||||
'user' =>
|
||||
[
|
||||
'id' => $activity->getUserId(),
|
||||
'identicon' => $userService->identicon(
|
||||
$userService->getUser(
|
||||
$activity->getUserId()
|
||||
)->getAddress()
|
||||
)
|
||||
],
|
||||
'torrent' =>
|
||||
[
|
||||
'id' => $activity->getTorrentId(),
|
||||
'name' => $torrentService->readTorrentFileByTorrentId(
|
||||
$activity->getTorrentId()
|
||||
)->getName()
|
||||
]
|
||||
]
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
case $activity::EVENT_TORRENT_APPROVE_DELETE:
|
||||
|
||||
return $this->render(
|
||||
'default/activity/event/torrent/approve/delete.html.twig',
|
||||
[
|
||||
'added' => $activity->getAdded(),
|
||||
'user' =>
|
||||
[
|
||||
'id' => $activity->getUserId(),
|
||||
'identicon' => $userService->identicon(
|
||||
$userService->getUser(
|
||||
$activity->getUserId()
|
||||
)->getAddress()
|
||||
)
|
||||
],
|
||||
'torrent' =>
|
||||
[
|
||||
'id' => $activity->getTorrentId(),
|
||||
'name' => $torrentService->readTorrentFileByTorrentId(
|
||||
$activity->getTorrentId()
|
||||
)->getName()
|
||||
]
|
||||
]
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
// Torrent Download
|
||||
case $activity::EVENT_TORRENT_DOWNLOAD_FILE_ADD:
|
||||
|
||||
|
@ -76,7 +76,13 @@ class TorrentController extends AbstractController
|
||||
$page = $request->get('page') ? (int) $request->get('page') : 1;
|
||||
|
||||
// Render template
|
||||
return $this->render('default/torrent/info.html.twig', [
|
||||
return $this->render('default/torrent/info.html.twig',
|
||||
[
|
||||
'user' =>
|
||||
[
|
||||
'id' => $user->getId(),
|
||||
'moderator' => $user->isModerator()
|
||||
],
|
||||
'torrent' =>
|
||||
[
|
||||
'id' => $torrent->getId(),
|
||||
@ -90,6 +96,7 @@ class TorrentController extends AbstractController
|
||||
],
|
||||
'locales' => $torrent->getLocales(),
|
||||
'sensitive' => $torrent->isSensitive(),
|
||||
'approved' => $torrent->isApproved(),
|
||||
'download' =>
|
||||
[
|
||||
'file' =>
|
||||
@ -564,6 +571,82 @@ class TorrentController extends AbstractController
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
#[Route(
|
||||
'/{_locale}/torrent/{torrentId}/approve/toggle',
|
||||
name: 'torrent_approve_toggle',
|
||||
requirements:
|
||||
[
|
||||
'torrentId' => '\d+',
|
||||
],
|
||||
methods:
|
||||
[
|
||||
'GET'
|
||||
]
|
||||
)]
|
||||
public function approve(
|
||||
Request $request,
|
||||
UserService $userService,
|
||||
TorrentService $torrentService,
|
||||
ActivityService $activityService
|
||||
): Response
|
||||
{
|
||||
// Init user
|
||||
$user = $this->initUser(
|
||||
$request,
|
||||
$userService,
|
||||
$activityService
|
||||
);
|
||||
|
||||
// Init torrent
|
||||
if (!$torrent = $torrentService->getTorrent($request->get('torrentId')))
|
||||
{
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
// Check permissions
|
||||
if (!$user->isModerator())
|
||||
{
|
||||
// @TODO
|
||||
throw new \Exception(
|
||||
$translator->trans('Access denied')
|
||||
);
|
||||
}
|
||||
|
||||
// Register activity event
|
||||
if (!$torrent->isApproved())
|
||||
{
|
||||
$activityService->addEventTorrentApproveAdd(
|
||||
$user->getId(),
|
||||
$torrent->getId(),
|
||||
time()
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$activityService->addEventTorrentApproveDelete(
|
||||
$user->getId(),
|
||||
$torrent->getId(),
|
||||
time()
|
||||
);
|
||||
}
|
||||
|
||||
// Update approved
|
||||
$torrentService->toggleTorrentApproved(
|
||||
$torrent->getId()
|
||||
);
|
||||
|
||||
// Redirect back to form
|
||||
return $this->redirectToRoute(
|
||||
'torrent_info',
|
||||
[
|
||||
'_locale' => $request->get('_locale'),
|
||||
'torrentId' => $torrent->getId()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
// Torrent locales
|
||||
#[Route(
|
||||
'/{_locale}/torrent/{torrentId}/edit/locales/{torrentLocalesId}',
|
||||
|
@ -37,22 +37,25 @@ class Activity
|
||||
/// Torrent
|
||||
public const EVENT_TORRENT_ADD = 2000;
|
||||
|
||||
public const EVENT_TORRENT_LOCALES_ADD = 2100;
|
||||
public const EVENT_TORRENT_LOCALES_DELETE = 2101;
|
||||
public const EVENT_TORRENT_LOCALES_APPROVE_ADD = 2110;
|
||||
public const EVENT_TORRENT_LOCALES_APPROVE_DELETE = 2111;
|
||||
public const EVENT_TORRENT_APPROVE_ADD = 1100;
|
||||
public const EVENT_TORRENT_APPROVE_DELETE = 1101;
|
||||
|
||||
public const EVENT_TORRENT_SENSITIVE_ADD = 2200;
|
||||
public const EVENT_TORRENT_SENSITIVE_DELETE = 2201;
|
||||
public const EVENT_TORRENT_SENSITIVE_APPROVE_ADD = 2210;
|
||||
public const EVENT_TORRENT_SENSITIVE_APPROVE_DELETE = 2211;
|
||||
public const EVENT_TORRENT_LOCALES_ADD = 2200;
|
||||
public const EVENT_TORRENT_LOCALES_DELETE = 2201;
|
||||
public const EVENT_TORRENT_LOCALES_APPROVE_ADD = 2210;
|
||||
public const EVENT_TORRENT_LOCALES_APPROVE_DELETE = 2211;
|
||||
|
||||
public const EVENT_TORRENT_STAR_ADD = 2300;
|
||||
public const EVENT_TORRENT_STAR_DELETE = 2301;
|
||||
public const EVENT_TORRENT_SENSITIVE_ADD = 2300;
|
||||
public const EVENT_TORRENT_SENSITIVE_DELETE = 2301;
|
||||
public const EVENT_TORRENT_SENSITIVE_APPROVE_ADD = 2310;
|
||||
public const EVENT_TORRENT_SENSITIVE_APPROVE_DELETE = 2311;
|
||||
|
||||
public const EVENT_TORRENT_DOWNLOAD_FILE_ADD = 2400;
|
||||
public const EVENT_TORRENT_STAR_ADD = 2400;
|
||||
public const EVENT_TORRENT_STAR_DELETE = 2401;
|
||||
|
||||
public const EVENT_TORRENT_DOWNLOAD_MAGNET_ADD = 2500;
|
||||
public const EVENT_TORRENT_DOWNLOAD_FILE_ADD = 2500;
|
||||
|
||||
public const EVENT_TORRENT_DOWNLOAD_MAGNET_ADD = 2600;
|
||||
|
||||
// ...
|
||||
|
||||
|
@ -43,6 +43,9 @@ class ActivityService
|
||||
// Torrents
|
||||
Activity::EVENT_TORRENT_ADD,
|
||||
|
||||
Activity::EVENT_TORRENT_APPROVE_ADD,
|
||||
Activity::EVENT_TORRENT_APPROVE_DELETE,
|
||||
|
||||
Activity::EVENT_TORRENT_LOCALES_ADD,
|
||||
Activity::EVENT_TORRENT_LOCALES_DELETE,
|
||||
Activity::EVENT_TORRENT_LOCALES_APPROVE_ADD,
|
||||
@ -191,6 +194,30 @@ class ActivityService
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_APPROVE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrents')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Approved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_APPROVE_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrents')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Disapproved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// Torrent locales
|
||||
case Activity::EVENT_TORRENT_LOCALES_ADD:
|
||||
|
||||
@ -760,6 +787,66 @@ class ActivityService
|
||||
return $activity;
|
||||
}
|
||||
|
||||
public function addEventTorrentApproveAdd(
|
||||
int $userId,
|
||||
int $torrentId,
|
||||
int $added
|
||||
): ?Activity
|
||||
{
|
||||
$activity = new Activity();
|
||||
|
||||
$activity->setEvent(
|
||||
Activity::EVENT_TORRENT_APPROVE_ADD
|
||||
);
|
||||
|
||||
$activity->setUserId(
|
||||
$userId
|
||||
);
|
||||
|
||||
$activity->setTorrentId(
|
||||
$torrentId
|
||||
);
|
||||
|
||||
$activity->setAdded(
|
||||
$added
|
||||
);
|
||||
|
||||
$this->entityManagerInterface->persist($activity);
|
||||
$this->entityManagerInterface->flush();
|
||||
|
||||
return $activity;
|
||||
}
|
||||
|
||||
public function addEventTorrentApproveDelete(
|
||||
int $userId,
|
||||
int $torrentId,
|
||||
int $added
|
||||
): ?Activity
|
||||
{
|
||||
$activity = new Activity();
|
||||
|
||||
$activity->setEvent(
|
||||
Activity::EVENT_TORRENT_APPROVE_DELETE
|
||||
);
|
||||
|
||||
$activity->setUserId(
|
||||
$userId
|
||||
);
|
||||
|
||||
$activity->setTorrentId(
|
||||
$torrentId
|
||||
);
|
||||
|
||||
$activity->setAdded(
|
||||
$added
|
||||
);
|
||||
|
||||
$this->entityManagerInterface->persist($activity);
|
||||
$this->entityManagerInterface->flush();
|
||||
|
||||
return $activity;
|
||||
}
|
||||
|
||||
/// Torrent Download
|
||||
public function addEventTorrentDownloadFileAdd(
|
||||
int $userId,
|
||||
|
@ -298,6 +298,30 @@ class TorrentService
|
||||
return $torrent;
|
||||
}
|
||||
|
||||
public function toggleTorrentApproved(
|
||||
int $torrentId
|
||||
): ?Torrent
|
||||
{
|
||||
$torrent = $this->getTorrent($torrentId);
|
||||
|
||||
$torrent->setApproved(
|
||||
!$torrent->isApproved() // toggle current value
|
||||
);
|
||||
|
||||
$this->entityManagerInterface->persist($torrent);
|
||||
$this->entityManagerInterface->flush();
|
||||
|
||||
$this->updateTorrentLocales(
|
||||
$torrent->getId()
|
||||
);
|
||||
|
||||
$this->updateTorrentSensitive(
|
||||
$torrent->getId()
|
||||
);
|
||||
|
||||
return $torrent;
|
||||
}
|
||||
|
||||
public function getTorrentScrapeQueue(): ?Torrent
|
||||
{
|
||||
return $this->entityManagerInterface
|
||||
|
@ -0,0 +1,16 @@
|
||||
<div class="row">
|
||||
<div class="column width-80">
|
||||
<a href="{{ path('user_info', { userId : user.id }) }}">
|
||||
<img class="border-radius-50 border-color-default vertical-align-middle" src="{{ user.identicon }}" alt="{{ 'identicon' | trans }}" />
|
||||
</a>
|
||||
<span class="margin-l-4-px">
|
||||
{{ 'approved torrent' | trans }}
|
||||
</span>
|
||||
<a href="{{ path('torrent_info', { torrentId : torrent.id }) }}">
|
||||
{{ torrent.name }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="column width-20 text-right">
|
||||
{{ added | format_ago }}
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,16 @@
|
||||
<div class="row">
|
||||
<div class="column width-80">
|
||||
<a href="{{ path('user_info', { userId : user.id }) }}">
|
||||
<img class="border-radius-50 border-color-default vertical-align-middle" src="{{ user.identicon }}" alt="{{ 'identicon' | trans }}" />
|
||||
</a>
|
||||
<span class="margin-l-4-px">
|
||||
{{ 'disapproved torrent' | trans }}
|
||||
</span>
|
||||
<a href="{{ path('torrent_info', { torrentId : torrent.id }) }}">
|
||||
{{ torrent.name }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="column width-20 text-right">
|
||||
{{ added | format_ago }}
|
||||
</div>
|
||||
</div>
|
@ -23,225 +23,248 @@
|
||||
{% block title %}{{ file.name }} - {{ 'Torrent' | trans }} #{{ torrent.id }}{% if pagination.page > 1 %} - {{ 'Page' | trans }} {{ pagination.page }}{% endif %} - {{ name }}{% endblock %}
|
||||
{% block main_content %}
|
||||
<div class="padding-24-px margin-y-8-px border-radius-3-px background-color-night">
|
||||
<div class="padding-b-16-px">
|
||||
<h1 class="display-block text-center margin-b-16-px">
|
||||
{{ file.name }}
|
||||
{#{{ 'Torrent' | trans }} #{{ torrent.id }}#}
|
||||
</h1>
|
||||
<div class="text-center">
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_download_magnet', {torrentId : torrent.id}) }}" title="{{ 'Open magnet link' | trans }}">
|
||||
{% if torrent.download.magnet.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M15 12h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M8 1a7 7 0 0 0-7 7v3h4V8a3 3 0 0 1 6 0v3h4V8a7 7 0 0 0-7-7Zm7 11h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.download.magnet.total }}
|
||||
</sup>
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_download_file', {torrentId : torrent.id}) }}" title="{{ 'Download torrent file' | trans }}">
|
||||
{% if torrent.download.file.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.download.file.total }}
|
||||
</sup>
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_star_toggle', {torrentId : torrent.id}) }}" title="{{ 'Star' | trans }}">
|
||||
{% if torrent.star.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.star.total }}
|
||||
</sup>
|
||||
</div>
|
||||
{#
|
||||
|
||||
<a class="float-right margin-l-8-px" href="#" title="{{ 'Magnet'|trans }}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M8 1a7 7 0 0 0-7 7v3h4V8a3 3 0 0 1 6 0v3h4V8a7 7 0 0 0-7-7Zm7 11h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
<h1 class="display-block text-center margin-b-16-px">
|
||||
{{ file.name }}
|
||||
{#{{ 'Torrent' | trans }} #{{ torrent.id }}#}
|
||||
</h1>
|
||||
<div class="text-center">
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_download_magnet', {torrentId : torrent.id}) }}" title="{{ 'Open magnet link' | trans }}">
|
||||
{% if torrent.download.magnet.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M15 12h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M8 1a7 7 0 0 0-7 7v3h4V8a3 3 0 0 1 6 0v3h4V8a7 7 0 0 0-7-7Zm7 11h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
#}
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.download.magnet.total }}
|
||||
</sup>
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_download_file', {torrentId : torrent.id}) }}" title="{{ 'Download torrent file' | trans }}">
|
||||
{% if torrent.download.file.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.download.file.total }}
|
||||
</sup>
|
||||
<a class="margin-l-8-px margin-r-4-px" href="{{ path('torrent_star_toggle', {torrentId : torrent.id}) }}" title="{{ 'Star' | trans }}">
|
||||
{% if torrent.star.exist %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z"/>
|
||||
</svg>
|
||||
{% else %}
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/>
|
||||
</svg>
|
||||
{% endif %}
|
||||
</a>
|
||||
<sup class="cursor-default" title="{{ 'Total' | trans }}">
|
||||
{{ torrent.star.total }}
|
||||
</sup>
|
||||
</div>
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Common'|trans }}
|
||||
</div>
|
||||
<div class="padding-t-16-px">
|
||||
<table class="width-100">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'ID'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
#{{ torrent.id }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'MD5'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.md5file }}
|
||||
</td>
|
||||
</tr>
|
||||
{% if file.hash.v1 %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Info hash v1'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.hash.v1 }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.hash.v2 %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Info hash v2'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.hash.v2 }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{# visible in H1
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Filename'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.name }}
|
||||
</td>
|
||||
</tr>
|
||||
#}
|
||||
{% if file.created %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Created'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.created | format_date }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if file.size %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Size'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.size | format_bytes }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.pieces %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Pieces'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.pieces | format_number }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.source %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Source'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.source }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.software %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Software'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.software }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.comment %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Comment'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.comment }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Contributors'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{% for id, identicon in torrent.contributors %}
|
||||
<a href="{{ path('user_info', { userId : id }) }}">
|
||||
<img class="border-radius-50 border-color-default vertical-align-middle" src="{{ identicon }}" alt="{{'identicon'|trans }}" />
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<table class="width-100">
|
||||
<tbody>
|
||||
{% if user.moderator %}
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Scrape'|trans }}
|
||||
{{ 'Moderation' | trans }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding-t-16-px">
|
||||
{{ 'Seeders'|trans }}
|
||||
{{ 'Approved' | trans }}
|
||||
</td>
|
||||
<td class="padding-t-16-px">
|
||||
{{ torrent.scrape.seeders }}
|
||||
{% if torrent.approved %}
|
||||
{{ 'Yes' | trans }}
|
||||
<a class="float-right" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10H5zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"/>
|
||||
</svg>
|
||||
</a>
|
||||
{% else %}
|
||||
{{ 'No' | trans }}
|
||||
<a class="float-right text-color-red" href="{{ path('torrent_approve_toggle', { torrentId : torrent.id }) }}" title="{{ 'Toggle' | trans }}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M11 4a4 4 0 0 1 0 8H8a4.992 4.992 0 0 0 2-4 4.992 4.992 0 0 0-2-4h3zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8zM0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Common' | trans }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding-t-16-px">
|
||||
{{ 'ID' | trans }}
|
||||
</td>
|
||||
<td class="padding-t-16-px">
|
||||
#{{ torrent.id }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'MD5' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.md5file }}
|
||||
</td>
|
||||
</tr>
|
||||
{% if file.hash.v1 %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Peers'|trans }}
|
||||
{{ 'Info hash v1' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.scrape.peers }}
|
||||
{{ file.hash.v1 }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.hash.v2 %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Leechers'|trans }}
|
||||
{{ 'Info hash v2' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.scrape.leechers }}
|
||||
{{ file.hash.v2 }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% endif %}
|
||||
{# visible in H1
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Filename'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.name }}
|
||||
</td>
|
||||
</tr>
|
||||
#}
|
||||
{% if file.created %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Created' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.created | format_date }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if file.size %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Size' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.size | format_bytes }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.pieces %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Pieces' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.pieces | format_number }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.source %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Source' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.source }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.software %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Software' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.software }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if file.comment %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Comment' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ file.comment }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Contributors' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{% for id, identicon in torrent.contributors %}
|
||||
<a href="{{ path('user_info', { userId : id }) }}">
|
||||
<img class="border-radius-50 border-color-default vertical-align-middle" src="{{ identicon }}" alt="{{'identicon'|trans }}" />
|
||||
</a>
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Scrape' | trans }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="padding-t-16-px">
|
||||
{{ 'Seeders' | trans }}
|
||||
</td>
|
||||
<td class="padding-t-16-px">
|
||||
{{ torrent.scrape.seeders }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Peers' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.scrape.peers }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Leechers' | trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ torrent.scrape.leechers }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Files'|trans }}
|
||||
{{ 'Files' | trans }}
|
||||
</div>
|
||||
<div class="padding-y-16-px">
|
||||
{% for key, value in file.tree %}
|
||||
@ -258,7 +281,7 @@
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="padding-y-8-px border-bottom-default text-right">
|
||||
{{ 'Trackers'|trans }}
|
||||
{{ 'Trackers' | trans }}
|
||||
</div>
|
||||
<div class="padding-t-16-px">
|
||||
{% for tracker in trackers %}
|
||||
@ -303,7 +326,7 @@
|
||||
<path d="M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z"/>
|
||||
</svg>
|
||||
</a>
|
||||
{{ 'Sensitive'|trans }}
|
||||
{{ 'Sensitive' | trans }}
|
||||
<div class="padding-b-8-px border-bottom-default"></div>
|
||||
<div class="padding-t-16-px text-left">
|
||||
{% if torrent.sensitive %}
|
||||
|
Loading…
Reference in New Issue
Block a user