Implement enums for genders and licenses

See #31, see #30
This commit is contained in:
Joshua Ramon Enslin 2024-07-29 13:59:17 +02:00
parent 32a1e8b1be
commit 99e0f9b655
Signed by: jrenslin
GPG Key ID: 46016F84501B70AE
2 changed files with 413 additions and 0 deletions

176
src/enums/MDGender.php Normal file
View File

@ -0,0 +1,176 @@
<?PHP
/**
* Represents a gender.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
/**
* Represents a gender.
*/
enum MDGender implements MDValueEnumInterface, JsonSerializable {
case none;
case female;
case male;
case other;
/**
* Returns a value of this type based on a string.
*
* @param string $input Input to get a value from.
*
* @return MDGender
*/
public static function fromString(string $input):MDGender {
return match($input) {
"" => self::none,
"none" => self::none,
"female" => self::female,
"male" => self::male,
"other" => self::other,
default => throw new MDpageParameterNotFromListException("Unknown series place role"),
};
}
/**
* Returns a value of this type based on an integer.
*
* @param integer $input Input to get a value from.
*
* @return MDGender
*/
public static function fromInt(int $input):MDGender {
return match($input) {
0 => self::none,
1 => self::female,
2 => self::male,
3 => self::other,
default => throw new MDpageParameterNotFromListException("Unknown series place role"),
};
}
/**
* Lists all available names.
*
* @return array<string>
*/
public static function caseNames():array {
$output = [];
$cases = self::cases();
foreach ($cases as $case) {
$output[] = $case->toString();
}
return $output;
}
/**
* 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(), "gender_set", "gender_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(), "gender_set", "gender_set");
}
/**
* Lists all available names.
*
* @return array<integer>
*/
public static function caseInts():array {
$output = [];
$cases = self::cases();
foreach ($cases as $case) {
$output[] = $case->toInt();
}
return $output;
}
/**
* Returns integer representation of object record status.
*
* @return integer
*/
public function toInt():int {
return match($this) {
self::none => 0,
self::female => 1,
self::male => 2,
self::other => 3,
# default => throw new MDpageParameterNotFromListException("Unknown object record status"),
};
}
/**
* Returns string representation.
*
* @return string
*/
public function toString():string {
return match($this) {
self::none => '',
self::female => 'female',
self::male => 'male',
self::other => 'other',
# default => throw new MDpageParameterNotFromListException("Unknown object record status"),
};
}
/**
* Returns the name of the current value in translation.
*
* @param MDTlLoader $tlLoader Translation loader.
*
* @return string
*/
public function getTledName(MDTlLoader $tlLoader):string {
if ($this === self::none) return '';
return $tlLoader->tl("gender_set", "gender_set", $this->toString());
}
/**
* Provides the option to serialize as a string during json_encode().
*
* @return string
*/
public function jsonSerialize():string {
return $this->name;
}
}

237
src/enums/MDLicense.php Normal file
View File

