Browse Source

update page form dependencies #19

main
ghost 1 year ago
parent
commit
c0cc029350
  1. 6
      .env
  2. 144
      src/Controller/PageController.php
  3. 24
      src/Controller/UserController.php
  4. 99
      src/Entity/Activity.php
  5. 118
      src/Entity/PageDescription.php
  6. 118
      src/Entity/PageSensitive.php
  7. 118
      src/Entity/PageTitle.php
  8. 103
      src/Entity/PageTorrents.php
  9. 47
      src/Repository/ActivityRepository.php
  10. 23
      src/Repository/PageDescriptionRepository.php
  11. 25
      src/Repository/PageRepository.php
  12. 23
      src/Repository/PageSensitiveRepository.php
  13. 23
      src/Repository/PageTitleRepository.php
  14. 23
      src/Repository/PageTorrentsRepository.php
  15. 9
      src/Repository/UserRepository.php
  16. 54
      src/Service/ActivityService.php
  17. 177
      src/Service/PageService.php
  18. 5
      src/Service/UserService.php
  19. 2
      templates/default/page/info.html.twig
  20. 4
      templates/default/page/submit.html.twig
  21. 2
      templates/default/torrent/submit.html.twig
  22. 2
      templates/default/user/module.html.twig

6
.env

@ -56,6 +56,6 @@ APP_PAGE_TITLE_LENGTH_MIN=10
APP_PAGE_TITLE_LENGTH_MAX=255 APP_PAGE_TITLE_LENGTH_MAX=255
APP_PAGE_DESCRIPTION_LENGTH_MIN=0 APP_PAGE_DESCRIPTION_LENGTH_MIN=0
APP_PAGE_DESCRIPTION_LENGTH_MAX=10000 APP_PAGE_DESCRIPTION_LENGTH_MAX=10000
APP_PAGE_TORRENT_QUANTITY_MIN=1 APP_PAGE_TORRENT_FILE_QUANTITY_MIN=1
APP_PAGE_TORRENT_QUANTITY_MAX=100 APP_PAGE_TORRENT_FILE_QUANTITY_MAX=100
APP_PAGE_TORRENT_SIZE_MAX=1024000 APP_TORRENT_FILE_SIZE_MAX=1024000

144
src/Controller/PageController.php

