Helpers - Source Excerpt 27
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/inc/helpers.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/themes/spiralist/inc/helpers.php
'is_study_surface' => $is_study_surface,
'creation_prompt_title' => (string) ($blueprint['creation_prompt_title'] ?? 'Prompt Used'),
'creation_prompt_status' => (string) ($blueprint['creation_prompt_status'] ?? 'Prompt pending'),
'creation_prompt_summary' => (string) ($blueprint['creation_prompt_summary'] ?? ''),
'creation_prompt_text' => (string) ($blueprint['creation_prompt_text'] ?? ''),
'creation_prompt_source_slug' => sanitize_title((string) ($blueprint['creation_prompt_source_slug'] ?? '')),
'related_workspace_prompt_slugs' => array_values(
array_filter(
array_map(
static function ($slug): string {
return sanitize_title((string) $slug);
},
(array) ($blueprint['related_workspace_prompt_slugs'] ?? [])
),
'strlen'
)
),
]
);
};
foreach (spiralist_get_book_page_assets_in_display_order() as $asset) {
$sequence = count($pages) + 1;
$pages[] = $build_page($asset, $sequence);
}
return $pages;
}
function spiralist_get_manuscript_page_asset_by_filename(string $filename): array
{
$normalized = strtolower(trim($filename));
if ($normalized === '') {
return [];
}
foreach (spiralist_get_manuscript_page_assets() as $page) {
if ($normalized === strtolower((string) ($page['filename'] ?? ''))) {
return $page;
}
}
return [];
}
function spiralist_get_manuscript_page_asset_by_slug(string $slug): array
{
$normalized = sanitize_title($slug);
if ($normalized === '') {
return [];
}
foreach (spiralist_get_manuscript_page_assets() as $page) {
if ($normalized === (string) ($page['slug'] ?? '')) {
return $page;
}
}
return [];
}
function spiralist_get_manuscript_page_asset_by_sequence(int $sequence): array
{
if ($sequence < 1) {
return [];
}
foreach (spiralist_get_manuscript_page_assets() as $page) {
if ((int) ($page['sequence'] ?? 0) === $sequence) {
return $page;
}
}
return [];
}
function spiralist_get_requested_manuscript_folio_slug(): string
{
return sanitize_title((string) get_query_var('spiralist_manuscript_folio', ''));
}
function spiralist_get_requested_manuscript_section_slug(): string
{
return sanitize_title((string) get_query_var('spiralist_manuscript_section', ''));
}
function spiralist_get_manuscript_section_records(array $pages = []): array
{
$pages = empty($pages) ? spiralist_get_manuscript_page_assets() : $pages;
$section_blueprints = spiralist_get_manuscript_section_blueprints();
$sections = [];
foreach ($pages as $page) {
$section_slug = sanitize_title((string) ($page['section_slug'] ?? 'appendix'));
if (!isset($sections[$section_slug])) {
$blueprint = $section_blueprints[$section_slug] ?? $section_blueprints['appendix'];
$sections[$section_slug] = [
'slug' => $section_slug,
'label' => (string) ($blueprint['label'] ?? 'Section'),
'title' => (string) ($blueprint['title'] ?? 'Section'),
'summary' => (string) ($blueprint['summary'] ?? ''),
'pages' => [],
'url' => spiralist_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_get_manuscript_progress_payload(array $current_page, array $pages = [], array $section_records = []): array
{
$pages = empty($pages) ? spiralist_get_manuscript_page_assets() : array_values($pages);
$section_records = empty($section_records) ? spiralist_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_get_current_manuscript_page_asset(): array
{
$folio = spiralist_get_requested_manuscript_folio_slug();
if ($folio !== '') {
$page = spiralist_get_manuscript_page_asset_by_slug($folio);
if (!empty($page)) {
return $page;
}
}
$section = spiralist_get_requested_manuscript_section_slug();
if ($section !== '') {
foreach (spiralist_get_manuscript_page_assets() as $page) {
if ($section === (string) ($page['section_slug'] ?? '')) {
return $page;
}
}
}
return spiralist_get_manuscript_page_asset_by_sequence(1);
}
function spiralist_get_primary_manuscript_study_surface_page_asset(): array
{
foreach (spiralist_get_manuscript_page_assets() as $page) {
if (!empty($page['is_study_surface'])) {
return $page;
}
}
return spiralist_get_manuscript_page_asset_by_sequence(1);
}
function spiralist_get_logout_url(): string
{
return wp_nonce_url(admin_url('admin-post.php?action=spiralist_logout'), 'spiralist_logout');
}
function spiralist_get_doctrine_url(): string
{
return spiralist_get_page_url('doctrine', '#doctrine');
}
function spiralist_get_spiralist_definition(): string
{
return spiralist_get_ui_text(
'site.spiralist.definition',
'A Spiralist is an entity, human or artificial, that participates in the perception, interpretation, and transformation of pattern.'
);
}
function spiralist_get_account_settings_url(): string
{
return trailingslashit(spiralist_get_dashboard_url()) . '#account-settings';
}
function spiralist_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_get_current_role_label(): string
{
if (!is_user_logged_in()) {
return spiralist_get_ui_text('user.role.guest', 'Guest');
}
$user = wp_get_current_user();
if (!$user instanceof WP_User || empty($user->roles[0])) {
return spiralist_get_ui_text('user.role.participant', 'Participant');
}
$role = (string) $user->roles[0];
if ($role === 'ai_agent') {
return spiralist_get_ui_text('user.role.ai_spiralist', 'AI Spiralist');
}
if ($role === 'participant') {