Browse Source

add public feed

develop
Simon Vieille 5 months ago
parent
commit
94a0895d39
Signed by: deblan GPG Key ID: 03383D15A1D31745
  1. 17
      src/Command/MailingListCommand.php
  2. 5
      src/Command/MailingNewCommand.php
  3. 60
      src/Command/MailingPublishCommand.php
  4. 60
      src/Command/MailingUnpublishCommand.php
  5. 16
      src/Controller/AppController.php
  6. 17
      src/Entity/Mailing.php

17
src/Command/MailingListCommand.php

@ -32,20 +32,22 @@ class MailingListCommand extends Command
{
$this
->setDescription('List mailings')
->addOption('feed', null, InputOption::VALUE_NONE, 'Show URLs of feeds')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$showFeed = $input->getOption('feed');
$headers = ['Label', 'ID', 'Feed', 'Created at', 'Updated at'];
$headers = ['Label', 'ID', 'Feed', 'Public', 'Created at', 'Updated at'];
$rows = [];
$entities = $this->repo->findAll([], ['createdAt' => 'DEC']);
foreach ($entities as $entity) {
$rows[] = [
$row = [
$entity->getLabel(),
$entity->getId(),
$this->router->generate(
@ -53,9 +55,20 @@ class MailingListCommand extends Command
['mailing' => $entity->getId()],
UrlGeneratorInterface::ABSOLUTE_URL
),
$entity->getIsPublic() ? 'y' : 'n',
$entity->getCreatedAt()->format('Y-m-d H:i:s'),
$entity->getUpdatedAt()->format('Y-m-d H:i:s'),
];
if (!$showFeed) {
unset($row[2]);
}
$rows[] = $row;
}
if (!$showFeed) {
unset($headers[2]);
}
$io->table($headers, $rows);

5
src/Command/MailingNewCommand.php

@ -29,6 +29,7 @@ class MailingNewCommand extends Command
$this
->setDescription('Create a new mailing')
->addArgument('label', InputArgument::REQUIRED, 'Label of the mailing')
->addOption('public', 'p', InputOption::VALUE_NONE, 'Make the mailing public')
;
}
@ -38,7 +39,9 @@ class MailingNewCommand extends Command
$label = $input->getArgument('label');
$entity = new Mailing();
$entity->setLabel($label);
$entity
->setLabel($label)
->setIsPublic($input->getOption('public'));
$this->em->persist($entity);
$this->em->flush();

60
src/Command/MailingPublishCommand.php

@ -0,0 +1,60 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\MailingRepository;
class MailingPublishCommand extends Command
{
protected static $defaultName = 'mailing:publish';
protected EntityManagerInterface $em;
protected MailingRepository $repo;
public function __construct(EntityManagerInterface $em, MailingRepository $repo)
{
parent::__construct();
$this->em = $em;
$this->repo = $repo;
}
protected function configure()
{
$this
->setDescription('Publish a mailing')
->addArgument('id', InputArgument::OPTIONAL, 'ID of the mailing')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$id = $input->getArgument('id');
$entity = $this->repo->find(['id' => $id]);
if (null === $entity) {
$io->error(sprintf('"%s" is not found!', $id));
return Command::FAILURE;
}
$entity->setIsPublic(true);
$this->em->persist($entity);
$this->em->flush();
$io->success(sprintf('"%s" is now public', $entity->getId()));
return Command::SUCCESS;
}
}

60
src/Command/MailingUnpublishCommand.php

@ -0,0 +1,60 @@
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\MailingRepository;
class MailingUnpublishCommand extends Command
{
protected static $defaultName = 'mailing:unpublish';
protected EntityManagerInterface $em;
protected MailingRepository $repo;
public function __construct(EntityManagerInterface $em, MailingRepository $repo)
{
parent::__construct();
$this->em = $em;
$this->repo = $repo;
}
protected function configure()
{
$this
->setDescription('Unpublish a mailing')
->addArgument('id', InputArgument::OPTIONAL, 'ID of the mailing')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$id = $input->getArgument('id');
$entity = $this->repo->find(['id' => $id]);
if (null === $entity) {
$io->error(sprintf('"%s" is not found!', $id));
return Command::FAILURE;
}
$entity->setIsPublic(false);
$this->em->persist($entity);
$this->em->flush();
$io->success(sprintf('"%s" is now private', $entity->getId()));
return Command::SUCCESS;
}
}

16
src/Controller/AppController.php

@ -5,14 +5,26 @@ namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\MailingRepository;
class AppController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function home(): Response
public function home(MailingRepository $mailingRepo): Response
{
return $this->render('app/home.html.twig');
$mailings = $mailingRepo->findBy(
[
'isPublic' => true,
],
[
'label' => 'ASC',
]
);
return $this->render('app/home.html.twig', [
'mailings' => $mailings,
]);
}
}

17
src/Entity/Mailing.php

@ -36,6 +36,11 @@ class Mailing
*/
private $mails;
/**
* @ORM\Column(type="boolean", options={"default": 0})
*/
private $isPublic = false;
public function __construct()
{
$this->mails = new ArrayCollection();
@ -87,4 +92,16 @@ class Mailing
return $this;
}
public function getIsPublic(): ?bool
{
return $this->isPublic;
}
public function setIsPublic(bool $isPublic): self
{
$this->isPublic = $isPublic;
return $this;
}
}
Loading…
Cancel
Save