Spaces:
No application file
No application file
| namespace Mautic\PluginBundle\Entity; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\ORM\Mapping as ORM; | |
| use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; | |
| use Mautic\CoreBundle\Entity\CacheInvalidateInterface; | |
| use Mautic\CoreBundle\Entity\CommonEntity; | |
| class Plugin extends CommonEntity implements CacheInvalidateInterface | |
| { | |
| public const DESCRIPTION_DELIMITER_REGEX = "/\R---\R/"; | |
| public const CACHE_NAMESPACE = 'Plugin'; | |
| /** | |
| * @var int | |
| */ | |
| private $id; | |
| /** | |
| * @var string | |
| */ | |
| private $name; | |
| /** | |
| * @var string|null | |
| */ | |
| private $description; | |
| /** | |
| * @var string | |
| */ | |
| private $primaryDescription; | |
| /** | |
| * @var string | |
| */ | |
| private $secondaryDescription; | |
| /** | |
| * @var bool | |
| */ | |
| private $isMissing = false; | |
| /** | |
| * @var string | |
| */ | |
| private $bundle; | |
| /** | |
| * @var string|null | |
| */ | |
| private $version; | |
| /** | |
| * @var string|null | |
| */ | |
| private $author; | |
| /** | |
| * @var ArrayCollection<int, \Mautic\PluginBundle\Entity\Integration> | |
| */ | |
| private $integrations; | |
| public function __construct() | |
| { | |
| $this->integrations = new ArrayCollection(); | |
| } | |
| public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
| { | |
| $builder = new ClassMetadataBuilder($metadata); | |
| $builder->setTable('plugins') | |
| ->setCustomRepositoryClass(PluginRepository::class) | |
| ->addUniqueConstraint(['bundle'], 'unique_bundle'); | |
| $builder->addIdColumns(); | |
| $builder->createField('isMissing', 'boolean') | |
| ->columnName('is_missing') | |
| ->build(); | |
| $builder->createField('bundle', 'string') | |
| ->length(50) | |
| ->build(); | |
| $builder->createField('version', 'string') | |
| ->nullable() | |
| ->build(); | |
| $builder->createField('author', 'string') | |
| ->nullable() | |
| ->build(); | |
| $builder->createOneToMany('integrations', 'Integration') | |
| ->setIndexBy('id') | |
| ->mappedBy('plugin') | |
| ->fetchExtraLazy() | |
| ->build(); | |
| } | |
| public function __clone() | |
| { | |
| $this->id = null; | |
| } | |
| /** | |
| * Get id. | |
| * | |
| * @return int | |
| */ | |
| public function getId() | |
| { | |
| return $this->id; | |
| } | |
| /** | |
| * Set name. | |
| * | |
| * @param string $name | |
| * | |
| * @return Plugin | |
| */ | |
| public function setName($name) | |
| { | |
| $this->name = $name; | |
| return $this; | |
| } | |
| /** | |
| * Get name. | |
| * | |
| * @return string | |
| */ | |
| public function getName() | |
| { | |
| return $this->name; | |
| } | |
| /** | |
| * @param string $bundle | |
| */ | |
| public function setBundle($bundle): void | |
| { | |
| $this->bundle = $bundle; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getBundle() | |
| { | |
| return $this->bundle; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getIntegrations() | |
| { | |
| return $this->integrations; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getDescription() | |
| { | |
| return $this->description; | |
| } | |
| /** | |
| * @param mixed $description | |
| */ | |
| public function setDescription($description): void | |
| { | |
| $this->description = $description; | |
| $this->splitDescriptions(); | |
| } | |
| /** | |
| * @return string|null | |
| */ | |
| public function getPrimaryDescription() | |
| { | |
| return $this->primaryDescription ?: $this->description; | |
| } | |
| public function hasSecondaryDescription(): bool | |
| { | |
| return $this->description && preg_match(self::DESCRIPTION_DELIMITER_REGEX, $this->description) >= 1; | |
| } | |
| /** | |
| * @return string|null | |
| */ | |
| public function getSecondaryDescription() | |
| { | |
| return $this->secondaryDescription; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getVersion() | |
| { | |
| return $this->version; | |
| } | |
| /** | |
| * @param mixed $version | |
| */ | |
| public function setVersion($version): void | |
| { | |
| $this->version = $version; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getIsMissing() | |
| { | |
| return $this->isMissing; | |
| } | |
| /** | |
| * @param mixed $isMissing | |
| */ | |
| public function setIsMissing($isMissing): void | |
| { | |
| $this->isMissing = $isMissing; | |
| } | |
| /** | |
| * @return mixed | |
| */ | |
| public function getAuthor() | |
| { | |
| return $this->author; | |
| } | |
| /** | |
| * @param mixed $author | |
| */ | |
| public function setAuthor($author): void | |
| { | |
| $this->author = $author; | |
| } | |
| /** | |
| * Splits description into primary and secondary. | |
| */ | |
| public function splitDescriptions(): void | |
| { | |
| if ($this->hasSecondaryDescription()) { | |
| $parts = preg_split(self::DESCRIPTION_DELIMITER_REGEX, $this->description); | |
| $this->primaryDescription = trim($parts[0]); | |
| $this->secondaryDescription = trim($parts[1]); | |
| } | |
| } | |
| public function getCacheNamespacesToDelete(): array | |
| { | |
| return [ | |
| self::CACHE_NAMESPACE, | |
| Integration::CACHE_NAMESPACE, | |
| ]; | |
| } | |
| } | |