Entity/TriggerCampaign.php
<?php
namespace MauticPlugin\LeuchtfeuerPrintmailingBundle\Entity;
use Doctrine\ORM\Mapping\ClassMetadata;
use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder;
use Mautic\CoreBundle\Entity\FormEntity;
use MauticPlugin\LeuchtfeuerPrintmailingBundle\Validator\AllowedCharacters;
use MauticPlugin\LeuchtfeuerPrintmailingBundle\Validator\Variable;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Mapping\ClassMetadata as SymfonyClassMetadata;
class TriggerCampaign extends FormEntity
{
public const ALLOWED_TYPES = [
'string' => 'plugin.printmailing.form.types.string',
'integer' => 'plugin.printmailing.form.types.integer',
'boolean' => 'plugin.printmailing.form.types.boolean',
'date' => 'plugin.printmailing.form.types.date',
'image' => 'plugin.printmailing.form.types.image',
'imageurl' => 'plugin.printmailing.form.types.imageurl',
'float' => 'plugin.printmailing.form.types.float',
'zip' => 'plugin.printmailing.form.types.zip',
'countrycode' => 'plugin.printmailing.form.types.countrycode',
];
private $id;
private $triggerId = 0;
private $mailingId = 0;
private $name = '';
private $description = '';
/**
* @var \DateTimeInterface
*/
private $startDate;
/**
* @var \DateTimeInterface|null
*/
private $endDate;
private $variables = [];
private $printNodeId = '';
private $printNodeDescription = '';
/**
* {@inheritdoc}
*/
public function __clone()
{
$this->id = null;
parent::__clone();
}
public function __construct()
{
$this->setStartDate();
$var_array = [
0 => ['field' => 'firstname', 'object' => 'lead', 'type' => 'text', 'variable' => 'string'],
1 => ['field' => 'lastname', 'object' => 'lead', 'type' => 'text', 'variable' => 'string'],
2 => ['field' => 'address1', 'object' => 'lead', 'type' => 'text', 'variable' => 'string'],
3 => ['field' => 'zipcode', 'object' => 'lead', 'type' => 'text', 'variable' => 'zip'],
4 => ['field' => 'city', 'object' => 'lead', 'type' => 'text', 'variable' => 'string'],
5 => ['field' => 'country', 'object' => 'lead', 'type' => 'country', 'variable' => 'string'],
];
$this->setVariables($var_array);
}
/**
* {@inheritdoc}
*/
public static function loadMetadata(ClassMetadata $metadata)
{
$builder = new ClassMetadataBuilder($metadata);
$builder->setTable('trigger_campaigns')->setCustomRepositoryClass(TriggerCampaignRepository::class);
$builder->addIdColumns();
$builder->createField('mailingId', 'integer')->columnName('mailing_id')->build();
$builder->createField('triggerId', 'integer')->columnName('trigger_id')->build();
$builder->createField('startDate', 'datetime')->columnName('start_date')->build();
$builder->createField('endDate', 'datetime')->columnName('end_date')->nullable()->build();
$builder->createField('printNodeId', 'string')->columnName('print_node_id')->build();
$builder->createField('printNodeDescription', 'string')->columnName('print_node_description')->build();
$builder->createField('variables', 'array')->build();
}
public static function loadValidatorMetadata(SymfonyClassMetadata $metadata)
{
$metadata->addPropertyConstraints('name', [
new NotBlank([
'message' => 'mautic.core.name.required',
]),
new Length([
'min' => 1,
'max' => 30,
]),
new AllowedCharacters(),
]);
$metadata->addPropertyConstraints('printNodeId', [
new Length([
'min' => 1,
'max' => 32,
]),
]);
$metadata->addPropertyConstraints('printNodeDescription', [
new Length([
'min' => 1,
'max' => 30,
]),
new AllowedCharacters(),
]);
$metadata->addPropertyConstraints('variables', [
new Variable(),
]);
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->isChanged('name', $name);
$this->name = $name;
}
public function getDescription(): string
{
return $this->description ?? '';
}
public function setDescription(?string $description): void
{
$description = (string) $description;
$this->isChanged('description', $description);
$this->description = $description;
}
public function getStartDate(): \DateTimeInterface
{
return $this->startDate;
}
public function setStartDate(?\DateTimeInterface $startDate = null): void
{
if (false === $startDate instanceof \DateTimeInterface) {
$startDate = new \DateTime();
} elseif (null === $startDate) {
$this->isChanged('startDate', $startDate);
}
$this->startDate = $startDate;
}
public function getEndDate(): ?\DateTimeInterface
{
return $this->endDate;
}
public function setEndDate(?\DateTimeInterface $endDate = null): void
{
$this->isChanged('endDate', $endDate);
$this->endDate = $endDate;
}
public function getVariables(): array
{
return $this->variables;
}
public function setVariables(array $variables): void
{
$this->isChanged('variables', $variables);
$this->variables = $variables;
}
public function getPrintNodeId(): string
{
return $this->printNodeId;
}
public function setPrintNodeId(string $printNodeId): void
{
$this->isChanged('printNodeId', $printNodeId);
$this->printNodeId = $printNodeId;
}
public function getPrintNodeDescription(): string
{
return $this->printNodeDescription;
}
public function setPrintNodeDescription(string $printNodeDescription): void
{
$this->isChanged('printNodeDescription', $printNodeDescription);
$this->printNodeDescription = $printNodeDescription;
}
public function getTriggerId(): int
{
return $this->triggerId;
}
public function setTriggerId(int $triggerId): void
{
$this->isChanged('triggerId', $triggerId);
$this->triggerId = $triggerId;
}
public function getMailingId(): int
{
return $this->mailingId;
}
public function setMailingId(int $mailingId): void
{
$this->isChanged('mailingId', $mailingId);
$this->mailingId = $mailingId;
}
}