Spaces:
No application file
No application file
namespace Mautic\SmsBundle\Entity; | |
use Doctrine\DBAL\Types\Types; | |
use Doctrine\ORM\Mapping as ORM; | |
use Mautic\ApiBundle\Serializer\Driver\ApiMetadataDriver; | |
use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; | |
use Mautic\CoreBundle\Entity\IpAddress; | |
use Mautic\LeadBundle\Entity\Lead; | |
use Mautic\LeadBundle\Entity\LeadList; | |
class Stat | |
{ | |
public const TABLE_NAME = 'sms_message_stats'; | |
/** | |
* @var string | |
*/ | |
private $id; | |
/** | |
* @var Sms|null | |
*/ | |
private $sms; | |
/** | |
* @var Lead|null | |
*/ | |
private $lead; | |
/** | |
* @var LeadList|null | |
*/ | |
private $list; | |
/** | |
* @var IpAddress|null | |
*/ | |
private $ipAddress; | |
/** | |
* @var \DateTimeInterface | |
*/ | |
private $dateSent; | |
/** | |
* @var string|null | |
*/ | |
private $trackingHash; | |
/** | |
* @var string|null | |
*/ | |
private $source; | |
/** | |
* @var int|null | |
*/ | |
private $sourceId; | |
/** | |
* @var array | |
*/ | |
private $tokens = []; | |
/** | |
* @var array | |
*/ | |
private $details = []; | |
/** | |
* @var bool|null | |
*/ | |
private $isFailed = false; | |
public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
{ | |
$builder = new ClassMetadataBuilder($metadata); | |
$builder->setTable(self::TABLE_NAME) | |
->setCustomRepositoryClass(StatRepository::class) | |
->addIndex(['sms_id', 'lead_id'], 'stat_sms_search') | |
->addIndex(['tracking_hash'], 'stat_sms_hash_search') | |
->addIndex(['source', 'source_id'], 'stat_sms_source_search') | |
->addIndex(['is_failed'], 'stat_sms_failed_search'); | |
$builder->addBigIntIdField(); | |
$builder->createManyToOne('sms', 'Sms') | |
->inversedBy('stats') | |
->addJoinColumn('sms_id', 'id', true, false, 'SET NULL') | |
->build(); | |
$builder->addLead(true, 'SET NULL'); | |
$builder->createManyToOne('list', LeadList::class) | |
->addJoinColumn('list_id', 'id', true, false, 'SET NULL') | |
->build(); | |
$builder->addIpAddress(true); | |
$builder->createField('dateSent', 'datetime') | |
->columnName('date_sent') | |
->build(); | |
$builder->createField('isFailed', 'boolean') | |
->columnName('is_failed') | |
->nullable() | |
->build(); | |
$builder->createField('trackingHash', 'string') | |
->columnName('tracking_hash') | |
->nullable() | |
->build(); | |
$builder->createField('source', 'string') | |
->nullable() | |
->build(); | |
$builder->createField('sourceId', 'integer') | |
->columnName('source_id') | |
->nullable() | |
->build(); | |
$builder->createField('tokens', 'array') | |
->nullable() | |
->build(); | |
$builder->addField('details', Types::JSON); | |
} | |
/** | |
* Prepares the metadata for API usage. | |
*/ | |
public static function loadApiMetadata(ApiMetadataDriver $metadata): void | |
{ | |
$metadata->setGroupPrefix('stat') | |
->addProperties( | |
[ | |
'id', | |
'ipAddress', | |
'dateSent', | |
'isFailed', | |
'source', | |
'sourceId', | |
'trackingHash', | |
'lead', | |
'sms', | |
'details', | |
] | |
) | |
->build(); | |
} | |
public function getId(): int | |
{ | |
return (int) $this->id; | |
} | |
/** | |
* @return Sms | |
*/ | |
public function getSms() | |
{ | |
return $this->sms; | |
} | |
/** | |
* @return Stat | |
*/ | |
public function setSms(Sms $sms) | |
{ | |
$this->sms = $sms; | |
return $this; | |
} | |
/** | |
* @return Lead | |
*/ | |
public function getLead() | |
{ | |
return $this->lead; | |
} | |
/** | |
* @return Stat | |
*/ | |
public function setLead(Lead $lead) | |
{ | |
$this->lead = $lead; | |
return $this; | |
} | |
/** | |
* @return LeadList | |
*/ | |
public function getList() | |
{ | |
return $this->list; | |
} | |
/** | |
* @return Stat | |
*/ | |
public function setList(LeadList $list) | |
{ | |
$this->list = $list; | |
return $this; | |
} | |
/** | |
* @return IpAddress | |
*/ | |
public function getIpAddress() | |
{ | |
return $this->ipAddress; | |
} | |
/** | |
* @return Stat | |
*/ | |
public function setIpAddress(IpAddress $ipAddress) | |
{ | |
$this->ipAddress = $ipAddress; | |
return $this; | |
} | |
/** | |
* @return \DateTimeInterface | |
*/ | |
public function getDateSent() | |
{ | |
return $this->dateSent; | |
} | |
/** | |
* @param \DateTime $dateSent | |
* | |
* @return Stat | |
*/ | |
public function setDateSent($dateSent) | |
{ | |
$this->dateSent = $dateSent; | |
return $this; | |
} | |
/** | |
* @return string | |
*/ | |
public function getTrackingHash() | |
{ | |
return $this->trackingHash; | |
} | |
/** | |
* @param string $trackingHash | |
* | |
* @return Stat | |
*/ | |
public function setTrackingHash($trackingHash) | |
{ | |
$this->trackingHash = $trackingHash; | |
return $this; | |
} | |
/** | |
* @return string | |
*/ | |
public function getSource() | |
{ | |
return $this->source; | |
} | |
/** | |
* @param string $source | |
* | |
* @return Stat | |
*/ | |
public function setSource($source) | |
{ | |
$this->source = $source; | |
return $this; | |
} | |
/** | |
* @return int | |
*/ | |
public function getSourceId() | |
{ | |
return $this->sourceId; | |
} | |
/** | |
* @param int $sourceId | |
* | |
* @return Stat | |
*/ | |
public function setSourceId($sourceId) | |
{ | |
$this->sourceId = $sourceId; | |
return $this; | |
} | |
/** | |
* @return array | |
*/ | |
public function getTokens() | |
{ | |
return $this->tokens; | |
} | |
/** | |
* @return Stat | |
*/ | |
public function setTokens(array $tokens) | |
{ | |
$this->tokens = $tokens; | |
return $this; | |
} | |
/** | |
* @param bool $isFailed | |
* | |
* @return Stat | |
*/ | |
public function setIsFailed($isFailed) | |
{ | |
$this->isFailed = $isFailed; | |
return $this; | |
} | |
/** | |
* @return bool | |
*/ | |
public function isFailed() | |
{ | |
return $this->isFailed; | |
} | |
/** | |
* @return array | |
*/ | |
public function getDetails() | |
{ | |
return $this->details; | |
} | |
/** | |
* @param array $details | |
* | |
* @return Stat | |
*/ | |
public function setDetails($details) | |
{ | |
$this->details = $details; | |
return $this; | |
} | |
/** | |
* @param string $type | |
* @param string $detail | |
* | |
* @return Stat | |
*/ | |
public function addDetail($type, $detail) | |
{ | |
$this->details[$type][] = $detail; | |
return $this; | |
} | |
} | |