@ -0,0 +1,237 @@
<?PHP
/**
* Represents a license.
*
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
*/
declare(strict_types = 1);
/**
* Represents a license.
*/
enum MDLicense implements MDValueEnumInterface, JsonSerializable {
case CC_BY_NC_SA;
case CC_BY_NC_ND;
case CC_BY_NC;
case CC_BY_ND;
case CC_BY_SA;
case CC_BY;
case CC0;
case RR_F;
case RR_P;
case RR_R;
case Public_Domain_Mark;
case Orphan_Work;
public const AVAILABLE_LICENSES = [
'CC BY-NC-SA' => 'https://creativecommons.org/licenses/by-nc-sa/4.0/',
'CC BY-NC-ND' => 'https://creativecommons.org/licenses/by-nc-nd/4.0/',
'CC BY-NC' => 'https://creativecommons.org/licenses/by-nc/4.0/',
'CC BY-ND' => 'https://creativecommons.org/licenses/by-nd/4.0/',
'CC BY-SA' => 'https://creativecommons.org/licenses/by-sa/4.0/',
'CC BY' => 'https://creativecommons.org/licenses/by/4.0/',
'CC0' => 'https://creativecommons.org/publicdomain/zero/1.0/',
'RR-F' => 'https://www.europeana.eu/rights/rr-f/',
'RR-P' => 'https://www.europeana.eu/rights/rr-p/',
'RR-R' => 'https://www.europeana.eu/rights/rr-r/',
'Public Domain Mark' => 'https://creativecommons.org/publicdomain/mark/1.0/',
'Orphan Work' => 'https://www.europeana.eu/rights/orphan-work-eu/',
];
/**
* Returns a value of this type based on a string.
*
* @param string $input Input to get a value from.
*
* @return MDLicense
*/
public static function fromString(string $input):MDLicense {
return match($input) {
'CC BY-NC-SA' => self::CC_BY_NC_SA,
'CC BY-NC-ND' => self::CC_BY_NC_ND,
'CC BY-NC' => self::CC_BY_NC,
'CC BY-ND' => self::CC_BY_ND,
'CC BY-SA' => self::CC_BY_SA,
'CC BY' => self::CC_BY,
'CC0' => self::CC0,
'RR-F' => self::RR_F,
'RR-P' => self::RR_P,
'RR-R' => self::RR_R,
'Public Domain Mark' => self::Public_Domain_Mark,
'Orphan Work' => self::Orphan_Work,
default => throw new MDpageParameterNotFromListException("Unknown license role"),
};
}
/**
* Returns a value of this type based on an integer.
*
* @param integer $input Input to get a value from.
*
* @return MDLicense
*/
public static function fromInt(int $input):MDLicense {
return match($input) {
1 => self::CC_BY_NC_SA,
2 => self::CC_BY_NC_ND,
3 => self::CC_BY_NC,
4 => self::CC_BY_ND,
5 => self::CC_BY_SA,
6 => self::CC_BY,
7 => self::CC0,
8 => self::RR_F,
9 => self::RR_P,
10 => self::RR_R,
11 => self::Public_Domain_Mark,
12 => self::Orphan_Work,
default => throw new MDpageParameterNotFromListException("Unknown license role"),
};
}
/**
* Lists all available names.
*
* @return array<string>
*/
public static function caseNames():array {
$output = [];
$cases = self::cases();
foreach ($cases as $case) {
$output[] = $case->toString();
}
return $output;
}
/**
* 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 {
$output = [];
foreach (self::caseNames() as $name) $output[$name] = $name;
return $output;
}
/**
* 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 {
$output = self::getUnsortedList();
asort($output);
return $output;
}
/**
* Lists all available names.
*
* @return array<integer>
*/
public static function caseInts():array {
$output = [];
$cases = self::cases();
foreach ($cases as $case) {
$output[] = $case->toInt();
}
return $output;
}
/**
* Returns integer representation of object record status.
*
* @return integer
*/
public function toInt():int {
return match($this) {
self::CC_BY_NC_SA => 1,
self::CC_BY_NC_ND => 2,
self::CC_BY_NC => 3,
self::CC_BY_ND => 4,
self::CC_BY_SA => 5,
self::CC_BY => 6,
self::CC0 => 7,
self::RR_F => 8,
self::RR_P => 9,
self::RR_R => 10,
self::Public_Domain_Mark => 11,
self::Orphan_Work => 12,
# default => throw new MDpageParameterNotFromListException("Unknown object record status"),
};
}
/**
* Returns string representation.
*
* @return string
*/
public function toString():string {
return match($this) {
self::CC_BY_NC_SA => 'CC BY-NC-SA',
self::CC_BY_NC_ND => 'CC BY-NC-ND',
self::CC_BY_NC => 'CC BY-NC',
self::CC_BY_ND => 'CC BY-ND',
self::CC_BY_SA => 'CC BY-SA',
self::CC_BY => 'CC BY',
self::CC0 => 'CC0',
self::RR_F => 'RR-F',
self::RR_P => 'RR-P',
self::RR_R => 'RR-R',
self::Public_Domain_Mark => 'Public Domain Mark',
self::Orphan_Work => 'Orphan Work',
# default => throw new MDpageParameterNotFromListException("Unknown object record status"),
};
}
/**
* Returns the name of the current value in translation.
*
* @param MDTlLoader $tlLoader Translation loader.
*
* @return string
*/
public function getTledName(MDTlLoader $tlLoader):string {
return $this->toString();
}
/**
* Provides the option to serialize as a string during json_encode().
*
* @return string
*/
public function jsonSerialize():string {
return $this->name;
}
}