>|null */ public ?array $fields; /** * @var IntegrationSettings|null */ public ?IntegrationSettings $integrationSettings; /** * @var StyleSettings|null */ public ?StyleSettings $styleSettings; /** * @var array>|null */ public ?array $pages; /** * @var array|null */ public ?array $progressIndicator; /** * @var array */ public array $formActionButtons; /** * Form constructor. * * @param int $id * @param string $name * @param string $description * @param FormMetadata $metadata * @param FormSettings $settings * @param array> $fields * @param IntegrationSettings|null $integrationSettings * @param array>|null $pages * @param array|null $progressIndicator * @param StyleSettings|null $styleSettings * @param array|null $formActionButtons * @SuppressWarnings("ExcessiveParameterList") * @throws ValidationException */ public function __construct( int $id, string $name, string $description, FormMetadata $metadata, FormSettings $settings, array $fields = [], ?IntegrationSettings $integrationSettings = null, ?array $pages = null, ?array $progressIndicator = null, ?StyleSettings $styleSettings = null, ?array $formActionButtons = null ) { $this->id = $this->validateId($id); $this->name = $this->validateString($name, 255, 'name'); $this->description = $this->validateString($description, 1000, 'description'); $this->metadata = $metadata; $this->settings = $settings; $this->fields = $fields; $this->integrationSettings = $integrationSettings; $this->pages = $pages; $this->progressIndicator = $progressIndicator; $this->formActionButtons = $formActionButtons ?? [ 'submitButtonSettings' => [ 'label' => BackendStrings::getCommonStrings()['submit'], 'position' => 'default', ], ]; $this->styleSettings = $styleSettings; } /** * Validates the ID. * * @param int $id * * @return int * @throws ValidationException */ private function validateId(int $id): int { if ($id < 0) { throw new ValidationException(BackendStrings::getExceptionStrings()['id_positive_integer']); } return $id; } /** * Validates a string value. * * @param string $value * @param int $maxLength * @param string $fieldName * * @return string * * @throws ValidationException */ private function validateString(string $value, int $maxLength, string $fieldName): string { if (strlen($value) > $maxLength) { throw new ValidationException( sprintf( /* translators: 1: String value, 2: String max length. */ esc_html__('%1$s must be at most %2$d characters.', 'ivyforms'), esc_html($fieldName), $maxLength ) ); } return $value; } /** * Get the form ID. * * @return int */ public function getId(): int { return $this->id; } /** * Get the form name. * * @return string */ public function getName(): string { return $this->name; } /** * Get the form description. * * @return string */ public function getDescription(): string { return $this->description; } /** * Get the form fields. * * @return array>|null */ public function getFields(): ?array { return $this->fields; } /** * Get the integration settings. * @return IntegrationSettings|null */ public function getIntegrationSettings(): ?IntegrationSettings { return $this->integrationSettings; } /** * Set integration settings. * @param IntegrationSettings $settings */ public function setIntegrationSettings(IntegrationSettings $settings): void { $this->integrationSettings = $settings; } /** * Get style settings value object. * * @return StyleSettings|null */ public function getStyleSettings(): ?StyleSettings { return $this->styleSettings; } /** * Set style settings. * * @param StyleSettings|null $settings Style settings or null. */ public function setStyleSettings(?StyleSettings $settings): void { $this->styleSettings = $settings; } /** * Convert the form to an array. * * @return array */ public function toArray(): array { $integrationPayload = $this->integrationSettings !== null ? $this->integrationSettings->toArray() : ['integrationSettings' => TemplateDefaults::getDefaultIntegrationSettings()]; $stylePayload = $this->styleSettings !== null ? $this->styleSettings->toArray() : ['styleSettings' => TemplateDefaults::getDefaultFormStylesSafe()]; return array_merge( [ 'id' => $this->getId(), 'name' => $this->getName(), 'description' => $this->getDescription(), 'fields' => $this->getFields(), 'pages' => $this->pages, 'progressIndicator' => $this->progressIndicator, 'formActionButtons' => $this->formActionButtons, ], $this->metadata->toArray(), $this->settings->toArray(), $integrationPayload, $stylePayload ); } }