Leuchtfeuer/mautic-deutschepost

View on GitHub
Entity/TriggerCampaign.php

Summary

Maintainability
A
3 hrs
Test Coverage
<?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;
    }
}