';
}
echo $result;
$results++;
}
show_overboard_footer($stats, $results, true);
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]);
$i=0;
while (($overviewline = $query->fetch()) !== false) {
$articles[] = $spoolpath.$thisgroup.'/'.$overviewline['number'];
$db_articles[] = $findgroup.':'.$overviewline['number'].':'.$overviewline['date'].':'.$overviewline['name'];
$i++;
if($i > $maxdisplay) {
break;
}
}
}
}
$dbh = null;
$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 '';
foreach($files as $article) {
if(!isset($cachedate)) {
$cachedate = time();
}
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]);
$thisdate = strtotime($dateoutput[1]);
if(($thisdate > time()) || ($thisdate < $oldest)) {
continue;
}
$local_poster=false;
if(preg_match('/X-Rslight-Site:.*/', $header, $site)) {
$site_match = explode("X-Rslight-Site: ", $site[0]);
preg_match('/Message-ID:.*/', $header, $mid);
$mid_match = explode("Message-ID: ",$mid[0]);
$rslight_site = $site_match[1];
$rslight_mid = $mid_match[1];
if(password_verify($CONFIG['thissitekey'].$rslight_mid, $rslight_site)) {
$local_poster=true;
}
}
preg_match('/Message-ID:.*/i', $header, $articleid);
$getid = explode(": ", $articleid[0]);
$thismsgid = hash('crc32', serialize($getid[1]));
preg_match('/References:.*/i', $header, $ref);
$getrefs = explode(': ', $ref[0]);
$ref = preg_split("/[\s]+/", $getrefs[1]);
if($getrefs[1] && $refid = get_data_from_msgid($ref[0])) {
$threadref = $ref[0];
} else {
$threadref = false;
}
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 = $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);
}
if($CONFIG['article_database'] == '1') {
$articlefrom[0] = $data[3];
} else {
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){
$this_output = '';
} else {
$this_output = ' | ';
}
$this_output = ' ';
if($threadref) {
$this_output.= ''.mb_decode_mimeheader($output[1]).'" (thread)'."\r\n";
// $this_output.= ''.mb_decode_mimeheader($output[1]).'" (thread)'."\r\n";
} else {
$this_output.= ''.mb_decode_mimeheader($output[1])."\r\n";
}
$this_output.= ' ';
$this_output.= ''.$groupname.'';
$this_output.= ' ';
if((isset($CONFIG['hide_email']) && $CONFIG['hide_email'] == true) && (strpos($fromoutput[0], '@') !== false)) {
$poster_name = truncate_email($fromoutput[0]);
} else {
$poster_name = $fromoutput[0];
}
if($local_poster) {
$this_output.= 'Posted: '.$date_interval.' by: '.create_name_link(mb_decode_mimeheader($poster_name)).' ';
} else {
$this_output.= 'Posted: '.$date_interval.' by: '.create_name_link(mb_decode_mimeheader($poster_name)).' ';
}
# 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);
}
$this_output.= "".htmlspecialchars($mysnippet, ENT_QUOTES)." \r\n";
$this_output.= ' | ';
$this_overboard[$thismsgid] = $this_output;
if($results++ > ($maxdisplay - 2))
break;
}
if(isset($cached_overboard) && isset($this_overboard)) {
$new_overboard = array_merge($this_overboard, $cached_overboard);
$new_overboard = array_slice($new_overboard, 0, $maxdisplay);
file_put_contents($cachefile, serialize($new_overboard));
} elseif(isset($this_overboard)) {
$new_overboard = $this_overboard;
file_put_contents($cachefile, serialize($new_overboard));
} else {
$new_overboard = $cached_overboard;
}
if(isset($cachedate)) {
touch($cachefile, $cachedate);
}
$results = 0;
foreach($new_overboard as $result) {
if(($results % 2) != 0){
echo '';
} else {
echo ' | ';
}
echo $result;
if($results++ > ($maxdisplay - 2))
break;
}
show_overboard_footer(null, $results, null);
echo ' | |