mirror of
https://github.com/YGGverse/YGGtracker.git
synced 2026-03-31 17:15:38 +00:00
implement event settings
This commit is contained in:
parent
d4fbb4b592
commit
7aa2c03abc
14 changed files with 657 additions and 171 deletions
|
|
@ -29,7 +29,6 @@ class ArticleController extends AbstractController
|
|||
)]
|
||||
public function info(
|
||||
Request $request,
|
||||
TranslatorInterface $translator,
|
||||
UserService $userService,
|
||||
ActivityService $activityService
|
||||
): Response
|
||||
|
|
@ -263,7 +262,11 @@ class ArticleController extends AbstractController
|
|||
time(),
|
||||
$this->getParameter('app.locale'),
|
||||
explode('|', $this->getParameter('app.locales')),
|
||||
$this->getParameter('app.theme')
|
||||
$activityService->getEventCodes(),
|
||||
$this->getParameter('app.theme'),
|
||||
$this->getParameter('app.sensitive'),
|
||||
$this->getParameter('app.yggdrasil'),
|
||||
$this->getParameter('app.approved')
|
||||
);
|
||||
|
||||
// Add user join event
|
||||
|
|
|
|||
|
|
@ -164,7 +164,11 @@ class SearchController extends AbstractController
|
|||
time(),
|
||||
$this->getParameter('app.locale'),
|
||||
explode('|', $this->getParameter('app.locales')),
|
||||
$this->getParameter('app.theme')
|
||||
$activityService->getEventCodes(),
|
||||
$this->getParameter('app.theme'),
|
||||
$this->getParameter('app.sensitive'),
|
||||
$this->getParameter('app.yggdrasil'),
|
||||
$this->getParameter('app.approved')
|
||||
);
|
||||
|
||||
// Add user join event
|
||||
|
|
|
|||
|
|
@ -1155,11 +1155,14 @@ class TorrentController extends AbstractController
|
|||
);
|
||||
|
||||
// Filter trackers
|
||||
$file->setAnnounceList(
|
||||
[
|
||||
explode('|', $this->getParameter('app.trackers'))
|
||||
]
|
||||
);
|
||||
if ($user->isYggdrasil())
|
||||
{
|
||||
$file->setAnnounceList(
|
||||
[
|
||||
explode('|', $this->getParameter('app.trackers'))
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$data = $file->dumpToString();
|
||||
|
||||
|
|
@ -1260,11 +1263,14 @@ class TorrentController extends AbstractController
|
|||
);
|
||||
|
||||
// Filter trackers
|
||||
$file->setAnnounceList(
|
||||
[
|
||||
explode('|', $this->getParameter('app.trackers'))
|
||||
]
|
||||
);
|
||||
if ($user->isYggdrasil())
|
||||
{
|
||||
$file->setAnnounceList(
|
||||
[
|
||||
explode('|', $this->getParameter('app.trackers'))
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
// Return magnet link
|
||||
return $this->redirect(
|
||||
|
|
@ -1308,7 +1314,11 @@ class TorrentController extends AbstractController
|
|||
time(),
|
||||
$this->getParameter('app.locale'),
|
||||
explode('|', $this->getParameter('app.locales')),
|
||||
$this->getParameter('app.theme')
|
||||
$activityService->getEventCodes(),
|
||||
$this->getParameter('app.theme'),
|
||||
$this->getParameter('app.sensitive'),
|
||||
$this->getParameter('app.yggdrasil'),
|
||||
$this->getParameter('app.approved')
|
||||
);
|
||||
|
||||
// Add user join event
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ class UserController extends AbstractController
|
|||
}
|
||||
|
||||
#[Route(
|
||||
'/{_locale}/profile',
|
||||
name: 'user_profile',
|
||||
'/{_locale}/settings',
|
||||
name: 'user_settings',
|
||||
defaults: [
|
||||
'_locale' => '%app.locale%'
|
||||
],
|
||||
|
|
@ -72,7 +72,7 @@ class UserController extends AbstractController
|
|||
'_locale' => '%app.locales%',
|
||||
],
|
||||
)]
|
||||
public function profile(
|
||||
public function settings(
|
||||
Request $request,
|
||||
UserService $userService,
|
||||
ActivityService $activityService
|
||||
|
|
@ -121,17 +121,36 @@ class UserController extends AbstractController
|
|||
);
|
||||
}
|
||||
|
||||
// Update events
|
||||
$events = [];
|
||||
foreach ((array) $request->get('events') as $event)
|
||||
{
|
||||
if (in_array($event, $activityService->getEventCodes()))
|
||||
{
|
||||
$events[] = $event;
|
||||
}
|
||||
}
|
||||
|
||||
$user->setEvents(
|
||||
$events
|
||||
);
|
||||
|
||||
// Update sensitive
|
||||
$user->setSensitive(
|
||||
$request->get('sensitive') === 'true'
|
||||
);
|
||||
|
||||
// Update yggdrasil
|
||||
$user->setYggdrasil(
|
||||
$request->get('yggdrasil') === 'true'
|
||||
);
|
||||
|
||||
// Save changes to DB
|
||||
$userService->save($user);
|
||||
|
||||
// Redirect user to new locale
|
||||
return $this->redirectToRoute(
|
||||
'user_profile',
|
||||
'user_settings',
|
||||
[
|
||||
'_locale' => $user->getLocale()
|
||||
]
|
||||
|
|
@ -140,38 +159,35 @@ class UserController extends AbstractController
|
|||
|
||||
// Render template
|
||||
return $this->render(
|
||||
'default/user/profile.html.twig',
|
||||
'default/user/settings.html.twig',
|
||||
[
|
||||
'user' => [
|
||||
'id' => $user->getId(),
|
||||
'address' => $request->getClientIp() == $user->getAddress() ? $user->getAddress() : false,
|
||||
'moderator' => $user->isModerator(),
|
||||
'approved' => $user->isApproved(),
|
||||
'status' => $user->isStatus(),
|
||||
'sensitive' => $user->isSensitive(),
|
||||
'yggdrasil' => $user->isYggdrasil(),
|
||||
'locale' => $user->getLocale(),
|
||||
'locales' => $user->getLocales(),
|
||||
'events' => $user->getEvents(),
|
||||
'theme' => $user->getTheme(),
|
||||
'added' => $user->getAdded(),
|
||||
'identicon' => $userService->identicon(
|
||||
$user->getAddress(),
|
||||
48
|
||||
),
|
||||
'added' => $user->getAdded()
|
||||
],
|
||||
'locales' => explode('|', $this->getParameter('app.locales')),
|
||||
'themes' => explode('|', $this->getParameter('app.themes'))
|
||||
'themes' => explode('|', $this->getParameter('app.themes')),
|
||||
'events' => $activityService->getEventsTree()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[Route(
|
||||
'/{_locale}/user/{userId}',
|
||||
'/{_locale}/profile/{userId}',
|
||||
name: 'user_info',
|
||||
defaults: [
|
||||
'_locale' => '%app.locale%'
|
||||
'_locale' => '%app.locale%',
|
||||
'userId' => null
|
||||
],
|
||||
requirements: [
|
||||
'_locale' => '%app.locales%',
|
||||
'userId' => '\d+',
|
||||
],
|
||||
)]
|
||||
public function info(
|
||||
|
|
@ -197,7 +213,9 @@ class UserController extends AbstractController
|
|||
}
|
||||
|
||||
// Init target user
|
||||
if (!$userTarget = $userService->getUser($request->get('userId')))
|
||||
if (!$userTarget = $userService->getUser(
|
||||
$request->get('userId') ? $request->get('userId') : $user->getId()
|
||||
))
|
||||
{
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
|
@ -208,13 +226,15 @@ class UserController extends AbstractController
|
|||
[
|
||||
'user' => [
|
||||
'id' => $userTarget->getId(),
|
||||
'address' => $request->getClientIp() == $userTarget->getAddress() ? $userTarget->getAddress() : false,
|
||||
'address' => $userTarget->getId() === $user->getId() ? $userTarget->getAddress() : false,
|
||||
'moderator' => $userTarget->isModerator(),
|
||||
'approved' => $userTarget->isApproved(),
|
||||
'status' => $userTarget->isStatus(),
|
||||
'sensitive' => $userTarget->isSensitive(),
|
||||
'yggdrasil' => $userTarget->isYggdrasil(),
|
||||
'locale' => $userTarget->getLocale(),
|
||||
'locales' => $userTarget->getLocales(),
|
||||
'events' => $userTarget->getEvents(),
|
||||
'theme' => $userTarget->getTheme(),
|
||||
'added' => $userTarget->getAdded(),
|
||||
'identicon' => $userService->identicon(
|
||||
|
|
@ -232,7 +252,8 @@ class UserController extends AbstractController
|
|||
$userTarget->getId()
|
||||
)
|
||||
],
|
||||
]
|
||||
],
|
||||
'events' => $activityService->getEventsTree()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
@ -587,7 +608,11 @@ class UserController extends AbstractController
|
|||
time(),
|
||||
$this->getParameter('app.locale'),
|
||||
explode('|', $this->getParameter('app.locales')),
|
||||
$this->getParameter('app.theme')
|
||||
$activityService->getEventCodes(),
|
||||
$this->getParameter('app.theme'),
|
||||
$this->getParameter('app.sensitive'),
|
||||
$this->getParameter('app.yggdrasil'),
|
||||
$this->getParameter('app.approved')
|
||||
);
|
||||
|
||||
// Add user join event
|
||||
|
|
|
|||
|
|
@ -35,12 +35,18 @@ class User
|
|||
#[ORM\Column(type: Types::ARRAY)]
|
||||
private array $locales = [];
|
||||
|
||||
#[ORM\Column(type: Types::ARRAY)]
|
||||
private array $events = [];
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $theme = null;
|
||||
|
||||
#[ORM\Column]
|
||||
private ?bool $sensitive = null;
|
||||
|
||||
#[ORM\Column]
|
||||
private ?bool $yggdrasil = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
|
|
@ -137,6 +143,18 @@ class User
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function getEvents(): array
|
||||
{
|
||||
return $this->events;
|
||||
}
|
||||
|
||||
public function setEvents(array $events): static
|
||||
{
|
||||
$this->events = $events;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTheme(): ?string
|
||||
{
|
||||
return $this->theme;
|
||||
|
|
@ -160,4 +178,16 @@ class User
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isYggdrasil(): ?bool
|
||||
{
|
||||
return $this->yggdrasil;
|
||||
}
|
||||
|
||||
public function setYggdrasil(bool $yggdrasil): static
|
||||
{
|
||||
$this->yggdrasil = $yggdrasil;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,16 +5,359 @@ namespace App\Service;
|
|||
use App\Entity\Activity;
|
||||
use App\Repository\ActivityRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class ActivityService
|
||||
{
|
||||
private EntityManagerInterface $entityManagerInterface;
|
||||
private TranslatorInterface $translatorInterface;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $entityManagerInterface
|
||||
EntityManagerInterface $entityManagerInterface,
|
||||
TranslatorInterface $translatorInterface
|
||||
)
|
||||
{
|
||||
$this->entityManagerInterface = $entityManagerInterface;
|
||||
$this->translatorInterface = $translatorInterface;
|
||||
}
|
||||
|
||||
public function getEventCodes(): array
|
||||
{
|
||||
return
|
||||
[
|
||||
// User
|
||||
Activity::EVENT_USER_ADD,
|
||||
|
||||
Activity::EVENT_USER_APPROVE_ADD,
|
||||
Activity::EVENT_USER_APPROVE_DELETE,
|
||||
|
||||
Activity::EVENT_USER_MODERATOR_ADD,
|
||||
Activity::EVENT_USER_MODERATOR_DELETE,
|
||||
|
||||
Activity::EVENT_USER_STATUS_ADD,
|
||||
Activity::EVENT_USER_STATUS_DELETE,
|
||||
|
||||
Activity::EVENT_USER_STAR_ADD,
|
||||
Activity::EVENT_USER_STAR_DELETE,
|
||||
|
||||
// Torrents
|
||||
Activity::EVENT_TORRENT_ADD,
|
||||
|
||||
Activity::EVENT_TORRENT_LOCALES_ADD,
|
||||
Activity::EVENT_TORRENT_LOCALES_DELETE,
|
||||
Activity::EVENT_TORRENT_LOCALES_APPROVE_ADD,
|
||||
Activity::EVENT_TORRENT_LOCALES_APPROVE_DELETE,
|
||||
|
||||
Activity::EVENT_TORRENT_SENSITIVE_ADD,
|
||||
Activity::EVENT_TORRENT_SENSITIVE_DELETE,
|
||||
Activity::EVENT_TORRENT_SENSITIVE_APPROVE_ADD,
|
||||
Activity::EVENT_TORRENT_SENSITIVE_APPROVE_DELETE,
|
||||
|
||||
Activity::EVENT_TORRENT_STAR_ADD,
|
||||
Activity::EVENT_TORRENT_STAR_DELETE,
|
||||
|
||||
Activity::EVENT_TORRENT_DOWNLOAD_FILE_ADD,
|
||||
Activity::EVENT_TORRENT_DOWNLOAD_MAGNET_ADD,
|
||||
|
||||
// Articles
|
||||
Activity::EVENT_ARTICLE_ADD,
|
||||
];
|
||||
}
|
||||
|
||||
public function getEventsTree(): array
|
||||
{
|
||||
$events = [];
|
||||
|
||||
foreach ($this->getEventCodes() as $code)
|
||||
{
|
||||
switch ($code)
|
||||
{
|
||||
// User
|
||||
case Activity::EVENT_USER_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Users')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Joined')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// User approve
|
||||
case Activity::EVENT_USER_APPROVE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Users')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Approved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_USER_APPROVE_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Users')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Disapproved')
|
||||
] = $code;
|
||||
break;
|
||||
|
||||
/// User status
|
||||
case Activity::EVENT_USER_STATUS_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User statuses')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Enabled')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_USER_STATUS_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User statuses')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Disabled')
|
||||
] = $code;
|
||||
break;
|
||||
|
||||
/// User moderator
|
||||
case Activity::EVENT_USER_MODERATOR_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User moderators')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_USER_MODERATOR_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User moderators')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Removed')
|
||||
] = $code;
|
||||
break;
|
||||
|
||||
/// User star
|
||||
case Activity::EVENT_USER_STAR_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User stars')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_USER_STAR_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('User stars')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Removed')
|
||||
] = $code;
|
||||
break;
|
||||
|
||||
// Torrent
|
||||
case Activity::EVENT_TORRENT_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrents')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// Torrent locales
|
||||
case Activity::EVENT_TORRENT_LOCALES_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent locales')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_LOCALES_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent locales')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Deleted')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_LOCALES_APPROVE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent locales')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Approved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_LOCALES_APPROVE_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent locales')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Disapproved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// Torrent sensitive
|
||||
case Activity::EVENT_TORRENT_SENSITIVE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent sensitive')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_SENSITIVE_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent sensitive')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Deleted')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_SENSITIVE_APPROVE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent sensitive')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Approved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_SENSITIVE_APPROVE_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent sensitive')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Disapproved')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// Torrent stars
|
||||
case Activity::EVENT_TORRENT_STAR_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent stars')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_STAR_DELETE:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent stars')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Removed')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
/// Torrent downloads
|
||||
case Activity::EVENT_TORRENT_DOWNLOAD_FILE_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent downloads')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Files')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
case Activity::EVENT_TORRENT_DOWNLOAD_MAGNET_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Torrent downloads')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Magnet links')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
|
||||
// Article
|
||||
case Activity::EVENT_TORRENT_ADD:
|
||||
|
||||
$events
|
||||
[
|
||||
$this->translatorInterface->trans('Articles')
|
||||
]
|
||||
[
|
||||
$this->translatorInterface->trans('Added')
|
||||
] = $code;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
public function findLastActivities(): array
|
||||
|
|
|
|||
|
|
@ -28,8 +28,10 @@ class UserService
|
|||
string $added,
|
||||
string $locale,
|
||||
array $locales,
|
||||
array $events,
|
||||
string $theme,
|
||||
bool $sensitive = true,
|
||||
bool $yggdrasil = true,
|
||||
bool $approved = false,
|
||||
bool $moderator = false,
|
||||
bool $status = true
|
||||
|
|
@ -70,10 +72,18 @@ class UserService
|
|||
$theme
|
||||
);
|
||||
|
||||
$user->setEvents(
|
||||
$events
|
||||
);
|
||||
|
||||
$user->setSensitive(
|
||||
$sensitive
|
||||
);
|
||||
|
||||
$user->setYggdrasil(
|
||||
$yggdrasil
|
||||
);
|
||||
|
||||
$this->entityManagerInterface->persist($user);
|
||||
$this->entityManagerInterface->flush();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue