add public feed
This commit is contained in:
parent
c3473a4045
commit
94a0895d39
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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…
Reference in New Issue