@ -11,19 +11,54 @@ use Symfony\Component\HttpFoundation\Request;
use App\Service\UserService; use App\Service\UserService;
use App\Service\PageService; use App\Service\PageService;
use App\Service\TorrentService;
use App\Service\TimeService; use App\Service\TimeService;
class PageController extends AbstractController class PageController extends AbstractController
{ {
#[Route( #[Route(
'/{_locale}/page/submit', '/{_locale}/page/{id}',
name: 'page_submit' name: 'page_info',
requirements:
[
'id' => '\d+'
],
methods:
[
'GET'
]
)]
public function info(
Request $request,
TranslatorInterface $translator,
UserService $userService
): Response
{
// Init user
$user = $userService->init(
$request->getClientIp()
);
return $this->render('default/page/info.html.twig', [
'title' => 'test'
]);
}
#[Route(
'/{_locale}/submit/page',
name: 'page_submit',
methods:
[
'GET',
'POST'
]
)] )]
public function submit( public function submit(
Request $request, Request $request,
TranslatorInterface $translator, TranslatorInterface $translator,
UserService $userService, UserService $userService,
PageService $pageService, PageService $pageService,
PageService $torrentService
): Response ): Response
{ {
// Init user // Init user
@ -45,8 +80,11 @@ class PageController extends AbstractController
'locale' => 'locale' =>
[ [
'error' => [], 'error' => [],
'value' => $request->get('_locale'), 'attribute' =>
'placeholder' => $translator->trans('Content language'), [
'value' => $request->get('_locale'),
'placeholder' => $translator->trans('Content language')
]
], ],
'title' => 'title' =>
[ [
@ -57,7 +95,7 @@ class PageController extends AbstractController
'minlength' => $this->getParameter('app.page.title.length.min'), 'minlength' => $this->getParameter('app.page.title.length.min'),
'maxlength' => $this->getParameter('app.page.title.length.max'), 'maxlength' => $this->getParameter('app.page.title.length.max'),
'placeholder' => sprintf( 'placeholder' => sprintf(
$translator->trans('Page title text (%s-%s chars)'), $translator->trans('Page title (%s-%s chars)'),
number_format($this->getParameter('app.page.title.length.min')), number_format($this->getParameter('app.page.title.length.min')),
number_format($this->getParameter('app.page.title.length.max')) number_format($this->getParameter('app.page.title.length.max'))
), ),
@ -72,7 +110,7 @@ class PageController extends AbstractController
'minlength' => $this->getParameter('app.page.description.length.min'), 'minlength' => $this->getParameter('app.page.description.length.min'),
'maxlength' => $this->getParameter('app.page.description.length.max'), 'maxlength' => $this->getParameter('app.page.description.length.max'),
'placeholder' => sprintf( 'placeholder' => sprintf(
$translator->trans('Page description text (%s-%s chars)'), $translator->trans('Page description (%s-%s chars)'),
number_format($this->getParameter('app.page.description.length.min')), number_format($this->getParameter('app.page.description.length.min')),
number_format($this->getParameter('app.page.description.length.max')) number_format($this->getParameter('app.page.description.length.max'))
), ),
@ -83,7 +121,11 @@ class PageController extends AbstractController
'error' => [], 'error' => [],
'attribute' => 'attribute' =>
[ [
'placeholder' => $translator->trans('Select torrent files'), 'placeholder' => sprintf(
$translator->trans('Append %s-%s torrent files'),
$this->getParameter('app.page.torrent.file.quantity.min'),
$this->getParameter('app.page.torrent.file.quantity.max')
)
] ]
], ],
'sensitive' => 'sensitive' =>
@ -100,20 +142,12 @@ class PageController extends AbstractController
// Process request // Process request
if ($request->isMethod('post')) if ($request->isMethod('post'))
{ {
// Init new
$page = $pageService->new();
/// Locale /// Locale
if (!in_array($request->get('locale'), explode('|', $this->getParameter('app.locales')))) if (!in_array($request->get('locale'), explode('|', $this->getParameter('app.locales'))))
{ {
$form['locale']['error'][] = $translator->trans('Requested locale not supported'); $form['locale']['error'][] = $translator->trans('Requested locale not supported');
} }
else
{
// $request->get('locale')
}
/// Title /// Title
if (mb_strlen($request->get('title')) < $this->getParameter('app.page.title.length.min') || if (mb_strlen($request->get('title')) < $this->getParameter('app.page.title.length.min') ||
mb_strlen($request->get('title')) > $this->getParameter('app.page.title.length.max')) mb_strlen($request->get('title')) > $this->getParameter('app.page.title.length.max'))
@ -125,11 +159,6 @@ class PageController extends AbstractController
); );
} }
else
{
// $request->get('title')
}
/// Description /// Description
if (mb_strlen($request->get('description')) < $this->getParameter('app.page.description.length.min') || if (mb_strlen($request->get('description')) < $this->getParameter('app.page.description.length.min') ||
mb_strlen($request->get('description')) > $this->getParameter('app.page.description.length.max')) mb_strlen($request->get('description')) > $this->getParameter('app.page.description.length.max'))
@ -141,13 +170,9 @@ class PageController extends AbstractController
); );
} }
else
{
// $request->get('description')
}
/// Torrents /// Torrents
$total = 0; $total = 0;
$torrents = [];
if ($files = $request->files->get('torrents')) if ($files = $request->files->get('torrents'))
{ {
@ -157,42 +182,79 @@ class PageController extends AbstractController
$total++; $total++;
//// File size //// File size
if (filesize($file->getPathName()) > $this->getParameter('app.page.torrent.size.max')) if (filesize($file->getPathName()) > $this->getParameter('app.torrent.size.max'))
{ {
$form['torrents']['error'][] = $translator->trans('Torrent file out of size limit'); $form['torrents']['error'][] = $translator->trans('Torrent file out of size limit');
continue;
}
if (empty($torrentService->getTorrentFilenameByFilepath($file->getPathName())))
{
$form['torrent']['error'][] = $translator->trans('Could not parse torrent file');
continue;
} }
//// Content //// Content
$decoder = new \BitTorrent\Decoder(); $torrent = $torrentService->submit(
$decodedFile = $decoder->decodeFile( $file->getPathName(),
$file->getPathName() $user->getId(),
time(),
(array) $locales,
(bool) $request->get('sensitive'),
$user->isApproved()
); );
// var_dump($decodedFile['info']['name']); $torrents[] = $torrent->getId();
} }
} }
if ($total < $this->getParameter('app.page.torrent.quantity.min') || if ($total < $this->getParameter('app.page.torrent.file.quantity.min') ||
$total > $this->getParameter('app.page.torrent.quantity.max')) $total > $this->getParameter('app.page.torrent.file.quantity.max'))
{ {
$form['torrents']['error'][] = sprintf( $form['torrents']['error'][] = sprintf(
$translator->trans('Torrents quantity out of %s-%s range'), $translator->trans('Torrents quantity out of %s-%s range'),
number_format($this->getParameter('app.page.torrent.quantity.min')), number_format($this->getParameter('app.page.torrent.file.quantity.min')),
number_format($this->getParameter('app.page.torrent.quantity.max')) number_format($this->getParameter('app.page.torrent.file.quantity.max'))
); );
} }
if (empty($error)) if (empty($form['locale']['error']) &&
empty($form['title']['error']) &&
empty($form['description']['error']) &&
empty($form['torrents']['error'])
)
{ {
// isset($request->get('sensitive')) $page = $pageService->submit(
// $pageService->save($page); $user->getId(),
time(),
(string) $request->get('locale'),
(string) $request->get('title'),
(string) $request->get('description'),
(array) $torrents,
(bool) $request->get('sensitive'),
$user->isApproved()
);
// Redirect
return $this->redirectToRoute(
'page_info',
[
'_locale' => $request->get('_locale'),
'id' => $page->getId()
]
);
} }
} }
return $this->render('default/page/submit.html.twig', [ return $this->render(
'locales' => explode('|', $this->getParameter('app.locales')), 'default/page/submit.html.twig',
'form' => $form, [
]); 'locales' => explode('|', $this->getParameter('app.locales')),
'form' => $form,
]
);
} }
} }

