Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions sources/AppBundle/Controller/Admin/Planete/FeedAddAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use AppBundle\AuditLog\Audit;
use AppBundle\Planete\FeedFormData;
use AppBundle\Planete\FeedFormType;
use Exception;
use PlanetePHP\FeedRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -25,21 +26,22 @@ public function __invoke(Request $request): Response
$form = $this->createForm(FeedFormType::class, $data);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ok = $this->feedRepository->insert(
$data->name,
$data->url,
$data->feed,
$data->status,
$data->userId,
);

if ($ok) {
try {
$this->feedRepository->insert(
$data->name,
$data->url,
$data->feed,
$data->status,
$data->userId,
);

$this->audit->log('Ajout du flux ' . $data->name);
$this->addFlash('notice', 'Le flux a été ajouté');

return $this->redirectToRoute('admin_planete_feed_list');
} catch (Exception $e) {
$this->addFlash('error', "Une erreur est survenue lors de l'ajout du flux :\n" . $e->getMessage());
}
$this->addFlash('error', 'Une erreur est survenue lors de l\'ajout du flux');
}

return $this->render('admin/planete/feed_add.html.twig', [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,14 @@ public function __construct(
public function __invoke(Request $request): RedirectResponse
{
$id = $request->query->getInt('id');
if ($this->feedRepository->delete($id)) {

try {
$this->feedRepository->delete($id);

$this->audit->log('Suppression du flux ' . $id);
$this->addFlash('notice', 'Le flux a été supprimé');
} else {
$this->addFlash('error', 'Une erreur est survenue lors de la suppression du flux');
} catch (\Exception $e) {
$this->addFlash('error', "Une erreur est survenue lors de la suppression du flux :\n" . $e->getMessage());
}

return $this->redirectToRoute('admin_planete_feed_list');
Expand Down
24 changes: 13 additions & 11 deletions sources/AppBundle/Controller/Admin/Planete/FeedEditAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use AppBundle\AuditLog\Audit;
use AppBundle\Planete\FeedFormData;
use AppBundle\Planete\FeedFormType;
use Exception;
use PlanetePHP\FeedRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
Expand All @@ -32,22 +33,23 @@ public function __invoke(Request $request): Response
$form = $this->createForm(FeedFormType::class, $data);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ok = $this->feedRepository->update(
$id,
$data->name,
$data->url,
$data->feed,
$data->status,
$data->userId,
);

if ($ok) {
try {
$this->feedRepository->update(
$id,
$data->name,
$data->url,
$data->feed,
$data->status,
$data->userId,
);

$this->audit->log(sprintf("Modification du flux %s (%d)", $data->name, $id));
$this->addFlash('notice', 'Le flux a été modifié');

return $this->redirectToRoute('admin_planete_feed_list');
} catch (Exception $e) {
$this->addFlash('error', "Une erreur est survenue lors de la modification du flux :\n" . $e->getMessage());
}
$this->addFlash('error', 'Une erreur est survenue lors de la modification du flux');
}

return $this->render('admin/planete/feed_edit.html.twig', [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,12 @@ public function __construct(
public function __invoke(Request $request): Response
{
$testFeeds = $request->query->getBoolean('testFeeds');
$filter = $request->query->get('filter');
$sort = $request->query->get('sort', 'name');
$direction = $request->query->get('direction', 'asc');
$feeds = $this->feedRepository->find($sort, $direction, $filter);
$feeds = $this->feedRepository->find();

return new Response($this->twig->render('admin/planete/feed_list.html.twig', [
'feeds' => $feeds,
'testFeeds' => $testFeeds,
'feedResults' => $testFeeds ? $this->testFeeds($feeds) : [],
'sort' => $sort,
'direction' => $direction,
'filter' => $filter,
]));
}

Expand Down
37 changes: 11 additions & 26 deletions sources/PlanetePHP/FeedRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
namespace PlanetePHP;

use Doctrine\DBAL\Connection;
use Webmozart\Assert\Assert;

class FeedRepository
final readonly class FeedRepository
{
public function __construct(private readonly Connection $connection) {}
public function __construct(private Connection $connection) {}
Comment thread
Mopolo marked this conversation as resolved.

/**
* @return Feed[]
Expand All @@ -24,33 +23,19 @@ public function findActive(): array
}

/**
* @param string $sort
* @param string $direction
* @param string|null $filter
*
* @return Feed[]
*/
public function find($sort = 'name', $direction = 'asc', $filter = null): array
public function find(): array
{
$sorts = [
'name' => 'f.nom',
'url' => 'f.url',
'status' => 'f.etat',
];
Assert::keyExists($sorts, $sort);
$qb = $this->connection->createQueryBuilder()
->select('f.id', 'f.nom', 'f.url', 'f.feed', 'f.etat', 'f.id_personne_physique')
->from('afup_planete_flux', 'f')
->orderBy($sorts[$sort], $direction);
if (null !== $filter) {
$qb->where('nom LIKE :filter')
->setParameter('filter', '%' . $filter . '%');
}
->orderBy('f.nom', 'asc');

return $this->hydrateAll($qb->executeQuery()->fetchAllAssociative());
}

public function get($id): Feed
public function get(int $id): Feed
{
$query = $this->connection->prepare('SELECT id, nom, url, feed, etat, id_personne_physique
FROM afup_planete_flux f WHERE f.id = :id');
Expand All @@ -59,7 +44,7 @@ public function get($id): Feed
return $this->hydrate($query->executeQuery()->fetchAssociative());
}

public function insert(string $name, string $url, string $feed, FeedStatus $status, ?int $userId = 0)
public function insert(string $name, string $url, string $feed, FeedStatus $status, ?int $userId = 0): void
{
$statement = $this->connection->prepare('INSERT INTO afup_planete_flux (nom, url, feed, etat, id_personne_physique) VALUES (:name, :url, :feed, :status, :userId)');

Expand All @@ -69,10 +54,10 @@ public function insert(string $name, string $url, string $feed, FeedStatus $stat
$statement->bindValue('status', $status->value);
$statement->bindValue('userId', (int) $userId);

return $statement->executeStatement();
$statement->executeStatement();
}

public function update(int $id, string $name, string $url, string $feed, FeedStatus $status, ?int $userId = 0)
public function update(int $id, string $name, string $url, string $feed, FeedStatus $status, ?int $userId = 0): void
{
$statement = $this->connection->prepare('UPDATE afup_planete_flux
SET nom = :name, url = :url, feed = :feed, etat = :status, id_personne_physique = :userId
Expand All @@ -85,12 +70,12 @@ public function update(int $id, string $name, string $url, string $feed, FeedSta
$statement->bindValue('userId', (int) $userId);
$statement->bindValue('id', $id);

return $statement->executeStatement();
$statement->executeStatement();
}

public function delete(int $id): bool
public function delete(int $id): void
{
return $this->connection->delete('afup_planete_flux', ['id' => $id]) === 1;
$this->connection->delete('afup_planete_flux', ['id' => $id]);
}

private function hydrateAll(array $rows): array
Expand Down
31 changes: 3 additions & 28 deletions templates/admin/planete/feed_list.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -19,37 +19,12 @@
</div>

<div class="ui segment">
<form method="GET" name="filtre">
<input type="hidden" name="sort" value="{{ sort }}"/>
<input type="hidden" name="direction" value="{{ direction }}"/>
<div class="ui form">
<div class="inline fields">
<div class="field">
<label>Recherche</label>
<input type="text" name="filter" value="{{ filter|escape('html_attr') }}">
</div>
<div class="field">
<input type="submit" value="Filtrer" class="ui button" name="submit_filtre"/>
</div>
</div>
</div>
</form>

<table class="ui table striped compact celled">
<thead>
<tr>
<th align="left"><a href="{{ path('admin_planete_feed_list', {
sort: 'name',
direction: direction == 'asc' and sort == 'name' ? 'desc' : 'asc'
}) }}">Nom</a></th>
<th align="left"><a href="{{ path('admin_planete_feed_list', {
sort: 'url',
direction: direction == 'asc' and sort == 'url' ? 'desc' : 'asc'
}) }}">URL</a></th>
<th class="center aligned"><a href="{{ path('admin_planete_feed_list', {
sort: 'status',
direction: direction == 'asc' and sort == 'status' ? 'desc' : 'asc'
}) }}">Etat</a></th>
<th>Nom</th>
<th>URL</th>
<th class="center aligned">Etat</th>
<th class="center aligned">Membre lié</th>
<th class="center aligned">Test du flux</th>
<th>&nbsp;</th>
Expand Down
Loading