490 lines
17 KiB
PHP
490 lines
17 KiB
PHP
<?PHP
|
|
/**
|
|
* Represents a measurement type.
|
|
*
|
|
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
|
*/
|
|
declare(strict_types = 1);
|
|
|
|
/**
|
|
* Represents a measurement type.
|
|
*/
|
|
enum MDMeasurementType implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
// Main types
|
|
|
|
case length;
|
|
case height;
|
|
case width;
|
|
case weight;
|
|
case diameter;
|
|
case wall;
|
|
case die_axis;
|
|
case number_of_copies; // copies, specimen
|
|
case number_of_parts;
|
|
|
|
// Sub-types
|
|
|
|
case length_socle;
|
|
case height_socle;
|
|
case width_socle;
|
|
case length_sheet_size;
|
|
case height_sheet_size;
|
|
case width_sheet_size;
|
|
case length_image_size;
|
|
case height_image_size;
|
|
case width_image_size;
|
|
case length_frame;
|
|
case height_frame;
|
|
case width_frame;
|
|
case diameter_frame;
|
|
case length_min;
|
|
case length_max;
|
|
case height_min;
|
|
case height_max;
|
|
case width_min;
|
|
case width_max;
|
|
case diameter_min;
|
|
case diameter_max;
|
|
case length_blade;
|
|
case height_blade;
|
|
case width_blade;
|
|
case length_handle;
|
|
case height_handle;
|
|
case width_handle;
|
|
case length_scabbard;
|
|
case height_scabbard;
|
|
case width_scabbard;
|
|
|
|
case length_label;
|
|
case height_label;
|
|
case width_label;
|
|
|
|
case number_of_sheets;
|
|
case number_of_double_pages;
|
|
case number_of_standalone_sheets;
|
|
case number_of_written_pages;
|
|
case diameter_image_size;
|
|
|
|
case length_of_base;
|
|
case height_of_base;
|
|
case width_of_base;
|
|
case diameter_of_base;
|
|
|
|
case height_image_mount_inner;
|
|
case height_image_mount_outer;
|
|
case width_image_mount_inner;
|
|
case width_image_mount_outer;
|
|
|
|
case height_plate;
|
|
case width_plate;
|
|
|
|
case length_packaging;
|
|
case height_packaging;
|
|
case width_packaging;
|
|
|
|
case length_box;
|
|
case height_box;
|
|
case width_box;
|
|
|
|
/**
|
|
* Returns a value of this type based on a string.
|
|
*
|
|
* @param string $input Input to get a value from.
|
|
*
|
|
* @return MDMeasurementType
|
|
*/
|
|
public static function fromString(string $input):MDMeasurementType {
|
|
|
|
return match($input) {
|
|
'length' => self::length,
|
|
'height' => self::height,
|
|
'width' => self::width,
|
|
'number_of_copies' => self::number_of_copies,
|
|
'weight' => self::weight,
|
|
'diameter' => self::diameter,
|
|
'wall' => self::wall,
|
|
'number_of_parts' => self::number_of_parts,
|
|
'die_axis' => self::die_axis,
|
|
'length_socle' => self::length_socle,
|
|
'height_socle' => self::height_socle,
|
|
'width_socle' => self::width_socle,
|
|
'length_sheet_size' => self::length_sheet_size,
|
|
'height_sheet_size' => self::height_sheet_size,
|
|
'width_sheet_size' => self::width_sheet_size,
|
|
'length_image_size' => self::length_image_size,
|
|
'height_image_size' => self::height_image_size,
|
|
'width_image_size' => self::width_image_size,
|
|
'length_frame' => self::length_frame,
|
|
'height_frame' => self::height_frame,
|
|
'width_frame' => self::width_frame,
|
|
'length_min' => self::length_min,
|
|
'length_max' => self::length_max,
|
|
'height_min' => self::height_min,
|
|
'height_max' => self::height_max,
|
|
'width_min' => self::width_min,
|
|
'width_max' => self::width_max,
|
|
'diameter_min' => self::diameter_min,
|
|
'diameter_max' => self::diameter_max,
|
|
'diameter_frame' => self::diameter_frame,
|
|
'length_blade' => self::length_blade,
|
|
'height_blade' => self::height_blade,
|
|
'width_blade' => self::width_blade,
|
|
'length_handle' => self::length_handle,
|
|
'height_handle' => self::height_handle,
|
|
'width_handle' => self::width_handle,
|
|
'length_scabbard' => self::length_scabbard,
|
|
'height_scabbard' => self::height_scabbard,
|
|
'width_scabbard' => self::width_scabbard,
|
|
'length_label' => self::length_label,
|
|
'height_label' => self::height_label,
|
|
'width_label' => self::width_label,
|
|
'number_of_sheets' => self::number_of_sheets,
|
|
'number_of_double_pages' => self::number_of_double_pages,
|
|
'number_of_standalone_sheets' => self::number_of_standalone_sheets,
|
|
'number_of_written_pages' => self::number_of_written_pages,
|
|
'diameter_image_size' => self::diameter_image_size,
|
|
'length_of_base' => self::length_of_base,
|
|
'height_of_base' => self::height_of_base,
|
|
'width_of_base' => self::width_of_base,
|
|
'diameter_of_base' => self::diameter_of_base,
|
|
'height_image_mount_inner' => self::height_image_mount_inner,
|
|
'height_image_mount_outer' => self::height_image_mount_outer,
|
|
'width_image_mount_inner' => self::width_image_mount_inner,
|
|
'width_image_mount_outer' => self::width_image_mount_outer,
|
|
'height_plate' => self::height_plate,
|
|
'width_plate' => self::width_plate,
|
|
'length_packaging' => self::length_packaging,
|
|
'height_packaging' => self::height_packaging,
|
|
'width_packaging' => self::width_packaging,
|
|
'length_box' => self::length_box,
|
|
'height_box' => self::height_box,
|
|
'width_box' => self::width_box,
|
|
default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns a value of this type based on an integer.
|
|
*
|
|
* @param integer $input Input to get a value from.
|
|
*
|
|
* @return MDMeasurementType
|
|
*/
|
|
public static function fromInt(int $input):MDMeasurementType {
|
|
|
|
return match($input) {
|
|
1 => self::length,
|
|
2 => self::height,
|
|
3 => self::width,
|
|
4 => self::number_of_copies,
|
|
5 => self::weight,
|
|
6 => self::diameter,
|
|
7 => self::wall,
|
|
8 => self::number_of_parts,
|
|
9 => self::die_axis,
|
|
10 => self::length_socle,
|
|
11 => self::height_socle,
|
|
12 => self::width_socle,
|
|
13 => self::length_sheet_size,
|
|
14 => self::height_sheet_size,
|
|
15 => self::width_sheet_size,
|
|
16 => self::length_image_size,
|
|
17 => self::height_image_size,
|
|
18 => self::width_image_size,
|
|
19 => self::length_frame,
|
|
20 => self::height_frame,
|
|
21 => self::width_frame,
|
|
22 => self::length_min,
|
|
23 => self::length_max,
|
|
24 => self::height_min,
|
|
25 => self::height_max,
|
|
26 => self::width_min,
|
|
27 => self::width_max,
|
|
28 => self::diameter_min,
|
|
29 => self::diameter_max,
|
|
30 => self::diameter_frame,
|
|
31 => self::length_blade,
|
|
32 => self::height_blade,
|
|
33 => self::width_blade,
|
|
34 => self::number_of_sheets,
|
|
35 => self::number_of_double_pages,
|
|
36 => self::number_of_standalone_sheets,
|
|
37 => self::number_of_written_pages,
|
|
38 => self::diameter_image_size,
|
|
39 => self::length_of_base,
|
|
40 => self::height_of_base,
|
|
41 => self::width_of_base,
|
|
42 => self::diameter_of_base,
|
|
43 => self::length_handle,
|
|
44 => self::height_handle,
|
|
45 => self::width_handle,
|
|
46 => self::length_scabbard,
|
|
47 => self::height_scabbard,
|
|
48 => self::width_scabbard,
|
|
49 => self::length_label,
|
|
50 => self::height_label,
|
|
51 => self::width_label,
|
|
52 => self::height_image_mount_inner,
|
|
53 => self::height_image_mount_outer,
|
|
54 => self::width_image_mount_inner,
|
|
55 => self::width_image_mount_outer,
|
|
56 => self::height_plate,
|
|
57 => self::width_plate,
|
|
58 => self::length_packaging,
|
|
59 => self::height_packaging,
|
|
60 => self::width_packaging,
|
|
61 => self::length_box,
|
|
62 => self::height_box,
|
|
63 => self::width_box,
|
|
default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Lists all available names.
|
|
*
|
|
* @return array<string>
|
|
*/
|
|
public static function caseNames():array {
|
|
|
|
$output = [];
|
|
|
|
$cases = self::cases();
|
|
foreach ($cases as $case) {
|
|
$output[] = $case->name;
|
|
}
|
|
|
|
return $output;
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns the highest level measurement type relative to the provided one.
|
|
*
|
|
* @return MDMeasurementType
|
|
*/
|
|
public function getHighestSuperordinate():MDMeasurementType {
|
|
|
|
return match($this) {
|
|
self::length => self::length,
|
|
self::height => self::height,
|
|
self::width => self::width,
|
|
self::number_of_copies => self::number_of_copies,
|
|
self::weight => self::weight,
|
|
self::diameter => self::diameter,
|
|
self::wall => self::wall,
|
|
self::number_of_parts => self::number_of_parts,
|
|
self::die_axis => self::die_axis,
|
|
self::length_socle => self::length,
|
|
self::height_socle => self::height,
|
|
self::width_socle => self::width,
|
|
self::length_sheet_size => self::length,
|
|
self::height_sheet_size => self::height,
|
|
self::width_sheet_size => self::width,
|
|
self::length_image_size => self::length,
|
|
self::height_image_size => self::height,
|
|
self::width_image_size => self::width,
|
|
self::length_frame => self::length,
|
|
self::height_frame => self::height,
|
|
self::width_frame => self::width,
|
|
self::length_min => self::length,
|
|
self::length_max => self::length,
|
|
self::height_min => self::height,
|
|
self::height_max => self::height,
|
|
self::width_min => self::width,
|
|
self::width_max => self::width,
|
|
self::diameter_min => self::diameter,
|
|
self::diameter_max => self::diameter,
|
|
self::diameter_frame => self::diameter,
|
|
self::length_blade => self::length,
|
|
self::height_blade => self::height,
|
|
self::width_blade => self::width,
|
|
self::number_of_sheets => self::number_of_parts,
|
|
self::number_of_double_pages => self::number_of_parts,
|
|
self::number_of_standalone_sheets => self::number_of_parts,
|
|
self::number_of_written_pages => self::number_of_parts,
|
|
self::diameter_image_size => self::diameter,
|
|
self::length_of_base => self::length,
|
|
self::height_of_base => self::height,
|
|
self::width_of_base => self::width,
|
|
self::diameter_of_base => self::diameter,
|
|
self::length_handle => self::length,
|
|
self::height_handle => self::height,
|
|
self::width_handle => self::width,
|
|
self::length_scabbard => self::length,
|
|
self::height_scabbard => self::height,
|
|
self::width_scabbard => self::width,
|
|
self::length_label => self::length,
|
|
self::height_label => self::height,
|
|
self::width_label => self::width,
|
|
self::height_image_mount_inner => self::height,
|
|
self::height_image_mount_outer => self::height,
|
|
self::width_image_mount_inner => self::width,
|
|
self::width_image_mount_outer => self::width,
|
|
self::height_plate => self::height,
|
|
self::width_plate => self::width,
|
|
self::length_packaging => self::length,
|
|
self::height_packaging => self::height,
|
|
self::width_packaging => self::width,
|
|
self::length_box => self::length,
|
|
self::height_box => self::height,
|
|
self::width_box => self::width,
|
|
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns an integer representation of the collective (for storage in DB).
|
|
*
|
|
* @return integer
|
|
*/
|
|
public function toInt():int {
|
|
|
|
return match($this) {
|
|
self::length => 1,
|
|
self::height => 2,
|
|
self::width => 3,
|
|
self::number_of_copies => 4,
|
|
self::weight => 5,
|
|
self::diameter => 6,
|
|
self::wall => 7,
|
|
self::number_of_parts => 8,
|
|
self::die_axis => 9,
|
|
self::length_socle => 10,
|
|
self::height_socle => 11,
|
|
self::width_socle => 12,
|
|
self::length_sheet_size => 13,
|
|
self::height_sheet_size => 14,
|
|
self::width_sheet_size => 15,
|
|
self::length_image_size => 16,
|
|
self::height_image_size => 17,
|
|
self::width_image_size => 18,
|
|
self::length_frame => 19,
|
|
self::height_frame => 20,
|
|
self::width_frame => 21,
|
|
self::length_min => 22,
|
|
self::length_max => 23,
|
|
self::height_min => 24,
|
|
self::height_max => 25,
|
|
self::width_min => 26,
|
|
self::width_max => 27,
|
|
self::diameter_min => 28,
|
|
self::diameter_max => 29,
|
|
self::diameter_frame => 30,
|
|
self::length_blade => 31,
|
|
self::height_blade => 32,
|
|
self::width_blade => 33,
|
|
self::number_of_sheets => 34,
|
|
self::number_of_double_pages => 35,
|
|
self::number_of_standalone_sheets => 36,
|
|
self::number_of_written_pages => 37,
|
|
self::diameter_image_size => 38,
|
|
self::length_of_base => 39,
|
|
self::height_of_base => 40,
|
|
self::width_of_base => 41,
|
|
self::diameter_of_base => 42,
|
|
self::length_handle => 43,
|
|
self::height_handle => 44,
|
|
self::width_handle => 45,
|
|
self::length_scabbard => 46,
|
|
self::height_scabbard => 47,
|
|
self::width_scabbard => 48,
|
|
self::length_label => 49,
|
|
self::height_label => 50,
|
|
self::width_label => 51,
|
|
self::height_image_mount_inner => 52,
|
|
self::height_image_mount_outer => 53,
|
|
self::width_image_mount_inner => 54,
|
|
self::width_image_mount_outer => 55,
|
|
self::height_plate => 56,
|
|
self::width_plate => 57,
|
|
self::length_packaging => 58,
|
|
self::height_packaging => 59,
|
|
self::width_packaging => 60,
|
|
self::length_box => 61,
|
|
self::height_box => 62,
|
|
self::width_box => 63,
|
|
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns suitable measurement type.
|
|
*
|
|
* @return class-string
|
|
*/
|
|
public function getMeasurementUnit():string {
|
|
|
|
return match($this->getHighestSuperordinate()) {
|
|
self::length,
|
|
self::height,
|
|
self::width,
|
|
self::wall,
|
|
self::diameter => MDLengthUnit::Class,
|
|
self::number_of_copies => MDCountCopiesUnit::Class,
|
|
self::weight => MDWeightUnit::Class,
|
|
self::number_of_parts => MDCountPartsUnit::Class,
|
|
self::die_axis => MDDieAxisUnit::Class,
|
|
# default => throw new MDpageParameterNotFromListException("Unknown measurement type"),
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
* Gets an unsorted list of the entries in a translated version.
|
|
*
|
|
* @param MDTlLoader $tlLoader Translation loader.
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public static function getUnsortedList(MDTlLoader $tlLoader):array {
|
|
return MDValueSet::getTlUnsortedList($tlLoader, self::caseNames(), "measurement_type_set", "measurement_type_set");
|
|
|
|
}
|
|
|
|
/**
|
|
* Gets a sorted list of the entries in a translated version.
|
|
*
|
|
* @param MDTlLoader $tlLoader Translation loader.
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public static function getSortedList(MDTlLoader $tlLoader):array {
|
|
return MDValueSet::getTlSortedList($tlLoader, self::caseNames(), "measurement_type_set", "measurement_type_set");
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the current value in translation.
|
|
*
|
|
* @param MDTlLoader $tlLoader Translation loader.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getTledName(MDTlLoader $tlLoader):string {
|
|
|
|
return $tlLoader->tl("measurement_type_set", "measurement_type_set", $this->name);
|
|
|
|
}
|
|
|
|
/**
|
|
* Provides the option to serialize as a string during json_encode().
|
|
*
|
|
* @return string
|
|
*/
|
|
public function jsonSerialize():string {
|
|
|
|
return $this->name;
|
|
|
|
}
|
|
}
|