Spaces:
No application file
No application file
namespace Mautic\FormBundle\Entity; | |
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\PageBundle\Entity\Page; | |
class Submission | |
{ | |
public const TABLE_NAME = 'form_submissions'; | |
/** | |
* @var string | |
*/ | |
private $id; | |
/** | |
* @var Form | |
**/ | |
private $form; | |
/** | |
* @var IpAddress|null | |
*/ | |
private $ipAddress; | |
/** | |
* @var Lead|null | |
*/ | |
private $lead; | |
/** | |
* @var string|null | |
*/ | |
private $trackingId; | |
/** | |
* @var \DateTimeInterface | |
*/ | |
private $dateSubmitted; | |
/** | |
* @var string | |
*/ | |
private $referer; | |
/** | |
* @var Page|null | |
*/ | |
private $page; | |
/** | |
* @var array | |
*/ | |
private $results = []; | |
public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
{ | |
$builder = new ClassMetadataBuilder($metadata); | |
$builder->setTable(self::TABLE_NAME) | |
->setCustomRepositoryClass(SubmissionRepository::class) | |
->addIndex(['tracking_id'], 'form_submission_tracking_search') | |
->addIndex(['date_submitted'], 'form_date_submitted'); | |
$builder->addBigIntIdField(); | |
$builder->createManyToOne('form', 'Form') | |
->inversedBy('submissions') | |
->addJoinColumn('form_id', 'id', false, false, 'CASCADE') | |
->build(); | |
$builder->addIpAddress(true); | |
$builder->addLead(true, 'SET NULL'); | |
$builder->createField('trackingId', 'string') | |
->columnName('tracking_id') | |
->nullable() | |
->build(); | |
$builder->createField('dateSubmitted', 'datetime') | |
->columnName('date_submitted') | |
->build(); | |
$builder->addField('referer', 'text'); | |
$builder->createManyToOne('page', Page::class) | |
->addJoinColumn('page_id', 'id', true, false, 'SET NULL') | |
->fetchExtraLazy() | |
->build(); | |
} | |
/** | |
* Prepares the metadata for API usage. | |
*/ | |
public static function loadApiMetadata(ApiMetadataDriver $metadata): void | |
{ | |
$metadata->setGroupPrefix('submission') | |
->addProperties( | |
[ | |
'id', | |
'ipAddress', | |
'form', | |
'lead', | |
'trackingId', | |
'dateSubmitted', | |
'referer', | |
'page', | |
'results', | |
] | |
) | |
->setGroupPrefix('submissionEvent') | |
->addProperties( | |
[ | |
'id', | |
'ipAddress', | |
'form', | |
'trackingId', | |
'dateSubmitted', | |
'referer', | |
'page', | |
'results', | |
] | |
) | |
->build(); | |
} | |
/** | |
* Get id. | |
*/ | |
public function getId(): int | |
{ | |
return (int) $this->id; | |
} | |
/** | |
* Set dateSubmitted. | |
* | |
* @param \DateTime $dateSubmitted | |
* | |
* @return Submission | |
*/ | |
public function setDateSubmitted($dateSubmitted) | |
{ | |
$this->dateSubmitted = $dateSubmitted; | |
return $this; | |
} | |
/** | |
* Get dateSubmitted. | |
* | |
* @return \DateTimeInterface | |
*/ | |
public function getDateSubmitted() | |
{ | |
return $this->dateSubmitted; | |
} | |
/** | |
* Set referer. | |
* | |
* @param string $referer | |
* | |
* @return Submission | |
*/ | |
public function setReferer($referer) | |
{ | |
$this->referer = $referer; | |
return $this; | |
} | |
/** | |
* Get referer. | |
* | |
* @return string | |
*/ | |
public function getReferer() | |
{ | |
return $this->referer; | |
} | |
/** | |
* Set form. | |
* | |
* @return Submission | |
*/ | |
public function setForm(Form $form) | |
{ | |
$this->form = $form; | |
return $this; | |
} | |
/** | |
* Get form. | |
* | |
* @return Form | |
*/ | |
public function getForm() | |
{ | |
return $this->form; | |
} | |
/** | |
* Set ipAddress. | |
* | |
* @return Submission | |
*/ | |
public function setIpAddress(IpAddress $ipAddress = null) | |
{ | |
$this->ipAddress = $ipAddress; | |
return $this; | |
} | |
/** | |
* @return IpAddress | |
*/ | |
public function getIpAddress() | |
{ | |
return $this->ipAddress; | |
} | |
/** | |
* Get results. | |
* | |
* @return array | |
*/ | |
public function getResults() | |
{ | |
return $this->results; | |
} | |
/** | |
* Get results. | |
* | |
* @return Submission | |
*/ | |
public function setResults($results) | |
{ | |
$this->results = $results; | |
return $this; | |
} | |
/** | |
* Set page. | |
* | |
* @return Submission | |
*/ | |
public function setPage(Page $page = null) | |
{ | |
$this->page = $page; | |
return $this; | |
} | |
/** | |
* Get page. | |
* | |
* @return Page | |
*/ | |
public function getPage() | |
{ | |
return $this->page; | |
} | |
/** | |
* @return Lead | |
*/ | |
public function getLead() | |
{ | |
return $this->lead; | |
} | |
/** | |
* @return $this | |
*/ | |
public function setLead(Lead $lead = null) | |
{ | |
$this->lead = $lead; | |
return $this; | |
} | |
/** | |
* @return mixed | |
*/ | |
public function getTrackingId() | |
{ | |
return $this->trackingId; | |
} | |
/** | |
* @return $this | |
*/ | |
public function setTrackingId($trackingId) | |
{ | |
$this->trackingId = $trackingId; | |
return $this; | |
} | |
/** | |
* This method is used by standard entity algorithms to check if the current | |
* user has permission to view/edit/delete this item. Provide the form creator for it. | |
* | |
* @return mixed | |
*/ | |
public function getCreatedBy() | |
{ | |
return $this->getForm()->getCreatedBy(); | |
} | |
/** | |
* @param string $alias | |
* | |
* @return Field|null | |
*/ | |
public function getFieldByAlias($alias) | |
{ | |
foreach ($this->getForm()->getFields() as $field) { | |
if ($field->getAlias() === $alias) { | |
return $field; | |
} | |
} | |
return null; | |
} | |
} | |