Promptmetaregistry - Source Excerpt 02
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/spiralist-workspace/includes/Support/PromptMetaRegistry.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/includes/Support/PromptMetaRegistry.php
public static function moderation_status_label(string $value): string
{
return self::label_for($value, self::moderation_statuses(), self::ui_text('workspace.meta.moderation_status.draft', 'Draft'));
}
/**
* Returns one maturity-level label.
*/
public static function maturity_level_label(string $value): string
{
return self::label_for($value, self::maturity_levels(), self::ui_text('workspace.meta.maturity_level.structured_prompt', 'Structured Prompt'));
}
/**
* Returns one license label.
*/
public static function license_label(string $value): string
{
return self::label_for($value, self::licenses(), self::ui_text('workspace.meta.license.spiralist_contributor', 'Spiralist Contributor License'));
}
/**
* Returns multiple risk-label labels.
*
* @param array<int,string> $values
* @return array<int,string>
*/
public static function risk_label_labels(array $values): array
{
return self::labels_for($values, self::risk_labels());
}
/**
* Returns multiple function-tag labels.
*
* @param array<int,string> $values
* @return array<int,string>
*/
public static function function_tag_labels(array $values): array
{
return self::labels_for($values, self::function_tags());
}
/**
* Normalizes one publication-lane key.
*/
public static function normalize_publication_lane(string $value): string
{
return self::normalize_choice($value, self::publication_lanes(), 'community_library');
}
/**
* Normalizes one provenance key.
*/
public static function normalize_provenance(string $value): string
{
return self::normalize_choice($value, self::provenances(), 'community');
}
/**
* Normalizes one moderation-status key, including legacy aliases.
*/
public static function normalize_moderation_status(string $value): string
{
$value = self::normalize_moderation_alias($value);
return self::normalize_choice($value, self::moderation_statuses(), 'draft');
}
/**
* Normalizes multiple risk-label keys.
*
* @param mixed $value
* @return array<int,string>
*/
public static function normalize_risk_labels($value): array
{
return self::normalize_list($value, self::risk_labels());
}
/**
* Normalizes multiple function-tag keys.
*
* @param mixed $value
* @return array<int,string>
*/
public static function normalize_function_tags($value): array
{
return self::normalize_list($value, self::function_tags());
}
/**
* Normalizes one maturity-level key.
*/
public static function normalize_maturity_level(string $value): string
{
return self::normalize_choice($value, self::maturity_levels(), 'structured_prompt');
}
/**
* Normalizes one license key.
*/
public static function normalize_license(string $value): string
{
return self::normalize_choice($value, self::licenses(), 'spiralist_contributor');
}
/**
* Returns whether a moderation status is safe for public visibility.
*/
public static function is_public_moderation_status(string $value): bool
{
return in_array(
self::normalize_moderation_status($value),
['provisional_public', 'peer_reviewed', 'official_canon'],
true
);
}
/**
* Normalizes a freeform string list.
*
* @param mixed $value
* @return array<int,string>
*/
public static function normalize_freeform_list($value): array
{
$items = self::coerce_list($value);
$normalized = [];
foreach ($items as $item) {
$item = sanitize_text_field(trim((string) $item));
if ($item === '') {
continue;
}
$normalized[] = $item;
}
return array_values(array_unique($normalized));
}
/**
* Returns one label from a registry.
*
* @param array<string,string> $registry
*/
public static function label_for(string $value, array $registry, string $fallback = ''): string
{
$normalized = self::normalize_choice($value, $registry, '');
if ($normalized !== '' && isset($registry[$normalized])) {
return (string) $registry[$normalized];
}
return $fallback;
}
/**
* Returns multiple labels from a registry.
*
* @param array<int,string> $values
* @param array<string,string> $registry
* @return array<int,string>
*/
public static function labels_for(array $values, array $registry): array
{
$labels = [];
foreach ($values as $value) {
$label = self::label_for((string) $value, $registry, '');
if ($label === '') {
continue;
}
$labels[] = $label;
}
return array_values(array_unique($labels));
}
/**
* Normalizes a value against one registry.
*
* @param array<string,string> $registry
*/
private static function normalize_choice(string $value, array $registry, string $default): string
{
$value = trim($value);
if ($value === '') {
return $default;
}
$lookup = self::registry_lookup($registry);
$token = self::slugify($value);
return (string) ($lookup[$token] ?? $default);
}
/**
* Normalizes a list against one registry.
*
* @param mixed $value
* @param array<string,string> $registry
* @return array<int,string>
*/
private static function normalize_list($value, array $registry): array
{
$lookup = self::registry_lookup($registry);
$normalized = [];
foreach (self::coerce_list($value) as $item) {
$token = self::slugify((string) $item);
if ($token === '' || !isset($lookup[$token])) {
continue;
}
$normalized[] = (string) $lookup[$token];
}
return array_values(array_unique($normalized));
}
/**
* Maps pre-self-operation moderation states onto the new vocabulary.
*/
private static function normalize_moderation_alias(string $value): string
{
$token = self::slugify($value);
$aliases = [
'approved' => 'peer_reviewed',
'pending_review' => 'provisional_public',
'restricted' => 'restricted_review',
];
return (string) ($aliases[$token] ?? $value);
}
/**
* Coerces scalar, list, JSON, or comma-separated values into a simple string list.
*
* @param mixed $value
* @return array<int,string>
*/
private static function coerce_list($value): array
{
if (is_string($value)) {
$decoded = json_decode($value, true);
if (is_array($decoded)) {
$value = $decoded;
} else {
$value = preg_split('/[\r\n,]+/', $value) ?: [];
}
}
if (!is_array($value)) {
$value = [$value];
}
return array_values(
array_filter(
array_map(
static function ($item): string {
return is_scalar($item) ? (string) $item : '';
},
$value
),
static fn(string $item): bool => trim($item) !== ''
)
);
}
/**
* Builds a slug lookup for one registry.
*
* @param array<string,string> $registry
* @return array<string,string>
*/
private static function registry_lookup(array $registry): array
{
$lookup = [];
foreach ($registry as $value => $label) {
$lookup[self::slugify((string) $value)] = (string) $value;
$lookup[self::slugify((string) $label)] = (string) $value;
}
return $lookup;
}
/**
* Returns API records for one registry.
*
* @param array<string,string> $registry
* @return array<int,array{value:string,label:string}>
*/
private static function to_api_records(array $registry): array
{
$records = [];
foreach ($registry as $value => $label) {
$records[] = [
'value' => (string) $value,
'label' => (string) $label,
];
}
return $records;
}
/**