';
+ }
+ echo $result;
+ $results++;
+ }
+ show_overboard_footer($stats, $results, true);
exit(0);
}
}
-ob_start();
+//ob_start();
# Iterate through groups
$database = $spooldir.'/articles-overview.db3';
@@ -112,7 +129,7 @@ foreach($grouplist as $findgroup) {
$query->execute(['findgroup' => $findgroup]);
$i=0;
while (($overviewline = $query->fetch()) !== false) {
- $articles[] = $spoolpath.$thisgroup.'/'.$overviewline['number'];
+ $articles[] = $spoolpath.$thisgroup.'/'.$overviewline['number'];
$db_articles[] = $findgroup.':'.$overviewline['number'].':'.$overviewline['date'].':'.$overviewline['name'];
$i++;
if($i > $maxdisplay) {
@@ -123,10 +140,201 @@ foreach($grouplist as $findgroup) {
}
$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($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;
+ }
+ if(!isset($cachedate)) {
+ $cachedate = time();
+ }
+ $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('/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 = ' ';
+ $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[] = $this_output;
+ if($results++ > ($maxdisplay - 2))
+ break;
+}
+ if(isset($cached_overboard) && isset($this_overboard)) {
+ $new_overboard = array_merge($this_overboard, $cached_overboard);
+ 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 ' | |