Články se štítkem ' . $stitek . '
- ' . _htmlnl;
foreach ($pole_stitku as $key => $val) {
$spage = $spage . '
- ' . $key . ' '; } $spage .= '
= 4.3.0
*/
define("VERSION_MAJOR", "1");
define("VERSION_MINOR", "1");
define("VERSION_GIT", "65");
// Definice vytvářených adresářů pro ukládání dat.
// Zde jsou uloženy texty, ze kterých je generováno HTML
define("TXT", "./txt");
// Zde jsou uloženy datové soubory, cokoliv binárního mimo obrázků
define("DAT", "./dat");
// Zde jsou uloženy obrázky
define("IMG", "./img");
// Zde jsou uloženy zálohy upravovaných textů z adresáře TXT
define("BKP", "./bkp");
// Zde jsou uložena data generovaná z obsahu stránek - štítky,...
define("TDB", "./tdb");
// Zde jsou uloženy vygenerované kalendáře ve formátu iCAL
define("CAL", "./cal");
// Zde jsou generovány HTML soubory (standardně kořenový adresář)
define("HTM", "./");
// Definice hashe/hesla pro přegenerování stránek např. z CRONu atp.
// toto heslo neumožňuje jakkoliv měnit data, pouze spustí přegenerování
// HTML souborů
define("CRONSHA","8e534152e86891617d36a44e4878d078dea38533");
// Definice maximálního počtu stránek v menu s danou váhou
define("MAXPGSPERWEIGHT", 100);
define("IS_CRON_PRESENT", isset($_GET["CRON"]));
define("IS_UPLOAD_PRESENT", isset($_POST["upload_file"]));
// Definice textů
define("LOGTO", "Přihlášení do redakčního systému μCMS");
define("ENTERPASS", "Zadejte heslo:");
define("LOGFAIL", "Přihlášení se bohužel nezdařilo. Zkuste zadat heslo znovu.");
define("HASHPASS", "Pro změnu hesla využijte následující řetězec se zašifrovaným heslem:
");
define("LOGOUT", "Odhlásit se");
define("DEL", "Smazat");
define("STITKY", "Štítky:");
define("EXSTITKY", "Existující štítky:");
define("TEXT", "Text:");
define("STRANKU", "Stránku (soubor) ");
define("NAHRANSOUBOR", "Nahrán soubor ");
define("SOUBOR", " Vyberte soubor na disku: ");
define("NEBO", " nebo ");
define("SAVE", "Uložení změn, generování stránek");
define("UPDCRT", "Jen uložit či vytvořit stránku");
define("CLEAR", "Vyčistit");
define("DEFINICE", "Definice:");
define("ULOGOUT", "Byli jste odhlášeni!");
define("FASESS", "FATAL ERROR: Can't terminate session!");
define("FAODIR", "FATAL ERROR: Can't open directory: ");
define("FACDIR", "FATAL ERROR: Can't create directory: ");
define("FACFILE", "FATAL ERROR: Can't create file: ");
define("FAWDIR", "FATAL ERROR: Can't write to directory: ");
define("PTFM", "Please try to fix this manually (e.g. using FTP client).");
define("FRDIR", "Fixed rights for writing to directory: ");
define("CDIR", "Automaticky vytvořen adresář: ");
define("NOTLOG", "Not logged in or login not valid! Please log in!");
define("IPCHANGE", "Vaše IP adresa se změnila, z bezpečnostních důvodů se, prosím, přihlašte se znovu!");
define("TIMEXC", "Z důvodu dlouhé neaktivity jste byli odhlášeni, prosím, přihlašte se znovu!");
define("LOAD", "Nahrát");
define("MANDATORY_FILE_NAME", "Název souboru [povinný]:");
define("NS", "Titulek stránky:");
define("MENU", "Název položky v menu:");
define("DATUM", "Datum vytvoření článku:");
define("VAHA", "Váha (v menu):");
define("NADS", "Nadřazený soubor (v menu):");
//define("NAV", "
Name in menu:\n Menu weight:\n Parent menu:\n Page title:\n Date:\n Body:"); define("LOWERCASE", "Název souboru se může skládat jen z malých písmen a-z (bez diakritiky), čísel a rozdělovníků (-), musí být vyplněn."); define("GENERATE", "Uložit stránku + Vygenerovat obsah stránek"); define("GENERATED", "HTML stránky vygenerovány. "); define("DELETED", "File was successfully deleted (moved to bkp dir)!"); define("CANTWRITE", "Can't save the file, check permissions (directory/upload size iin PHP, web server, MAX_FILE_SIZE in this form)."); define("CANTDEL", "Can't delete the file, check permissions."); define("FILESAVED", "Obsah byl uložen do souboru "); define("SHOW", "Zobrazit "); define("MOT", "Menu on top"); define("MOL", "Menu on left"); define("UPLOADFILE", "nahrát jako datový soubor"); define("UPLOADIMG", "nahrát jako obrázek"); define("UPLOADED", " was uploaded."); define("SHOWIMG", "Obrázky"); define("SHOWDAT", "Datové soubory"); define("FILELISTED", "Seznam datových souborů resp. obrázků byl vygenerován dole na stránce."); define("CHECK", "Kontrola integrity μCMS"); define("DEFAULTCSS", "Vrat CSS do vychoziho stavu"); define("CHECKFINISHED", "Kontrola integrity μCMS provedena."); define("CSSDEFAULTED", "CSS obnoveno do vychoziho stavu."); define("MANAGECSS", "Spravuj CSS"); define("LOGO", "μCMS".VERSION_MAJOR.".".VERSION_MINOR.".".VERSION_GIT.""); // PHP konfigurace - kvůli hloupoučkému iconv setlocale(LC_CTYPE, 'cs_CZ.UTF-8'); define("_cb", ''); define("_nl", "
Name in menu:\n Menu weight:\n Parent menu:\n Page title:\n Date:\n Body:"); //define("LOWERCASE", "Název souboru se může skládat jen z malých písmen a-z (bez diakritiky), čísel a rozdělovníků (-), musí být vyplněn."); //define("GENERATE", "Uložit stránku + Vygenerovat obsah stránek"); //define("GENERATED", "HTML stránky vygenerovány. "); //define("DELETED", "File was successfully deleted (moved to bkp dir)!"); //define("CANTWRITE", "Can't save the file, check permissions (directory/upload size iin PHP, web server, MAX_FILE_SIZE in this form)."); //define("CANTDEL", "Can't delete the file, check permissions."); //define("FILESAVED", "Obsah byl uložen do souboru "); //define("MOT", "Menu on top"); //define("MOL", "Menu on left"); //define("UPLOADFILE", "nahrát jako datový soubor"); //define("UPLOADIMG", "nahrát jako obrázek"); //define("UPLOADED", " was uploaded."); //define("SHOWIMG", "Obrázky"); //define("SHOWDAT", "Datové soubory"); //define("FILELISTED", "Seznam datových souborů resp. obrázků byl vygenerován dole na stránce."); //define("CHECK", "Kontrola integrity μCMS"); //define("MANAGECSS", "Spravuj CSS"); //define("CHECKFINISHED", "Kontrola integrity μCMS provedena."); //define("CSSDEFAULTED", "CSS obnoveno do vychoziho stavu."); // //// PHP konfigurace - kvůli hloupoučkému iconv //setlocale(LC_CTYPE, 'cs_CZ.UTF-8'); //define("_cb", ''); //define("_nl", "
\2
', "/^\s*$/" => '\2
'); // $simple_replace[] = array("/^\s*$/" => '', $line) != $line) {
$line = str_replace('{{{', '', $line);
$pr = 1;
} else {
if ($pr === 1 && str_replace('}}}', '
', $line) != $line) {
$line = str_replace('}}}', '
', $line);
$pr = 0;
} else {
if ($pr == 0) {
if (preg_replace('/^ \*/', '', $line); $line = preg_replace('/\|\|\s*$/', ' | ', $line); } else { if ($tb === 1) { $line = preg_replace('/^\|\|/', ' |
', $line); $line = preg_replace('/\|\|\s*$/', ' | ', $line); } } } else { if ($tb === 1) { $line = " |
"; print_r($msg); echo ""; } /** * @param $filename * @return string */ function loadAndCleanFile($filename) { if (file_exists(TXT.'/'.$filename)) { return implode(wiki2html(clean_headers($filename), array())); } return ''; } /** * Pri zavolani uCMS s GET parametrem "VERSION" bude vracena aktualni verze uCMS a ukoncen chod app. */ if (isset($_GET["VERSION"])) { $tmp = array(); $tmp["VERSION_MAJOR"] = VERSION_MAJOR; $tmp["VERSION_MINOR"] = VERSION_MINOR; $tmp["VERSION_GIT"] = VERSION_GIT; echo json_encode($tmp); exit; } /** * Uvodni natazeni souboru index, kdyz jsem prihlasen a neposilam zadny paramtery - * napr. pri vynucenem reloadu. */ function firstLoad(){ session_start(); $_SESSION["auth"] = "admin"; $_SESSION["ip"] = $_SERVER['REMOTE_ADDR']; $_SESSION["time"] = time(); header("Cache-control: private"); htmlHead(); if (self_check()) { $file = 'index'; $text["headers"] = text_headers($file.'.txt'); $text["data"] = clean_headers($file.'.txt'); text_form(NAHRANSOUBOR.$file.". ".SHOW."$file.html.", $text); } htmlFooter(); exit; } /** * Funkce generující slovo vyskloňovaného měsíce * @param int 1-12 * @return string */ function mesic($month) { static $mesice = array(1 => 'ledna', 'února', 'března', 'dubna', 'května', 'června', 'červenece', 'srpna', 'září', 'října', 'listopadu', 'prosince'); return $mesice[$month]; } // Následující řádek začínající define("SHA","..."); obsahuje zašifrované heslo (hash). // Dlouhý řeťezec mezi závorkami (v příkladu nahoře tečky) je třeba nahradit // tím, které se vygeneruje při přihlášení do μCMS. define("SHA", "82c1720eb8199e070e684587d4b1fdb47a9fcf30"); /** * second round of login - credentials are already filled in, check them */ if (isset($_POST["login"]) || (!$_POST && !$_GET)) { if (sha1($_POST["pass"]) === SHA) { firstLoad(); } if (!$_POST && !$_GET && isLogged()) { firstLoad(); } sleep(4); // ????? htmlHead(); //login_form(); // pre_print($_POST); echo '
' . LOGFAIL . _nl; gen_hash($_POST["pass"]); echo '
'; htmlFooter(); exit; } if (isset($_POST["logout"])) { session_start(); destroy_session(ULOGOUT); exit(); } /** * Flag, ktery rika, zda uz probehlo zpracovani $_POST pozadavku. Pokud ne, je na konci generovan login form. * TODO - prosim o dokumentaci kazde jednotlive sekce :D */ $PROCESSED = FALSE; /** * Vypise seznam souboru v danem adresari/podadresari * * @param {string} $folder - adresar, kde se bude hledat seznam souboru * @param {string} $subfolder - podadresar, kde se bude hledat * @param {string} $pseudoTag - pseudotag, ktery bude generovan (napr. "dat" => [dat:jmeno_souboru_z_adresare]) */ function outputListOfFiles($folder, $subfolder, $pseudoTag) { check_session(); htmlHead(); text_form(FILELISTED, post2arr()); $content = dir2arr($folder . '/' . $subfolder, 'FILE'); $prepend = ($subfolder !== '.') ? $subfolder . "/" : ""; foreach ($content as $file) { echo "[" . $pseudoTag . ":" . $prepend . $file . "]" . _nl; } } /** * Vypise seznam priloh */ if (isset($_POST["dat_list"]) && isPathValid($_POST["dat_dir_list"])) { outputListOfFiles(DAT, $_POST["dat_dir_list"], 'dat'); $PROCESSED = TRUE; } /** * Vypise seznam obrazku */ if (isset($_POST["img_list"]) && isPathValid($_POST["img_dir_list"])) { outputListOfFiles(IMG, $_POST["img_dir_list"], 'img'); $PROCESSED = TRUE; } /** * Nahraje vybrany soubor */ if (isset($_POST["load"])) { check_session(); htmlHead(); if (!isFilenameValid($_POST["file_list"])) { text_form(LOWERCASE, post2arr()); } else { $filetxt = $_POST["file_list"] . '.txt'; $data["headers"] = text_headers($filetxt); $data["data"] = clean_headers($filetxt); text_form(NAHRANSOUBOR . $_POST["file_list"] . ".", $data); } $PROCESSED = TRUE; } /** * Ulozi ci vytvori stranku */ if (isset($_POST["update"])) { check_session(); htmlHead(); // pre_print($_POST); if (!isFilenameValid($_POST["soubor"])) { text_form(LOWERCASE, post2arr()); } else { text_form(arr2disk(post2arr()), post2arr()); } $PROCESSED = TRUE; } if (isset($_POST["clear"])) { check_session(); htmlHead(); $data["data"][0] = "= [def:titulek] =\n\nVytvořeno: ''[def:datum]''\n\nAktualizováno: ''[def:aktualizace]''\n\n[stitky]"; $data["headers"]["soubor"] = ""; $data["headers"]["titulek"] = ""; $data["headers"]["rodic"] = ""; $data["headers"]["vaha"] = ""; $data["headers"]["menu"] = ""; $data["headers"]["stitky"] = ""; $data["headers"]["datum"] = date('d.m.Y'); text_form('', $data); $PROCESSED = TRUE; } if (isset($_POST["check"])) { check_session(); htmlHead(); self_check(); text_form(CHECKFINISHED, post2arr()); $PROCESSED = TRUE; } if (isset($_POST["delete"])) { check_session(); htmlHead(); $file = TXT . '/' . $_POST["file_list"] . '.txt'; $bkp = BKP . '/' . $_POST["file_list"] . '.bak'; $htm = HTM . '/' . $_POST["file_list"] . '.html'; $bhtm = BKP . '/' . $_POST["file_list"] . '.html'; $DELETED = FALSE; if (rename($file, $bkp)) { //clean the html (without testing) rename($htm, $bhtm); $DELETED = TRUE; } text_form($DELETED ? DELETED : CANTDEL, post2arr()); $PROCESSED = TRUE; } /** * Nahraje obrazek nebo datovy soubor. * Obrazek je nahran do podslozky ktera odpovida aktualni strance. */ if (IS_UPLOAD_PRESENT || isset($_POST["upload_image"])) { check_session(); htmlHead(); if (IS_UPLOAD_PRESENT) { $upload_dir = DAT; } else { $upload_dir = IMG."/".sanitizePath($_POST["soubor"]); if(is_dir(IMG) && !file_exists($upload_dir) && !mkdir($upload_dir, 0700) && !is_dir($upload_dir)) { throw new \RuntimeException(sprintf('Directory "%s" was not created', $upload_dir)); } } $FILE_NAME = $_FILES['file_uploaded']['name']; $SRC_FILE_NAME = $_FILES['file_uploaded']['tmp_name']; $TARGET_FILE_NAME = $upload_dir . '/' . basename($FILE_NAME); if (is_dir($upload_dir)) { if (move_uploaded_file($SRC_FILE_NAME, $TARGET_FILE_NAME)) { text_form($FILE_NAME . UPLOADED . " [".$upload_dir."]", post2arr()); } else { text_form(CANTWRITE . "- PHP error" . $_FILES['file_uploaded']['error'], post2arr()); } } else { text_form(FAODIR . $upload_dir, post2arr); } $PROCESSED = TRUE; } /** * Vrati nazev stranky ze vstupniho pole. Pokud existuje dany prvek je vracen jako nazevStranky. * Postupuje se v poradi titulek, menu, soubor. * * @param $headers */ function getNazevStranky($headers) { $notMenuValue = $headers["menu"] ?: $headers["soubor"]; return $headers["titulek"] ?: $notMenuValue; } /** * GENEROVANI OBSAHU WEBU */ if (isset($_POST["generate"]) || IS_CRON_PRESENT) { // pokud jsme volani pomoci GET parametru CRON a zvlastniho hesla pouze za ucelem pregenerovani webu // musime heslo zkontrolovat a nasledne potlacit nektere vystupy if (IS_CRON_PRESENT) { if (sha1($_GET["CRON"]) !== CRONSHA) { sleep(4); // TODO clarify sleep die (LOGFAIL); } echo GENERATED; } else { check_session(); htmlHead(); //nejprve ulozime if (!isFilenameValid($_POST["soubor"])) { $save_mess = LOWERCASE; } else { $save_mess = arr2disk(post2arr()); } $err_mess = ''; } //Načteme hlavičku stránek ze souboru header.txt $header = loadAndCleanFile('header.txt'); //Načteme patičku stránek ze souboru footer.txt $footer = ' '; $text = array(); $stitky = array(); foreach (dir2arr(TXT, 'FILE') as $filenum => $filetxt) { $file = preg_replace('/.txt$/', '', $filetxt); $text[$file]["filename"] = $filetxt; $text[$file]["headers"] = text_headers($filetxt); $text[$file]["data"] = clean_headers($filetxt); //Generování pole se štítky foreach (explode('#', $text[$file]["headers"]["stitky"]) as $stitek) { $nazev = getNazevStranky($text[$file]["headers"]); if (!empty($stitek)) { $stitky[$stitek][$nazev] = $text[$file]["headers"]["soubor"]; } } // Nastavení váhy článku v menu if (is_numeric($text[$file]["headers"]["vaha"])) { $weight = MAXPGSPERWEIGHT * $text[$file]["headers"]["vaha"] + $filenum; } else { $weight = $filenum; } // Určení rodiče v menu (pokud není, je rodičem 'main' if ($text[$file]["headers"]["rodic"] == '') { $menu["main"][$weight] = $file; } else { $menu[$text[$file]["headers"]["rodic"]][$weight] = $file; } } $menu_html = ''; //rekurzivni funkce na generovani menu gen_html_menu($menu, $text, 'main', $menu_html); //generování štítků a stránek štítků if (!empty($stitky)) { ksort($stitky); $page = ''; $sumpage = '