<?php
namespace EasyCorp\Bundle\EasyAdminBundle\Dto;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
/**
* @author Javier Eguiluz <javier.eguiluz@gmail.com>
*/
final class ActionDto
{
private $type;
private $name;
private $label;
private $icon;
private $cssClass;
private $htmlElement;
private $htmlAttributes;
private $linkUrl;
private $templatePath;
private $crudActionName;
private $routeName;
private $routeParameters;
private $url;
private $translationParameters;
private $displayCallable;
public function __construct()
{
$this->cssClass = '';
$this->htmlAttributes = [];
$this->routeParameters = [];
$this->translationParameters = [];
}
public function getType(): string
{
return $this->type;
}
public function setType(string $type): void
{
$this->type = $type;
}
public function isEntityAction(): bool
{
return Action::TYPE_ENTITY === $this->type;
}
public function isGlobalAction(): bool
{
return Action::TYPE_GLOBAL === $this->type;
}
public function isBatchAction(): bool
{
return Action::TYPE_BATCH === $this->type;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
/**
* @return string|false|null
*/
public function getLabel()
{
return $this->label;
}
public function setLabel(?string $label): void
{
$this->label = $label;
}
public function getIcon(): ?string
{
return $this->icon;
}
public function setIcon(?string $icon): void
{
$this->icon = $icon;
}
public function getCssClass(): string
{
return $this->cssClass;
}
public function setCssClass(string $cssClass): void
{
$this->cssClass = $cssClass;
}
public function getHtmlElement(): string
{
return $this->htmlElement;
}
public function setHtmlElement(string $htmlElement): void
{
$this->htmlElement = $htmlElement;
}
public function getHtmlAttributes(): array
{
return $this->htmlAttributes;
}
public function addHtmlAttributes(array $htmlAttributes): void
{
$this->htmlAttributes = array_merge($this->htmlAttributes, $htmlAttributes);
}
public function setHtmlAttributes(array $htmlAttributes): void
{
$this->htmlAttributes = $htmlAttributes;
}
public function setHtmlAttribute(string $attributeName, string $attributeValue): void
{
$this->htmlAttributes[$attributeName] = $attributeValue;
}
public function getTemplatePath(): ?string
{
return $this->templatePath;
}
public function setTemplatePath(string $templatePath): void
{
$this->templatePath = $templatePath;
}
public function getLinkUrl(): string
{
return $this->linkUrl;
}
public function setLinkUrl(string $linkUrl): void
{
$this->linkUrl = $linkUrl;
}
public function getCrudActionName(): ?string
{
return $this->crudActionName;
}
public function setCrudActionName(string $crudActionName): void
{
$this->crudActionName = $crudActionName;
}
public function getRouteName(): ?string
{
return $this->routeName;
}
public function setRouteName(string $routeName): void
{
$this->routeName = $routeName;
}
/**
* @return array|callable
*/
public function getRouteParameters()
{
return $this->routeParameters;
}
/**
* @param array|callable $routeParameters
*/
public function setRouteParameters($routeParameters): void
{
$this->routeParameters = $routeParameters;
}
/**
* @return string|callable
*/
public function getUrl()
{
return $this->url;
}
/**
* @param string|callable $url
*/
public function setUrl($url): void
{
$this->url = $url;
}
public function getTranslationParameters(): array
{
return $this->translationParameters;
}
public function setTranslationParameters(array $translationParameters): void
{
$this->translationParameters = $translationParameters;
}
public function shouldBeDisplayedFor(EntityDto $entityDto): bool
{
return null === $this->displayCallable || \call_user_func($this->displayCallable, $entityDto->getInstance());
}
public function setDisplayCallable(callable $displayCallable): void
{
$this->displayCallable = $displayCallable;
}
/**
* @internal
*/
public function getAsConfigObject(): Action
{
$action = Action::new($this->name, $this->label, $this->icon);
$action->setCssClass($this->cssClass);
$action->setHtmlAttributes($this->htmlAttributes);
$action->setTranslationParameters($this->translationParameters);
if (null !== $this->templatePath) {
$action->setTemplatePath($this->templatePath);
}
if ($this->isGlobalAction()) {
$action->createAsGlobalAction();
} elseif ($this->isBatchAction()) {
$action->createAsBatchAction();
}
if ('a' === $this->htmlElement) {
$action->displayAsLink();
} else {
$action->displayAsButton();
}
if (null !== $this->crudActionName) {
$action->linkToCrudAction($this->crudActionName);
}
if (null !== $this->routeName) {
$action->linkToRoute($this->routeName, $this->routeParameters);
}
if (null !== $this->displayCallable) {
$action->displayIf($this->displayCallable);
}
return $action;
}
}