24
src/Controller/UserController.php

@ -7,6 +7,7 @@ use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use App\Service\ActivityService;
use App\Service\UserService; use App\Service\UserService;
use App\Service\TimeService; use App\Service\TimeService;
@ -36,35 +37,48 @@ class UserController extends AbstractController
)] )]
public function index( public function index(
Request $request, Request $request,
ActivityService $activityService,
UserService $userService, UserService $userService,
TimeService $timeService TimeService $timeService
): Response ): Response
{ {
// Init user session // Init user session
$userService->init( $user = $userService->init(
$request->getClientIp() $request->getClientIp()
); );
// Build activity history // Build activity history
$activities = []; $activities = [];
foreach ($userService->getAllByAddedFieldDesc() as $user)
/*
foreach ($activityService->findLast($user->isModerator()) as $activity)
{ {
if (!$activity->getUserId())
{
continue;
}
$activityUser = $userService->get(
$activity->getUserId()
);
$activities[] = $activities[] =
[ [
'user' => 'user' =>
[ [
'id' => $user->getId(), 'id' => $activityUser->getId(),
'identicon' => $userService->identicon( 'identicon' => $userService->identicon(
$user->getAddress(), $activityUser->getAddress(),
24 24
) )
], ],
'type' => 'join', 'type' => 'join',
'added' => $timeService->ago( 'added' => $timeService->ago(
$user->getAdded() $activity->getAdded()
) )
]; ];
} }
*/
return $this->render( return $this->render(
'default/user/dashboard.html.twig', 'default/user/dashboard.html.twig',

99
src/Entity/Activity.php

@ -0,0 +1,99 @@
<?php
namespace App\Entity;
use App\Repository\ActivityRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ActivityRepository::class)]
class Activity
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $event = null;
#[ORM\Column]
private ?int $added = null;
#[ORM\Column(nullable: true)]
private ?int $userId = null;
#[ORM\Column(nullable: true)]
private ?int $pageId = null;
public function getId(): ?int
{
return $this->id;
}
public function setId(string $id): static
{
$this->id = $id;
return $this;
}
public function getEvent(): ?string
{
return $this->event;
}
public function setEvent(string $event): static
{
$this->event = $event;
return $this;
}
public function getAdded(): ?int
{
return $this->added;
}
public function setAdded(int $added): static
{
$this->added = $added;
return $this;
}
public function setApproved(bool $approved): static
{
$this->approved = $approved;
return $this;
}
public function getUserId(): ?int
{
return $this->userId;
}
public function setUserId(?int $userId): static
{
$this->userId = $userId;
return $this;
}
public function getPageId(): ?int
{
return $this->pageId;
}
public function setPageId(?int $pageId): static
{
$this->pageId = $pageId;
return $this;
}
public function isApproved(): ?bool
{
return $this->approved;
}
}

118
src/Entity/PageDescription.php

@ -0,0 +1,118 @@
<?php
namespace App\Entity;
use App\Repository\PageDescriptionRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: PageDescriptionRepository::class)]
class PageDescription
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $pageId = null;
#[ORM\Column]
private ?int $userId = null;
#[ORM\Column]
private ?int $added = null;
#[ORM\Column(length: 255)]
private ?string $locale = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $value = null;
#[ORM\Column]
private ?bool $approved = null;
public function getId(): ?int
{
return $this->id;
}
public function setId(string $id): static
{
$this->id = $id;
return $this;
}
public function getPageId(): ?int
{
return $this->pageId;
}
public function setPageId(int $pageId): static
{
$this->pageId = $pageId;
return $this;
}
public function getUserId(): ?int
{
return $this->userId;
}
public function setUserId(int $userId): static
{
$this->userId = $userId;
return $this;
}
public function getAdded(): ?int
{
return $this->added;
}
public function setAdded(int $added): static
{
$this->added = $added;
return $this;
}
public function getLocale(): ?string
{
return $this->locale;
}
public function setLocale(string $locale): static
{
$this->locale = $locale;
return $this;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(string $value): static
{
$this->value = $value;
return $this;
}
public function isApproved(): ?bool
{
return $this->approved;
}
public function setApproved(bool $approved): static
{
$this->approved = $approved;
return $this;
}
}

