(time() - 60)) { echo file_get_contents($cachefile); exit(0); } } ob_start(); # Iterate through groups $database = $spooldir.'/articles-overview.db3'; $table = 'overview'; $dbh = rslight_db_open($database, $table); $query = $dbh->prepare('SELECT * FROM '.$table.' WHERE newsgroup=:findgroup AND date >= '.$oldest.' ORDER BY date DESC LIMIT '.$maxdisplay); $articles = array(); $db_articles = array(); foreach($grouplist as $findgroup) { $groups = preg_split("/(\ |\t)/", $findgroup, 2); $findgroup = $groups[0]; $overboard_noshow = explode(' ', $CONFIG['overboard_noshow']); foreach($overboard_noshow as $noshow) { if ((strpos($findgroup, $noshow) !== false) && !isset($_GET['thisgroup'])) { continue 2; } } $thisgroup = preg_replace('/\./', '/', $findgroup); if($dbh) { $query->execute(['findgroup' => $findgroup]); while (($overviewline = $query->fetch()) !== false) { $articles[] = $spoolpath.$thisgroup.'/'.$overviewline['number']; $db_articles[] = $findgroup.':'.$overviewline['number'].':'.$overviewline['date']; } } } $dbh = null; if (isset($_GET['thisgroup'])) { echo '

'; echo ''.basename(getcwd()).' / '; echo ''.htmlspecialchars(group_display_name($grouplist[0])).' / '; echo ' latest

'; echo ''; // Refresh button echo ''; // Article List button echo ''; // Newsgroups button (hidden) if(isset($frames_on) && $frames_on === true) { echo ''; } echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; } else { echo '

'; echo ''.basename(getcwd()).' / '; echo 'latest messages

'; echo ''; // Refresh button echo ''; // Newsgroups button (hidden) if(isset($frames_on) && $frames_on === true) { echo ''; } echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; } $results=0; $files = array(); if($CONFIG['article_database'] == '1') { foreach($db_articles as $article) { $order=explode(':', $article); $files[$order[2]] = $article; } } else { foreach($articles as $article) { if(is_dir($article)) { continue; } $files[filemtime($article)] = $article; } } krsort($files); echo ''; //date_default_timezone_set(timezone_name_from_abbr("", $CONFIG['timezone'] * 3600, 0)); foreach($files as $article) { if($CONFIG['article_database'] == '1') { $data = explode(':', $article); $articledata = np_get_db_article($data[1], $data[0], 0); } else { $articledata = file_get_contents($article); } $bodystart = strpos($articledata, $localeol); $header = substr($articledata, 0, $bodystart); $body = substr($articledata, $bodystart+1); $body = substr($body, strpos($body, PHP_EOL)); if(($multi = strpos($body, 'Content-Type: text/plain')) != false) { $bodystart = strpos($body, $localeol); $body = substr($body, $bodystart+1); $body = substr($body, strpos($body, PHP_EOL)); } # Find group name and article number if($CONFIG['article_database'] == '1') { $group = $data[0]; $articlenumber = $data[1]; $groupname = $group; } else { $group = preg_replace($spoolpath_regexp, '', $article); $group = preg_replace('/\//', '.', $group); $findme = strrpos($group, '.'); $groupname = substr($group, 0, $findme); $articlenumber = substr($group, $findme+1); } # Generate link $url = $thissite."/article-flat.php?id=".$articlenumber."&group="._rawurlencode($groupname)."#".$articlenumber; $groupurl = $thissite."/thread.php?group="._rawurlencode($groupname); preg_match('/Subject:.*/', $header, $subject); $output = explode("Subject: ",$subject[0], 2); preg_match('/Date:.*/', $header, $articledate); $dateoutput = explode("Date: ",$articledate[0]); preg_match('/Content-Transfer-Encoding:.*/', $header, $te); $content_transfer_encoding = explode("Content-Transfer-Encoding: ", $te[0]); preg_match('/.*charset=.*/', $header, $te); $content_type = explode("Content-Type: text/plain; charset=", $te[0]); $date_interval = get_date_interval($dateoutput[1]); preg_match('/Content-Transfer-Encoding:.*/', $header, $encoding); $this_encoding = explode("Content-Transfer-Encoding: ", $encoding[0]); if(trim($this_encoding[1]) == "base64") { $body=base64_decode($body); } preg_match('/From:.*/', htmlspecialchars($header), $articlefrom); $isfrom = explode("From: ", $articlefrom[0]); $articlefrom[0] = $isfrom[1]; $fromoutput = explode("<", html_entity_decode($articlefrom[0])); // Just an email address? if(strlen($fromoutput[0]) < 2) { preg_match("/\<([^\)]*)\@/", html_entity_decode($articlefrom[0]), $fromaddress); $fromoutput[0] = $fromaddress[1]; } if(strpos($fromoutput[0], "(")) { preg_match("/\(([^\)]*)\)/", html_entity_decode($articlefrom[0]), $fromaddress); $fromoutput[0] = $fromaddress[1]; } if(($results % 2) != 0){ echo ''; if($results++ > ($maxdisplay - 2)) break; } echo '
'; } else { echo '
'; } echo '

'; echo ''.mb_decode_mimeheader($output[1])."\r\n"; echo '

'; echo ''.$groupname.''; echo '

'; if((isset($CONFIG['hide_email']) && $CONFIG['hide_email'] == true) && (strpos($fromoutput[0], '@') !== false)) { $poster_name = truncate_email($fromoutput[0]); } else { $poster_name = $fromoutput[0]; } $poster_name = trim($poster_name, "\""); echo '

Posted: '.$date_interval.' by: '.create_name_link(mb_decode_mimeheader($poster_name)).'

'; // echo '

Posted: '.$date_interval.' by: '.mb_decode_mimeheader($fromoutput[0]).'

'; # Try to display useful snippet if($stop=strpos($body, "begin 644 ")) $body=substr($body, 0, $stop); $body = quoted_printable_decode($body); $mysnippet = recode_charset($body, $content_type[1], "utf8"); if($bodyend=strrpos($mysnippet, "\n---\n")) { $mysnippet = substr($mysnippet, 0, $bodyend); } else { if($bodyend=strrpos($mysnippet, "\n-- ")) { $mysnippet = substr($mysnippet, 0, $bodyend); } else { if($bodyend=strrpos($mysnippet, "\n.")) { $mysnippet = substr($mysnippet, 0, $bodyend); } } } $mysnippet = preg_replace('/\n.{0,5}>(.*)/', '', $mysnippet); $snipstart = strpos($mysnippet, ":\n"); if(substr_count(trim(substr($mysnippet, 0, $snipstart)), "\n") < 2) { $mysnippet = substr($mysnippet, $snipstart + 1, $snippetlength); } else { $mysnippet = substr($mysnippet, 0, $snippetlength); } echo "

".$mysnippet."

\r\n"; echo '
'; echo "

".$results." recent articles found.

\r\n"; #echo "
Rocksolid Overboard version ".$version; $iscached = "

cached copy: ".date("D M j G:i:s T Y", time())."

\r\n"; include "tail.inc"; $thispage = ob_get_contents(); ob_end_clean(); echo $thispage; if(count($articles) > 0) { $cacheFileHandle = fopen($cachefile, "w+"); fwrite($cacheFileHandle, $thispage); fwrite($cacheFileHandle, $iscached); fclose($cacheFileHandle); } ?>