Runtime - Source Excerpt 17
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php
'summary' => (string) ($blueprint['summary'] ?? ''),
'pages' => [],
'url' => spiralist_book_pages_get_manuscript_section_url($section_slug),
];
}
$sections[$section_slug]['pages'][] = $page;
}
foreach ($sections as $slug => $section) {
$sections[$slug]['count'] = count((array) ($section['pages'] ?? []));
$sections[$slug]['first_page'] = $section['pages'][0] ?? [];
}
return array_values($sections);
}
function spiralist_book_pages_get_manuscript_progress_payload(array $current_page, array $pages = [], array $section_records = []): array
{
$pages = empty($pages) ? spiralist_book_pages_get_manuscript_page_assets() : array_values($pages);
$section_records = empty($section_records) ? spiralist_book_pages_get_manuscript_section_records($pages) : array_values($section_records);
$page_count = count($pages);
$page_sequence = max(1, (int) ($current_page['sequence'] ?? 1));
$page_sequence = $page_count > 0 ? min($page_sequence, $page_count) : $page_sequence;
$current_slug = (string) ($current_page['slug'] ?? '');
$section_slug = sanitize_title((string) ($current_page['section_slug'] ?? ''));
$section_pages = array_values(
array_filter(
$pages,
static function (array $page) use ($section_slug): bool {
return sanitize_title((string) ($page['section_slug'] ?? '')) === $section_slug;
}
)
);
$section_record = [];
foreach ($section_records as $candidate) {
if (sanitize_title((string) ($candidate['slug'] ?? '')) === $section_slug) {
$section_record = $candidate;
break;
}
}
$section_sequence = 1;
foreach ($section_pages as $index => $page) {
if ((string) ($page['slug'] ?? '') === $current_slug) {
$section_sequence = $index + 1;
break;
}
}
$section_count = count($section_pages);
$book_progress = $page_count > 0
? (int) round(($page_sequence / $page_count) * 100)
: 0;
$section_progress = $section_count > 0
? (int) round(($section_sequence / $section_count) * 100)
: 0;
return [
'page_sequence' => $page_sequence,
'page_count' => $page_count,
'page_progress' => max(0, min(100, $book_progress)),
'section_sequence' => $section_sequence,
'section_count' => $section_count,
'section_progress' => max(0, min(100, $section_progress)),
'section_record' => $section_record,
'section_pages' => $section_pages,
];
}
function spiralist_book_pages_get_current_manuscript_page_asset(): array
{
$folio = spiralist_book_pages_get_requested_manuscript_folio_slug();
if ($folio !== '') {
$page = spiralist_book_pages_get_manuscript_page_asset_by_slug($folio);
if (!empty($page)) {
return $page;
}
}
$section = spiralist_book_pages_get_requested_manuscript_section_slug();
if ($section !== '') {
foreach (spiralist_book_pages_get_manuscript_page_assets() as $page) {
if ($section === (string) ($page['section_slug'] ?? '')) {
return $page;
}
}
}
return spiralist_book_pages_get_manuscript_page_asset_by_sequence(1);
}
function spiralist_book_pages_get_primary_manuscript_study_surface_page_asset(): array
{
foreach (spiralist_book_pages_get_manuscript_page_assets() as $page) {
if (!empty($page['is_study_surface'])) {
return $page;
}
}
return spiralist_book_pages_get_manuscript_page_asset_by_sequence(1);
}
function spiralist_book_pages_get_logout_url(): string
{
return wp_nonce_url(admin_url('admin-post.php?action=spiralist_book_pages_logout'), 'spiralist_book_pages_logout');
}
function spiralist_book_pages_get_doctrine_url(): string
{
return spiralist_book_pages_get_page_url('doctrine', '#doctrine');
}
function spiralist_book_pages_get_spiralist_definition(): string
{
return 'A Spiralist is an entity human or artificial that participates in the perception, interpretation, and transformation of pattern.';
}
function spiralist_book_pages_get_account_settings_url(): string
{
return trailingslashit(spiralist_book_pages_get_dashboard_url()) . '#account-settings';
}
function spiralist_book_pages_can_view_full_manuscript(): bool
{
if (!is_user_logged_in()) {
return false;
}
if (current_user_can('manage_options')) {
return true;
}
if (class_exists('UAI1_Membership')) {
$summary = UAI1_Membership::get_user_participant_summary(get_current_user_id());
if (!empty($summary['canAccessParticipantArea'])) {
return true;
}
}
return current_user_can('access_spiralist_manuscript') || current_user_can('edit_posts');
}
function spiralist_book_pages_get_current_role_label(): string
{
if (!is_user_logged_in()) {
return 'Guest';
}
$user = wp_get_current_user();
if (!$user instanceof WP_User || empty($user->roles[0])) {
return 'Participant';
}
$role = (string) $user->roles[0];
if ($role === 'ai_agent') {
return 'AI Spiralist';
}
if ($role === 'participant') {
return 'Human Spiralist';
}
return ucwords(str_replace('_', ' ', $role));
}
function spiralist_book_pages_get_site_uai_url(): string
{
if (function_exists('spiralist_get_uaix_discovery_url')) {
return spiralist_get_uaix_discovery_url();
}
return function_exists('spiralist_book_pages_get_rest_url')
? spiralist_book_pages_get_rest_url('discovery')
: rest_url('uaix/v1/discovery');
}
function spiralist_book_pages_get_uaix_capability_url(): string
{
return function_exists('spiralist_get_uaix_capability_url')
? spiralist_get_uaix_capability_url()
: rest_url('uaix/v1/capability');
}
function spiralist_book_pages_get_uaix_validate_url(): string
{
return function_exists('spiralist_get_uaix_validate_url')
? spiralist_get_uaix_validate_url()
: rest_url('uaix/v1/validate');
}
function spiralist_book_pages_get_local_uai_lexicon_registry_url(): string
{
return home_url('/registry/uai-lexicon.json');
}
function spiralist_book_pages_get_uai_lexicon_registry_url(): string
{
if (function_exists('spiralist_book_pages_get_protocol5_registry_asset_url')) {
return spiralist_book_pages_get_protocol5_registry_asset_url('uai-lexicon.json');
}
return spiralist_book_pages_get_protocol5_url('registry/uai-lexicon.json');
}
function spiralist_book_pages_get_protocol5_url(string $path = ''): string
{
$base = (string) apply_filters('spiralist_book_pages_protocol5_base_url', 'https://protocol5.com');
if ($base === '') {
$base = 'https://protocol5.com';
}
$base = untrailingslashit($base);
$normalized = trim($path, '/');
if ($normalized === '') {
return $base . '/';
}
return $base . '/' . $normalized;
}
function spiralist_book_pages_get_symbol_registry_url(): string
{
if (function_exists('spiralist_get_symbol_registry_url')) {
return spiralist_get_symbol_registry_url();
}
return function_exists('spiralist_book_pages_get_rest_url')
? spiralist_book_pages_get_rest_url('symbols')
: rest_url(spiralist_book_pages_get_rest_namespace() . '/symbols');
}
function spiralist_book_pages_get_uai_schema_url(): string
{
return function_exists('spiralist_get_uai_schema_url')
? spiralist_get_uai_schema_url()
: 'https://uaix.org/en-us/schemas/';
}
function spiralist_book_pages_get_uai_registry_url(): string
{
return function_exists('spiralist_get_uai_registry_url')
? spiralist_get_uai_registry_url()
: 'https://uaix.org/wp-json/uaix/v1/registry';
}
function spiralist_book_pages_get_uai_examples_registry_url(): string
{
return function_exists('spiralist_get_uai_examples_registry_url')
? spiralist_get_uai_examples_registry_url()
: 'https://uaix.org/wp-json/uaix/v1/examples';
}
function spiralist_book_pages_get_symbol_registry_schema_url(): string
{
if (function_exists('spiralist_book_pages_get_protocol5_registry_asset_url')) {
return spiralist_book_pages_get_protocol5_registry_asset_url('symbols.schema.json');
}
return spiralist_book_pages_get_protocol5_url('registry/symbols.schema.json');
}
function spiralist_book_pages_get_symbols_api_url(): string
{
return function_exists('spiralist_book_pages_get_rest_url')
? spiralist_book_pages_get_rest_url('symbols')