| 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 : /test2.famaresto/ |
Upload File : |
<?php
header('Content-Type: text/html; charset=utf-8');
$homeFile = __DIR__ . '/data/home.json';
$home = [
'wifi' => [],
'teams' => [],
'quick_links' => [],
];
if (is_file($homeFile)) {
$raw = @file_get_contents($homeFile);
$j = json_decode($raw ?: '', true);
if (is_array($j)) $home = array_merge($home, $j);
}
function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }
function safe_href($href){
$href = trim((string)$href);
if ($href === '') return '#';
if (preg_match('~^\s*javascript:~i', $href)) return '#';
return $href;
}
?><!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="index,follow">
<title>ISEZ-ADM - Strona główna</title>
<style>
<?php
// Minimalnie: możesz wkleić tu swój styl z index.html. Zostawiam najważniejsze + search + kafelki.
?>
body{background-color:#f0f0df;font-family: Verdana, Arial, Helvetica, sans-serif;font-size:10pt;color:black;margin:0;padding:0;box-sizing:border-box;}
.top-menu-bar{background:#D6D3C0;padding:12px 0;text-align:center;margin-bottom:25px;width:100%;}
.top-menu-bar a{margin:0 8px;color:#3c001e;text-decoration:none;font-family:Arial,Helvetica,sans-serif;font-size:17px;font-weight:bold;}
.top-menu-bar a:hover{text-decoration:underline;color:green;}
.container{max-width:1100px;margin:0 auto;padding:0 15px 30px 15px;}
.english-link{text-align:right;margin:20px 15px 10px 0;}
.english-link a{color:blue;font-size:20px;font-weight:bold;text-decoration:none;display:inline-flex;align-items:center;gap:10px;}
.english-link a:hover{text-decoration:underline;}
.english-link img{width:45px;height:21px;}
.quick-search{background:#f8f8f0;border:1px solid #D8D0B1;border-radius:10px;padding:14px;margin:10px 10px 20px 10px;box-shadow:0 2px 5px rgba(0,0,0,0.06);}
.quick-search form{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.quick-search input[type="search"]{flex:1;min-width:260px;padding:10px 12px;border-radius:10px;border:1px solid #c5c2b0;font-size:14px;}
.quick-search button{padding:10px 14px;border-radius:10px;border:1px solid #186D25;background:#186D25;color:#fff;cursor:pointer;font-size:16px;font-weight:bold;}
.quick-search button:hover{opacity:.9;}
.quick-search-hint{margin-top:8px;font-size:12px;color:#3c001e;opacity:.85;}
.qs-results{margin-top:10px;background:#fff;border:1px solid #D8D0B1;border-radius:10px;overflow:hidden;}
.qs-item{display:flex;justify-content:space-between;gap:10px;padding:10px 12px;border-top:1px solid #eee;text-decoration:none;color:#3c001e;font-size:14px;}
.qs-item:first-child{border-top:none;}
.qs-item:hover{background:#f6f6ee;}
.qs-left{display:flex;flex-direction:column;gap:3px;}
.qs-title{font-weight:bold;}
.qs-meta{font-size:12px;opacity:.75;color:#333;}
.qs-badges{display:flex;gap:6px;align-items:flex-start;white-space:nowrap;}
.qs-badge{font-size:11px;padding:3px 8px;border-radius:999px;background:#D6D3C0;color:#3c001e;border:1px solid #c5c2b0;}
.qs-footer{margin-top:8px;text-align:right;font-size:12px;}
.qs-footer a{color:#0E5C93;text-decoration:none;}
.qs-footer a:hover{text-decoration:underline;}
.info-box{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:30px;padding:0 10px;}
.info-item{flex:1;min-width:300px;background:#f8f8f0;padding:20px;border-radius:8px;border:1px solid #D8D0B1;box-shadow:0 2px 5px rgba(0,0,0,0.1);}
.info-item-title{font-family:Arial,Helvetica,sans-serif;font-size:16px;font-weight:bold;color:#3c001e;margin-bottom:15px;text-align:center;padding-bottom:8px;border-bottom:2px solid #D8D0B1;}
.info-item-content{font-size:14px;color:#0E5C93;line-height:1.6;}
.section-box{background:#b5cecc;padding:18px;margin:18px 0;text-align:center;border-radius:8px;transition:all .3s ease;border:1px solid #9cb9b7;box-shadow:0 2px 4px rgba(0,0,0,0.1);}
.section-box:hover{background:#a0bdbc;transform:translateY(-3px);box-shadow:0 4px 8px rgba(0,0,0,0.15);}
.section-box a{text-decoration:none;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:15px;font-weight:bold;color:#9F0A05;display:block;}
.section-box a:hover{color:#7D0804;text-decoration:underline;}
@media (max-width: 768px){.info-item{min-width:100%;}.top-menu-bar a{font-size:16px;}}
@media (max-width: 600px){.top-menu-bar a{display:block;margin:10px 0;font-size:15px;}.english-link{text-align:center;margin:15px 0;}}
</style>
</head>
<body>
<div class="top-menu-bar">
<a href="/index.php">Home</a> -
<a href="/szukaj/">Szukaj</a> -
<a href="/adm/adm.htm">Administracyjne</a> -
<a href="/scientia/scientia.htm">Scientia</a> -
<a href="/granty/granty.htm">Granty</a> -
<a href="/zbiory/zbiory.htm">Dział Zbiorów</a> -
<a href="/doktoranckie/doktoranckie.html">Doktoranckie</a> -
<a href="/media/media.html">Media</a> -
<a href="/siec/siec.htm">Sieć</a> -
<a href="/czas-pracy.html">Czas pracy</a>
</div>
<div class="container">
<div class="english-link">
<a href="./en/documents-en.html">Documents in English <img src="images/UK_flag.jpg" alt="UK Flag"></a>
</div>
<!-- Live search on home -->
<div class="quick-search" id="qs">
<form id="qsForm" action="/szukaj/" method="get" accept-charset="utf-8" autocomplete="off">
<input id="qsInput" type="search" name="q" placeholder="Szukaj dokumentu (np. regulamin, bhp, urlop...)" aria-label="Szukaj dokumentu">
<button type="submit" title="Szukaj">🔎</button>
</form>
<div id="qsHint" class="quick-search-hint">Ładowanie indeksu…</div>
<div id="qsResults" class="qs-results" hidden></div>
<div class="qs-footer" id="qsFooter" hidden><a id="qsMore" href="/szukaj/">Pokaż wszystkie wyniki w wyszukiwarce</a></div>
</div>
<div class="info-box">
<div class="info-item">
<div class="info-item-title">WiFi - hasła dostępu</div>
<div class="info-item-content">
<?php foreach (($home['wifi'] ?? []) as $row): ?>
<strong><?= h($row['label'] ?? '') ?>:</strong> <?= h($row['value'] ?? '') ?><br>
<?php endforeach; ?>
</div>
</div>
<div class="info-item">
<div class="info-item-title">Teams - Sala Konferencyjna<br>Dane do logowania</div>
<div class="info-item-content">
<?php foreach (($home['teams'] ?? []) as $row): ?>
<strong><?= h($row['label'] ?? '') ?>:</strong> <?= h($row['value'] ?? '') ?><br>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="info-section">
<?php foreach (($home['quick_links'] ?? []) as $ln): ?>
<div class="section-box"><a href="<?= h(safe_href($ln['href'] ?? '')) ?>"><?= h($ln['title'] ?? '') ?></a></div>
<?php endforeach; ?>
</div>
</div>
<script>
(function(){
const form = document.getElementById('qsForm');
const input = document.getElementById('qsInput');
const hint = document.getElementById('qsHint');
const box = document.getElementById('qsResults');
const footer= document.getElementById('qsFooter');
const more = document.getElementById('qsMore');
if(!form || !input || !hint || !box) return;
form.addEventListener('submit', function(e){ e.preventDefault(); });
let docs = []; let ready = false;
function norm(s){
s = (s||'').toString().toLowerCase();
const map = {'ą':'a','ć':'c','ę':'e','ł':'l','ń':'n','ó':'o','ś':'s','ż':'z','ź':'z'};
s = s.replace(/[ąćęłńóśżź]/g, ch => map[ch] || ch);
return s.replace(/\s+/g,' ').trim();
}
function escapeHtml(str){
return (str||'').replace(/[&<>"']/g, m => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]));
}
function render(q){
const nq = norm(q);
box.innerHTML=''; footer.hidden=true;
if(!ready){ box.hidden=true; hint.textContent='Ładowanie indeksu…'; return; }
if(nq.length<2){ box.hidden=true; hint.textContent='Wpisz min. 2 znaki, aby zobaczyć wyniki.'; return; }
const matches=[];
for(let i=0;i<docs.length;i++){
const d=docs[i];
if(d._nTitle.includes(nq)){ matches.push(d); if(matches.length>=30) break; }
}
if(matches.length===0){ box.hidden=true; hint.textContent='Brak wyników. Spróbuj innego słowa.'; return; }
hint.textContent='Znaleziono: '+matches.length+' (pokazuję max 30).';
box.innerHTML = matches.map(d=>{
const title=escapeHtml(d.title);
const rel=escapeHtml(d.rel||'');
const sec=escapeHtml(d.section||'');
const ext=escapeHtml((d.ext||'').toUpperCase());
return `
<a class="qs-item" href="${d.url}" target="_blank" rel="noopener">
<div class="qs-left">
<div class="qs-title">${title}</div>
<div class="qs-meta">${rel}</div>
</div>
<div class="qs-badges">
${sec?`<span class="qs-badge">${sec}</span>`:''}
${ext?`<span class="qs-badge">${ext}</span>`:''}
</div>
</a>`;
}).join('');
box.hidden=false;
more.href='/szukaj/?q='+encodeURIComponent(q);
footer.hidden=false;
}
let t=null;
input.addEventListener('input', function(){ clearTimeout(t); t=setTimeout(()=>render(input.value), 120); });
fetch('/szukaj/api.php?ts='+Date.now(), {cache:'no-store'})
.then(r=>r.json())
.then(data=>{
docs = Array.isArray(data.docs)?data.docs:[];
for(const d of docs){ d._nTitle = norm(d.title); }
ready=true;
hint.textContent='Wpisz min. 2 znaki, aby zobaczyć wyniki.';
if(input.value.trim()) render(input.value);
})
.catch(()=>{
ready=false; box.hidden=true;
hint.innerHTML='Nie udało się pobrać indeksu. Użyj <a href="/szukaj/">wyszukiwarki dokumentów</a>.';
});
})();
</script>
</body>
</html>