OpenXE/classes/Modules/Resubmission/Data/FreeTextFieldConfigData.php

101 lines
3.0 KiB
PHP
Raw Normal View History

2021-05-21 08:49:41 +02:00
<?php
namespace Xentral\Modules\Resubmission\Data;
use Xentral\Modules\Resubmission\Exception\ValidationFailedException;
final class FreeTextFieldConfigData
{
/** @var int|null $id */
public $id;
/** @var string $title */
public $title;
/** @var bool $showInPipeline */
public $showInPipeline = false;
/** @var bool $showInTables */
public $showInTables = false;
/** @var int $availableFromStageId */
public $availableFromStageId = 0;
/** @var int */
public $requiredFromStageId = 0;
/**
* @param array $formData
*
* @throws ValidationFailedException
*
* @return self
*/
public static function fromFromData(array $formData)
{
$data = new self();
$data->id = $formData['id'];
$data->title = trim($formData['title']);
$data->showInPipeline = (bool)$formData['show_in_pipeline'];
$data->showInTables = (bool)$formData['show_in_tables'];
$data->availableFromStageId = $formData['available_from_stage_id'];
$data->requiredFromStageId = $formData['required_from_stage_id'];
$errors = $data->validate();
if (!empty($errors)) {
throw ValidationFailedException::fromErrors($errors);
}
return $data;
}
/**
* @return array
*/
public function validate()
{
$errors = [];
// id-Property
if ($this->id !== null && !is_int($this->id)) {
$errors['id'][] = 'The "id" property must be an integer.';
}
if ($this->id !== null && $this->id <= 0) {
$errors['id'][] = 'The "id" property must be greater than zero.';
}
// title-Property
if (!is_string($this->title) || empty($this->title)) {
$errors['title'][] = 'The "title" property can not be empty.';
}
// showInPipeline-Property
if (!is_bool($this->showInPipeline)) {
$errors['showInPipeline'][] = 'The "showInPipeline" property must be type boolean.';
}
// showInTables-Property
if (!is_bool($this->showInTables)) {
$errors['showInTables'][] = 'The "showInTables" property must be type boolean.';
}
// availableFromStageId-Property
if (!is_int($this->availableFromStageId)) {
$errors['availableFromStageId'][] = 'The "availableFromStageId" property must be type integer.';
}
if ($this->availableFromStageId < 0) {
$errors['availableFromStageId'][] = 'The "availableFromStageId" property must be zero or greater than zero.';
}
// requiredFromStageId-Property
if (!is_int($this->requiredFromStageId)) {
$errors['requiredFromStageId'][] = 'The "requiredFromStageId" property must be type integer.';
}
if ($this->requiredFromStageId < 0) {
$errors['requiredFromStageId'][] = 'The "requiredFromStageId" property must be zero or greater than zero.';
}
return $errors;
}
}