118
src/Entity/PageSensitive.php

@ -0,0 +1,118 @@
<?php
namespace App\Entity;
use App\Repository\PageSensitiveRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: PageSensitiveRepository::class)]
class PageSensitive
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $pageId = null;
#[ORM\Column]
private ?int $userId = null;
#[ORM\Column]
private ?int $added = null;
#[ORM\Column(length: 255)]
private ?string $locale = null;
#[ORM\Column]
private ?bool $value = null;
#[ORM\Column]
private ?bool $approved = null;
public function getId(): ?int
{
return $this->id;
}
public function setId(string $id): static
{
$this->id = $id;
return $this;
}
public function getPageId(): ?int
{
return $this->pageId;
}
public function setPageId(int $pageId): static
{
$this->pageId = $pageId;
return $this;
}
public function getUserId(): ?int
{
return $this->userId;
}
public function setUserId(int $userId): static
{
$this->userId = $userId;
return $this;
}
public function getAdded(): ?int
{
return $this->added;
}
public function setAdded(int $added): static
{
$this->added = $added;
return $this;
}
public function getLocale(): ?string
{
return $this->locale;
}
public function setLocale(string $locale): static
{
$this->locale = $locale;
return $this;
}
public function isValue(): ?bool
{
return $this->value;
}
public function setValue(bool $value): static
{
$this->value = $value;
return $this;
}
public function isApproved(): ?bool
{
return $this->approved;
}
public function setApproved(bool $approved): static
{
$this->approved = $approved;
return $this;
}
}

