Improve ACP forum management UI
This commit is contained in:
@@ -11,10 +11,12 @@ use ApiPlatform\Metadata\Get;
|
||||
use ApiPlatform\Metadata\GetCollection;
|
||||
use ApiPlatform\Metadata\Patch;
|
||||
use ApiPlatform\Metadata\Post;
|
||||
use App\State\ForumPositionProcessor;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Serializer\Annotation\Groups;
|
||||
//use Symfony\Component\Serializer\Annotation\Groups;
|
||||
use Symfony\Component\Serializer\Attribute\Groups;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
#[ORM\Entity]
|
||||
@@ -22,15 +24,16 @@ use Symfony\Component\Validator\Constraints as Assert;
|
||||
#[ApiFilter(SearchFilter::class, properties: ['parent' => 'exact', 'type' => 'exact'])]
|
||||
#[ApiFilter(ExistsFilter::class, properties: ['parent'])]
|
||||
#[ApiResource(
|
||||
normalizationContext: ['groups' => ['forum:read']],
|
||||
denormalizationContext: ['groups' => ['forum:write']],
|
||||
operations: [
|
||||
operations : [
|
||||
new Get(),
|
||||
new GetCollection(),
|
||||
new Post(security: "is_granted('ROLE_ADMIN')"),
|
||||
new Patch(security: "is_granted('ROLE_ADMIN')"),
|
||||
new Post(security: "is_granted('ROLE_ADMIN')", processor: ForumPositionProcessor::class),
|
||||
new Patch(security: "is_granted('ROLE_ADMIN')", processor: ForumPositionProcessor::class),
|
||||
new Delete(security: "is_granted('ROLE_ADMIN')")
|
||||
]
|
||||
],
|
||||
normalizationContext : ['groups' => ['forum:read']],
|
||||
denormalizationContext: ['groups' => ['forum:write']],
|
||||
order : ['position' => 'ASC']
|
||||
)]
|
||||
class Forum
|
||||
{
|
||||
@@ -58,6 +61,10 @@ class Forum
|
||||
private string $type = self::TYPE_CATEGORY;
|
||||
|
||||
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
|
||||
#[Assert\Expression(
|
||||
"this.getParent() === null or this.getParent().isCategory()",
|
||||
message: "Parent must be a category."
|
||||
)]
|
||||
#[Groups(['forum:read', 'forum:write'])]
|
||||
private ?self $parent = null;
|
||||
|
||||
@@ -69,6 +76,10 @@ class Forum
|
||||
#[Groups(['forum:read'])]
|
||||
private Collection $threads;
|
||||
|
||||
#[ORM\Column]
|
||||
#[Groups(['forum:read'])]
|
||||
private int $position = 0;
|
||||
|
||||
#[ORM\Column]
|
||||
#[Groups(['forum:read'])]
|
||||
private ?\DateTimeImmutable $createdAt = null;
|
||||
@@ -158,6 +169,18 @@ class Forum
|
||||
return $this->children;
|
||||
}
|
||||
|
||||
public function getPosition(): int
|
||||
{
|
||||
return $this->position;
|
||||
}
|
||||
|
||||
public function setPosition(int $position): self
|
||||
{
|
||||
$this->position = $position;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, Thread>
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user