diff --git a/templates/themes/recent/info.php b/templates/themes/recent/info.php index 734908c4..ab983fdc 100644 --- a/templates/themes/recent/info.php +++ b/templates/themes/recent/info.php @@ -5,7 +5,7 @@ $theme['name'] = 'RecentPosts'; // Description (you can use Tinyboard markup here) $theme['description'] = 'Show recent posts and images, like 4chan.'; - $theme['version'] = 'v0.9'; + $theme['version'] = 'v0.9.1'; // Theme configuration $theme['config'] = Array(); @@ -13,7 +13,8 @@ $theme['config'][] = Array( 'title' => 'Title', 'name' => 'title', - 'type' => 'text' + 'type' => 'text', + 'default' => 'Recent Posts' ); $theme['config'][] = Array( @@ -23,6 +24,48 @@ 'comment' => '(space seperated)' ); + $theme['config'][] = Array( + 'title' => '# of recent images', + 'name' => 'limit_images', + 'type' => 'text', + 'default' => '3', + 'comment' => '(maximum images to display)' + ); + + $theme['config'][] = Array( + 'title' => '# of recent posts', + 'name' => 'limit_posts', + 'type' => 'text', + 'default' => '30', + 'comment' => '(maximum posts to display)' + ); + + $theme['config'][] = Array( + 'title' => 'HTML file', + 'name' => 'html', + 'type' => 'text', + 'default' => 'recent.html', + 'comment' => '(eg. "recent.html")' + ); + + $theme['config'][] = Array( + 'title' => 'CSS file', + 'name' => 'css', + 'type' => 'text', + 'default' => 'recent.css', + 'comment' => '(eg. "recent.css")' + ); + // Unique function name for building everything $theme['build_function'] = 'recentposts_build'; -?> \ No newline at end of file + $theme['install_callback'] = 'recentposts_install'; + + if(!function_exists('recentposts_install')) { + function recentposts_install($settings) { + if(!is_numeric($settings['limit_images']) || $settings['limit_images'] < 0) + return Array(false, '' . utf8tohtml($settings['limit_images']) . ' is not a non-negative integer.'); + if(!is_numeric($settings['limit_posts']) || $settings['limit_posts'] < 0) + return Array(false, '' . utf8tohtml($settings['limit_posts']) . ' is not a non-negative integer.'); + } + } + diff --git a/templates/themes/recent/recent.html b/templates/themes/recent/recent.html new file mode 100644 index 00000000..d02cc183 --- /dev/null +++ b/templates/themes/recent/recent.html @@ -0,0 +1,54 @@ +{% filter remove_whitespace %} + + + + {{ settings.title }} + + + + + {{ boardlist.top }} +

{{ settings.title }}

+
{{ settings.subtitle }}
+ +
+
+

Recent Images

+ +
+
+

Latest Posts

+ +
+
+

Stats

+ +
+
+ +
+

Powered by Tinyboard {{ config.version }} | Tinyboard Copyright © 2010-2012 Tinyboard Development Group

+ + +{% endfilter %} diff --git a/templates/themes/recent/theme.php b/templates/themes/recent/theme.php index 812760ff..13a5546f 100644 --- a/templates/themes/recent/theme.php +++ b/templates/themes/recent/theme.php @@ -18,129 +18,108 @@ global $config, $_theme; if($action == 'all') { - copy($config['dir']['themes'] . '/' . $_theme . '/recent.css', $config['dir']['home'] . 'recent.css'); + copy('templates/themes/recent/recent.css', $config['dir']['home'] . $settings['css']); } $this->excluded = explode(' ', $settings['exclude']); if($action == 'all' || $action == 'post') - // file_put_contents($config['dir']['home'] . $config['file_index'], $this->homepage($settings)); - file_write($config['dir']['home'] . 'recent.html', $this->homepage($settings)); + file_write($config['dir']['home'] . $settings['html'], $this->homepage($settings)); } // Build news page public function homepage($settings) { global $config, $board; - // HTML5 - $body = '' - . '' - . '' - . '' - . '' . $settings['title'] . '' - . ''; - - $boardlist = createBoardlist(); - $body .= '
' . $boardlist['top'] . '
'; - - $body .= '

' . $settings['title'] . '

'; - + $recent_images = Array(); + $recent_posts = Array(); + $stats = Array(); $boards = listBoards(); - // Wrap - $body .= '
'; + $query = ''; + foreach($boards as &$_board) { + if(in_array($_board['uri'], $this->excluded)) + continue; + $query .= sprintf("SELECT *, '%s' AS `board` FROM `posts_%s` WHERE `file` IS NOT NULL AND `file` != 'deleted' AND `thumb` != 'spoiler' UNION ALL ", $_board['uri'], $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `time` DESC LIMIT ' . (int)$settings['limit_images'], $query); + $query = query($query) or error(db_error()); - // Recent images - $body .= '

Recent Images

'; - - // Latest posts - $body .= '

Latest Posts

'; - - - // Stats - $body .= '

Stats

'; + $recent_posts[] = $post; + } - // End wrap - $body .= '
'; + // Total posts + $query = 'SELECT SUM(`top`) AS `count` FROM ('; + foreach($boards as &$_board) { + if(in_array($_board['uri'], $this->excluded)) + continue; + $query .= sprintf("SELECT MAX(`id`) AS `top` FROM `posts_%s` UNION ALL ", $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', ') AS `posts_all`', $query); + $query = query($query) or error(db_error()); + $res = $query->fetch(); + $stats['total_posts'] = number_format($res['count']); - // Finish page - $body .= '

Powered by Tinyboard'; + // Unique IPs + $query = 'SELECT COUNT(DISTINCT(`ip`)) AS `count` FROM ('; + foreach($boards as &$_board) { + if(in_array($_board['uri'], $this->excluded)) + continue; + $query .= sprintf("SELECT `ip` FROM `posts_%s` UNION ALL ", $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', ') AS `posts_all`', $query); + $query = query($query) or error(db_error()); + $res = $query->fetch(); + $stats['unique_posters'] = number_format($res['count']); - return $body; + // Active content + $query = 'SELECT SUM(`filesize`) AS `count` FROM ('; + foreach($boards as &$_board) { + if(in_array($_board['uri'], $this->excluded)) + continue; + $query .= sprintf("SELECT `filesize` FROM `posts_%s` UNION ALL ", $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', ') AS `posts_all`', $query); + $query = query($query) or error(db_error()); + $res = $query->fetch(); + $stats['active_content'] = $res['count']; + + return Element('themes/recent/recent.html', Array( + 'settings' => $settings, + 'config' => $config, + 'boardlist' => createBoardlist(), + 'recent_images' => $recent_images, + 'recent_posts' => $recent_posts, + 'stats' => $stats + )); } };