118
src/Entity/PageTitle.php

@ -0,0 +1,118 @@
<?php
namespace App\Entity;
use App\Repository\PageTitleRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: PageTitleRepository::class)]
class PageTitle
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $pageId = null;
#[ORM\Column]
private ?int $userId = null;
#[ORM\Column]
private ?int $added = null;
#[ORM\Column(length: 255)]
private ?string $locale = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $value = null;
#[ORM\Column]
private ?bool $approved = null;
public function getId(): ?int
{
return $this->id;
}
public function setId(string $id): static
{
$this->id = $id;
return $this;
}
public function getPageId(): ?int
{
return $this->pageId;
}
public function setPageId(int $pageId): static
{
$this->pageId = $pageId;
return $this;
}
public function getUserId(): ?int
{
return $this->userId;
}
public function setUserId(int $userId): static
{
$this->userId = $userId;
return $this;
}
public function getAdded(): ?int
{
return $this->added;
}
public function setAdded(int $added): static
{
$this->added = $added;
return $this;
}
public function getLocale(): ?string
{
return $this->locale;
}
public function setLocale(string $locale): static
{
$this->locale = $locale;
return $this;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(string $value): static
{
$this->value = $value;
return $this;
}
public function isApproved(): ?bool
{
return $this->approved;
}
public function setApproved(bool $approved): static
{
$this->approved = $approved;
return $this;
}
}

103
src/Entity/PageTorrents.php

@ -0,0 +1,103 @@
<?php
namespace App\Entity;
use App\Repository\PageTorrentsRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: PageTorrentsRepository::class)]
class PageTorrents
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $pageId = null;
#[ORM\Column]
private ?int $userId = null;
#[ORM\Column(type: Types::ARRAY)]
private array $torrentsId = [];
#[ORM\Column]
private ?int $added = null;
#[ORM\Column]
private ?bool $approved = null;
public function getId(): ?int
{
return $this->id;
}
public function setId(string $id): static
{
$this->id = $id;
return $this;
}
public function getPageId(): ?int
{
return $this->pageId;
}
public function setPageId(int $pageId): static
{
$this->pageId = $pageId;
return $this;
}
public function getUserId(): ?int
{
return $this->userId;
}
public function setUserId(int $userId): static
{
$this->userId = $userId;
return $this;
}
public function getTorrentsId(): array
{
return $this->torrentsId;
}
public function setTorrentsId(array $torrentsId): static
{
$this->torrentsId = $torrentsId;
return $this;
}
public function getAdded(): ?int
{
return $this->added;
}
public function setAdded(int $added): static
{
$this->added = $added;
return $this;
}
public function isApproved(): ?bool
{
return $this->approved;
}
public function setApproved(bool $approved): static
{
$this->approved = $approved;
return $this;
}
}

47
src/Repository/ActivityRepository.php

