diff options
| author | Savetheinternet <savetheinternet@tinyboard.org> | 2011-05-28 01:47:59 +1000 |
|---|---|---|
| committer | Savetheinternet <savetheinternet@tinyboard.org> | 2011-05-28 01:47:59 +1000 |
| commit | e6d7e71175e388b7d5e356eebb9ff350c941026e (patch) | |
| tree | 4fca57043d97fe0707b8851678fa57d48a2372d3 /templates/themes/recent | |
| parent | eef49937941769c2ba3b9abb7319d1f24ef6e6d7 (diff) | |
renamed "homepage" directory to "themes"
Diffstat (limited to 'templates/themes/recent')
| -rw-r--r-- | templates/themes/recent/info.php | 28 | ||||
| -rw-r--r-- | templates/themes/recent/recent.css | 50 | ||||
| -rw-r--r-- | templates/themes/recent/theme.php | 147 | ||||
| -rw-r--r-- | templates/themes/recent/thumb.png | bin | 0 -> 24532 bytes |
4 files changed, 225 insertions, 0 deletions
diff --git a/templates/themes/recent/info.php b/templates/themes/recent/info.php new file mode 100644 index 00000000..734908c4 --- /dev/null +++ b/templates/themes/recent/info.php @@ -0,0 +1,28 @@ +<?php + $theme = Array(); + + // Theme name + $theme['name'] = 'RecentPosts'; + // Description (you can use Tinyboard markup here) + $theme['description'] = 'Show recent posts and images, like 4chan.'; + $theme['version'] = 'v0.9'; + + // Theme configuration + $theme['config'] = Array(); + + $theme['config'][] = Array( + 'title' => 'Title', + 'name' => 'title', + 'type' => 'text' + ); + + $theme['config'][] = Array( + 'title' => 'Excluded boards', + 'name' => 'exclude', + 'type' => 'text', + 'comment' => '(space seperated)' + ); + + // Unique function name for building everything + $theme['build_function'] = 'recentposts_build'; +?>
\ No newline at end of file diff --git a/templates/themes/recent/recent.css b/templates/themes/recent/recent.css new file mode 100644 index 00000000..7b9f2333 --- /dev/null +++ b/templates/themes/recent/recent.css @@ -0,0 +1,50 @@ +.box-wrap { + max-width: 670px; + min-width: 332px; + margin: 30px auto; + overflow: auto; + padding: 0; +} +.box { + background: white; + border: 1px solid #98E; + width: 330px; + margin: 8px 0; + padding: 0; +} +.box ul { + padding: 2px 15px; +} +.box ul li { + list-style: none; + margin: 0; +} +.box.left { + background: #efe; + color: #060; + border: 1px solid #060; + float: left; +} +.box.right { + background: #eef; + color: #006; + border: 1px solid #006; + float: right; +} + +.box h2 { + padding: 3px 7px; + font-size: 12pt; +} +.box.left h2 { + background: #9C6; + color: #060; +} +.box.right h2 { + background: #59A; + color: white; +} +.box img { + float: none; + margin: 10px auto; +}
\ No newline at end of file diff --git a/templates/themes/recent/theme.php b/templates/themes/recent/theme.php new file mode 100644 index 00000000..764c4170 --- /dev/null +++ b/templates/themes/recent/theme.php @@ -0,0 +1,147 @@ +<?php + require 'info.php'; + + function recentposts_build($action, $settings) { + // Possible values for $action: + // - all (rebuild everything, initialization) + // - news (news has been updated) + // - boards (board list changed) + // - post (a post has been made) + + $b = new RecentPosts(); + $b->build($action, $settings); + } + + // Wrap functions in a class so they don't interfere with normal Tinyboard operations + class RecentPosts { + public function build($action, $settings) { + global $config, $_theme; + + if($action == 'all') { + //copy($config['dir']['homepage'] . '/' . $_theme . '/recent.css', $config['dir']['home'] . 'recent.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)); + } + + // Build news page + public function homepage($settings) { + global $config, $board; + + // HTML5 + $body = '<!DOCTYPE html><html>' + . '<head>' + . '<link rel="stylesheet" media="screen" href="' . $config['url_stylesheet'] . '"/>' + . '<link rel="stylesheet" media="screen" href="' . $config['root'] . 'recent.css"/>' + . '<title>' . $settings['title'] . '</title>' + . '</head><body>'; + + $boardlist = createBoardlist(); + $body .= '<div class="boardlist">' . $boardlist['top'] . '</div>'; + + $body .= '<h1>' . $settings['title'] . '</h1>'; + + + $boards = listBoards(); + + // Wrap + $body .= '<div class="box-wrap">'; + + // Recent images + $body .= '<div class="box left"><h2>Recent Images</h2><ul>'; + $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 UNION ALL ", $_board['uri'], $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `time` DESC LIMIT 3', $query); + $query = query($query) or error(db_error()); + + while($post = $query->fetch()) { + openBoard($post['board']); + + $body .= '<li><a href="' . + $config['root'] . $board['dir'] . $config['dir']['res'] . ($post['thread']?$post['thread']:$post['id']) . '.html#' . $post['id'] . + '"><img src="' . $config['uri_thumb'] . $post['thumb'] . '" style="width:' . $post['thumbwidth'] . 'px;height:' . $post['thumbheight'] . 'px;" /></a></li>'; + } + $body .= '</ul></div>'; + + // Latest posts + $body .= '<div class="box right"><h2>Latest Posts</h2><ul>'; + $query = ''; + foreach($boards as &$_board) { + if(in_array($_board['uri'], $this->excluded)) + continue; + $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 30', $query); + $query = query($query) or error(db_error()); + + while($post = $query->fetch()) { + openBoard($post['board']); + + $body .= '<li><strong>' . $board['name'] . '</strong>: <a href="' . + $config['root'] . $board['dir'] . $config['dir']['res'] . ($post['thread']?$post['thread']:$post['id']) . '.html#' . $post['id'] . + '">' . pm_snippet($post['body'], 30) . '</a></li>'; + } + + $body .= '</ul></div>'; + + + // Stats + $body .= '<div class="box right"><h2>Stats</h2><ul>'; + + // 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(); + $body .= '<li>Total posts: ' . number_format($res['count']) . '</li>'; + + // 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(); + $body .= '<li>Unique posters: ' . number_format($res['count']) . '</li>'; + + // 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(); + $body .= '<li>Active content: ' . format_bytes($res['count']) . '</li>'; + + $body .= '</ul></div>'; + + // End wrap + $body .= '</div>'; + + // Finish page + $body .= '<hr/><p class="unimportant" style="margin-top:20px;text-align:center;">Powered by <a href="http://tinyboard.org/">Tinyboard</a></body></html>'; + + return $body; + } + }; + +?>
\ No newline at end of file diff --git a/templates/themes/recent/thumb.png b/templates/themes/recent/thumb.png Binary files differnew file mode 100644 index 00000000..fff5b824 --- /dev/null +++ b/templates/themes/recent/thumb.png |
