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 | |
| parent | eef49937941769c2ba3b9abb7319d1f24ef6e6d7 (diff) | |
renamed "homepage" directory to "themes"
Diffstat (limited to 'templates/themes')
| -rw-r--r-- | templates/themes/basic/info.php | 27 | ||||
| -rw-r--r-- | templates/themes/basic/theme.php | 70 | ||||
| -rw-r--r-- | templates/themes/basic/thumb.png | bin | 0 -> 9298 bytes | |||
| -rw-r--r-- | templates/themes/frameset/info.php | 30 | ||||
| -rw-r--r-- | templates/themes/frameset/theme.php | 134 | ||||
| -rw-r--r-- | templates/themes/frameset/thumb.png | bin | 0 -> 7571 bytes | |||
| -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 |
10 files changed, 486 insertions, 0 deletions
diff --git a/templates/themes/basic/info.php b/templates/themes/basic/info.php new file mode 100644 index 00000000..bd856655 --- /dev/null +++ b/templates/themes/basic/info.php @@ -0,0 +1,27 @@ +<?php + $theme = Array(); + + // Theme name + $theme['name'] = 'Basic'; + // Description (you can use Tinyboard markup here) + $theme['description'] = 'Extremely basic news listing for the homepage. It\'s suggested that you enable boardlinks for this theme.'; + $theme['version'] = 'v0.9'; + + // Theme configuration + $theme['config'] = Array(); + + $theme['config'][] = Array( + 'title' => 'Title', + 'name' => 'title', + 'type' => 'text' + ); + + $theme['config'][] = Array( + 'title' => 'Slogan', + 'name' => 'subtitle', + 'type' => 'text' + ); + + // Unique function name for building everything + $theme['build_function'] = 'basic_build'; +?>
\ No newline at end of file diff --git a/templates/themes/basic/theme.php b/templates/themes/basic/theme.php new file mode 100644 index 00000000..5b086852 --- /dev/null +++ b/templates/themes/basic/theme.php @@ -0,0 +1,70 @@ +<?php + require 'info.php'; + + function basic_build($action, $settings) { + // Possible values for $action: + // - all (rebuild everything, initialization) + // - news (news has been updated) + // - boards (board list changed) + + Basic::build($action, $settings); + } + + // Wrap functions in a class so they don't interfere with normal Tinyboard operations + class Basic { + public static function build($action, $settings) { + global $config; + + if($action == 'all' || $action == 'news') + file_write($config['dir']['home'] . $config['file_index'], Basic::homepage($settings)); + } + + // Build news page + public static function homepage($settings) { + global $config; + + // HTML5 + $body = '<!DOCTYPE html><html>' + . '<head>' + . '<link rel="stylesheet" media="screen" href="' . $config['url_stylesheet'] . '"/>' + . '<title>' . $settings['title'] . '</title>' + . '</head><body>'; + + $boardlist = createBoardlist(); + $body .= '<div class="boardlist">' . $boardlist['top'] . '</div>'; + + $body .= '<h1>' . $settings['title'] . '</h1>' + . '<div class="title">' . ($settings['subtitle'] ? utf8tohtml($settings['subtitle']) : '') . '</div>'; + + $body .= '<div class="ban">'; + + $query = query("SELECT * FROM `news` ORDER BY `time` DESC") or error(db_error()); + if($query->rowCount() == 0) { + $body .= '<p style="text-align:center" class="unimportant">(No news to show.)</p>'; + } else { + // List news + while($news = $query->fetch()) { + $body .= '<h2 id="' . $news['id'] . '">' . + ($news['subject'] ? + $news['subject'] + : + '<em>no subject</em>' + ) . + '<span class="unimportant"> — by ' . + $news['name'] . + ' at ' . + date($config['post_date'], $news['time']) . + '</span></h2><p>' . $news['body'] . '</p>'; + } + } + + $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/basic/thumb.png b/templates/themes/basic/thumb.png Binary files differnew file mode 100644 index 00000000..05dcd96c --- /dev/null +++ b/templates/themes/basic/thumb.png diff --git a/templates/themes/frameset/info.php b/templates/themes/frameset/info.php new file mode 100644 index 00000000..ad42fc91 --- /dev/null +++ b/templates/themes/frameset/info.php @@ -0,0 +1,30 @@ +<?php + $theme = Array(); + + // Theme name + $theme['name'] = 'Frameset (alpha)'; + // Description (you can use Tinyboard markup here) + $theme['description'] = +'Use a basic frameset layout, with a list of boards and pages on a sidebar to the left of the page. + +Users never have to leave the homepage; they can do all their browsing from the one page.'; + $theme['version'] = 'v0.0.1'; + + // Theme configuration + $theme['config'] = Array(); + + $theme['config'][] = Array( + 'title' => 'Title', + 'name' => 'title', + 'type' => 'text' + ); + + $theme['config'][] = Array( + 'title' => 'Slogan', + 'name' => 'subtitle', + 'type' => 'text' + ); + + // Unique function name for building everything + $theme['build_function'] = 'frameset_build'; +?>
\ No newline at end of file diff --git a/templates/themes/frameset/theme.php b/templates/themes/frameset/theme.php new file mode 100644 index 00000000..6aa126c8 --- /dev/null +++ b/templates/themes/frameset/theme.php @@ -0,0 +1,134 @@ +<?php + require 'info.php'; + + function frameset_build($action, $settings) { + // Possible values for $action: + // - all (rebuild everything, initialization) + // - news (news has been updated) + // - boards (board list changed) + + Frameset::build($action, $settings); + } + + // Wrap functions in a class so they don't interfere with normal Tinyboard operations + class Frameset { + public static function build($action, $settings) { + global $config; + + if($action == 'all') + file_write($config['dir']['home'] . $config['file_index'], Frameset::homepage($settings)); + + if($action == 'all' || $action == 'boards') + file_write($config['dir']['home'] . 'sidebar.html', Frameset::sidebar($settings)); + + if($action == 'all' || $action == 'news') + file_write($config['dir']['home'] . 'news.html', Frameset::news($settings)); + } + + // Build homepage + public static function homepage($settings) { + global $config; + + // HTML5 + return '<!DOCTYPE html><html>' + . '<head>' + . '<link rel="stylesheet" media="screen" href="' . $config['url_stylesheet'] . '"/>' + . '<style type="text/css">' + . 'iframe{border:none;margin:0;padding:0;height:99%;position:absolute}' + . 'iframe#sidebar{left:0;top:0;width:15%}' + . 'iframe#main{border-left:1px solid black;left:15%;top:0;width:85%}' + . '</style>' + . '<title>' . $settings['title'] . '</title>' + . '</head><body>' + // Sidebar + . '<iframe src="sidebar.html" id="sidebar"></iframe>' + // Main + . '<iframe src="news.html" id="main"></iframe>' + // Finish page + . '</body></html>'; + } + + // Build news page + public static function news($settings) { + global $config; + + // HTML5 + $body = '<!DOCTYPE html><html>' + . '<head>' + . '<link rel="stylesheet" media="screen" href="' . $config['url_stylesheet'] . '"/>' + . '<title>News</title>' + . '</head><body>'; + + $body .= '<h1>' . $settings['title'] . '</h1>' + . '<div class="title">' . ($settings['subtitle'] ? utf8tohtml($settings['subtitle']) : '') . '</div>'; + + $query = query("SELECT * FROM `news` ORDER BY `time` DESC") or error(db_error()); + if($query->rowCount() == 0) { + $body .= '<p style="text-align:center" class="unimportant">(No news to show.)</p>'; + } else { + // List news + while($news = $query->fetch()) { + $body .= '<div class="ban">' . + '<h2 id="' . $news['id'] . '">' . + ($news['subject'] ? + $news['subject'] + : + '<em>no subject</em>' + ) . + '<span class="unimportant"> — by ' . + $news['name'] . + ' at ' . + date($config['post_date'], $news['time']) . + '</span></h2><p>' . $news['body'] . '</p></div>'; + } + } + + // Finish page + $body .= '</body></html>'; + + return $body; + } + + // Build sidebar + public static function sidebar($settings) { + global $config, $board; + + $body = '<!DOCTYPE html><html>' + . '<head>' + . '<link rel="stylesheet" media="screen" href="' . $config['url_stylesheet'] . '"/>' + . '<style type="text/css">' + . 'fieldset{margin:10px 0}' + . 'legend{width:100%;margin-left:-15px;background:#98E;border:1px solid white;color:white;font-weight:bold;padding:5px 5px}' + . 'ul{margin:0;padding:0}' + . 'li{list-style:none;padding:0 4px;margin: 0 4px}' + . 'li a.system{font-weight:bold}' + . '</style>' + . '<base target="main" />' + . '<title>' . $settings['title'] . '</title>' + . '</head><body>'; + + $body .= '<fieldset><legend>' . $settings['title'] . '</legend><ul>' . + '<li><a class="system" href="news.html">[News]</a></li>' . + '</ul></fieldset>'; + + + $body .= '<fieldset><legend>Boards</legend><ul>'; + + $boards = listBoards(); + foreach($boards as &$_board) { + openBoard($_board['uri']); + $body .= '<li><a href="' . + sprintf($config['board_path'], $board['uri']) . + '">' . $board['name'] . '</a></li>'; + } + + $body .= '</ul></fieldset>'; + + // Finish page + $body .= '</body></html>'; + + return $body; + } + }; + +?>
\ No newline at end of file diff --git a/templates/themes/frameset/thumb.png b/templates/themes/frameset/thumb.png Binary files differnew file mode 100644 index 00000000..df18a8e9 --- /dev/null +++ b/templates/themes/frameset/thumb.png 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 |