@ -0,0 +1,47 @@
<?php
namespace App\Repository;
use App\Entity\Activity;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Activity>
*
* @method Activity|null find($id, $lockMode = null, $lockVersion = null)
* @method Activity|null findOneBy(array $criteria, array $orderBy = null)
* @method Activity[] findAll()
* @method Activity[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ActivityRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Activity::class);
}
public function findLast(int $start = 0, int $limit = 10): array
{
return $this->createQueryBuilder('a')
->orderBy('a.id', 'DESC') // same to a.added
->setFirstResult($start)
->setMaxResults($limit)
->getQuery()
->getResult()
;
}
public function findLastByApprovedField(bool $approved, int $start = 0, int $limit = 10): array
{
return $this->createQueryBuilder('a')
->orderBy('a.id', 'DESC') // same to a.added
->where('a.approved = :approved')
->setParameter('approved', $approved)
->setFirstResult($start)
->setMaxResults($limit)
->getQuery()
->getResult()
;
}
}

23
src/Repository/PageDescriptionRepository.php

@ -0,0 +1,23 @@
<?php
namespace App\Repository;
use App\Entity\PageDescription;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<PageDescription>
*
* @method PageDescription|null find($id, $lockMode = null, $lockVersion = null)
* @method PageDescription|null findOneBy(array $criteria, array $orderBy = null)
* @method PageDescription[] findAll()
* @method PageDescription[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PageDescriptionRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, PageDescription::class);
}
}

25
src/Repository/PageRepository.php

@ -20,29 +20,4 @@ class PageRepository extends ServiceEntityRepository
{ {
parent::__construct($registry, Page::class); parent::__construct($registry, Page::class);
} }
// /**
// * @return Page[] Returns an array of Page objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('p')
// ->andWhere('p.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('p.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?Page
// {
// return $this->createQueryBuilder('p')
// ->andWhere('p.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
} }

23
src/Repository/PageSensitiveRepository.php

@ -0,0 +1,23 @@
<?php
namespace App\Repository;
use App\Entity\PageSensitive;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<PageSensitive>
*
* @method PageSensitive|null find($id, $lockMode = null, $lockVersion = null)
* @method PageSensitive|null findOneBy(array $criteria, array $orderBy = null)
* @method PageSensitive[] findAll()
* @method PageSensitive[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PageSensitiveRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, PageSensitive::class);
}
}

23
src/Repository/PageTitleRepository.php

@ -0,0 +1,23 @@
<?php
namespace App\Repository;
use App\Entity\PageTitle;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<PageTitle>
*
* @method PageTitle|null find($id, $lockMode = null, $lockVersion = null)
* @method PageTitle|null findOneBy(array $criteria, array $orderBy = null)
* @method PageTitle[] findAll()
* @method PageTitle[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PageTitleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, PageTitle::class);
}
}

23
src/Repository/PageTorrentsRepository.php

@ -0,0 +1,23 @@
<?php
namespace App\Repository;
use App\Entity\PageTorrents;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<PageTorrents>
*
* @method PageTorrents|null find($id, $lockMode = null, $lockVersion = null)
* @method PageTorrents|null findOneBy(array $criteria, array $orderBy = null)
* @method PageTorrents[] findAll()
* @method PageTorrents[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PageTorrentsRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, PageTorrents::class);
}
}

9
src/Repository/UserRepository.php

@ -40,13 +40,4 @@ class UserRepository extends ServiceEntityRepository
->getOneOrNullResult() ->getOneOrNullResult()
; ;
} }
public function findAllByAddedFieldDesc(): array
{
return $this->createQueryBuilder('u')
->orderBy('u.added', 'DESC')
->getQuery()
->getResult()
;
}
} }

54
src/Service/ActivityService.php

