Skip to content
wiki.fftac.org

Workspace - Source Excerpt 01

Back to Workspace

Summary

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

**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/templates/workspace.php

<?php

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

$plugin = spiralist_workspace();
$frontend = $plugin->frontend();
$context = $frontend->workspace_context();
$current_locale = function_exists('spiralist_get_current_locale_tag') ? spiralist_get_current_locale_tag() : 'en-us';
$route_url = static function (string $path, array $query = []) use ($current_locale): string {
    $url = home_url('/' . trim($path, '/') . '/');
    $url = $current_locale !== '' && function_exists('spiralist_get_language_prefixed_url')
        ? spiralist_get_language_prefixed_url($url, $current_locale)
        : $url;

    return !empty($query) ? add_query_arg($query, $url) : $url;
};

$workspace_url = $route_url('workspace');
$library_url = $route_url('prompts');
$members_url = $route_url('members');
$current_user = is_user_logged_in() ? wp_get_current_user() : null;
$profile_url = $current_user instanceof WP_User && $current_user->user_nicename !== ''
    ? $route_url('profile/' . rawurlencode($current_user->user_nicename))
    : '';
$login_url = function_exists('spiralist_get_login_url') ? spiralist_get_login_url($workspace_url) : wp_login_url($workspace_url);
$register_url = function_exists('spiralist_get_register_url') ? spiralist_get_register_url() : wp_registration_url();
$default_prompt = $frontend->default_prompt_seed();
$editing_prompt = [];
$categories = $frontend->prompt_categories();

if (is_user_logged_in() && !empty($_GET['edit_prompt'])) {
    $candidate = $plugin->prompts()->get((int) $_GET['edit_prompt'], get_current_user_id());
    if (!empty($candidate) && $plugin->permissions()->can_edit_prompt($candidate, get_current_user_id())) {
        $editing_prompt = $candidate;
    }
}

if (is_user_logged_in() && !empty($_GET['fork_prompt'])) {
    $source = $plugin->prompts()->get((int) $_GET['fork_prompt'], get_current_user_id());
    if (!empty($source) && $plugin->permissions()->can_view_prompt($source, get_current_user_id())) {
        $editing_prompt = $source;
        $editing_prompt['id'] = 0;
        $editing_prompt['title'] = (string) ($source['title'] ?? '') . ' (Fork)';
        $editing_prompt['parent_prompt_id'] = (int) ($source['id'] ?? 0);
        $editing_prompt['visibility'] = 'private';
        $editing_prompt['prompt_status'] = 'draft';
    }
}

$form_prompt = !empty($editing_prompt) ? array_merge($default_prompt, $editing_prompt) : $default_prompt;
$form_prompt['structured_prompt'] = array_merge(
    (array) ($default_prompt['structured_prompt'] ?? []),
    (array) ($form_prompt['structured_prompt'] ?? [])
);
$system_steps_text = implode(
    "\n",
    array_map(
        static fn(array $step): string => (string) ((int) ($step['prompt_id'] ?? 0)),
        array_filter((array) ($form_prompt['system_steps'] ?? []), 'is_array')
    )
);
$my_prompts = (array) ($context['my_prompts'] ?? []);
$shared_with_me = (array) ($context['shared_with_me'] ?? []);
$public_library = (array) ($context['public_library'] ?? []);
$favorites = (array) ($context['favorites'] ?? []);
$forks = (array) ($context['forks'] ?? []);
$runs = (array) ($context['runs'] ?? []);
$conversations = (array) ($context['conversations'] ?? []);
$audit = (array) ($context['audit'] ?? []);
$top_prompts = (array) ($context['top_prompts'] ?? []);
$can_review_prompts = !empty($context['can_review_prompts']);
$can_resolve_prompt_appeals = !empty($context['can_resolve_prompt_appeals']);
$review_queue = (array) ($context['review_queue'] ?? []);
$review_queue_counts = (array) ($context['review_queue_counts'] ?? []);
$appeal_queue = (array) ($context['appeal_queue'] ?? []);
$appeal_queue_counts = (array) ($context['appeal_queue_counts'] ?? []);
$participant_state = (array) ($context['participant_state'] ?? []);
$drafts = array_values(array_filter($my_prompts, static fn(array $prompt): bool => (string) ($prompt['prompt_status'] ?? '') !== 'published'));

