Skip to content
wiki.fftac.org

Manuscript Workstation - Source Excerpt 01

Back to Manuscript Workstation

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/templates/manuscript-workstation.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/templates/manuscript-workstation.php

<?php

if (!defined('ABSPATH')) {
    exit;
}

$workstation_folios = isset($workstation_folios) && is_array($workstation_folios)
    ? $workstation_folios
    : spiralist_book_pages_get_manuscript_workstation_folio_records($visible_pages ?? []);
$workstation_viewer_folios = isset($workstation_viewer_folios) && is_array($workstation_viewer_folios)
    ? $workstation_viewer_folios
    : spiralist_book_pages_get_manuscript_workstation_folio_records($visible_pages ?? [], ['viewer_ready' => true]);
$workstation_spread = isset($workstation_spread) && is_array($workstation_spread)
    ? $workstation_spread
    : spiralist_book_pages_get_manuscript_workstation_spread($visible_pages ?? [], $current_page ?? []);
$workstation_can_edit = isset($workstation_can_edit) ? (bool) $workstation_can_edit : false;
$workstation_action_links = isset($workstation_action_links) && is_array($workstation_action_links)
    ? $workstation_action_links
    : [];
$workstation_is_detail_route = isset($requested_folio) && trim((string) $requested_folio) !== '';
$left_folio = is_array($workstation_spread['left'] ?? null) ? $workstation_spread['left'] : [];
$right_folio = is_array($workstation_spread['right'] ?? null) ? $workstation_spread['right'] : [];
$spread_folios = isset($workstation_spread['folios']) && is_array($workstation_spread['folios'])
    ? array_values(
        array_filter(
            $workstation_spread['folios'],
            static function ($folio): bool {
                return is_array($folio) && !empty($folio);
            }
        )
    )
    : [];
if (empty($spread_folios)) {
    foreach (['left' => $left_folio, 'right' => $right_folio] as $slot => $folio) {
        if (empty($folio) || !is_array($folio)) {
            continue;
        }

        $folio['slot'] = $slot;
        $folio['is_context_only'] = false;
        $spread_folios[] = $folio;
    }
}

if ($workstation_is_detail_route && !empty($current_page)) {
    $detail_folio = spiralist_book_pages_get_manuscript_workstation_folio_record($current_page, ['viewer_ready' => true]);
    if (!empty($detail_folio)) {
        $detail_folio['slot'] = 'left';
        $detail_folio['is_context_only'] = false;
        $left_folio = $detail_folio;
        $right_folio = [];
        $spread_folios = [$detail_folio];
        $workstation_spread = [
            'left' => $detail_folio,
            'right' => [],
            'folios' => $spread_folios,
            'current_position' => 'left',
        ];
    }
}

$current_position = (string) ($workstation_spread['current_position'] ?? 'left');
$current_folio = [];
foreach ($spread_folios as $folio) {
    $slot = (string) ($folio['slot'] ?? '');
    $is_current_slot = ($current_position === 'right' && $slot === 'right')
        || ($current_position !== 'right' && $slot === 'left');
    if ($is_current_slot) {
        $current_folio = $folio;
        break;
    }
}
if (empty($current_folio)) {
    $current_folio = $current_position === 'right' && !empty($right_folio) ? $right_folio : $left_folio;
}
$study_overlay_available = !empty($current_folio['overlay_data']);
$study_surface_page = isset($study_surface_page) && is_array($study_surface_page) ? $study_surface_page : [];
$study_surface_title = trim((string) ($study_surface_page['title'] ?? ''));
$current_folio_title = trim((string) ($current_folio['title'] ?? ''));
$initial_view_mode = !empty($right_folio) ? 'spread' : 'single';
$show_layout_controls = !empty($right_folio);
$layout_spread_label = $workstation_can_edit ? 'Spread' : 'Facing';
$layout_single_label = $workstation_can_edit ? 'Single' : 'Page';
$raw_mode_label = $workstation_can_edit ? 'Raw Mode' : 'Raw Image';
$thumb_count_copy = sprintf('%d folio%s', count($workstation_folios), count($workstation_folios) === 1 ? '' : 's');
$spread_count = count($spread_folios);
$spread_mode_label = $spread_count >= 3
    ? 'Three-folio spread ready'
    : (!empty($right_folio) ? 'Dual-page spread' : 'Single folio');