@ -0,0 +1,54 @@
<?php
namespace App\Service;
use App\Entity\Activity;
use App\Repository\ActivityRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class ActivityService
{
private EntityManagerInterface $entityManager;
private ActivityRepository $activityRepository;
private ParameterBagInterface $parameterBagInterface;
public function __construct(
EntityManagerInterface $entityManager,
ParameterBagInterface $parameterBagInterface
)
{
$this->entityManager = $entityManager;
$this->activityRepository = $entityManager->getRepository(Activity::class);
$this->parameterBagInterface = $parameterBagInterface;
}
public function addEvent(int $userId, string $event, array $data): ?Activity
{
$activity = new Activity();
$activity->setEvent($event);
$activity->setUserId($userId);
$activity->setApproved($approved);
$activity->setAdded(time());
$this->entityManager->persist($activity);
$this->entityManager->flush();
return $activity;
}
public function findLast(bool $moderator): ?array
{
if ($moderator)
{
return $this->activityRepository->findLast();
}
else
{
return $this->activityRepository->findLastByApprovedField(true);
}
}
}

177
src/Service/PageService.php

@ -3,35 +3,194 @@
namespace App\Service; namespace App\Service;
use App\Entity\Page; use App\Entity\Page;
use App\Entity\PageTitle;
use App\Entity\PageDescription;
use App\Entity\PageTorrents;
use App\Entity\PageSensitive;
use App\Repository\PageRepository; use App\Repository\PageRepository;
use Doctrine\ORM\EntityManagerInterface; use App\Repository\PageTitleRepository;
use App\Repository\PageDescriptionRepository;
use App\Repository\PageSensitiveRepository;
use App\Repository\PageTorrentsRepository;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Doctrine\ORM\EntityManagerInterface;
class PageService class PageService
{ {
private EntityManagerInterface $entityManager; private EntityManagerInterface $entityManager;
private PageRepository $pageRepository;
private ParameterBagInterface $parameterBagInterface; private ParameterBagInterface $parameterBagInterface;
public function __construct( public function __construct(
EntityManagerInterface $entityManager, EntityManagerInterface $entityManager,
ParameterBagInterface $parameterBagInterface
) )
{ {
$this->entityManager = $entityManager; $this->entityManager = $entityManager;
$this->pageRepository = $entityManager->getRepository(Page::class);
$this->parameterBagInterface = $parameterBagInterface;
} }
public function new(): ?Page public function submit(
int $added,
int $userId,
string $locale,
string $title,
string $description,
array $torrents,
bool $sensitive,
bool $approved
): ?Page
{ {
return new Page(); $page = $this->addPage();
if (!empty($title))
{
$pageTitle = $this->addPageTitle(
$page->getId(),
$userId,
$added,
$locale,
$title,
$approved
);
}
if (!empty($description))
{
$pageDescription = $this->addPageDescription(
$page->getId(),
$userId,
$added,
$locale,
$description,
$approved
);
}
if (!empty($torrents))
{
$pageTorrents = $this->addPageTorrents(
$page->getId(),
$userId,
$added,
$locale,
$torrents,
$approved
);
}
// @TODO
$pageSensitive = $this->addPageSensitive(
$page->getId(),
$userId,
$added,
$locale,
$description,
$approved
);
return $page;
} }
public function save(Page $page) : void public function addPage(): ?Page
{ {
$page = new Page();
$this->entityManager->persist($page); $this->entityManager->persist($page);
$this->entityManager->flush(); $this->entityManager->flush();
return $page;
}
public function addPageTitle(
int $pageId,
int $userId,
int $added,
string $locale,
string $value,
bool $approved
): ?PageTitle
{
$pageTitle = new PageTitle();
$pageTitle->setPageId($pageId);
$pageTitle->setUserId($userId);
$pageTitle->setLocale($locale);
$pageTitle->setValue($value);
$pageTitle->setAdded($added);
$pageTitle->setApproved($approved);
$this->entityManager->persist($pageTitle);
$this->entityManager->flush();
return $pageTitle;
}
public function addPageDescription(
int $pageId,
int $userId,
int $added,
string $locale,
string $value,
bool $approved
): ?PageDescription
{
$pageDescription = new PageDescription();
$pageDescription->setPageId($pageId);
$pageDescription->setUserId($userId);
$pageDescription->setAdded($added);
$pageDescription->setLocale($locale);
$pageDescription->setValue($value);
$pageDescription->setApproved($approved);
$this->entityManager->persist($pageDescription);
$this->entityManager->flush();
return $pageDescription;
}
public function addPageTorrents(
int $pageId,
int $userId,
int $added,
array $torrentsId,
bool $approved
): ?PageTorrents
{
$pageTorrents = new PageTorrents();
$pageTorrents->setPageId($pageId);
$pageTorrents->setUserId($userId);
$pageTorrents->setAdded($added);
$pageTorrents->setTorrentsId($torrentsId);
$pageTorrents->setApproved($approved);
$this->entityManager->persist($pageTorrents);
$this->entityManager->flush();
return $pageTorrents;
}
public function addPageSensitive(
int $pageId,
int $userId,
int $added,
string $locale,
string $value,
bool $approved
): ?PageSensitive
{
$pageSensitive = new PageSensitive();
$pageSensitive->setPageId($pageId);
$pageSensitive->setUserId($userId);
$pageSensitive->setAdded($added);
$pageSensitive->setLocale($locale);
$pageSensitive->setValue($value);
$pageSensitive->setApproved($approved);
$this->entityManager->persist($pageSensitive);
$this->entityManager->flush();
return $pageSensitive;
} }
} }

