mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
101 lines
3.0 KiB
PHP
101 lines
3.0 KiB
PHP
<?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;
|
|
}
|
|
}
|