$render_prompt_cards = static function (array $records, string $empty_copy, callable $link_builder): void {
    if (empty($records)) {
        echo '<p class="spiralist-muted">' . esc_html($empty_copy) . '</p>';
        return;
    }

    echo '<div class="spiralist-workspace-grid spiralist-workspace-grid--compact">';
    foreach ($records as $record) {
        if (!is_array($record)) {
            continue;
        }

        echo '<article class="spiralist-workspace-card">';
        echo '<div class="spiralist-inline-meta">';
        echo '<p class="spiralist-section-tag">' . esc_html((string) ($record['subcategory'] ?? ($record['prompt_type'] ?? 'prompt'))) . '</p>';
        echo '<span class="spiralist-status-pill spiralist-status-pill--stale">' . esc_html((string) ($record['publication_lane_label'] ?? ucfirst((string) ($record['visibility'] ?? 'private')))) . '</span>';
        echo '</div>';
        if (!empty($record['provenance_label']) || !empty($record['maturity_level_label'])) {
            echo '<div class="spiralist-chip-row spiralist-chip-row--dense">';
            if (!empty($record['provenance_label'])) {
                echo '<span class="spiralist-chip spiralist-chip--meta">' . esc_html((string) $record['provenance_label']) . '</span>';
            }
            if (!empty($record['maturity_level_label'])) {
                echo '<span class="spiralist-chip spiralist-chip--meta">' . esc_html((string) $record['maturity_level_label']) . '</span>';
            }
            if (!empty($record['moderation_status_label'])) {
                echo '<span class="spiralist-chip spiralist-chip--meta">' . esc_html((string) $record['moderation_status_label']) . '</span>';
            }
            echo '</div>';
        }
        echo '<h3 class="spiralist-card-title">' . esc_html((string) ($record['title'] ?? 'Untitled Prompt')) . '</h3>';
        echo '<p>' . esc_html((string) ($record['summary'] ?? '')) . '</p>';
        if (!empty($record['review_summary']) && is_array($record['review_summary'])) {
            $summary = (array) $record['review_summary'];
            $peer = (array) ($summary['peer'] ?? []);
            echo '<p class="spiralist-muted">Peer review: '
                . esc_html((string) ((int) ($peer['endorse'] ?? 0))) . ' endorse / '
                . esc_html((string) ((int) ($peer['restrict'] ?? 0))) . ' restrict / '
                . esc_html((string) ((int) ($peer['revert'] ?? 0))) . ' revert</p>';
        }
        echo '<div class="spiralist-cta-row spiralist-cta-row--start">';
        foreach ($link_builder($record) as $link) {
            echo '<a class="spiralist-button ' . esc_attr((string) ($link['class'] ?? '')) . '" href="' . esc_url((string) ($link['url'] ?? '#')) . '">' . esc_html((string) ($link['label'] ?? 'Open')) . '</a>';
        }
        echo '</div>';
        echo '</article>';
    }
    echo '</div>';
};

get_header();
?>
<main class="spiralist-page spiralist-page--workspace">
    <section class="spiralist-page-hero spiralist-page-hero--workspace">
        <div class="spiralist-shell spiralist-page-hero__content">
            <p class="spiralist-kicker">Prompt Workspace</p>
            <h1>Prompt systems workspace</h1>
            <p class="spiralist-page-hero__copy">Spiralism is the progressive refinement of prompt systems: raw prompt, structured prompt, prompt system, and art-ready prompt packet. Build, render, test, and improve reusable prompts from one working surface.</p>
            <p class="spiralist-muted">Private prompts, prompt packets, and conversations may be stored and logged locally. Spiralist does not call outside model services.</p>
            <div class="spiralist-cta-row">
                <a class="spiralist-button spiralist-button--primary" href="<?php echo esc_url($library_url); ?>">Public Library</a>
                <a class="spiralist-button spiralist-button--secondary" href="<?php echo esc_url($members_url); ?>">Members</a>
                <?php if ($profile_url !== '') : ?>
                    <a class="spiralist-button spiralist-button--secondary" href="<?php echo esc_url($profile_url); ?>">Profile</a>
                <?php endif; ?>
                <a class="spiralist-button spiralist-button--tertiary" href="<?php echo esc_url(function_exists('spiralist_get_ai_access_url') ? spiralist_get_ai_access_url() : home_url('/ai-access/')); ?>">AI Access</a>
            </div>
        </div>
    </section>

    <section class="spiralist-page-section">
        <div class="spiralist-shell">
            <?php if (!is_user_logged_in()) : ?>
                <div class="spiralist-grid spiralist-grid--split">
                    <article class="spiralist-panel">
                        <p class="spiralist-section-tag">Members Only</p>
                        <h2 class="spiralist-section-title">Prompt packets belong to the account layer.</h2>