OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

wiki.php

7 KB
<?php
if (!defined('ABSPATH')) {
    exit;
}

$base_url = remove_query_arg(['opennit_topic', 'opennit_page'], get_permalink());
$topic_id = $topic_id ?? 0;
?>
<div class="opennit-wiki">

<?php if ($mode === 'index'): ?>

    <?php if (empty($topics)): ?>
        <p class="opennit-wiki-empty"><?= esc_html($text_wiki_empty) ?></p>
    <?php else: ?>
        <div class="opennit-wiki-topics-grid">
            <?php
            $root_ids = array_column($topics, 'id');
            foreach ($topics as $topic):
                $parent_in_list = in_array((int)($topic['parent_id'] ?? -1), $root_ids, true)
                                  && $topic['parent_id'] !== null;
                if ($parent_in_list) continue;
            ?>
            <a href="<?= esc_url(add_query_arg('opennit_topic', (int)$topic['id'], $base_url)) ?>"
               class="opennit-wiki-topic-card">
                <?php if (!empty($topic['image_url'])): ?>
                <span class="opennit-wiki-topic-img">
                    <img src="<?= esc_url($topic['image_url']) ?>" alt="" loading="lazy">
                </span>
                <?php else: ?>
                <span class="opennit-wiki-topic-icon">📄</span>
                <?php endif; ?>
                <span class="opennit-wiki-topic-name"><?= esc_html($topic['name']) ?></span>
                <?php if (!empty($topic['breadcrumb']) && strpos($topic['breadcrumb'], ' > ') !== false): ?>
                <span class="opennit-wiki-topic-breadcrumb"><?= esc_html($topic['breadcrumb']) ?></span>
                <?php endif; ?>
            </a>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

<?php elseif ($mode === 'topic'): ?>

    <?php
    $t_id       = (int)($topic_data['topic_id'] ?? 0);
    $topic_name = $topic_data['topic_name'] ?? '';
    $breadcrumb = $topic_data['breadcrumb'] ?? $topic_name;
    $cover_img  = $topic_data['image_url']  ?? '';
    // Only direct pages of this topic (not pages from sub-topics)
    $pages = array_values(array_filter(
        $topic_data['pages'] ?? [],
        fn($p) => (int)($p['topic_id'] ?? 0) === $t_id
    ));
    ?>

    <?php $at_root = ($root_topic_id > 0 && $t_id === $root_topic_id); ?>
    <?php if (!$at_root): ?>
    <nav class="opennit-wiki-nav">
        <a href="<?= esc_url($base_url) ?>" class="opennit-wiki-back">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg>
            <?= esc_html($text_wiki_back_label) ?>
        </a>
        <?php foreach (explode(' > ', $breadcrumb) as $bc_part): ?>
        <span class="opennit-wiki-bc-sep">›</span>
        <span class="opennit-wiki-bc-part"><?= esc_html($bc_part) ?></span>
        <?php endforeach; ?>
    </nav>
    <?php endif; ?>

    <h2 class="opennit-wiki-topic-title"><?= esc_html($topic_name) ?></h2>

    <?php if (!empty($sub_topics)): ?>
    <div class="opennit-wiki-subtopics">
        <h3 class="opennit-wiki-section-label"><?= esc_html($text_wiki_subtopics_label) ?></h3>
        <div class="opennit-wiki-topics-grid">
            <?php foreach ($sub_topics as $sub): ?>
            <a href="<?= esc_url(add_query_arg('opennit_topic', (int)$sub['id'], $base_url)) ?>"
               class="opennit-wiki-topic-card">
                <?php if (!empty($sub['image_url'])): ?>
                <span class="opennit-wiki-topic-img">
                    <img src="<?= esc_url($sub['image_url']) ?>" alt="" loading="lazy">
                </span>
                <?php else: ?>
                <span class="opennit-wiki-topic-icon">📁</span>
                <?php endif; ?>
                <span class="opennit-wiki-topic-name"><?= esc_html($sub['name']) ?></span>
            </a>
            <?php endforeach; ?>
        </div>
    </div>
    <?php endif; ?>

    <?php if (!empty($pages)): ?>
        <?php if (!empty($sub_topics)): ?>
        <h3 class="opennit-wiki-section-label" style="margin-top:1.5rem;"><?= esc_html($text_wiki_pages_label) ?></h3>
        <?php endif; ?>
        <div class="opennit-wiki-page-list">
            <?php foreach ($pages as $page): ?>
            <a href="<?= esc_url(add_query_arg(['opennit_topic' => $t_id, 'opennit_page' => (int)$page['id']], $base_url)) ?>"
               class="opennit-wiki-page-card">
                <span class="opennit-wiki-page-card-title"><?= esc_html($page['title']) ?></span>
                <?php if (!empty($page['updated_at'])): ?>
                <span class="opennit-wiki-page-card-date"><?= esc_html(date_i18n(get_option('date_format'), strtotime($page['updated_at']))) ?></span>
                <?php endif; ?>
                <svg class="opennit-wiki-page-card-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="9 18 15 12 9 6"/></svg>
            </a>
            <?php endforeach; ?>
        </div>
    <?php elseif (empty($sub_topics)): ?>
        <p class="opennit-wiki-empty"><?= esc_html($text_wiki_no_pages) ?></p>
    <?php endif; ?>

<?php elseif ($mode === 'page' && $current_page !== null): ?>

    <?php
    $t_id       = (int)($topic_data['topic_id'] ?? 0);
    $topic_name = $topic_data['topic_name'] ?? '';
    $breadcrumb = $topic_data['breadcrumb'] ?? $topic_name;
    $topic_url  = add_query_arg('opennit_topic', $t_id, $base_url);
    ?>

    <nav class="opennit-wiki-nav">
        <a href="<?= esc_url($base_url) ?>" class="opennit-wiki-back">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg>
            <?= esc_html($text_wiki_back_label) ?>
        </a>
        <?php foreach (explode(' > ', $breadcrumb) as $bc_part): ?>
        <span class="opennit-wiki-bc-sep">›</span>
        <a href="<?= esc_url($topic_url) ?>" class="opennit-wiki-bc-part opennit-wiki-bc-link"><?= esc_html($bc_part) ?></a>
        <?php endforeach; ?>
        <span class="opennit-wiki-bc-sep">›</span>
        <span class="opennit-wiki-bc-part opennit-wiki-bc-current"><?= esc_html($current_page['title']) ?></span>
    </nav>

    <article class="opennit-wiki-page--full">
        <h2 class="opennit-wiki-page-title"><?= esc_html($current_page['title']) ?></h2>
        <div class="opennit-wiki-page-content">
            <?= wp_kses_post($current_page['content_html'] ?? '') ?>
        </div>
        <?php if (!empty($current_page['updated_at'])): ?>
        <div class="opennit-wiki-page-meta">
            Zuletzt aktualisiert: <?= esc_html(date_i18n(get_option('date_format'), strtotime($current_page['updated_at']))) ?>
        </div>
        <?php endif; ?>
    </article>

<?php endif; ?>

</div>