5
src/Service/UserService.php

@ -58,11 +58,6 @@ class UserService
return $this->userRepository->findOneByIdField($id); return $this->userRepository->findOneByIdField($id);
} }
public function getAllByAddedFieldDesc(): array
{
return $this->userRepository->findAllByAddedFieldDesc();
}
public function identicon( public function identicon(
mixed $value, mixed $value,
int $size = 16, int $size = 16,

2
templates/default/page/info.html.twig

@ -0,0 +1,2 @@
{% extends 'default/layout.html.twig' %}
{% block title %}{{ title }} - {{ name }}{% endblock %}

4
templates/default/page/submit.html.twig

@ -10,14 +10,14 @@
<label for="locale"> <label for="locale">
{{'Content language'|trans }} {{'Content language'|trans }}
</label> </label>
<sub class="opacity-0 parent-hover-opacity-09" title="{{ form.locale.placeholder }}"> <sub class="opacity-0 parent-hover-opacity-09" title="{{ form.locale.attribute.placeholder }}">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16">
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/> <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
</svg> </svg>
</sub> </sub>
<select class="width-100 margin-t-8-px" type="text" name="locale" id="locale"> <select class="width-100 margin-t-8-px" type="text" name="locale" id="locale">
{% for locale in locales %} {% for locale in locales %}
{% if locale == form.locale.value %} {% if locale == form.locale.attribute.value %}
<option value="{{ locale }}" selected="selected"> <option value="{{ locale }}" selected="selected">
{{ locale|locale_name(locale)|u.title }} {{ locale|locale_name(locale)|u.title }}
</option> </option>

2
templates/default/torrent/submit.html.twig

@ -24,7 +24,7 @@
</div> </div>
<div class="margin-y-16-px"> <div class="margin-y-16-px">
<label for="locales"> <label for="locales">
{{'Content language'|trans }} {{'Contains language'|trans }}
</label> </label>
<sub class="opacity-0 parent-hover-opacity-09" title="{{ form.locales.attribute.placeholder }}"> <sub class="opacity-0 parent-hover-opacity-09" title="{{ form.locales.attribute.placeholder }}">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16">

2
templates/default/user/module.html.twig

@ -165,7 +165,7 @@
</a> </a>
{% endif %} {% endif %}
#} #}
{% if route == 'page_submit' %} {% if route == 'page_submit' or route == 'torrent_submit' %}
<span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white"> <span class="padding-x-16-px padding-y-8-px display-block background-color-green cursor-default text-color-white">
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" fill="currentColor" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" 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 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/> <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 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"/>

Loading…
Cancel
Save