Spaces:
No application file
No application file
namespace MauticPlugin\MauticSocialBundle\Entity; | |
use Doctrine\ORM\Mapping as ORM; | |
use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; | |
use Mautic\CoreBundle\Entity\FormEntity; | |
use Symfony\Component\Validator\Constraints as Assert; | |
use Symfony\Component\Validator\Mapping\ClassMetadata; | |
class Monitoring extends FormEntity | |
{ | |
/** | |
* @var int | |
*/ | |
private $id; | |
/** | |
* @var string | |
*/ | |
private $title; | |
/** | |
* @var string|null | |
*/ | |
private $description; | |
/** | |
* @var \Mautic\CategoryBundle\Entity\Category|null | |
*/ | |
private $category; | |
/** | |
* @var array | |
*/ | |
private $lists = []; | |
/** | |
* @var string|null | |
*/ | |
private $networkType; | |
/** | |
* @var int | |
*/ | |
private $revision = 1; | |
/** | |
* @var array | |
*/ | |
private $stats = []; | |
/** | |
* @var array | |
*/ | |
private $properties = []; | |
/** | |
* @var \DateTimeInterface | |
*/ | |
private $publishDown; | |
/** | |
* @var \DateTimeInterface | |
*/ | |
private $publishUp; | |
public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
{ | |
$builder = new ClassMetadataBuilder($metadata); | |
$builder->setTable('monitoring') | |
->setCustomRepositoryClass(MonitoringRepository::class) | |
->addLifecycleEvent('cleanMonitorData', 'preUpdate') | |
->addLifecycleEvent('cleanMonitorData', 'prePersist'); | |
$builder->addCategory(); | |
$builder->addIdColumns('title'); | |
$builder->addNullableField('lists', 'array'); | |
$builder->addNamedField('networkType', 'string', 'network_type', true); | |
$builder->addField('revision', 'integer'); | |
$builder->addNullableField('stats', 'array'); | |
$builder->addNullableField('properties', 'array'); | |
$builder->addPublishDates(); | |
} | |
/** | |
* Constraints for required fields. | |
*/ | |
public static function loadValidatorMetadata(ClassMetadata $metadata): void | |
{ | |
$metadata->addPropertyConstraint('title', new Assert\NotBlank( | |
['message' => 'mautic.core.title.required'] | |
)); | |
$metadata->addPropertyConstraint('networkType', new Assert\NotBlank( | |
['message' => 'mautic.social.network.type'] | |
)); | |
} | |
/** | |
* @return mixed | |
*/ | |
public function getCategory() | |
{ | |
return $this->category; | |
} | |
/** | |
* Get description. | |
* | |
* @return string | |
*/ | |
public function getDescription() | |
{ | |
return $this->description; | |
} | |
/** | |
* Get id. | |
* | |
* @return int | |
*/ | |
public function getId() | |
{ | |
return $this->id; | |
} | |
/** | |
* Get lists. | |
* | |
* @return array | |
*/ | |
public function getLists() | |
{ | |
return $this->lists; | |
} | |
/** | |
* Get network type. | |
* | |
* @return string | |
*/ | |
public function getNetworkType() | |
{ | |
return $this->networkType; | |
} | |
/** | |
* Get revision. | |
* | |
* @return int | |
*/ | |
public function getRevision() | |
{ | |
return $this->revision; | |
} | |
/** | |
* Get statistics. | |
* | |
* @return array | |
*/ | |
public function getStats() | |
{ | |
return $this->stats; | |
} | |
/** | |
* Get title. | |
* | |
* @return string | |
*/ | |
public function getTitle() | |
{ | |
return $this->title; | |
} | |
/** | |
* Get properties. | |
* | |
* @return array | |
*/ | |
public function getProperties() | |
{ | |
return $this->properties; | |
} | |
/** | |
* Get publishDown. | |
* | |
* @return \DateTimeInterface | |
*/ | |
public function getPublishDown() | |
{ | |
return $this->publishDown; | |
} | |
/** | |
* Get publishUp. | |
* | |
* @return \DateTimeInterface | |
*/ | |
public function getPublishUp() | |
{ | |
return $this->publishUp; | |
} | |
/** | |
* Set the category id. | |
* | |
* @param \Mautic\CategoryBundle\Entity\Category|null $category | |
*/ | |
public function setCategory($category): void | |
{ | |
$this->isChanged('category', $category); | |
$this->category = $category; | |
} | |
/** | |
* Set description. | |
* | |
* @param string $description | |
* | |
* @return Monitoring | |
*/ | |
public function setDescription($description) | |
{ | |
$this->isChanged('description', $description); | |
$this->description = $description; | |
return $this; | |
} | |
/** | |
* Set the monitor lists. | |
* | |
* @return Monitoring | |
*/ | |
public function setLists($lists) | |
{ | |
$this->isChanged('lists', $lists); | |
$this->lists = $lists; | |
return $this; | |
} | |
/** | |
* Set the network type. | |
* | |
* @return Monitoring | |
*/ | |
public function setNetworkType($networkType) | |
{ | |
$this->isChanged('networkType', $networkType); | |
$this->networkType = $networkType; | |
return $this; | |
} | |
/** | |
* Set the revision counter. | |
* | |
* @param int $revision | |
* | |
* @return Monitoring | |
*/ | |
public function setRevision($revision) | |
{ | |
$this->isChanged('revision', $revision); | |
$this->revision = $revision; | |
return $this; | |
} | |
/** | |
* Set the statistics. | |
* | |
* @param array $stats | |
* | |
* @return Monitoring | |
*/ | |
public function setStats($stats) | |
{ | |
$this->isChanged('stats', $stats); | |
$this->stats = $stats; | |
return $this; | |
} | |
/** | |
* Set name. | |
* | |
* @param string $title | |
* | |
* @return Monitoring | |
*/ | |
public function setTitle($title) | |
{ | |
$this->isChanged('title', $title); | |
$this->title = $title; | |
return $this; | |
} | |
/** | |
* Set properties. | |
* | |
* @param array $properties | |
* | |
* @return Monitoring | |
*/ | |
public function setProperties($properties) | |
{ | |
$this->isChanged('properties', $properties); | |
$this->properties = $properties; | |
return $this; | |
} | |
/** | |
* Set publishDown. | |
* | |
* @param \DateTime $publishDown | |
* | |
* @return Monitoring | |
*/ | |
public function setPublishDown($publishDown) | |
{ | |
$this->isChanged('publishDown', $publishDown); | |
$this->publishDown = $publishDown; | |
return $this; | |
} | |
/** | |
* Set publishUp. | |
* | |
* @param \DateTime $publishUp | |
* | |
* @return Monitoring | |
*/ | |
public function setPublishUp($publishUp) | |
{ | |
$this->isChanged('publishUp', $publishUp); | |
$this->publishUp = $publishUp; | |
return $this; | |
} | |
/** | |
* Clear out old properties data. | |
*/ | |
public function cleanMonitorData(): void | |
{ | |
$property = $this->getProperties(); | |
if (!array_key_exists('checknames', $property)) { | |
$property['checknames'] = 0; | |
} | |
// clean up property array for the twitter handle | |
if ('twitter_handle' == $this->getNetworkType()) { | |
$this->setProperties( | |
[ | |
'handle' => $property['handle'], | |
'checknames' => $property['checknames'], | |
] | |
); | |
} | |
// clean up property array for the hashtag | |
if ('twitter_hashtag' == $this->getNetworkType()) { | |
$this->setProperties( | |
[ | |
'hashtag' => $property['hashtag'], | |
'checknames' => $property['checknames'], | |
] | |
); | |
} | |
// clean up clean up property array for the custom action | |
if ('twitter_custom' == $this->getNetworkType()) { | |
$this->setProperties( | |
[ | |
'custom' => $property['custom'], | |
] | |
); | |
} | |
// if the property is not new and the old property doesn't match the new one | |
if (!$this->isNew() && $property != $this->getProperties()) { | |
// reset stats on save of edited | |
$this->setStats([]); | |
} | |
} | |
} | |