diff --git a/templates/themes/rss/theme.php b/templates/themes/rss/theme.php index eb833ec8..4b0c86a5 100755 --- a/templates/themes/rss/theme.php +++ b/templates/themes/rss/theme.php @@ -35,14 +35,29 @@ if (in_array($_board['uri'], $this->excluded)) continue; - openBoard($_board['uri']); if ($settings['show_threads_only'] == 'true'){ - if ($action == 'all' || $action == 'post-thread' || $action == 'post-delete') - file_write($config['dir']['home'] . $board['dir'] . $settings['xml'], $this->board_rsspage($settings,$_board)); + if ($action == 'all' || $action == 'post-thread' || $action == 'post-delete'){ + if (in_array($_board,array_keys($config['overboards']))){ + file_write($config['dir']['home'] . $board['dir'] . $settings['xml'], $this->overboard_rsspage($settings,$_board)); + + } + else { + openBoard($_board['uri']); + file_write($config['dir']['home'] . $board['dir'] . $settings['xml'], $this->board_rsspage($settings,$_board)); + } + } } else { - if ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete') + if ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete') { + if (in_array($_board,array_keys($config['overboards']))){ + file_write($config['dir']['home'] . $board['dir'] . $settings['xml'], $this->overboard_rsspage($settings,$_board)); + + } + else { + openBoard($_board['uri']); file_write($config['dir']['home'] . $board['dir'] . $settings['xml'], $this->board_rsspage($settings,$_board)); + } + } } } @@ -122,6 +137,62 @@ 'recent_posts' => $recent_posts, )); } + + // Build news page + public function overboard_rsspage($settings,$overboard) { + global $config, $board; + + $recent_posts = Array(); + + $boards = listBoards(); + + $query = ''; + foreach ($boards as &$_board) { + if (array_key_exists('exclude',$config['overboards'][$overboard])) { + if (in_array($_board['uri'],$config['overboards'][$overboard]['exclude'] )) + continue; + if ($settings['show_threads_only'] == 'true'){ + $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` is null UNION ALL ", $_board['uri'], $_board['uri']); + } + else { + $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` UNION ALL ", $_board['uri'], $_board['uri']); + } + } + elseif (array_key_exists('include',$config['overboards'][$overboard])) { + if (in_array($_board['uri'],$config['overboards'][$overboard]['include'] )){ + if ($settings['show_threads_only'] == 'true'){ + $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` is null UNION ALL ", $_board['uri'], $_board['uri']); + } + else { + $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` UNION ALL ", $_board['uri'], $_board['uri']); + } + + } + + } + + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `time` DESC LIMIT ' . (int)$settings['limit_posts'], $query); + $query = query($query) or error(db_error()); + + while ($post = $query->fetch(PDO::FETCH_ASSOC)) { + openBoard($post['board']); + + $post['link'] = $config['root'] . $post['board'] . $config['dir']['res'] . sprintf($config['file_page'], ($post['thread'] ? $post['thread'] : $post['id'])) . '#' . $post['id']; + $post['snippet'] = pm_snippet($post['body'], 30); + $post['board_name'] = $post['board']; + + $recent_posts[] = $post; + } + + + return Element('themes/rss/rss.xml', Array( + 'settings' => $settings, + 'config' => $config, + 'recent_posts' => $recent_posts, + )); + } + }; ?>