48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Helpers;
|
|
|
|
class ProjectNamingSchema
|
|
{
|
|
/**
|
|
* Generate a project name based on ISO 19650 schema.
|
|
*
|
|
* @param array $fields Associative array of required and optional fields.
|
|
* @return string Generated project name.
|
|
*/
|
|
public static function generate(array $fields): string
|
|
{
|
|
// Validate required fields
|
|
$requiredFields = ['project', 'creator', 'volume', 'level', 'documentType', 'discipline', 'number'];
|
|
foreach ($requiredFields as $field) {
|
|
if (empty($fields[$field])) {
|
|
throw new \InvalidArgumentException("The field '{$field}' is required.");
|
|
}
|
|
}
|
|
|
|
// Build the project name
|
|
$projectName = [
|
|
strtoupper($fields['project']),
|
|
strtoupper($fields['creator']),
|
|
strtoupper($fields['volume']),
|
|
strtoupper($fields['level']),
|
|
strtoupper($fields['documentType']),
|
|
strtoupper($fields['discipline']),
|
|
str_pad($fields['number'], 3, '0', STR_PAD_LEFT),
|
|
];
|
|
|
|
// Add optional fields if provided
|
|
if (!empty($fields['description'])) {
|
|
$projectName[] = $fields['description'];
|
|
}
|
|
if (!empty($fields['status'])) {
|
|
$projectName[] = strtoupper($fields['status']);
|
|
}
|
|
if (!empty($fields['revision'])) {
|
|
$projectName[] = str_pad($fields['revision'], 4, '0', STR_PAD_LEFT);
|
|
}
|
|
|
|
return implode('-', $projectName);
|
|
}
|
|
}
|