From 0ec0fda566ba1f57d5eeabff41142fbae581e772 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Fri, 14 Jan 2022 11:52:46 +0100 Subject: [PATCH] Make the old code compatible with modern PHP --- lob2011/imagelightnessat.func.php | 2 +- lob2011/index.php | 4 +- lob2011/load.lib.php | 350 +++++++++++++++------------ lob2011/sboard.php | 50 ++-- mainkrk.php | 84 ++++--- pages/krk_topmenu.php | 2 +- pages/mcr_2009/rozpis_cz.php | 2 +- pages/mcr_2009/rozpis_rog2009-de.php | 1 - print.php | 30 ++- 9 files changed, 283 insertions(+), 242 deletions(-) diff --git a/lob2011/imagelightnessat.func.php b/lob2011/imagelightnessat.func.php index 8e9ef25..9192249 100644 --- a/lob2011/imagelightnessat.func.php +++ b/lob2011/imagelightnessat.func.php @@ -13,7 +13,7 @@ declare(strict_types=1); * by Jed Smith ", $u, $u, $d) ?> */ function imagelightnessat($img, $x, $y) { - if (!is_resource($img)) { + if (!$img instanceof \GdImage && !is_resource($img)) { trigger_error('imagelightnessat(): supplied argument is not a valid ' . 'Image resource', \E_USER_WARNING); diff --git a/lob2011/index.php b/lob2011/index.php index 2ae0600..162f5e9 100644 --- a/lob2011/index.php +++ b/lob2011/index.php @@ -2,7 +2,7 @@ session_start(); $included = true; $lang = empty($_GET['lang']) ? 'cs' : $_GET['lang']; -$page = htmlspecialchars($_GET['page']); +$page = htmlspecialchars($_GET['page'] ?? 'main'); $url = $_SERVER['REQUEST_URI']; $root = '/krk/lob2011'; $pretitle = 'LOB 2011'; @@ -16,7 +16,7 @@ $CMS['%headerLinkHref%'] = rplc('%root%/') . $lang; $CMS['%pretitle%'] = $pretitle; $CMS['%comefrom%'] = $_SERVER['HTTP_REFERER']; $CMS['%dateFormat%'] = 'd.m.Y H:i'; -function rplc($string) { +function rplc(string $string): string { global $CMS; return str_replace(array_keys($CMS), $CMS, $string); diff --git a/lob2011/load.lib.php b/lob2011/load.lib.php index 0cc07b4..8c7a617 100644 --- a/lob2011/load.lib.php +++ b/lob2011/load.lib.php @@ -2,195 +2,228 @@ declare(strict_types=1); -if ($included == true) { - // boolean readPage(string $page) - function readPage($page) {//main function - global $lang,$realPageType,$menuUrl,$article,$title,$author,$date,$time,$menu,$mainMail,$langPanel,$notreleased, $eu; - if (empty($page)) {//page specification - $realPage = 'pages/' . $lang . '/main.pg'; +function isHttps(): bool { + // https://www.designcise.com/web/tutorial/how-to-check-for-https-request-in-php + $isHttps = $_SERVER['HTTPS'] ?? $_SERVER['REQUEST_SCHEME'] ?? $_SERVER['HTTP_X_FORWARDED_PROTO'] ?? null; + + return $isHttps && (strcasecmp('on', $isHttps) === 0 || strcasecmp('https', $isHttps) === 0); +} + +function readPage(string $page): bool { + //main function + $aliases = []; + global $lang,$realPageType,$menuUrl,$article,$title,$author,$date,$time,$menu,$mainMail,$langPanel,$notreleased, $eu; + if (empty($page)) {//page specification + $realPage = 'pages/' . $lang . '/main.pg'; + } else { + if (file_exists('pages/' . $lang . '/' . $page . '.pg')) { + $realPage = 'pages/' . $lang . '/' . $page . '.pg'; } else { - if (file_exists('pages/' . $lang . '/' . $page . '.pg')) { - $realPage = 'pages/' . $lang . '/' . $page . '.pg'; - } else { - $realPage = 'pages/' . $lang . '/error/404.pg'; - $log404 = fopen('404.log', 'a+'); - if (!ereg($page . "\n", file_get_contents('404.log'))) { - fwrite($log404, $page . "\n"); - mail($mainMail, "Stranka nenalezena http://tojnar.cz/krk/lob2011/$page", rplc('Prichozi z: %comefrom%')); - } - fclose($log404); + $realPage = 'pages/' . $lang . '/error/404.pg'; + $log404 = fopen('404.log', 'a+'); + if (!preg_match('(' . preg_quote($page) . '\n)', file_get_contents('404.log'))) { + fwrite($log404, $page . "\n"); + mail($mainMail, "Stranka nenalezena http://www.tojnar.cz/krk/lob2011/$page", rplc('Prichozi z: %comefrom%')); } + fclose($log404); } - //end of page specification - $errPageStart = 'pages/' . $lang . '/error/'; - if (substr($realPage, 0, strlen($errPageStart)) == $errPageStart) {//page type setting - $realPageType = 2; - } elseif ($realPage == 'pages/' . $lang . '/main.pg') { - $realPageType = 1; - } else { - $realPageType = 0; - } - //end of page type setting + } + //end of page specification + $errPageStart = 'pages/' . $lang . '/error/'; + if (substr($realPage, 0, strlen($errPageStart)) == $errPageStart) {//page type setting + $realPageType = 2; + } elseif ($realPage == 'pages/' . $lang . '/main.pg') { + $realPageType = 1; + } else { + $realPageType = 0; + } + //end of page type setting - $fileContent = rplc(file_get_contents($realPage)); - //echo($fileContent); - $fileContent = preg_replace('/]*)hs="([1-9][0-9]?)"([^>]*)>/D', '', $fileContent); - $sbContent = rplc(sboard_generate($realPage)); - $fileContent = str_replace('', $sbContent, $fileContent); + $fileContent = rplc(file_get_contents($realPage)); + //echo($fileContent); + $fileContent = preg_replace('(]*)hs="([1-9][0-9]?)"([^>]*)>)', '', $fileContent); + $sbContent = rplc(sboard_generate($realPage)); + $fileContent = str_replace('', $sbContent, $fileContent); - preg_match("#
(.*)<\/article>#D", $fileContent, $article); //article body + if (preg_match('(
(.*)
)s', $fileContent, $article)) { + //article body $article = trim($article[1]); + } else { + $article = ''; + } - preg_match("#(.*)<\/title>#D", $fileContent, $title); //article title + if (preg_match('(<title>(.*))s', $fileContent, $title)) { + //article title $title = trim($title[1]); + } else { + $title = ''; + } - preg_match("#(.*)<\/date>#D", $fileContent, $date); //article title + if (preg_match('((.*))s', $fileContent, $date)) { + //article release time $date = trim($date[1]); + } else { + $date = null; + } - preg_match("#(.*)<\/author>#D", $fileContent, $author); //article title + if (preg_match('((.*))s', $fileContent, $author)) { + //article author $author = trim($author[1]); + } else { + $author = null; + } - $languages = ['cs', 'en', 'de']; + $languages = ['cs', 'en', 'de']; - preg_match('/]*)cs(e?)="([^"]*)"([^>]*)>/D', $fileContent, $cs); //article czech version link + if (preg_match('(]*)cs(e?)="([^"]*)"([^>]*)>)', $fileContent, $cs)) { + //article czech version link $aliases['cs'] = ($cs[2] == 'e' ? '*' : '') . trim($cs[3]); + } - preg_match('/]*)en(e?)="([^"]*)"([^>]*)>/D', $fileContent, $en); //article english version link + if (preg_match('(]*)en(e?)="([^"]*)"([^>]*)>)', $fileContent, $en)) { + //article english version link $aliases['en'] = ($en[2] == 'e' ? '*' : '') . trim($en[3]); + } - preg_match('/]*)de(e?)="([^"]*)"([^>]*)>/D', $fileContent, $de); //article german version link + if (preg_match('(]*)de(e?)="([^"]*)"([^>]*)>)', $fileContent, $de)) { + //article german version link $aliases['de'] = ($de[2] == 'e' ? '*' : '') . trim($de[3]); + } - preg_match('//D', $fileContent, $menuUrl); //article menu url + if (preg_match('()', $fileContent, $menuUrl)) { + //article menu url $menuUrl = trim($menuUrl[1]); - foreach ($languages as $language) {//language box generator - if (mb_substr($aliases[$language], 0, 1) == '*') { + //language box generator + foreach ($languages as $language) { + if (isset($aliases[$language]) && str_starts_with($aliases[$language], '*')) { $langPanel .= rplc('' . $language . ''); } else { - if (!empty($aliases[$language]) && file_exists('pages/' . $language . '/' . $aliases[$language] . '.pg')) { + if (isset($aliases[$language]) && file_exists('pages/' . $language . '/' . $aliases[$language] . '.pg')) { $langPanel .= rplc('' . $language . ''); } } } //end of language box generator + } else { + $menuUrl = null; + } - //$author=$realPageType==1?"":rplc($author); - /*if($realPageType==0){ - if(empty($date)){ - $date=date(rplc("%dateFormat%"),filemtime($realPage)); - } - } - */ - if (empty($menuUrl) || !file_exists($menuUrl)) { - $menuUrl = 'main'; - } - $menu = rplc(file_get_contents('pages/' . $lang . '/' . $menuUrl . '.mn')); - $article = rplc($article); - if (preg_match('//D', $fileContent, $gotoUrl)) { - if ($page == $gotoUrl[1]) { - $logrecursive = fopen('syntax.log', 'a+'); - if (!ereg($realPage . "\n", file_get_contents('recursive.log'))) { - fwrite($logrecursive, $realPage . "\n"); - mail($mainMail, "Presmerovaci smycka http://tojnar.cz/krk/lob2011/$realPage", 'Stranka se presmerovava sama na sebe'); - } - fclose($logrecursive); - readPage('error/recursive'); - } else { - readPage($gotoUrl[1]); + $author = $realPageType == 1 || $author === null ? '' : rplc($author); + /*if($realPageType==0){ + if(empty($date)){ + $date=date(rplc("%dateFormat%"),filemtime($realPage)); + } + } + */ + if ($menuUrl === null || !file_exists($menuUrl)) { + $menuUrl = 'main'; + } + $menu = rplc(file_get_contents('pages/' . $lang . '/' . $menuUrl . '.mn')); + $article = rplc($article); + if (preg_match('()', $fileContent, $gotoUrl)) { + if ($page == $gotoUrl[1]) { + $logrecursive = fopen('syntax.log', 'a+'); + if (!preg_match('(' . preg_quote($realPage) . '\n)', file_get_contents('recursive.log'))) { + fwrite($logrecursive, $realPage . "\n"); + mail($mainMail, "Presmerovaci smycka https://www.tojnar.cz/krk/lob2011/$realPage", 'Stranka se presmerovava sama na sebe'); } - } - - if (strpos($fileContent, '') != false) { - $eu = true; + fclose($logrecursive); + readPage('error/recursive'); } else { - $eu = false; - } - - if (empty($title) && empty($article)) { - $logsyntax = fopen('syntax.log', 'a+'); - if (!ereg($realPage . "\n", file_get_contents('syntax.log'))) { - fwrite($logsyntax, $realPage . "\n"); - mail($mainMail, "Chyba syntaxe http://tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan titulek a clanek'); - } - fclose($logsyntax); - readPage('error/syntax'); - - return false; - } elseif (empty($title)) { - $logsyntax = fopen('syntax.log', 'a+'); - if (!ereg($realPage . "\n", file_get_contents('syntax.log'))) { - fwrite($logsyntax, $realPage . "\n"); - mail($mainMail, "Chyba syntaxe http://tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan titulek'); - } - fclose($logsyntax); - readPage('error/syntax'); - - return false; - } elseif (empty($article)) { - $logsyntax = fopen('syntax.log', 'a+'); - if (!ereg($realPage . "\n", file_get_contents('syntax.log'))) { - fwrite($logsyntax, $realPage . "\n"); - mail($mainMail, "Chyba syntaxe http://tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan clanek'); - } - fclose($logsyntax); - readPage('error/syntax'); - - return false; - } else { - return true; + readPage($gotoUrl[1]); } } - // string|null author(string $author) - function author($author) { - global $realPageType; - if ($realPageType == 0) { - if (empty($author)) { - return rplc('%unknownAuthor%'); - } else { - return $author; - } - } else { - return null; - } + if (strpos($fileContent, '') != false) { + $eu = true; + } else { + $eu = false; } - // string|null toDate(string $date) - function toDate($dateStr) { - if (!empty($dateStr)) { - $dateStr = explode(' ', $dateStr); - $dateStr = $dateStr[0]; - $dateStr = explode('-', $dateStr); - $year = $dateStr[0]; - $month = ltrim($dateStr[1], '0'); - $day = ltrim($dateStr[2], '0'); - - return str_replace(['%y%', '%m%', '%d%'], [$year, $month, $day], rplc('%date%')); - } else { - return null; + if (empty($title) && empty($article)) { + $logsyntax = fopen('syntax.log', 'a+'); + if (!preg_match('(' . preg_quote($realPage) . '\n)', file_get_contents('syntax.log'))) { + fwrite($logsyntax, $realPage . "\n"); + mail($mainMail, "Chyba syntaxe https://www.tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan titulek a clanek'); } - } + fclose($logsyntax); + readPage('error/syntax'); - function isReleased($dateStr) { + return false; + } elseif (empty($title)) { + $logsyntax = fopen('syntax.log', 'a+'); + if (!preg_match('(' . preg_quote($realPage) . '\n)', file_get_contents('syntax.log'))) { + fwrite($logsyntax, $realPage . "\n"); + mail($mainMail, "Chyba syntaxe https://www.tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan titulek'); + } + fclose($logsyntax); + readPage('error/syntax'); + + return false; + } elseif (empty($article)) { + $logsyntax = fopen('syntax.log', 'a+'); + if (!preg_match('(' . preg_quote($realPage) . '\n)', file_get_contents('syntax.log'))) { + fwrite($logsyntax, $realPage . "\n"); + mail($mainMail, "Chyba syntaxe https://www.tojnar.cz/krk/lob2011/$realPage", 'Nerozpoznan clanek'); + } + fclose($logsyntax); + readPage('error/syntax'); + + return false; + } else { + return true; + } +} + +function author(string $author): ?string { + global $realPageType; + if ($realPageType == 0) { + if (empty($author)) { + return rplc('%unknownAuthor%'); + } else { + return $author; + } + } else { + return null; + } +} + +function toDate(?string $dateStr): ?string { + if (!empty($dateStr)) { $dateStr = explode(' ', $dateStr); $dateStr = $dateStr[0]; $dateStr = explode('-', $dateStr); $year = $dateStr[0]; $month = ltrim($dateStr[1], '0'); $day = ltrim($dateStr[2], '0'); - $time = explode(' ', $dateStr); - $time = explode(':', $time[1]); - $hour = $time[0]; - $minute = $time[1]; - if (date('Y') >= $year) { - if (date('m') >= $month) { - if (date('d') >= $day) { - if (date('H') >= $hour) { - if (date('i') >= $minute) { - return true; - } else { - return false; - } + + return str_replace(['%y%', '%m%', '%d%'], [$year, $month, $day], rplc('%date%')); + } else { + return null; + } +} + +function isReleased(?string $datetimeStr): bool { + if ($datetimeStr === null || $datetimeStr === '') { + // Empty date = release immediately + return true; + } + + $datetime = explode(' ', $datetimeStr); + if (!isset($datetime[1])) { + $datetime[1] = '00:00'; + } + + [$year, $month, $day] = explode('-', $datetime[0]); + $month = ltrim($month, '0'); + $day = ltrim($day, '0'); + [$hour, $minute] = explode(':', $datetime[1]); + if (date('Y') >= $year) { + if (date('m') >= $month) { + if (date('d') >= $day) { + if (date('H') >= $hour) { + if (date('i') >= $minute) { + return true; } else { return false; } @@ -203,20 +236,17 @@ if ($included == true) { } else { return false; } + } else { + return false; + } +} + +function toTime(?string $dateStr): ?string { + if (!empty($dateStr)) { + $time = explode(' ', $dateStr); + + return $time[1] ?? null; + } else { + return null; } - - // string|null toTime(string $date) - function toTime($dateStr) { - if (!empty($dateStr)) { - $time = explode(' ', $dateStr); - $time = $time[1]; - - return $time; - } else { - return null; - } - } -} else { - header('HTTP/1.0 403 Forbidden'); - header('Location: /en/error/403'); } diff --git a/lob2011/sboard.php b/lob2011/sboard.php index cee8264..520c5da 100644 --- a/lob2011/sboard.php +++ b/lob2011/sboard.php @@ -14,17 +14,17 @@ if (0 == 9) { * @copyright Jan Tojnar, http://jtojnar.php5.cz/ */ function bb2html($buffer) { - $buffer = preg_replace("#\[b\](.*)\[/b\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[i\](.*)\[/i\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[red\](.*)\[/red\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[green\](.*)\[/green\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[blue\](.*)\[/blue\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[purple\](.*)\[/purple\]#D", '\\1', $buffer); - $buffer = preg_replace("#\[yellow\](.*)\[/yellow\]#D", '\\1', $buffer); - $buffer = preg_replace('/%(.*)%/D', '%\\1%', $buffer); - $buffer = preg_replace("/\n/D", "
\n", $buffer); - $buffer = preg_replace("/\r\n/D", "
\n", $buffer); - $buffer = preg_replace("/\r/D", "
\n", $buffer); + $buffer = preg_replace('(\[b\](.*)\[/b\])s', '\\1', $buffer); + $buffer = preg_replace('(\[i\](.*)\[/i\])s', '\\1', $buffer); + $buffer = preg_replace('(\[red\](.*)\[/red\])s', '\\1', $buffer); + $buffer = preg_replace('(\[green\](.*)\[/green\])s', '\\1', $buffer); + $buffer = preg_replace('(\[blue\](.*)\[/blue\])s', '\\1', $buffer); + $buffer = preg_replace('(\[purple\](.*)\[/purple\])s', '\\1', $buffer); + $buffer = preg_replace('(\[yellow\](.*)\[/yellow\])s', '\\1', $buffer); + $buffer = preg_replace('(%(.*)%)s', '&(37;\\1&)37;', $buffer); + $buffer = preg_replace('(\n)', "
\n", $buffer); + $buffer = preg_replace('(\r\n)', "
\n", $buffer); + $buffer = preg_replace('(\r)', "
\n", $buffer); return htmlspecialchars($buffer); } @@ -39,7 +39,7 @@ function check_email($email) { $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; - return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email); + return preg_match("(^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$)i", $email); } /** control www address. @@ -50,7 +50,7 @@ function check_email($email) { * @copyright Jan Tojnar, http://jtojnar.php5.cz */ function check_url($url) { - return preg_match("#^http[s]?://[-a-z0-9]*\.[-a-z0-9]+\.[a-z]+$#Di", $url); + return preg_match('(^http[s]?://[-a-z0-9]*\.[-a-z0-9]+\.[a-z]+$)i', $url); } /** returns text of shoutboard. @@ -61,22 +61,26 @@ function check_url($url) { * @copyright Jan Tojnar, http://jtojnar.php5.cz/ */ function sboard_generate($file) { + $sbnum = 0; + $sbError = ''; + $email = null; + $hemail = null; ++$sbnum; - $name = htmlspecialchars($_POST['name']); - $www = htmlspecialchars($_POST['www']); - $post = htmlspecialchars($_POST['post']); - $ip = $_SERVER['REMOTE_ADDR']; + $name = htmlspecialchars($_POST['name'] ?? ''); + $www = htmlspecialchars($_POST['www'] ?? ''); + $post = htmlspecialchars($_POST['post'] ?? ''); + $ip = $_SERVER['REMOTE_ADDR'] ?? ''; $timestamp = date(rplc('%dateFormat%')); - $formCaptchaSum = sha1($_POST['captcha']); - $showmail = $_POST['showmail']; + $formCaptchaSum = sha1($_POST['captcha'] ?? ''); + $showmail = $_POST['showmail'] ?? ''; $checkedshowmailfalse = $showmail == 'false' ? ' checked="checked"' : ''; $checkedshowmailtrue = empty($showmail) ? ' checked="checked"' : ($showmail == 'true' ? ' checked="checked"' : ''); if ($showmail == 'true') { - $email = htmlspecialchars($_POST['email']); + $email = htmlspecialchars($_POST['email'] ?? ''); } else { - $hemail = htmlspecialchars($_POST['email']); + $hemail = htmlspecialchars($_POST['email'] ?? ''); } - $formCaptchaSumPre = $_POST['captchasum']; + $formCaptchaSumPre = $_POST['captchasum'] ?? ''; $captcha = random_int(0, 9) . random_int(0, 9) . random_int(0, 9) . random_int(0, 9); $_SESSION['captcha'] = $captcha; $captchasum = sha1($captcha); @@ -126,7 +130,7 @@ EOT; } } if (file_exists($file . 'c' . $sbnum)) { - $comments = preg_replace('#([^<]+)#D', '', preg_replace('#([^<]+)#D', '', file_get_contents($file . 'c' . $sbnum))); + $comments = preg_replace('(([^<]+))', '', preg_replace('(([^<]+))', '', file_get_contents($file . 'c' . $sbnum))); } else { $comments = ''; } diff --git a/mainkrk.php b/mainkrk.php index 7b01f56..8e00841 100644 --- a/mainkrk.php +++ b/mainkrk.php @@ -1,3 +1,7 @@ + @@ -41,9 +45,9 @@ pageTracker._trackPageview(); }); -