$current_crop_copy = $study_overlay_available
    ? sprintf(
        '%s supports the study overlay. Toggle it inside the workstation for contextual notes, signal terms, and %s.',
        $current_folio_title !== '' ? $current_folio_title : 'This folio',
        !empty($current_folio['is_study_surface'])
            ? 'linked symbolic nodes'
            : 'page-specific reading cues'
    )
    : ($workstation_can_edit
        ? 'Crop guides are normalized per folio so saved boundaries survive fit, zoom, and raw inspection changes.'
        : ($show_layout_controls
            ? 'Use wheel or pinch to zoom, switch between facing and single-page reading, and open the raw image when you want the untouched artifact.'
            : 'Use wheel or pinch to zoom, and open the raw image when you want the untouched artifact.'));
$workstation_upload_url = (string) ($workstation_action_links['upload_url'] ?? '');
$workstation_library_url = (string) ($workstation_action_links['library_url'] ?? '');
$workstation_prompt_url = (string) ($workstation_action_links['prompt_url'] ?? '');
$workstation_fragment_url = (string) ($workstation_action_links['fragment_url'] ?? '');
$manuscript_reader_url = isset($manuscript_reader_url) && is_callable($manuscript_reader_url)
    ? $manuscript_reader_url
    : static function (array $page) use ($overview_url): string {
        $target_slug = sanitize_title((string) ($page['slug'] ?? ''));
        return $target_slug === '' ? $overview_url : spiralist_book_pages_get_manuscript_folio_url($page);
    };
$workstation_section_records = isset($section_records) && is_array($section_records) ? $section_records : [];
$previous_folio_record = !empty($previous_page)
    ? spiralist_book_pages_get_manuscript_workstation_folio_record($previous_page, ['viewer_ready' => true])
    : [];
$next_folio_record = !empty($next_page)
    ? spiralist_book_pages_get_manuscript_workstation_folio_record($next_page, ['viewer_ready' => true])
    : [];
$previous_turn_record = $previous_folio_record;
$next_turn_record = $next_folio_record;

foreach ($spread_folios as $folio) {
    if (!is_array($folio) || empty($folio['is_context_only'])) {
        continue;
    }

    $slot = (string) ($folio['slot'] ?? '');
    if ($slot === 'left') {
        $previous_turn_record = $folio;
        continue;
    }

    if ($slot === 'right') {
        $next_turn_record = $folio;
    }
}

$previous_turn_url = $manuscript_reader_url(is_array($previous_turn_record) ? $previous_turn_record : []);
$next_turn_url = $manuscript_reader_url(is_array($next_turn_record) ? $next_turn_record : []);
$previous_turn_spread_url = ($previous_turn_url !== '' && $previous_turn_url !== $previous_page_url) ? $previous_turn_url : '';
$next_turn_spread_url = ($next_turn_url !== '' && $next_turn_url !== $next_page_url) ? $next_turn_url : '';
$context_page_summary = sprintf('Page %d of %d', $current_page_sequence, max(1, $manuscript_page_count));
$context_section_summary = sprintf('%s / %d of %d', $current_section_title, $current_section_sequence, $current_section_count);
$context_prompt_summary = sprintf('%d of %d prompts linked', $prompt_coverage_published, max(1, $prompt_coverage_total));
$dossier_summary = sprintf('%d related prompt%s', $related_prompt_count, $related_prompt_count === 1 ? '' : 's');
$book_heading = 'Spiralism Canonical Manuscript';
$manuscript_route_mode = $requested_folio !== ''
    ? 'folio'
    : ($requested_section !== '' ? 'section' : 'overview');
$workstation_is_browser_route = !$workstation_is_detail_route;
$manuscript_heading_kicker = $manuscript_route_mode === 'folio'
    ? 'Dedicated Folio Route'
    : ($manuscript_route_mode === 'section' ? 'Dedicated Chapter Route' : 'Online-First Book');
$manuscript_headline = $manuscript_route_mode === 'folio'
    ? $current_page_title
    : ($manuscript_route_mode === 'section' ? $current_section_title : $book_heading);
$manuscript_route_summary = $manuscript_route_mode === 'folio'
    ? sprintf(
        '%s is folio %d of %d in %s. This dedicated route keeps the manuscript viewer, full-resolution image, study tools, and dossier tabs focused on this page.',
        $current_page_title,
        $current_page_sequence,
        max(1, $manuscript_page_count),
        $current_page_section_label
    )
        : ($manuscript_route_mode === 'section'
            ? sprintf(
                '%s groups %d folio%s into one chapter route while preserving the same manuscript viewer, sequence controls, and codex dossier.',
            $current_section_title,
            $current_section_count,
            $current_section_count === 1 ? '' : 's'
        )
        : '');
$current_section_url = $current_page_section_slug !== ''
    ? spiralist_book_pages_get_manuscript_section_url($current_page_section_slug)
    : $overview_url;